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 Colombiervtparsescore(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