*** empty log message ***
This commit is contained in:
parent
27c5b202c5
commit
4d2dca2438
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: func.c,v 1.73 2006-11-13 09:37:00 bacon Exp $
|
* $Id: func.c,v 1.74 2006-11-14 14:54:17 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ase/awk/awk_i.h>
|
#include <ase/awk/awk_i.h>
|
||||||
@ -1243,8 +1243,41 @@ static int __bfn_match (ase_awk_run_t* run)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int __bfn_sprintf (ase_awk_run_t* run)
|
static int __bfn_sprintf (ase_awk_run_t* run)
|
||||||
{
|
{
|
||||||
return -1;
|
ase_size_t nargs;
|
||||||
|
ase_awk_val_t* a0;
|
||||||
|
ase_char_t* str0, * ptr;
|
||||||
|
ase_size_t len0, len;
|
||||||
|
|
||||||
|
nargs = ase_awk_getnargs (run);
|
||||||
|
ASE_AWK_ASSERT (run->awk, nargs > 0);
|
||||||
|
|
||||||
|
a0 = ase_awk_getarg (run, 0);
|
||||||
|
if (a0->type == ASE_AWK_VAL_STR)
|
||||||
|
{
|
||||||
|
str0 = ((ase_awk_val_str_t*)a0)->buf;
|
||||||
|
len0 = ((ase_awk_val_str_t*)a0)->len;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
str0 = ase_awk_valtostr (
|
||||||
|
run, a0, ASE_AWK_VALTOSTR_CLEAR, ASE_NULL, &len0);
|
||||||
|
if (str0 == ASE_NULL) return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr = ase_awk_sprintf (run, str0, len0, nargs, ASE_NULL, &len);
|
||||||
|
if (a0->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, str0);
|
||||||
|
if (ptr == ASE_NULL) return -1;
|
||||||
|
|
||||||
|
a0 = ase_awk_makestrval (run, ptr, len);
|
||||||
|
if (a0 == ASE_NULL)
|
||||||
|
{
|
||||||
|
ase_awk_setrunerrnum (run, ASE_AWK_ENOMEM);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ase_awk_setretval (run, a0);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: run.c,v 1.258 2006-11-13 15:07:24 bacon Exp $
|
* $Id: run.c,v 1.259 2006-11-14 14:54:17 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ase/awk/awk_i.h>
|
#include <ase/awk/awk_i.h>
|
||||||
@ -2441,7 +2441,7 @@ static int __formatted_output (
|
|||||||
ase_size_t len;
|
ase_size_t len;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
ptr = ase_awk_sprintf (run, fmt, fmt_len, args, &len);
|
ptr = ase_awk_sprintf (run, fmt, fmt_len, 0, args, &len);
|
||||||
if (ptr == ASE_NULL) return -1;
|
if (ptr == ASE_NULL) return -1;
|
||||||
|
|
||||||
n = ase_awk_writeextio_str (run, out_type, dst, ptr, len);
|
n = ase_awk_writeextio_str (run, out_type, dst, ptr, len);
|
||||||
@ -3537,7 +3537,7 @@ static ase_awk_val_t* __eval_binop_lshift (
|
|||||||
if (n3 == 0)
|
if (n3 == 0)
|
||||||
{
|
{
|
||||||
if (l2 == 0) PANIC (run, ASE_AWK_EDIVBYZERO);
|
if (l2 == 0) PANIC (run, ASE_AWK_EDIVBYZERO);
|
||||||
res = ase_awk_makeintval (run, (ase_long_t)l1 << (ase_long_t)l2);
|
res = ase_awk_makeintval (run, (ase_long_t)l1<<(ase_long_t)l2);
|
||||||
}
|
}
|
||||||
else PANIC (run, ASE_AWK_EOPERAND);
|
else PANIC (run, ASE_AWK_EOPERAND);
|
||||||
|
|
||||||
@ -3562,7 +3562,7 @@ static ase_awk_val_t* __eval_binop_rshift (
|
|||||||
if (n3 == 0)
|
if (n3 == 0)
|
||||||
{
|
{
|
||||||
if (l2 == 0) PANIC (run, ASE_AWK_EDIVBYZERO);
|
if (l2 == 0) PANIC (run, ASE_AWK_EDIVBYZERO);
|
||||||
res = ase_awk_makeintval (run, (ase_long_t)l1 >> (ase_long_t)l2);
|
res = ase_awk_makeintval (run, (ase_long_t)l1>>(ase_long_t)l2);
|
||||||
}
|
}
|
||||||
else PANIC (run, ASE_AWK_EOPERAND);
|
else PANIC (run, ASE_AWK_EOPERAND);
|
||||||
|
|
||||||
@ -5503,10 +5503,11 @@ static ase_char_t* __idxnde_to_str (
|
|||||||
}
|
}
|
||||||
|
|
||||||
ase_char_t* ase_awk_sprintf (
|
ase_char_t* ase_awk_sprintf (
|
||||||
ase_awk_run_t* run, const ase_char_t* fmt,
|
ase_awk_run_t* run, const ase_char_t* fmt, ase_size_t fmt_len,
|
||||||
ase_size_t fmt_len, ase_awk_nde_t* args, ase_size_t* len)
|
ase_size_t nargs_on_stack, ase_awk_nde_t* args, ase_size_t* len)
|
||||||
{
|
{
|
||||||
ase_size_t i, j;
|
ase_size_t i, j;
|
||||||
|
ase_size_t stack_arg_idx = 1;
|
||||||
|
|
||||||
#define OUT_CHAR(c) \
|
#define OUT_CHAR(c) \
|
||||||
do { \
|
do { \
|
||||||
@ -5554,13 +5555,15 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
ase_char_t* p;
|
ase_char_t* p;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
if (args == ASE_NULL)
|
if (args == ASE_NULL && stack_arg_idx >= nargs_on_stack)
|
||||||
{
|
{
|
||||||
run->errnum = ASE_AWK_EPRINTFARG;
|
run->errnum = ASE_AWK_EPRINTFARG;
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
v = __eval_expression (run, args);
|
v = (args == ASE_NULL)?
|
||||||
|
ase_awk_getarg (run, stack_arg_idx):
|
||||||
|
__eval_expression (run, args);
|
||||||
if (v == ASE_NULL) return ASE_NULL;
|
if (v == ASE_NULL) return ASE_NULL;
|
||||||
|
|
||||||
ase_awk_refupval (v);
|
ase_awk_refupval (v);
|
||||||
@ -5586,7 +5589,8 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
args = args->next;
|
if (args == ASE_NULL) stack_arg_idx++;
|
||||||
|
else args = args->next;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -5610,13 +5614,15 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
ase_char_t* p;
|
ase_char_t* p;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
if (args == ASE_NULL)
|
if (args == ASE_NULL && stack_arg_idx >= nargs_on_stack)
|
||||||
{
|
{
|
||||||
run->errnum = ASE_AWK_EPRINTFARG;
|
run->errnum = ASE_AWK_EPRINTFARG;
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
v = __eval_expression (run, args);
|
v = (args == ASE_NULL)?
|
||||||
|
ase_awk_getarg (run, stack_arg_idx):
|
||||||
|
__eval_expression (run, args);
|
||||||
if (v == ASE_NULL) return ASE_NULL;
|
if (v == ASE_NULL) return ASE_NULL;
|
||||||
|
|
||||||
ase_awk_refupval (v);
|
ase_awk_refupval (v);
|
||||||
@ -5642,7 +5648,8 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
args = args->next;
|
if (args == ASE_NULL) stack_arg_idx++;
|
||||||
|
else args = args->next;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -5665,7 +5672,7 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
ase_char_t* p;
|
ase_char_t* p;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
if (args == ASE_NULL)
|
if (args == ASE_NULL && stack_arg_idx >= nargs_on_stack)
|
||||||
{
|
{
|
||||||
run->errnum = ASE_AWK_EPRINTFARG;
|
run->errnum = ASE_AWK_EPRINTFARG;
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
@ -5675,7 +5682,9 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
FMT_CHAR (ASE_T('l'));
|
FMT_CHAR (ASE_T('l'));
|
||||||
FMT_CHAR (fmt[i]);
|
FMT_CHAR (fmt[i]);
|
||||||
|
|
||||||
v = __eval_expression (run, args);
|
v = (args == ASE_NULL)?
|
||||||
|
ase_awk_getarg (run, stack_arg_idx):
|
||||||
|
__eval_expression (run, args);
|
||||||
if (v == ASE_NULL) return ASE_NULL;
|
if (v == ASE_NULL) return ASE_NULL;
|
||||||
|
|
||||||
ase_awk_refupval (v);
|
ase_awk_refupval (v);
|
||||||
@ -5712,7 +5721,7 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
ase_char_t* p;
|
ase_char_t* p;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
if (args == ASE_NULL)
|
if (args == ASE_NULL && stack_arg_idx >= nargs_on_stack)
|
||||||
{
|
{
|
||||||
run->errnum = ASE_AWK_EPRINTFARG;
|
run->errnum = ASE_AWK_EPRINTFARG;
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
@ -5721,7 +5730,9 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
FMT_CHAR (ASE_T('L'));
|
FMT_CHAR (ASE_T('L'));
|
||||||
FMT_CHAR (fmt[i]);
|
FMT_CHAR (fmt[i]);
|
||||||
|
|
||||||
v = __eval_expression (run, args);
|
v = (args == ASE_NULL)?
|
||||||
|
ase_awk_getarg (run, stack_arg_idx):
|
||||||
|
__eval_expression (run, args);
|
||||||
if (v == ASE_NULL) return ASE_NULL;
|
if (v == ASE_NULL) return ASE_NULL;
|
||||||
|
|
||||||
ase_awk_refupval (v);
|
ase_awk_refupval (v);
|
||||||
@ -5749,7 +5760,7 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
ase_awk_val_t* v;
|
ase_awk_val_t* v;
|
||||||
ase_char_t* p;
|
ase_char_t* p;
|
||||||
|
|
||||||
if (args == ASE_NULL)
|
if (args == ASE_NULL && stack_arg_idx >= nargs_on_stack)
|
||||||
{
|
{
|
||||||
run->errnum = ASE_AWK_EPRINTFARG;
|
run->errnum = ASE_AWK_EPRINTFARG;
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
@ -5757,7 +5768,9 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
|
|
||||||
FMT_CHAR (fmt[i]);
|
FMT_CHAR (fmt[i]);
|
||||||
|
|
||||||
v = __eval_expression (run, args);
|
v = (args == ASE_NULL)?
|
||||||
|
ase_awk_getarg (run, stack_arg_idx):
|
||||||
|
__eval_expression (run, args);
|
||||||
if (v == ASE_NULL) return ASE_NULL;
|
if (v == ASE_NULL) return ASE_NULL;
|
||||||
|
|
||||||
ase_awk_refupval (v);
|
ase_awk_refupval (v);
|
||||||
@ -5815,7 +5828,7 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
ase_awk_val_t* v;
|
ase_awk_val_t* v;
|
||||||
ase_char_t* p;
|
ase_char_t* p;
|
||||||
|
|
||||||
if (args == ASE_NULL)
|
if (args == ASE_NULL && stack_arg_idx >= nargs_on_stack)
|
||||||
{
|
{
|
||||||
run->errnum = ASE_AWK_EPRINTFARG;
|
run->errnum = ASE_AWK_EPRINTFARG;
|
||||||
return ASE_NULL;
|
return ASE_NULL;
|
||||||
@ -5823,7 +5836,9 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
|
|
||||||
FMT_CHAR (fmt[i]);
|
FMT_CHAR (fmt[i]);
|
||||||
|
|
||||||
v = __eval_expression (run, args);
|
v = (args == ASE_NULL)?
|
||||||
|
ase_awk_getarg (run, stack_arg_idx):
|
||||||
|
__eval_expression (run, args);
|
||||||
if (v == ASE_NULL) return ASE_NULL;
|
if (v == ASE_NULL) return ASE_NULL;
|
||||||
|
|
||||||
ase_awk_refupval (v);
|
ase_awk_refupval (v);
|
||||||
@ -5878,7 +5893,8 @@ ase_char_t* ase_awk_sprintf (
|
|||||||
OUT_CHAR (fmt[i]);
|
OUT_CHAR (fmt[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
args = args->next;
|
if (args == ASE_NULL) stack_arg_idx++;
|
||||||
|
else args = args->next;
|
||||||
ase_awk_str_clear (&run->sprintf.fmt);
|
ase_awk_str_clear (&run->sprintf.fmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: run.h,v 1.22 2006-11-13 15:08:54 bacon Exp $
|
* $Id: run.h,v 1.23 2006-11-14 14:54:18 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _ASE_AWK_RUN_H_
|
#ifndef _ASE_AWK_RUN_H_
|
||||||
@ -105,8 +105,8 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
ase_char_t* ase_awk_sprintf (
|
ase_char_t* ase_awk_sprintf (
|
||||||
ase_awk_run_t* run, const ase_char_t* fmt,
|
ase_awk_run_t* run, const ase_char_t* fmt, ase_size_t fmt_len,
|
||||||
ase_size_t fmt_len, ase_awk_nde_t* args, ase_size_t* len);
|
ase_size_t nargs_on_stack, ase_awk_nde_t* args, ase_size_t* len);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: val.c,v 1.81 2006-11-13 15:08:54 bacon Exp $
|
* $Id: val.c,v 1.82 2006-11-14 14:54:18 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ase/awk/awk_i.h>
|
#include <ase/awk/awk_i.h>
|
||||||
@ -578,6 +578,7 @@ static ase_char_t* __val_real_to_str (
|
|||||||
/* TODO: need to use awk's own version of sprintf so that it would have
|
/* TODO: need to use awk's own version of sprintf so that it would have
|
||||||
* problems with handling long double or double... */
|
* problems with handling long double or double... */
|
||||||
/* TODO: does it need to check if a null character is included in convfmt??? */
|
/* TODO: does it need to check if a null character is included in convfmt??? */
|
||||||
|
/* TODO: check if convfmt contains more that one format specifier */
|
||||||
run->awk->syscas.sprintf (tbuf, ase_countof(tbuf), tmp, (double)v->val);
|
run->awk->syscas.sprintf (tbuf, ase_countof(tbuf), tmp, (double)v->val);
|
||||||
if (buf == ASE_NULL)
|
if (buf == ASE_NULL)
|
||||||
{
|
{
|
||||||
|
@ -29,4 +29,6 @@ BEGIN {
|
|||||||
if (ARGC >= 0) printf ("ARGC [%++#10.10f] is positive\n", 10124.1123);
|
if (ARGC >= 0) printf ("ARGC [%++#10.10f] is positive\n", 10124.1123);
|
||||||
printf ("[%d], [%f], [%s]\n", 10124.1123, 10124.1123, 10124.1123);
|
printf ("[%d], [%f], [%s]\n", 10124.1123, 10124.1123, 10124.1123);
|
||||||
printf ("[%-10c] [% 0*.*d]\n", 65, 45, 48, -1);
|
printf ("[%-10c] [% 0*.*d]\n", 65, 45, 48, -1);
|
||||||
|
|
||||||
|
print sprintf ("abc%d %*.*d %c %s %c", 10, 20, 30, 40, "good", "good", 75.34);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user