ref: 3b7e03a30ed29ee0666c00568bf67b8179c28d12
dir: /sys/src/libventi/parsescore.c/
#include <u.h> #include <libc.h> #include <venti.h> int vtparsescore(char *s, char **prefix, uchar score[VtScoreSize]) { int i, c; char *buf, *colon; if((colon = strchr(s, ':')) != nil) buf = colon+1; else buf = s; if(strlen(buf) != 2*VtScoreSize) return -1; memset(score, 0, VtScoreSize); for(i=0; i<2*VtScoreSize; i++){ if(buf[i] >= '0' && buf[i] <= '9') c = buf[i] - '0'; else if(buf[i] >= 'a' && buf[i] <= 'z') c = buf[i] - 'a' + 10; else if(buf[i] >= 'A' && buf[i] <= 'Z') c = buf[i] - 'A' + 10; else return -1; if((i & 1) == 0) c <<= 4; score[i>>1] |= c; } if(colon){ *colon = 0; if(prefix) *prefix = s; }else{ if(prefix) *prefix = nil; } return 0; }