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