TPCCLIB
Toggle main menu visibility
Loading...
Searching...
No Matches
libtpcmisc
studynr.c
Go to the documentation of this file.
1
5
/*****************************************************************************/
6
#include "
libtpcmisc.h
"
7
/*****************************************************************************/
8
9
/*****************************************************************************/
18
int
studynr_in_fname
(
20
char
*fname,
23
char
*studynr
24
) {
25
unsigned
int
i;
26
int
ret;
27
char
*cptr, *lptr, temp[FILENAME_MAX], temp2[FILENAME_MAX];
28
29
//printf("studynr_in_filename(%s, string)\n", fname);
30
if
(fname==NULL || studynr==NULL)
return
(1);
31
for
(i=0; i<=
MAX_STUDYNR_LEN
; i++) studynr[i]=(
char
)0;
32
/* Remove path */
33
cptr=strrchr(fname,
'/'
);
if
(cptr==NULL) cptr=strrchr(fname,
'\\'
);
34
if
(cptr==NULL) cptr=fname;
else
cptr++;
35
//i=strlen(cptr); if(i>FILENAME_MAX-1) i=FILENAME_MAX-1;
36
strlcpy
(temp, cptr, FILENAME_MAX); lptr=temp;
37
/* Verify tokens in filename whether they are valid as study number */
38
cptr=strtok(lptr,
"_-+{}!~.()"
);
39
while
(cptr!=NULL && !studynr[0]) {
40
strcpy(temp2, cptr);
41
/* Remove everything after the letter+digit parts */
42
for
(i=1; i<strlen(temp2); i++)
if
(!isalpha((
int
)temp2[i]))
break
;
43
for
(; i<strlen(temp2); i++)
if
(!isdigit((
int
)temp2[i]))
break
;
44
temp2[i]=(char)0;
45
/* Only then check it */
46
ret=
studynr_validity_check2
(temp2, 1);
47
if
(ret==1) {
48
strcpy(studynr, temp2);
49
if
(
studynr_rm_zeroes
(studynr)!=0) strcpy(studynr,
""
);
50
if
(
studynr_to_lowercase
(studynr)!=0) strcpy(studynr,
""
);
51
}
52
cptr=strtok(NULL,
"_-+{}!~.()"
);
53
}
54
if
(!studynr[0])
return
(2);
55
return
0;
56
}
57
/*****************************************************************************/
58
59
/*****************************************************************************/
67
int
studynr_from_fname2
(
69
char
*fname,
72
char
*studynr,
74
int
force
75
) {
76
unsigned
int
i;
77
char
*cptr;
78
79
//printf("studynr_from_fname2()\n");
80
81
if
(fname==NULL || studynr==NULL)
return
(1);
82
strcpy(studynr,
""
);
83
84
/* At first try if studynr_in_fname() works */
85
if
(
studynr_in_fname
(fname, studynr)==0)
return
(0);
86
87
/* Remove path */
88
cptr=strrchr(fname,
'/'
);
if
(cptr==NULL) cptr=strrchr(fname,
'\\'
);
89
if
(cptr==NULL) cptr=fname;
else
cptr++;
90
//i=strlen(cptr); if(i>MAX_STUDYNR_LEN) i=MAX_STUDYNR_LEN;
91
strlcpy
(studynr, cptr,
MAX_STUDYNR_LEN
);
//studynr[i]=(char)0;
92
if
(force!=0)
return
(0);
93
94
/* Check that first character is a letter */
95
if
(!isalpha((
int
)studynr[0])) {strcpy(studynr,
""
);
return
(4);}
96
/* Remove everything after the letter+digit parts */
97
for
(i=1; i<strlen(studynr); i++)
if
(!isalpha((
int
)studynr[i]))
break
;
98
for
(; i<strlen(studynr); i++)
if
(!isdigit((
int
)studynr[i]))
break
;
99
studynr[i]=(char)0;
100
/* Check the length of the study number */
101
if
(strlen(studynr)<2) {strcpy(studynr,
""
);
return
(5);}
102
/* Remove initial zeroes from the number part */
103
if
(
studynr_rm_zeroes
(studynr)!=0) {strcpy(studynr,
""
);
return
(6);}
104
/* Convert characters to lower case */
105
if
(
studynr_to_lowercase
(studynr)!=0) {strcpy(studynr,
""
);
return
(7);}
106
/* Check the validity of the study number */
107
if
(!
studynr_validity_check
(studynr)) {strcpy(studynr,
""
);
return
(8);}
108
return
(0);
109
}
110
/*****************************************************************************/
111
112
/*****************************************************************************/
119
int
studynr_from_fname
(
121
char
*fname,
124
char
*studynr
125
) {
126
return
studynr_from_fname2
(fname, studynr, 0);
127
}
128
/*****************************************************************************/
129
130
/*****************************************************************************/
142
int
studynr_match
(
char
*studynr1,
char
*studynr2) {
143
int
len1, len2;
144
char
*cptr1, *cptr2;
145
146
len1=strlen(studynr1);
if
(len1<2 || len1>
MAX_STUDYNR_LEN
)
return
(0);
147
len2=strlen(studynr2);
if
(len2<2 || len2>
MAX_STUDYNR_LEN
)
return
(0);
148
if
(len1==len2 && strcmp(studynr1, studynr2)==0)
return
(1);
149
if
(len2>len1) cptr2=studynr2+len2-len1;
else
cptr2=studynr2;
150
if
(len1>len2) cptr1=studynr1+len1-len2;
else
cptr1=studynr1;
151
if
(strcasecmp(cptr1, cptr2)==0)
return
(2);
152
return
(0);
153
}
154
/*****************************************************************************/
155
156
/*****************************************************************************/
166
int
studynr_validity_check2
(
168
char
*studynr,
170
int
zero_ok
171
) {
172
int
i, j, len;
173
174
len=strlen(studynr);
if
(len<2 || len>
MAX_STUDYNR_LEN
)
return
(0);
175
for
(i=0; i<len; i++)
if
(!isalnum((
int
)studynr[i]))
return
(0);
176
for
(i=0; i<len; i++)
if
(!isalpha((
int
)studynr[i]))
break
;
177
if
(i<1 || i>5)
return
(0);
178
if
(zero_ok==0 && studynr[i]==
'0'
)
return
(0);
/* first digit must be >0 */
179
for
(j=0; (i+j)<len; j++)
if
(!isdigit((
int
)studynr[i+j]))
return
(0);
180
//if(j<1 || j>5) return(0);
181
if
(j<1 || (i+j)>10)
return
(0);
182
return
(1);
183
}
184
/*****************************************************************************/
185
186
/*****************************************************************************/
196
int
studynr_validity_check
(
198
char
*studynr
199
) {
200
return
studynr_validity_check2
(studynr, 0);
201
}
202
/*****************************************************************************/
203
204
/*****************************************************************************/
211
int
studynr_rm_zeroes
(
char
*studynr) {
212
int
i, j, len;
213
214
len=strlen(studynr);
if
(len<2)
return
(1);
215
if
(isdigit((
int
)studynr[0]))
return
(2);
216
if
(!isdigit((
int
)studynr[len-1]))
return
(3);
217
for
(i=1; i<len; i++)
if
(isdigit((
int
)studynr[i]))
break
;
218
for
(j=i; j<len; j++)
if
(studynr[j]!=
'0'
)
break
;
219
if
(i==j)
return
(0);
/* no initial zeroes */
220
for
(;j<=len; i++, j++) studynr[i]=studynr[j];
221
return
(0);
222
}
223
/*****************************************************************************/
224
225
/*****************************************************************************/
233
int
studynr_to_lowercase
(
char
*studynr) {
234
int
i, len;
235
236
len=strlen(studynr);
if
(len<2)
return
(1);
237
if
(isdigit((
int
)studynr[0]))
return
(2);
238
if
(!isdigit((
int
)studynr[len-1]))
return
(3);
239
for
(i=0; i<len; i++) {
240
if
(isdigit((
int
)studynr[i]))
break
;
241
studynr[i]=(char)tolower((
int
)studynr[i]);
242
}
243
return
(0);
244
}
245
/*****************************************************************************/
246
247
/*****************************************************************************/
libtpcmisc.h
Header file for libtpcmisc.
strlcpy
size_t strlcpy(char *dst, const char *src, size_t dstsize)
Definition
strext.c:244
MAX_STUDYNR_LEN
#define MAX_STUDYNR_LEN
Definition
libtpcmisc.h:163
studynr_from_fname2
int studynr_from_fname2(char *fname, char *studynr, int force)
Definition
studynr.c:67
studynr_in_fname
int studynr_in_fname(char *fname, char *studynr)
Definition
studynr.c:18
studynr_to_lowercase
int studynr_to_lowercase(char *studynr)
Definition
studynr.c:233
studynr_validity_check2
int studynr_validity_check2(char *studynr, int zero_ok)
Definition
studynr.c:166
studynr_match
int studynr_match(char *studynr1, char *studynr2)
Definition
studynr.c:142
studynr_rm_zeroes
int studynr_rm_zeroes(char *studynr)
Definition
studynr.c:211
studynr_from_fname
int studynr_from_fname(char *fname, char *studynr)
Definition
studynr.c:119
studynr_validity_check
int studynr_validity_check(char *studynr)
Definition
studynr.c:196
Generated on
for TPCCLIB by
1.17.0