#include #include const char* tf(int i){ if (i){ return "t"; } return ""; } int utftod(const char* s){ int l; int b; Rune r; int t; t=0; for(l=strlen(s); *s; s+=b, l-=b){ b = chartorune(&r, (char*)s); if (0 == b){ break; } t = t*10 + digitrunevalue(r); } return t; } int convert(const char* s, Rune (*R)(Rune)){ int l; int b; Rune r; int t; t=0; for(l=strlen(s); *s; s+=b, l-=b){ b = chartorune(&r, (char*)s); if (0 == b){ break; } print("%C", R(r)); } return t; } void main(int c, char**v){ int l; int b; Rune r; char* s; int number; char ult[UTFmax*3 + sizeof("//\0")]; if (*v){ print ("%C\t%6s\t%6s\t%6s\t%6s\t%6s\t%6s\t%6s\n", 0x24d0, "digit", "alpha", "upper", "lower", "title", "space", "u/l/t"); } for(++v; *v; v++){ s = *v; l=strlen(s); number=1; for(; *s; s += b, l-=b){ b=chartorune(&r, s); if (0 == b){ break; } if (number){ number &= isdigitrune(r); } snprint(ult, sizeof(ult), "%C/%C/%C", tolowerrune(r), toupperrune(r), totitlerune(r)); print ("%C\t" "%6s\t%6s\t%6s\t%6s\t%6s\t%6s\t%6s\n", r, tf(isdigitrune(r)), tf(isalpharune(r)), tf(isupperrune(r)), tf(islowerrune(r)), tf(istitlerune(r)), tf(isspacerune(r)), ult ); } if (number){ print("%d\t", utftod(*v)); } convert(*v, toupperrune); print("\t"); convert(*v, tolowerrune); print("\t"); convert(*v, totitlerune); print("\n"); } exits(""); }