X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=form%2Ffty_alpha.c;h=d96fe091b355b652d5edc952fa0be98dbeae8ae5;hp=aa5c7c7d08f9de6d7b2b56ffc4a966c30f3dd150;hb=55ccd2b959766810cf7db8d1c4462f338ce0afc8;hpb=46722468f47c2b77b3987729b4bcf2321cccfd01 diff --git a/form/fty_alpha.c b/form/fty_alpha.c index aa5c7c7d..d96fe091 100644 --- a/form/fty_alpha.c +++ b/form/fty_alpha.c @@ -1,4 +1,3 @@ - /* * THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT. * You may freely copy it for use as a template for your own field types. @@ -8,132 +7,133 @@ /*************************************************************************** * * * Author : Juergen Pfeifer * -* Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * * * ***************************************************************************/ #include "form.priv.h" -MODULE_ID("$Id: fty_alpha.c,v 1.11 2002/07/06 15:33:27 juergen Exp $") +MODULE_ID("$Id: fty_alpha.c,v 1.20 2005/08/20 18:37:48 tom Exp $") + +#define thisARG alphaARG -typedef struct { - int width; -} alphaARG; +typedef struct + { + int width; + } +thisARG; /*--------------------------------------------------------------------------- -| Facility : libnform -| Function : static void *Make_Alpha_Type(va_list *ap) -| +| Facility : libnform +| Function : static void *Make_This_Type(va_list *ap) +| | Description : Allocate structure for alpha type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ -static void *Make_Alpha_Type(va_list * ap) +static void * +Make_This_Type(va_list *ap) { - alphaARG *argp = (alphaARG *)malloc(sizeof(alphaARG)); + thisARG *argp = (thisARG *) malloc(sizeof(thisARG)); + if (argp) - { - argp->width = va_arg(*ap,int); - } + argp->width = va_arg(*ap, int); + return ((void *)argp); } /*--------------------------------------------------------------------------- -| Facility : libnform -| Function : static void *Copy_Alpha_Type(const void * argp) -| -| Description : Copy structure for alpha type argument. +| Facility : libnform +| Function : static void *Copy_This_Type(const void * argp) +| +| Description : Copy structure for alpha type argument. | | Return Values : Pointer to argument structure or NULL on error. +--------------------------------------------------------------------------*/ -static void *Copy_Alpha_Type(const void * argp) +static void * +Copy_This_Type(const void *argp) { - const alphaARG *ap = (const alphaARG *)argp; - alphaARG *result = (alphaARG *)malloc(sizeof(alphaARG)); - + const thisARG *ap = (const thisARG *)argp; + thisARG *result = (thisARG *) malloc(sizeof(thisARG)); + if (result) - { - *result = *ap; - } + *result = *ap; + return ((void *)result); } /*--------------------------------------------------------------------------- -| Facility : libnform -| Function : static void Free_Alpha_Type( void * argp ) -| +| Facility : libnform +| Function : static void Free_This_Type(void *argp) +| | Description : Free structure for alpha type argument. | | Return Values : - +--------------------------------------------------------------------------*/ -static void Free_Alpha_Type(void * argp) +static void +Free_This_Type(void *argp) { - if (argp) + if (argp) free(argp); } /*--------------------------------------------------------------------------- -| Facility : libnform -| Function : static bool Check_Alpha_Field( -| FIELD * field, -| const void * argp) -| -| Description : Validate buffer content to be a valid alpha value +| Facility : libnform +| Function : static bool Check_This_Character( +| int c, +| const void *argp) | -| Return Values : TRUE - field is valid -| FALSE - field is invalid +| Description : Check a character for the alpha type. +| +| Return Values : TRUE - character is valid +| FALSE - character is invalid +--------------------------------------------------------------------------*/ -static bool Check_Alpha_Field(FIELD * field, const void * argp) +static bool +Check_This_Character(int c, const void *argp GCC_UNUSED) { - int width = ((const alphaARG *)argp)->width; - unsigned char *bp = (unsigned char *)field_buffer(field,0); - int l = -1; - unsigned char *s; - - while(*bp && *bp==' ') - bp++; - if (*bp) - { - s = bp; - while(*bp && isalpha(*bp)) - bp++; - l = (int)(bp-s); - while(*bp && *bp==' ') - bp++; - } - return ((*bp || (l < width)) ? FALSE : TRUE); +#if USE_WIDEC_SUPPORT + if (iswalpha((wint_t) c)) + return TRUE; +#endif + return (isalpha(UChar(c)) ? TRUE : FALSE); } /*--------------------------------------------------------------------------- -| Facility : libnform -| Function : static bool Check_Alpha_Character( -| int c, -| const void * argp) -| -| Description : Check a character for the alpha type. +| Facility : libnform +| Function : static bool Check_This_Field( +| FIELD *field, +| const void *argp) | -| Return Values : TRUE - character is valid -| FALSE - character is invalid +| Description : Validate buffer content to be a valid alpha value +| +| Return Values : TRUE - field is valid +| FALSE - field is invalid +--------------------------------------------------------------------------*/ -static bool Check_Alpha_Character(int c, const void * argp GCC_UNUSED) +static bool +Check_This_Field(FIELD *field, const void *argp) { - return (isalpha(c) ? TRUE : FALSE); + int width = ((const thisARG *)argp)->width; + unsigned char *bp = (unsigned char *)field_buffer(field, 0); + bool result = (width < 0); + + Check_CTYPE_Field(result, bp, width, Check_This_Character); + return (result); } -static FIELDTYPE typeALPHA = { +static FIELDTYPE typeTHIS = +{ _HAS_ARGS | _RESIDENT, - 1, /* this is mutable, so we can't be const */ + 1, /* this is mutable, so we can't be const */ (FIELDTYPE *)0, (FIELDTYPE *)0, - Make_Alpha_Type, - Copy_Alpha_Type, - Free_Alpha_Type, - Check_Alpha_Field, - Check_Alpha_Character, + Make_This_Type, + Copy_This_Type, + Free_This_Type, + Check_This_Field, + Check_This_Character, NULL, NULL }; -NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_ALPHA = &typeALPHA; +NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_ALPHA = &typeTHIS; /* fty_alpha.c ends here */