xref: /freebsd/contrib/ncurses/form/fty_alpha.c (revision 0e3d540892016a47f6a68ec9ba2879d35ce5f7c2)
10e3d5408SPeter Wemm 
20e3d5408SPeter Wemm /*
30e3d5408SPeter Wemm  * THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT.
40e3d5408SPeter Wemm  * You may freely copy it for use as a template for your own field types.
50e3d5408SPeter Wemm  * If you develop a field type that might be of general use, please send
60e3d5408SPeter Wemm  * it back to the ncurses maintainers for inclusion in the next version.
70e3d5408SPeter Wemm  */
80e3d5408SPeter Wemm /***************************************************************************
90e3d5408SPeter Wemm *                                                                          *
100e3d5408SPeter Wemm *  Author : Juergen Pfeifer, juergen.pfeifer@gmx.net                       *
110e3d5408SPeter Wemm *                                                                          *
120e3d5408SPeter Wemm ***************************************************************************/
130e3d5408SPeter Wemm 
140e3d5408SPeter Wemm #include "form.priv.h"
150e3d5408SPeter Wemm 
160e3d5408SPeter Wemm MODULE_ID("$Id: fty_alpha.c,v 1.9 1999/05/16 17:22:58 juergen Exp $")
170e3d5408SPeter Wemm 
180e3d5408SPeter Wemm typedef struct {
190e3d5408SPeter Wemm   int width;
200e3d5408SPeter Wemm } alphaARG;
210e3d5408SPeter Wemm 
220e3d5408SPeter Wemm /*---------------------------------------------------------------------------
230e3d5408SPeter Wemm |   Facility      :  libnform
240e3d5408SPeter Wemm |   Function      :  static void *Make_Alpha_Type(va_list *ap)
250e3d5408SPeter Wemm |
260e3d5408SPeter Wemm |   Description   :  Allocate structure for alpha type argument.
270e3d5408SPeter Wemm |
280e3d5408SPeter Wemm |   Return Values :  Pointer to argument structure or NULL on error
290e3d5408SPeter Wemm +--------------------------------------------------------------------------*/
300e3d5408SPeter Wemm static void *Make_Alpha_Type(va_list * ap)
310e3d5408SPeter Wemm {
320e3d5408SPeter Wemm   alphaARG *argp = (alphaARG *)malloc(sizeof(alphaARG));
330e3d5408SPeter Wemm   if (argp)
340e3d5408SPeter Wemm     {
350e3d5408SPeter Wemm       argp->width = va_arg(*ap,int);
360e3d5408SPeter Wemm     }
370e3d5408SPeter Wemm   return ((void *)argp);
380e3d5408SPeter Wemm }
390e3d5408SPeter Wemm 
400e3d5408SPeter Wemm /*---------------------------------------------------------------------------
410e3d5408SPeter Wemm |   Facility      :  libnform
420e3d5408SPeter Wemm |   Function      :  static void *Copy_Alpha_Type(const void * argp)
430e3d5408SPeter Wemm |
440e3d5408SPeter Wemm |   Description   :  Copy structure for alpha type argument.
450e3d5408SPeter Wemm |
460e3d5408SPeter Wemm |   Return Values :  Pointer to argument structure or NULL on error.
470e3d5408SPeter Wemm +--------------------------------------------------------------------------*/
480e3d5408SPeter Wemm static void *Copy_Alpha_Type(const void * argp)
490e3d5408SPeter Wemm {
500e3d5408SPeter Wemm   const alphaARG *ap = (const alphaARG *)argp;
510e3d5408SPeter Wemm   alphaARG *result = (alphaARG *)malloc(sizeof(alphaARG));
520e3d5408SPeter Wemm 
530e3d5408SPeter Wemm   if (result)
540e3d5408SPeter Wemm     {
550e3d5408SPeter Wemm       *result = *ap;
560e3d5408SPeter Wemm     }
570e3d5408SPeter Wemm   return ((void *)result);
580e3d5408SPeter Wemm }
590e3d5408SPeter Wemm 
600e3d5408SPeter Wemm /*---------------------------------------------------------------------------
610e3d5408SPeter Wemm |   Facility      :  libnform
620e3d5408SPeter Wemm |   Function      :  static void Free_Alpha_Type( void * argp )
630e3d5408SPeter Wemm |
640e3d5408SPeter Wemm |   Description   :  Free structure for alpha type argument.
650e3d5408SPeter Wemm |
660e3d5408SPeter Wemm |   Return Values :  -
670e3d5408SPeter Wemm +--------------------------------------------------------------------------*/
680e3d5408SPeter Wemm static void Free_Alpha_Type(void * argp)
690e3d5408SPeter Wemm {
700e3d5408SPeter Wemm   if (argp)
710e3d5408SPeter Wemm     free(argp);
720e3d5408SPeter Wemm }
730e3d5408SPeter Wemm 
740e3d5408SPeter Wemm /*---------------------------------------------------------------------------
750e3d5408SPeter Wemm |   Facility      :  libnform
760e3d5408SPeter Wemm |   Function      :  static bool Check_Alpha_Field(
770e3d5408SPeter Wemm |                                      FIELD * field,
780e3d5408SPeter Wemm |                                      const void * argp)
790e3d5408SPeter Wemm |
800e3d5408SPeter Wemm |   Description   :  Validate buffer content to be a valid alpha value
810e3d5408SPeter Wemm |
820e3d5408SPeter Wemm |   Return Values :  TRUE  - field is valid
830e3d5408SPeter Wemm |                    FALSE - field is invalid
840e3d5408SPeter Wemm +--------------------------------------------------------------------------*/
850e3d5408SPeter Wemm static bool Check_Alpha_Field(FIELD * field, const void * argp)
860e3d5408SPeter Wemm {
870e3d5408SPeter Wemm   int width = ((const alphaARG *)argp)->width;
880e3d5408SPeter Wemm   unsigned char *bp  = (unsigned char *)field_buffer(field,0);
890e3d5408SPeter Wemm   int  l = -1;
900e3d5408SPeter Wemm   unsigned char *s;
910e3d5408SPeter Wemm 
920e3d5408SPeter Wemm   while(*bp && *bp==' ')
930e3d5408SPeter Wemm     bp++;
940e3d5408SPeter Wemm   if (*bp)
950e3d5408SPeter Wemm     {
960e3d5408SPeter Wemm       s = bp;
970e3d5408SPeter Wemm       while(*bp && isalpha(*bp))
980e3d5408SPeter Wemm 	bp++;
990e3d5408SPeter Wemm       l = (int)(bp-s);
1000e3d5408SPeter Wemm       while(*bp && *bp==' ')
1010e3d5408SPeter Wemm 	bp++;
1020e3d5408SPeter Wemm     }
1030e3d5408SPeter Wemm   return ((*bp || (l < width)) ? FALSE : TRUE);
1040e3d5408SPeter Wemm }
1050e3d5408SPeter Wemm 
1060e3d5408SPeter Wemm /*---------------------------------------------------------------------------
1070e3d5408SPeter Wemm |   Facility      :  libnform
1080e3d5408SPeter Wemm |   Function      :  static bool Check_Alpha_Character(
1090e3d5408SPeter Wemm |                                      int c,
1100e3d5408SPeter Wemm |                                      const void * argp)
1110e3d5408SPeter Wemm |
1120e3d5408SPeter Wemm |   Description   :  Check a character for the alpha type.
1130e3d5408SPeter Wemm |
1140e3d5408SPeter Wemm |   Return Values :  TRUE  - character is valid
1150e3d5408SPeter Wemm |                    FALSE - character is invalid
1160e3d5408SPeter Wemm +--------------------------------------------------------------------------*/
1170e3d5408SPeter Wemm static bool Check_Alpha_Character(int c, const void * argp GCC_UNUSED)
1180e3d5408SPeter Wemm {
1190e3d5408SPeter Wemm   return (isalpha(c) ? TRUE : FALSE);
1200e3d5408SPeter Wemm }
1210e3d5408SPeter Wemm 
1220e3d5408SPeter Wemm static FIELDTYPE typeALPHA = {
1230e3d5408SPeter Wemm   _HAS_ARGS | _RESIDENT,
1240e3d5408SPeter Wemm   1,                           /* this is mutable, so we can't be const */
1250e3d5408SPeter Wemm   (FIELDTYPE *)0,
1260e3d5408SPeter Wemm   (FIELDTYPE *)0,
1270e3d5408SPeter Wemm   Make_Alpha_Type,
1280e3d5408SPeter Wemm   Copy_Alpha_Type,
1290e3d5408SPeter Wemm   Free_Alpha_Type,
1300e3d5408SPeter Wemm   Check_Alpha_Field,
1310e3d5408SPeter Wemm   Check_Alpha_Character,
1320e3d5408SPeter Wemm   NULL,
1330e3d5408SPeter Wemm   NULL
1340e3d5408SPeter Wemm };
1350e3d5408SPeter Wemm 
1360e3d5408SPeter Wemm FIELDTYPE* TYPE_ALPHA = &typeALPHA;
1370e3d5408SPeter Wemm 
1380e3d5408SPeter Wemm /* fty_alpha.c ends here */
139