--- CV/CV.xs 2005/02/08 10:34:19 1.10 +++ CV/CV.xs 2005/02/08 12:51:12 1.14 @@ -253,30 +253,35 @@ for (i = 0; i <= av_len (av); ++i) { - int bigst = 1; - int j = 0; + int bigst, j; SV *sv = *av_fetch (av, i, 1); STRLEN len; char *buf = SvPVbyte (sv, len); + int tmphist[256]; char *hist; - SV *histsv = newSV (257);//("", 0); - sv_upgrade (histsv, SVt_PV); + SV *histsv = newSV (257); + SvPOK_on (histsv); SvCUR_set (histsv, 256); - hist = SvPV_nolen (histsv); + hist = SvPVX (histsv); Zero (tmphist, 256, int); + j = len; + while (len--) - ++tmphist[*buf++]; + ++tmphist[(unsigned char)*buf++ & 0xda]; + + len = j; + bigst = 1; for (j = 0; j < 256; ++j) if (tmphist[j] > bigst) bigst = tmphist[j]; for (j = 0; j < 256; ++j) - hist[j] = tmphist[j] * 255 / bigst; + hist[j] = tmphist[j] * 255 / (len == 0 ? 1 : len);//bigst; av_push (result, histsv); }