… | |
… | |
251 | av = (AV *) SvRV (ar); |
251 | av = (AV *) SvRV (ar); |
252 | result = newAV (); |
252 | result = newAV (); |
253 | |
253 | |
254 | for (i = 0; i <= av_len (av); ++i) |
254 | for (i = 0; i <= av_len (av); ++i) |
255 | { |
255 | { |
256 | int bigst = 1; |
256 | int bigst, j; |
257 | int j = 0; |
|
|
258 | SV *sv = *av_fetch (av, i, 1); |
257 | SV *sv = *av_fetch (av, i, 1); |
259 | STRLEN len; |
258 | STRLEN len; |
260 | char *buf = SvPVbyte (sv, len); |
259 | char *buf = SvPVbyte (sv, len); |
|
|
260 | |
261 | int tmphist[256]; |
261 | int tmphist[256]; |
262 | char *hist; |
262 | char *hist; |
263 | |
263 | |
264 | SV *histsv = newSV (257);//("", 0); |
264 | SV *histsv = newSV (257); |
265 | sv_upgrade (histsv, SVt_PV); |
265 | SvPOK_on (histsv); |
266 | SvCUR_set (histsv, 256); |
266 | SvCUR_set (histsv, 256); |
267 | hist = SvPV_nolen (histsv); |
267 | hist = SvPVX (histsv); |
268 | |
268 | |
269 | Zero (tmphist, 256, int); |
269 | Zero (tmphist, 256, int); |
270 | |
270 | |
|
|
271 | j = len; |
|
|
272 | |
271 | while (len--) |
273 | while (len--) |
272 | ++tmphist[*buf++]; |
274 | ++tmphist[(unsigned char)*buf++ & 0xda]; |
|
|
275 | |
|
|
276 | len = j; |
273 | |
277 | |
|
|
278 | bigst = 1; |
274 | for (j = 0; j < 256; ++j) |
279 | for (j = 0; j < 256; ++j) |
275 | if (tmphist[j] > bigst) |
280 | if (tmphist[j] > bigst) |
276 | bigst = tmphist[j]; |
281 | bigst = tmphist[j]; |
277 | |
282 | |
278 | for (j = 0; j < 256; ++j) |
283 | for (j = 0; j < 256; ++j) |
279 | hist[j] = tmphist[j] * 255 / bigst; |
284 | hist[j] = tmphist[j] * 255 / (len == 0 ? 1 : len);//bigst; |
280 | |
285 | |
281 | av_push (result, histsv); |
286 | av_push (result, histsv); |
282 | } |
287 | } |
283 | |
288 | |
284 | RETVAL = newRV_noinc ((SV *)result); |
289 | RETVAL = newRV_noinc ((SV *)result); |