… | |
… | |
269 | |
269 | |
270 | /* correct the single bit error */ |
270 | /* correct the single bit error */ |
271 | return d ^ (1 << (31 - 16*E + 8*D + 4*C + 2*B + A)); |
271 | return d ^ (1 << (31 - 16*E + 8*D + 4*C + 2*B + A)); |
272 | } |
272 | } |
273 | |
273 | |
274 | static unsigned char |
274 | #define rev(byte) (invtab [(u8)(byte)]) |
275 | rev (unsigned char x) |
|
|
276 | { |
|
|
277 | return ((x>>7)&1)<<0 | |
|
|
278 | ((x>>6)&1)<<1 | |
|
|
279 | ((x>>5)&1)<<2 | |
|
|
280 | ((x>>4)&1)<<3 | |
|
|
281 | ((x>>3)&1)<<4 | |
|
|
282 | ((x>>2)&1)<<5 | |
|
|
283 | ((x>>1)&1)<<6 | |
|
|
284 | ((x>>0)&1)<<7; |
|
|
285 | } |
|
|
286 | |
275 | |
287 | static SV * |
276 | static SV * |
288 | decode_vps (u8 *data) |
277 | decode_vps (u8 *data) |
289 | { |
278 | { |
290 | AV *av = newAV (); |
279 | AV *av = newAV (); |
291 | |
280 | |
|
|
281 | char name = rev (data[3]); |
|
|
282 | |
292 | av_push (av, newSViv (VBI_VPS)); |
283 | av_push (av, newSViv (VBI_VPS)); |
293 | av_push (av, newSVpvn (data+3, 1)); |
284 | av_push (av, newSVpvn (&name, 1)); |
294 | av_push (av, newSViv (data[4] & 3)); /* "unknown", "stereo ", "mono ", "dual " */ |
285 | av_push (av, newSViv (data[4] & 3)); /* "unknown", "stereo ", "mono ", "dual " */ |
295 | /* ch, day, mon, hour, min */ |
286 | /* ch, day, mon, hour, min */ |
296 | av_push (av, newSViv (rev (data[ 4]) <<12 & 0xf000 |
287 | av_push (av, newSViv (data[ 4] <<12 & 0xf000 |
297 | | rev (data[10]) & 0x00c0 |
288 | | data[10] & 0x00c0 |
298 | | rev (data[12]) <<10 & 0x0c00 |
289 | | data[12] <<10 & 0x0c00 |
299 | | rev (data[13]) << 2 & 0x0300 |
290 | | data[13] << 2 & 0x0300 |
300 | | rev (data[13]) & 0x003f)); |
291 | | data[13] & 0x003f)); |
301 | av_push (av, newSViv (rev (data[10]) >> 1 & 31)); |
292 | av_push (av, newSViv (rev (data[10]) >> 1 & 31)); |
302 | av_push (av, newSViv (rev (data[10]) << 3 & 8 | rev (data[11]) >> 5)); |
293 | av_push (av, newSViv (rev (data[10]) << 3 & 8 | rev (data[11]) >> 5)); |
303 | av_push (av, newSViv (rev (data[11]) & 31)); |
294 | av_push (av, newSViv (rev (data[11]) & 31)); |
304 | av_push (av, newSViv (rev (data[12]) >> 2)); |
295 | av_push (av, newSViv (rev (data[12]) >> 2)); |
305 | av_push (av, newSViv (rev (data[14]))); |
296 | av_push (av, newSViv (rev (data[14]))); |
… | |
… | |
1249 | PUSHs (sv_2mortal (sv)); |
1240 | PUSHs (sv_2mortal (sv)); |
1250 | } |
1241 | } |
1251 | } |
1242 | } |
1252 | |
1243 | |
1253 | SV * |
1244 | SV * |
1254 | decode_vps(void *data) |
1245 | decode_vps(char *data) |
1255 | |
1246 | |
1256 | SV * |
1247 | SV * |
1257 | decode_vt(void *data) |
1248 | decode_vt(char *data) |
1258 | |
1249 | |
1259 | void |
1250 | void |
1260 | decode_vtpage(data) |
1251 | decode_vtpage(data) |
1261 | SV * data |
1252 | SV * data |
1262 | PPCODE: |
1253 | PPCODE: |