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_alnum.c,v 1.9 1999/05/16 17:22:49 juergen Exp $") 170e3d5408SPeter Wemm 180e3d5408SPeter Wemm typedef struct { 190e3d5408SPeter Wemm int width; 200e3d5408SPeter Wemm } alnumARG; 210e3d5408SPeter Wemm 220e3d5408SPeter Wemm /*--------------------------------------------------------------------------- 230e3d5408SPeter Wemm | Facility : libnform 240e3d5408SPeter Wemm | Function : static void *Make_AlphaNumeric_Type(va_list *ap) 250e3d5408SPeter Wemm | 260e3d5408SPeter Wemm | Description : Allocate structure for alphanumeric type argument. 270e3d5408SPeter Wemm | 280e3d5408SPeter Wemm | Return Values : Pointer to argument structure or NULL on error 290e3d5408SPeter Wemm +--------------------------------------------------------------------------*/ 300e3d5408SPeter Wemm static void *Make_AlphaNumeric_Type(va_list * ap) 310e3d5408SPeter Wemm { 320e3d5408SPeter Wemm alnumARG *argp = (alnumARG *)malloc(sizeof(alnumARG)); 330e3d5408SPeter Wemm 340e3d5408SPeter Wemm if (argp) 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_AlphaNumericType(const void *argp) 430e3d5408SPeter Wemm | 440e3d5408SPeter Wemm | Description : Copy structure for alphanumeric type argument. 450e3d5408SPeter Wemm | 460e3d5408SPeter Wemm | Return Values : Pointer to argument structure or NULL on error. 470e3d5408SPeter Wemm +--------------------------------------------------------------------------*/ 480e3d5408SPeter Wemm static void *Copy_AlphaNumeric_Type(const void *argp) 490e3d5408SPeter Wemm { 500e3d5408SPeter Wemm const alnumARG *ap = (const alnumARG *)argp; 510e3d5408SPeter Wemm alnumARG *result = (alnumARG *)malloc(sizeof(alnumARG)); 520e3d5408SPeter Wemm 530e3d5408SPeter Wemm if (result) 540e3d5408SPeter Wemm *result = *ap; 550e3d5408SPeter Wemm 560e3d5408SPeter Wemm return ((void *)result); 570e3d5408SPeter Wemm } 580e3d5408SPeter Wemm 590e3d5408SPeter Wemm /*--------------------------------------------------------------------------- 600e3d5408SPeter Wemm | Facility : libnform 610e3d5408SPeter Wemm | Function : static void Free_AlphaNumeric_Type(void *argp) 620e3d5408SPeter Wemm | 630e3d5408SPeter Wemm | Description : Free structure for alphanumeric type argument. 640e3d5408SPeter Wemm | 650e3d5408SPeter Wemm | Return Values : - 660e3d5408SPeter Wemm +--------------------------------------------------------------------------*/ 670e3d5408SPeter Wemm static void Free_AlphaNumeric_Type(void * argp) 680e3d5408SPeter Wemm { 690e3d5408SPeter Wemm if (argp) 700e3d5408SPeter Wemm free(argp); 710e3d5408SPeter Wemm } 720e3d5408SPeter Wemm 730e3d5408SPeter Wemm /*--------------------------------------------------------------------------- 740e3d5408SPeter Wemm | Facility : libnform 750e3d5408SPeter Wemm | Function : static bool Check_AlphaNumeric_Field( 760e3d5408SPeter Wemm | FIELD *field, 770e3d5408SPeter Wemm | const void *argp) 780e3d5408SPeter Wemm | 790e3d5408SPeter Wemm | Description : Validate buffer content to be a valid alphanumeric value 800e3d5408SPeter Wemm | 810e3d5408SPeter Wemm | Return Values : TRUE - field is valid 820e3d5408SPeter Wemm | FALSE - field is invalid 830e3d5408SPeter Wemm +--------------------------------------------------------------------------*/ 840e3d5408SPeter Wemm static bool Check_AlphaNumeric_Field(FIELD * field, const void * argp) 850e3d5408SPeter Wemm { 860e3d5408SPeter Wemm int width = ((const alnumARG *)argp)->width; 870e3d5408SPeter Wemm unsigned char *bp = (unsigned char *)field_buffer(field,0); 880e3d5408SPeter Wemm int l = -1; 890e3d5408SPeter Wemm unsigned char *s; 900e3d5408SPeter Wemm 910e3d5408SPeter Wemm while(*bp && *bp==' ') 920e3d5408SPeter Wemm bp++; 930e3d5408SPeter Wemm if (*bp) 940e3d5408SPeter Wemm { 950e3d5408SPeter Wemm s = bp; 960e3d5408SPeter Wemm while(*bp && isalnum(*bp)) 970e3d5408SPeter Wemm bp++; 980e3d5408SPeter Wemm l = (int)(bp-s); 990e3d5408SPeter Wemm while(*bp && *bp==' ') 1000e3d5408SPeter Wemm bp++; 1010e3d5408SPeter Wemm } 1020e3d5408SPeter Wemm return ((*bp || (l < width)) ? FALSE : TRUE); 1030e3d5408SPeter Wemm } 1040e3d5408SPeter Wemm 1050e3d5408SPeter Wemm /*--------------------------------------------------------------------------- 1060e3d5408SPeter Wemm | Facility : libnform 1070e3d5408SPeter Wemm | Function : static bool Check_AlphaNumeric_Character( 1080e3d5408SPeter Wemm | int c, 1090e3d5408SPeter Wemm | const void *argp ) 1100e3d5408SPeter Wemm | 1110e3d5408SPeter Wemm | Description : Check a character for the alphanumeric type. 1120e3d5408SPeter Wemm | 1130e3d5408SPeter Wemm | Return Values : TRUE - character is valid 1140e3d5408SPeter Wemm | FALSE - character is invalid 1150e3d5408SPeter Wemm +--------------------------------------------------------------------------*/ 1160e3d5408SPeter Wemm static bool Check_AlphaNumeric_Character(int c, const void * argp GCC_UNUSED) 1170e3d5408SPeter Wemm { 1180e3d5408SPeter Wemm return (isalnum(c) ? TRUE : FALSE); 1190e3d5408SPeter Wemm } 1200e3d5408SPeter Wemm 1210e3d5408SPeter Wemm static FIELDTYPE typeALNUM = { 1220e3d5408SPeter Wemm _HAS_ARGS | _RESIDENT, 1230e3d5408SPeter Wemm 1, /* this is mutable, so we can't be const */ 1240e3d5408SPeter Wemm (FIELDTYPE *)0, 1250e3d5408SPeter Wemm (FIELDTYPE *)0, 1260e3d5408SPeter Wemm Make_AlphaNumeric_Type, 1270e3d5408SPeter Wemm Copy_AlphaNumeric_Type, 1280e3d5408SPeter Wemm Free_AlphaNumeric_Type, 1290e3d5408SPeter Wemm Check_AlphaNumeric_Field, 1300e3d5408SPeter Wemm Check_AlphaNumeric_Character, 1310e3d5408SPeter Wemm NULL, 1320e3d5408SPeter Wemm NULL 1330e3d5408SPeter Wemm }; 1340e3d5408SPeter Wemm 1350e3d5408SPeter Wemm FIELDTYPE* TYPE_ALNUM = &typeALNUM; 1360e3d5408SPeter Wemm 1370e3d5408SPeter Wemm /* fty_alnum.c ends here */ 138