0
|
1 #include <stdio.h>
|
|
2
|
|
3 #include "os9.h"
|
|
4
|
|
5 int os9_crc(OS9_MODULE_t *mod)
|
|
6 {
|
|
7 int i;
|
|
8 u_char crc[3] = {0xff, 0xff, 0xff};
|
|
9 u_char *ptr = (u_char *) mod;
|
|
10 u_char a;
|
|
11
|
|
12 for (i = 0; i < INT(mod->size); i++)
|
|
13 {
|
|
14 a = *(ptr++);
|
|
15
|
|
16 a ^= crc[0];
|
|
17 crc[0] = crc[1];
|
|
18 crc[1] = crc[2];
|
|
19 crc[1] ^= (a >> 7);
|
|
20 crc[2] = (a << 1);
|
|
21 crc[1] ^= (a >> 2);
|
|
22 crc[2] ^= (a << 6);
|
|
23 a ^= (a << 1);
|
|
24 a ^= (a << 2);
|
|
25 a ^= (a << 4);
|
|
26 if (a & 0x80) {
|
|
27 crc[0] ^= 0x80;
|
|
28 crc[2] ^= 0x21;
|
|
29 }
|
|
30 }
|
|
31 if ((crc[0] == OS9_CRC0) &&
|
|
32 (crc[1] == OS9_CRC1) &&
|
|
33 (crc[2] == OS9_CRC2))
|
|
34 return 1;
|
|
35
|
|
36 return 0;
|
|
37 }
|
|
38
|
|
39 int os9_header(OS9_MODULE_t *mod)
|
|
40 {
|
|
41 u_char tmp = 0x00;
|
|
42 u_char *ptr = (u_char *) mod;
|
|
43 int i;
|
|
44
|
|
45 for (i = 0; i < OS9_HEADER_SIZE; i++)
|
|
46 tmp ^= *(ptr++);
|
|
47
|
|
48 return tmp;
|
|
49 }
|