X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=form%2Ffty_alnum.c;h=854dc33eb59b6e2cd0364e8c8067c223cf161bfa;hp=c2d056b70acb7df69c83bece3f80b7379ddaca0b;hb=643ec2bf782cd02efafe3ccdeaea8920a404645e;hpb=027ae42953e3186daed8f3882da73de48291b606 diff --git a/form/fty_alnum.c b/form/fty_alnum.c index c2d056b7..854dc33e 100644 --- a/form/fty_alnum.c +++ b/form/fty_alnum.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. * + * Copyright 2020 Thomas E. Dickey * + * Copyright 1998-2009,2010 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 +35,7 @@ #include "form.priv.h" -MODULE_ID("$Id: fty_alnum.c,v 1.19 2006/04/22 21:33:05 tom Exp $") +MODULE_ID("$Id: fty_alnum.c,v 1.29 2020/12/12 01:15:37 tom Exp $") #define thisARG alnumARG @@ -44,6 +45,32 @@ typedef struct } thisARG; +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Generic_This_Type(void *arg) +| +| Description : Allocate structure for alphanumeric type argument. +| +| Return Values : Pointer to argument structure or NULL on error ++--------------------------------------------------------------------------*/ +static void * +Generic_This_Type(void *arg) +{ + thisARG *argp = (thisARG *)0; + + if (arg) + { + argp = typeMalloc(thisARG, 1); + + if (argp) + { + T((T_CREATE("thisARG %p"), (void *)argp)); + argp->width = *((int *)arg); + } + } + return ((void *)argp); +} + /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Make_This_Type(va_list *ap) @@ -55,12 +82,9 @@ thisARG; static void * Make_This_Type(va_list *ap) { - thisARG *argp = (thisARG *) malloc(sizeof(thisARG)); + int w = va_arg(*ap, int); - if (argp) - argp->width = va_arg(*ap, int); - - return ((void *)argp); + return Generic_This_Type((void *)&w); } /*--------------------------------------------------------------------------- @@ -75,10 +99,13 @@ static void * Copy_This_Type(const void *argp) { const thisARG *ap = (const thisARG *)argp; - thisARG *result = (thisARG *) malloc(sizeof(thisARG)); + thisARG *result = typeMalloc(thisARG, 1); if (result) - *result = *ap; + { + T((T_CREATE("thisARG %p"), (void *)result)); + *result = *ap; + } return ((void *)result); } @@ -113,7 +140,7 @@ static bool Check_This_Character(int c, const void *argp GCC_UNUSED) { #if USE_WIDEC_SUPPORT - if (iswalnum((wint_t) c)) + if (iswalnum((wint_t)c)) return TRUE; #endif return (isalnum(UChar(c)) ? TRUE : FALSE); @@ -150,12 +177,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_ALNUM = &typeTHIS; +FORM_EXPORT_VAR(FIELDTYPE *) TYPE_ALNUM = &typeTHIS; + +#if NCURSES_INTEROP_FUNCS +/* The next routines are to simplify the use of ncurses from + programming languages with restrictions on interop with C level + constructs (e.g. variable access or va_list + ellipsis constructs) +*/ +FORM_EXPORT(FIELDTYPE *) +_nc_TYPE_ALNUM(void) +{ + return TYPE_ALNUM; +} +#endif /* fty_alnum.c ends here */