Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Kitware
GitHub Repository: Kitware/CMake
Path: blob/master/Source/CursesDialog/form/fty_alnum.c
5017 views
1
2
/*
3
* THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT.
4
* You may freely copy it for use as a template for your own field types.
5
* If you develop a field type that might be of general use, please send
6
* it back to the ncurses maintainers for inclusion in the next version.
7
*/
8
/***************************************************************************
9
* *
10
* Author : Juergen Pfeifer, [email protected] *
11
* *
12
***************************************************************************/
13
14
#include "form.priv.h"
15
16
MODULE_ID("$Id$")
17
18
typedef struct {
19
int width;
20
} alnumARG;
21
22
/*---------------------------------------------------------------------------
23
| Facility : libnform
24
| Function : static void *Make_AlphaNumeric_Type(va_list *ap)
25
|
26
| Description : Allocate structure for alphanumeric type argument.
27
|
28
| Return Values : Pointer to argument structure or NULL on error
29
+--------------------------------------------------------------------------*/
30
static void *Make_AlphaNumeric_Type(va_list * ap)
31
{
32
alnumARG *argp = (alnumARG *)malloc(sizeof(alnumARG));
33
34
if (argp)
35
argp->width = va_arg(*ap,int);
36
37
return ((void *)argp);
38
}
39
40
/*---------------------------------------------------------------------------
41
| Facility : libnform
42
| Function : static void *Copy_AlphaNumericType(const void *argp)
43
|
44
| Description : Copy structure for alphanumeric type argument.
45
|
46
| Return Values : Pointer to argument structure or NULL on error.
47
+--------------------------------------------------------------------------*/
48
static void *Copy_AlphaNumeric_Type(const void *argp)
49
{
50
const alnumARG *ap = (const alnumARG *)argp;
51
alnumARG *result = (alnumARG *)malloc(sizeof(alnumARG));
52
53
if (result)
54
*result = *ap;
55
56
return ((void *)result);
57
}
58
59
/*---------------------------------------------------------------------------
60
| Facility : libnform
61
| Function : static void Free_AlphaNumeric_Type(void *argp)
62
|
63
| Description : Free structure for alphanumeric type argument.
64
|
65
| Return Values : -
66
+--------------------------------------------------------------------------*/
67
static void Free_AlphaNumeric_Type(void * argp)
68
{
69
if (argp)
70
free(argp);
71
}
72
73
/*---------------------------------------------------------------------------
74
| Facility : libnform
75
| Function : static bool Check_AlphaNumeric_Field(
76
| FIELD *field,
77
| const void *argp)
78
|
79
| Description : Validate buffer content to be a valid alphanumeric value
80
|
81
| Return Values : TRUE - field is valid
82
| FALSE - field is invalid
83
+--------------------------------------------------------------------------*/
84
static bool Check_AlphaNumeric_Field(FIELD * field, const void * argp)
85
{
86
int width = ((const alnumARG *)argp)->width;
87
unsigned char *bp = (unsigned char *)field_buffer(field,0);
88
int l = -1;
89
unsigned char *s;
90
91
while(*bp && *bp==' ')
92
bp++;
93
if (*bp)
94
{
95
s = bp;
96
while(*bp && isalnum(*bp))
97
bp++;
98
l = (int)(bp-s);
99
while(*bp && *bp==' ')
100
bp++;
101
}
102
return ((*bp || (l < width)) ? FALSE : TRUE);
103
}
104
105
/*---------------------------------------------------------------------------
106
| Facility : libnform
107
| Function : static bool Check_AlphaNumeric_Character(
108
| int c,
109
| const void *argp )
110
|
111
| Description : Check a character for the alphanumeric type.
112
|
113
| Return Values : TRUE - character is valid
114
| FALSE - character is invalid
115
+--------------------------------------------------------------------------*/
116
static bool Check_AlphaNumeric_Character(int c, const void * argp)
117
{
118
argp=0; /* Silence unused parameter warning. */
119
return (isalnum(c) ? TRUE : FALSE);
120
}
121
122
static FIELDTYPE typeALNUM = {
123
_HAS_ARGS | _RESIDENT,
124
1, /* this is mutable, so we can't be const */
125
(FIELDTYPE *)0,
126
(FIELDTYPE *)0,
127
Make_AlphaNumeric_Type,
128
Copy_AlphaNumeric_Type,
129
Free_AlphaNumeric_Type,
130
Check_AlphaNumeric_Field,
131
Check_AlphaNumeric_Character,
132
NULL,
133
NULL
134
};
135
136
FIELDTYPE* TYPE_ALNUM = &typeALNUM;
137
138
/* fty_alnum.c ends here */
139
140