sub crc16 ($$$) { my ($startadr, $endadr, $crc) = @_; my ($cadr, $adr, $i, $u, $d); for ($adr = $startadr; $adr <= $endadr; $adr++) { if (defined($data[$adr])) { $d = $data[$adr] & 0xFF; } else { $d = 0xFF; } $i = $crc >> 8; $crc <<= 8; $crc &= 0xFFFF; $crc |= $d; $crc ^= $crctable[$i]; } return $crc; }