Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: XLFCRC

XLFCRC.m

Go to the documentation of this file.
  1. XLFCRC ;ISF/RWF - Library Functions to do CRC ;08/04/2000 09:42 [ 04/02/2003 8:29 AM ]
  1. ;;8.0;KERNEL;**1007**;APR 1, 2003
  1. ;;8.0;KERNEL;**166**;Jul 10, 1995
  1. ; The code below was approved in document X11/1998-32
  1. ;From the book "M[UMPS] by example" by Ed de Mole.
  1. ;
  1. CRC32(string,seed) ;
  1. ; Polynomial X**32 + X**26 + X**23 + X**22 +
  1. ; + X**16 + X**12 + X**11 + X**10 +
  1. ; + X**8 + X**7 + X**5 + X**4 +
  1. ; + X**2 + X + 1
  1. N I,J,R
  1. I '$D(seed) S R=4294967295
  1. E I seed'<0,seed'>4294967295 S R=4294967295-seed
  1. E S $ECODE=",M28,"
  1. F I=1:1:$L(string) D
  1. . S R=$$XOR($A(string,I),R,8)
  1. . F J=0:1:7 D
  1. . . I R#2 S R=$$XOR(R\2,3988292384,32)
  1. . . E S R=R\2
  1. . . Q
  1. . Q
  1. Q 4294967295-R
  1. ;
  1. XOR(a,b,w) N I,M,R
  1. S R=b,M=1
  1. F I=1:1:w D
  1. . S:a\M#2 R=R+$S(R\M#2:-M,1:M)
  1. . S M=M+M
  1. . Q
  1. Q R
  1. ; ===
  1. ;
  1. ; The code below was approved in document X11/1998-32
  1. ;
  1. CRC16(string,seed) ;
  1. ; Polynomial x**16 + x**15 + x**2 + x**0
  1. N I,J,R
  1. I '$D(seed) S R=0
  1. E I seed'<0,seed'>65535 S R=seed\1
  1. E S $ECODE=",M28,"
  1. F I=1:1:$L(string) D
  1. . S R=$$XOR($A(string,I),R,8)
  1. . F J=0:1:7 D
  1. . . I R#2 S R=$$XOR(R\2,40961,16)
  1. . . E S R=R\2
  1. . . Q
  1. . Q
  1. Q R
  1. ;
  1. ZXOR(a,b,w) NEW I,M,R
  1. SET R=b,M=1
  1. FOR I=1:1:w DO
  1. . SET:a\M#2 R=R+$SELECT(R\M#2:-M,1:M)
  1. . SET M=M+M
  1. . QUIT
  1. QUIT R
  1. ;