xref: /plan9/sys/src/libventi/parsescore.c (revision 368c31ab13393dea083228fdd1c3445076f83a4b)
16b6b9ac8SDavid du Colombier #include <u.h>
26b6b9ac8SDavid du Colombier #include <libc.h>
36b6b9ac8SDavid du Colombier #include <venti.h>
46b6b9ac8SDavid du Colombier 
56b6b9ac8SDavid du Colombier int
vtparsescore(char * s,char ** prefix,uchar score[VtScoreSize])6*368c31abSDavid du Colombier vtparsescore(char *s, char **prefix, uchar score[VtScoreSize])
76b6b9ac8SDavid du Colombier {
86b6b9ac8SDavid du Colombier 	int i, c;
9*368c31abSDavid du Colombier 	char *buf, *colon;
10*368c31abSDavid du Colombier 
11*368c31abSDavid du Colombier 	if((colon = strchr(s, ':')) != nil)
12*368c31abSDavid du Colombier 		buf = colon+1;
13*368c31abSDavid du Colombier 	else
14*368c31abSDavid du Colombier 		buf = s;
15*368c31abSDavid du Colombier 
16*368c31abSDavid du Colombier 	if(strlen(buf) != 2*VtScoreSize)
17*368c31abSDavid du Colombier 		return -1;
186b6b9ac8SDavid du Colombier 
196b6b9ac8SDavid du Colombier 	memset(score, 0, VtScoreSize);
20*368c31abSDavid du Colombier 	for(i=0; i<2*VtScoreSize; i++){
216b6b9ac8SDavid du Colombier 		if(buf[i] >= '0' && buf[i] <= '9')
226b6b9ac8SDavid du Colombier 			c = buf[i] - '0';
23*368c31abSDavid du Colombier 		else if(buf[i] >= 'a' && buf[i] <= 'z')
246b6b9ac8SDavid du Colombier 			c = buf[i] - 'a' + 10;
25*368c31abSDavid du Colombier 		else if(buf[i] >= 'A' && buf[i] <= 'Z')
266b6b9ac8SDavid du Colombier 			c = buf[i] - 'A' + 10;
276b6b9ac8SDavid du Colombier 		else
28*368c31abSDavid du Colombier 			return -1;
296b6b9ac8SDavid du Colombier 
306b6b9ac8SDavid du Colombier 		if((i & 1) == 0)
316b6b9ac8SDavid du Colombier 			c <<= 4;
326b6b9ac8SDavid du Colombier 		score[i>>1] |= c;
336b6b9ac8SDavid du Colombier 	}
34*368c31abSDavid du Colombier 	if(colon){
35*368c31abSDavid du Colombier 		*colon = 0;
36*368c31abSDavid du Colombier 		if(prefix)
37*368c31abSDavid du Colombier 			*prefix = s;
38*368c31abSDavid du Colombier 	}else{
39*368c31abSDavid du Colombier 		if(prefix)
40*368c31abSDavid du Colombier 			*prefix = nil;
416b6b9ac8SDavid du Colombier 	}
42*368c31abSDavid du Colombier 	return 0;
43*368c31abSDavid du Colombier }
44