スマソ。詫びにこんなのを見つけた。

int IsLegal(const char *s){
  unsigned char u=*s, v=*(s+1);
  return ( ((0x81<=u && u<=0x9F) || (0xE0<=u && u<=0xFC))
    && ((0x40<=v && v<=0x7E) || (0x80<=v && v<=0xFC)) );
}
あとは漢字コードとにらめっこして納得すれば、IsKanji()も何をやってるのか
か分かるね。