1 | XLFCRC ;ISF/RWF - Library Functions to do CRC ;08/04/2000 09:42
|
---|
2 | ;;8.0;KERNEL;**166**;Jul 10, 1995
|
---|
3 | ; The code below was approved in document X11/1998-32
|
---|
4 | ;From the book "M[UMPS] by example" by Ed de Mole.
|
---|
5 | ;
|
---|
6 | CRC32(string,seed) ;
|
---|
7 | ; Polynomial X**32 + X**26 + X**23 + X**22 +
|
---|
8 | ; + X**16 + X**12 + X**11 + X**10 +
|
---|
9 | ; + X**8 + X**7 + X**5 + X**4 +
|
---|
10 | ; + X**2 + X + 1
|
---|
11 | N I,J,R
|
---|
12 | I '$D(seed) S R=4294967295
|
---|
13 | E I seed'<0,seed'>4294967295 S R=4294967295-seed
|
---|
14 | E S $ECODE=",M28,"
|
---|
15 | F I=1:1:$L(string) D
|
---|
16 | . S R=$$XOR($A(string,I),R,8)
|
---|
17 | . F J=0:1:7 D
|
---|
18 | . . I R#2 S R=$$XOR(R\2,3988292384,32)
|
---|
19 | . . E S R=R\2
|
---|
20 | . . Q
|
---|
21 | . Q
|
---|
22 | Q 4294967295-R
|
---|
23 | ;
|
---|
24 | XOR(a,b,w) N I,M,R
|
---|
25 | S R=b,M=1
|
---|
26 | F I=1:1:w D
|
---|
27 | . S:a\M#2 R=R+$S(R\M#2:-M,1:M)
|
---|
28 | . S M=M+M
|
---|
29 | . Q
|
---|
30 | Q R
|
---|
31 | ; ===
|
---|
32 | ;
|
---|
33 | ; The code below was approved in document X11/1998-32
|
---|
34 | ;
|
---|
35 | CRC16(string,seed) ;
|
---|
36 | ; Polynomial x**16 + x**15 + x**2 + x**0
|
---|
37 | N I,J,R
|
---|
38 | I '$D(seed) S R=0
|
---|
39 | E I seed'<0,seed'>65535 S R=seed\1
|
---|
40 | E S $ECODE=",M28,"
|
---|
41 | F I=1:1:$L(string) D
|
---|
42 | . S R=$$XOR($A(string,I),R,8)
|
---|
43 | . F J=0:1:7 D
|
---|
44 | . . I R#2 S R=$$XOR(R\2,40961,16)
|
---|
45 | . . E S R=R\2
|
---|
46 | . . Q
|
---|
47 | . Q
|
---|
48 | Q R
|
---|
49 | ;
|
---|
50 | ZXOR(a,b,w) NEW I,M,R
|
---|
51 | SET R=b,M=1
|
---|
52 | FOR I=1:1:w DO
|
---|
53 | . SET:a\M#2 R=R+$SELECT(R\M#2:-M,1:M)
|
---|
54 | . SET M=M+M
|
---|
55 | . QUIT
|
---|
56 | QUIT R
|
---|
57 | ;
|
---|
58 |
|
---|