Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <venti.h>
5 int
6 vtparsescore(char *s, char **prefix, uchar score[VtScoreSize])
7 {
8 int i, c;
9 char *buf, *colon;
11 if((colon = strchr(s, ':')) != nil)
12 buf = colon+1;
13 else
14 buf = s;
16 if(strlen(buf) != 2*VtScoreSize)
17 return -1;
19 memset(score, 0, VtScoreSize);
20 for(i=0; i<2*VtScoreSize; i++){
21 if(buf[i] >= '0' && buf[i] <= '9')
22 c = buf[i] - '0';
23 else if(buf[i] >= 'a' && buf[i] <= 'z')
24 c = buf[i] - 'a' + 10;
25 else if(buf[i] >= 'A' && buf[i] <= 'Z')
26 c = buf[i] - 'A' + 10;
27 else
28 return -1;
30 if((i & 1) == 0)
31 c <<= 4;
32 score[i>>1] |= c;
33 }
34 if(colon){
35 *colon = 0;
36 if(prefix)
37 *prefix = s;
38 }else{
39 if(prefix)
40 *prefix = nil;
41 }
42 return 0;
43 }