xref: /plan9/sys/src/liboventi/parsescore.c (revision 368c31ab13393dea083228fdd1c3445076f83a4b)
1*368c31abSDavid du Colombier #include <u.h>
2*368c31abSDavid du Colombier #include <libc.h>
3*368c31abSDavid du Colombier #include <oventi.h>
4*368c31abSDavid du Colombier 
5*368c31abSDavid du Colombier int
vtParseScore(char * buf,uint n,uchar score[VtScoreSize])6*368c31abSDavid du Colombier vtParseScore(char *buf, uint n, uchar score[VtScoreSize])
7*368c31abSDavid du Colombier {
8*368c31abSDavid du Colombier 	int i, c;
9*368c31abSDavid du Colombier 
10*368c31abSDavid du Colombier 	memset(score, 0, VtScoreSize);
11*368c31abSDavid du Colombier 
12*368c31abSDavid du Colombier 	if(n != VtScoreSize*2)
13*368c31abSDavid du Colombier 		return 0;
14*368c31abSDavid du Colombier 	for(i=0; i<VtScoreSize*2; i++){
15*368c31abSDavid du Colombier 		if(buf[i] >= '0' && buf[i] <= '9')
16*368c31abSDavid du Colombier 			c = buf[i] - '0';
17*368c31abSDavid du Colombier 		else if(buf[i] >= 'a' && buf[i] <= 'f')
18*368c31abSDavid du Colombier 			c = buf[i] - 'a' + 10;
19*368c31abSDavid du Colombier 		else if(buf[i] >= 'A' && buf[i] <= 'F')
20*368c31abSDavid du Colombier 			c = buf[i] - 'A' + 10;
21*368c31abSDavid du Colombier 		else
22*368c31abSDavid du Colombier 			return 0;
23*368c31abSDavid du Colombier 
24*368c31abSDavid du Colombier 		if((i & 1) == 0)
25*368c31abSDavid du Colombier 			c <<= 4;
26*368c31abSDavid du Colombier 
27*368c31abSDavid du Colombier 		score[i>>1] |= c;
28*368c31abSDavid du Colombier 	}
29*368c31abSDavid du Colombier 	return 1;
30*368c31abSDavid du Colombier }
31*368c31abSDavid du Colombier 
32