Mercurial > hg > Members > kono > os9 > sbc09
comparison src/os9/crc.c @ 57:2088fd998865
sbc09 directry clean up
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 23 Jul 2018 16:07:12 +0900 |
parents | os9/crc.c@9a224bd9b45f |
children |
comparison
equal
deleted
inserted
replaced
56:4fa2bdb0c457 | 57:2088fd998865 |
---|---|
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 } |