X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=form%2Ffty_num.c;h=8cce43f83a17fff853bd498a475a877d6e958e7c;hp=e74e8e36fe2592f842b467fc9c3f7418acb65c0c;hb=955553313af0a9fa960ec0faba552c0bae4ca65e;hpb=491a3f08b795f494ae17179338c31a11b18fd433 diff --git a/form/fty_num.c b/form/fty_num.c index e74e8e36..8cce43f8 100644 --- a/form/fty_num.c +++ b/form/fty_num.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. * + * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -34,7 +34,7 @@ #include "form.priv.h" -MODULE_ID("$Id: fty_num.c,v 1.25 2007/10/13 19:32:54 tom Exp $") +MODULE_ID("$Id: fty_num.c,v 1.29 2012/02/23 10:02:15 tom Exp $") #if HAVE_LOCALE_H #include @@ -63,35 +63,69 @@ typedef struct } thisARG; +typedef struct + { + int precision; + double low; + double high; + } +thisPARM; + /*--------------------------------------------------------------------------- | Facility : libnform -| Function : static void *Make_This_Type(va_list * ap) +| Function : static void *Generic_This_Type(void * arg) | | Description : Allocate structure for numeric type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * -Make_This_Type(va_list *ap) +Generic_This_Type(void *arg) { - thisARG *argn = typeMalloc(thisARG, 1); + thisARG *argn = (thisARG *) 0; + thisPARM *args = (thisPARM *) arg; - if (argn) + if (args) { - T((T_CREATE("thisARG %p"), argn)); - argn->precision = va_arg(*ap, int); - argn->low = va_arg(*ap, double); - argn->high = va_arg(*ap, double); + argn = typeMalloc(thisARG, 1); + + if (argn) + { + T((T_CREATE("thisARG %p"), (void *)argn)); + argn->precision = args->precision; + argn->low = args->low; + argn->high = args->high; #if HAVE_LOCALE_H - argn->L = localeconv(); + argn->L = localeconv(); #else - argn->L = NULL; + argn->L = NULL; #endif + } } return (void *)argn; } +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Make_This_Type(va_list * ap) +| +| Description : Allocate structure for numeric type argument. +| +| Return Values : Pointer to argument structure or NULL on error ++--------------------------------------------------------------------------*/ +static void * +Make_This_Type(va_list *ap) +{ + thisPARM arg; + + arg.precision = va_arg(*ap, int); + arg.low = va_arg(*ap, double); + arg.high = va_arg(*ap, double); + + return Generic_This_Type((void *)&arg); +} + /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Copy_This_Type(const void * argp) @@ -111,7 +145,7 @@ Copy_This_Type(const void *argp) result = typeMalloc(thisARG, 1); if (result) { - T((T_CREATE("thisARG %p"), result)); + T((T_CREATE("thisARG %p"), (void *)result)); *result = *ap; } } @@ -237,7 +271,8 @@ Check_This_Field(FIELD *field, const void *argp) } if (result) { - sprintf(buf, "%.*f", (prec > 0 ? prec : 0), val); + _nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) + "%.*f", (prec > 0 ? prec : 0), val); set_field_buffer(field, 0, buf); } } @@ -279,12 +314,27 @@ static FIELDTYPE typeTHIS = Make_This_Type, Copy_This_Type, Free_This_Type, - Check_This_Field, - Check_This_Character, - NULL, - NULL + INIT_FT_FUNC(Check_This_Field), + INIT_FT_FUNC(Check_This_Character), + INIT_FT_FUNC(NULL), + INIT_FT_FUNC(NULL), +#if NCURSES_INTEROP_FUNCS + Generic_This_Type +#endif }; NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_NUMERIC = &typeTHIS; +#if NCURSES_INTEROP_FUNCS +/* The next routines are to simplify the use of ncurses from + programming languages with restictions on interop with C level + constructs (e.g. variable access or va_list + ellipsis constructs) +*/ +NCURSES_EXPORT(FIELDTYPE *) +_nc_TYPE_NUMERIC(void) +{ + return TYPE_NUMERIC; +} +#endif + /* fty_num.c ends here */