[613] | 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 |
|
---|