summaryrefslogtreecommitdiff
path: root/sys/src/liboventi/parsescore.c
blob: 0f02610fdf4fb25c6c7853225e71599031f49eed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <u.h>
#include <libc.h>
#include <oventi.h>

int
vtParseScore(char *buf, uint n, uchar score[VtScoreSize])
{
	int i, c;

	memset(score, 0, VtScoreSize);

	if(n != VtScoreSize*2)
		return 0;
	for(i=0; i<VtScoreSize*2; i++){
		if(buf[i] >= '0' && buf[i] <= '9')
			c = buf[i] - '0';
		else if(buf[i] >= 'a' && buf[i] <= 'f')
			c = buf[i] - 'a' + 10;
		else if(buf[i] >= 'A' && buf[i] <= 'F')
			c = buf[i] - 'A' + 10;
		else
			return 0;

		if((i & 1) == 0)
			c <<= 4;
	
		score[i>>1] |= c;
	}
	return 1;
}