'
'calculate CRC for Psion PLP protocol
'
'Organiser II only, does not work on SIBO or EPOC machines!
'
'returns CRC in a 2-byte string
'
'Autor: Boris Cornet, 2001
' boris@psion2.org
Private crcTbl(255) As Long
'------------------------------------------------------------------
Public Function plp_crc(theString As String) as String
Dim crc As Long, x As Integer
init_crc
crc = crcTbl(Asc(theString))
For x = 2 To Len(theString)
crc = crcTbl(Asc(Mid(theString, x, 1)) Xor Int(crc / 256)) Xor ((crc And 255) * 256)
Next
plp_crc = Chr(Int(crc / 256)) + Chr(crc And 255)
End Function
'------------------------------------------------------------------
Private Sub init_crc()
Static done As Boolean
If done Then Exit Sub
'table derived from standard CRC16 by reversing high & low bytes
crcTbl(0) = 0
crcTbl(1) = &HC1C0&
crcTbl(2) = &H81C1&
crcTbl(3) = &H4001&
crcTbl(4) = &H01C3&
crcTbl(5) = &HC003&
crcTbl(6) = &H8002&
crcTbl(7) = &H41C2&
crcTbl(8) = &H01C6&
crcTbl(9) = &HC006&
crcTbl(10) = &H8007&
crcTbl(11) = &H41C7&
crcTbl(12) = &H0005&
crcTbl(13) = &HC1C5&
crcTbl(14) = &H81C4&
crcTbl(15) = &H4004&
crcTbl(16) = &H01CC&
crcTbl(17) = &HC00C&
crcTbl(18) = &H800D&
crcTbl(19) = &H41CD&
crcTbl(20) = &H000F&
crcTbl(21) = &HC1CF&
crcTbl(22) = &H81CE&
crcTbl(23) = &H400E&
crcTbl(24) = &H000A&
crcTbl(25) = &HC1CA&
crcTbl(26) = &H81CB&
crcTbl(27) = &H400B&
crcTbl(28) = &H01C9&
crcTbl(29) = &HC009&
crcTbl(30) = &H8008&
crcTbl(31) = &H41C8&
crcTbl(32) = &H01D8&
crcTbl(33) = &HC018&
crcTbl(34) = &H8019&
crcTbl(35) = &H41D9&
crcTbl(36) = &H001B&
crcTbl(37) = &HC1DB&
crcTbl(38) = &H81DA&
crcTbl(39) = &H401A&
crcTbl(40) = &H001E&
crcTbl(41) = &HC1DE&
crcTbl(42) = &H81DF&
crcTbl(43) = &H401F&
crcTbl(44) = &H01DD&
crcTbl(45) = &HC01D&
crcTbl(46) = &H801C&
crcTbl(47) = &H41DC&
crcTbl(48) = &H0014&
crcTbl(49) = &HC1D4&
crcTbl(50) = &H81D5&
crcTbl(51) = &H4015&
crcTbl(52) = &H01D7&
crcTbl(53) = &HC017&
crcTbl(54) = &H8016&
crcTbl(55) = &H41D6&
crcTbl(56) = &H01D2&
crcTbl(57) = &HC012&
crcTbl(58) = &H8013&
crcTbl(59) = &H41D3&
crcTbl(60) = &H0011&
crcTbl(61) = &HC1D1&
crcTbl(62) = &H81D0&
crcTbl(63) = &H4010&
crcTbl(64) = &H01F0&
crcTbl(65) = &HC030&
crcTbl(66) = &H8031&
crcTbl(67) = &H41F1&
crcTbl(68) = &H0033&
crcTbl(69) = &HC1F3&
crcTbl(70) = &H81F2&
crcTbl(71) = &H4032&
crcTbl(72) = &H0036&
crcTbl(73) = &HC1F6&
crcTbl(74) = &H81F7&
crcTbl(75) = &H4037&
crcTbl(76) = &H01F5&
crcTbl(77) = &HC035&
crcTbl(78) = &H8034&
crcTbl(79) = &H41F4&
crcTbl(80) = &H003C&
crcTbl(81) = &HC1FC&
crcTbl(82) = &H81FD&
crcTbl(83) = &H403D&
crcTbl(84) = &H01FF&
crcTbl(85) = &HC03F&
crcTbl(86) = &H803E&
crcTbl(87) = &H41FE&
crcTbl(88) = &H01FA&
crcTbl(89) = &HC03A&
crcTbl(90) = &H803B&
crcTbl(91) = &H41FB&
crcTbl(92) = &H0039&
crcTbl(93) = &HC1F9&
crcTbl(94) = &H81F8&
crcTbl(95) = &H4038&
crcTbl(96) = &H0028&
crcTbl(97) = &HC1E8&
crcTbl(98) = &H81E9&
crcTbl(99) = &H4029&
crcTbl(100) = &H01EB&
crcTbl(101) = &HC02B&
crcTbl(102) = &H802A&
crcTbl(103) = &H41EA&
crcTbl(104) = &H01EE&
crcTbl(105) = &HC02E&
crcTbl(106) = &H802F&
crcTbl(107) = &H41EF&
crcTbl(108) = &H002D&
crcTbl(109) = &HC1ED&
crcTbl(110) = &H81EC&
crcTbl(111) = &H402C&
crcTbl(112) = &H01E4&
crcTbl(113) = &HC024&
crcTbl(114) = &H8025&
crcTbl(115) = &H41E5&
crcTbl(116) = &H0027&
crcTbl(117) = &HC1E7&
crcTbl(118) = &H81E6&
crcTbl(119) = &H4026&
crcTbl(120) = &H0022&
crcTbl(121) = &HC1E2&
crcTbl(122) = &H81E3&
crcTbl(123) = &H4023&
crcTbl(124) = &H01E1&
crcTbl(125) = &HC021&
crcTbl(126) = &H8020&
crcTbl(127) = &H41E0&
crcTbl(128) = &H01A0&
crcTbl(129) = &HC060&
crcTbl(130) = &H8061&
crcTbl(131) = &H41A1&
crcTbl(132) = &H0063&
crcTbl(133) = &HC1A3&
crcTbl(134) = &H81A2&
crcTbl(135) = &H4062&
crcTbl(136) = &H0066&
crcTbl(137) = &HC1A6&
crcTbl(138) = &H81A7&
crcTbl(139) = &H4067&
crcTbl(140) = &H01A5&
crcTbl(141) = &HC065&
crcTbl(142) = &H8064&
crcTbl(143) = &H41A4&
crcTbl(144) = &H006C&
crcTbl(145) = &HC1AC&
crcTbl(146) = &H81AD&
crcTbl(147) = &H406D&
crcTbl(148) = &H01AF&
crcTbl(149) = &HC06F&
crcTbl(150) = &H806E&
crcTbl(151) = &H41AE&
crcTbl(152) = &H01AA&
crcTbl(153) = &HC06A&
crcTbl(154) = &H806B&
crcTbl(155) = &H41AB&
crcTbl(156) = &H0069&
crcTbl(157) = &HC1A9&
crcTbl(158) = &H81A8&
crcTbl(159) = &H4068&
crcTbl(160) = &H0078&
crcTbl(161) = &HC1B8&
crcTbl(162) = &H81B9&
crcTbl(163) = &H4079&
crcTbl(164) = &H01BB&
crcTbl(165) = &HC07B&
crcTbl(166) = &H807A&
crcTbl(167) = &H41BA&
crcTbl(168) = &H01BE&
crcTbl(169) = &HC07E&
crcTbl(170) = &H807F&
crcTbl(171) = &H41BF&
crcTbl(172) = &H007D&
crcTbl(173) = &HC1BD&
crcTbl(174) = &H81BC&
crcTbl(175) = &H407C&
crcTbl(176) = &H01B4&
crcTbl(177) = &HC074&
crcTbl(178) = &H8075&
crcTbl(179) = &H41B5&
crcTbl(180) = &H0077&
crcTbl(181) = &HC1B7&
crcTbl(182) = &H81B6&
crcTbl(183) = &H4076&
crcTbl(184) = &H0072&
crcTbl(185) = &HC1B2&
crcTbl(186) = &H81B3&
crcTbl(187) = &H4073&
crcTbl(188) = &H01B1&
crcTbl(189) = &HC071&
crcTbl(190) = &H8070&
crcTbl(191) = &H41B0&
crcTbl(192) = &H0050&
crcTbl(193) = &HC190&
crcTbl(194) = &H8191&
crcTbl(195) = &H4051&
crcTbl(196) = &H0193&
crcTbl(197) = &HC053&
crcTbl(198) = &H8052&
crcTbl(199) = &H4192&
crcTbl(200) = &H0196&
crcTbl(201) = &HC056&
crcTbl(202) = &H8057&
crcTbl(203) = &H4197&
crcTbl(204) = &H0055&
crcTbl(205) = &HC195&
crcTbl(206) = &H8194&
crcTbl(207) = &H4054&
crcTbl(208) = &H019C&
crcTbl(209) = &HC05C&
crcTbl(210) = &H805D&
crcTbl(211) = &H419D&
crcTbl(212) = &H005F&
crcTbl(213) = &HC19F&
crcTbl(214) = &H819E&
crcTbl(215) = &H405E&
crcTbl(216) = &H005A&
crcTbl(217) = &HC19A&
crcTbl(218) = &H819B&
crcTbl(219) = &H405B&
crcTbl(220) = &H0199&
crcTbl(221) = &HC059&
crcTbl(222) = &H8058&
crcTbl(223) = &H4198&
crcTbl(224) = &H0188&
crcTbl(225) = &HC048&
crcTbl(226) = &H8049&
crcTbl(227) = &H4189&
crcTbl(228) = &H004B&
crcTbl(229) = &HC18B&
crcTbl(230) = &H818A&
crcTbl(231) = &H404A&
crcTbl(232) = &H004E&
crcTbl(233) = &HC18E&
crcTbl(234) = &H818F&
crcTbl(235) = &H404F&
crcTbl(236) = &H018D&
crcTbl(237) = &HC04D&
crcTbl(238) = &H804C&
crcTbl(239) = &H418C&
crcTbl(240) = &H0044&
crcTbl(241) = &HC184&
crcTbl(242) = &H8185&
crcTbl(243) = &H4045&
crcTbl(244) = &H0187&
crcTbl(245) = &HC047&
crcTbl(246) = &H8046&
crcTbl(247) = &H4186&
crcTbl(248) = &H0182&
crcTbl(249) = &HC042&
crcTbl(250) = &H8043&
crcTbl(251) = &H4183&
crcTbl(252) = &H0041&
crcTbl(253) = &HC181&
crcTbl(254) = &H8180&
crcTbl(255) = &H4040&
done = True
End Sub