371 lines
6.0 KiB
Mathematica
371 lines
6.0 KiB
Mathematica
RORBIN ;HCIOFO/SG - BINARY OPERATIONS ; 1/23/06 1:54pm
|
|
;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006
|
|
;
|
|
Q
|
|
;
|
|
;***** BINARY "AND" OPERATION
|
|
;
|
|
; V1 Operands formatted as strings of "1" and "0"
|
|
; V2
|
|
;
|
|
AND(V1,V2) ;
|
|
N I,L1,L2,N,RES
|
|
S L1=$L(V1),L2=$L(V2),RES=""
|
|
I L1<L2 S N=L1,V2=$E(V2,L2-L1+1,L2)
|
|
E S N=L2,V1=$E(V1,L1-L2+1,L1)
|
|
F I=1:1:N S RES=RES_$S($E(V1,I)&$E(V2,I):"1",1:"0")
|
|
Q RES
|
|
;
|
|
;***** FAST CONVERSIONS FROM HEXADECIMAL TO BINARY
|
|
;
|
|
; VAL Hexadecimal value
|
|
;
|
|
C16TO2(VAL) ;
|
|
N I,J,L,RES
|
|
S L=$L(VAL),RES=""
|
|
F I=1:1:L D
|
|
. S J=$F("0123456789ABCDEF",$E(VAL,I))-1
|
|
. S RES=RES_$P("0000^0001^0010^0011^0100^0101^0110^0111^1000^1001^1010^1011^1100^1101^1110^1111","^",J)
|
|
Q RES
|
|
;
|
|
;***** CALCULATES CRC-32 FOR PROVIDED DATA
|
|
;
|
|
; ROR8NODE Closed root of an array that contains the data
|
|
;
|
|
CRC32(ROR8NODE) ;
|
|
N TMPCRC S TMPCRC=$$C16TO2("FFFFFFFF")
|
|
F S ROR8NODE=$Q(@ROR8NODE) Q:ROR8NODE="" D
|
|
. S TMPCRC=$$UPDCRC32(TMPCRC,@ROR8NODE)
|
|
S TMPCRC=$$BASE^XLFUTL($$NOT(TMPCRC),2,16)
|
|
Q $TR($J(TMPCRC,8)," ","0")
|
|
;
|
|
;***** BINARY "NOT" OPERATION
|
|
;
|
|
; V1 Operand formatted as string of "1" and "0"
|
|
;
|
|
NOT(VAL) ;
|
|
Q $TR(VAL,"01","10")
|
|
;
|
|
;***** BINARY "OR" OPERATION
|
|
;
|
|
; V1 Operands formatted as strings of "1" and "0"
|
|
; V2
|
|
;
|
|
OR(V1,V2) ;
|
|
N I,L1,L2,N,RES,TMP
|
|
S L1=$L(V1),L2=$L(V2)
|
|
I L1<L2 S N=L1,RES=$E(V2,1,L2-L1),V2=$E(V2,L2-L1+1,L2)
|
|
E S N=L2,RES=$E(V1,1,L1-L2),V1=$E(V1,L1-L2+1,L1)
|
|
F I=1:1:N S RES=RES_$S($E(V1,I)!$E(V2,I):"1",1:"0")
|
|
Q RES
|
|
;
|
|
;***** RIGHT SHIFT (SIGNED OF UNSIGNED)
|
|
;
|
|
; V1 Operands formatted as strings of "1" and "0"
|
|
; V2
|
|
;
|
|
; N Number of bits to shift by
|
|
;
|
|
; SIGN If this parameter defined and greater than 0, then
|
|
; "signed" shift is performed (sign bit is propagated).
|
|
; Parameter value defines the maximum number of bits
|
|
; allowed for the values.
|
|
;
|
|
; By default ($G(SIGN)'>0), "unsigned" shift is
|
|
; performed.
|
|
;
|
|
SHR(VAL,N,SIGN) ;
|
|
N FILL,L,RES,SIZE
|
|
S L=$L(VAL)
|
|
Q:$G(SIGN)'>0 $S(N<L:$E(VAL,1,L-N),1:"0")
|
|
S SIZE=+SIGN
|
|
;---
|
|
S:L>SIZE VAL=$E(VAL,L-SIZE+1,L),L=SIZE
|
|
S SIGN=$S(L<SIZE:0,1:$E(VAL,1))
|
|
S:N>SIZE N=SIZE
|
|
S:SIGN $P(FILL,"1",N+1)=""
|
|
Q $E($G(FILL)_$S(N<L:$E(VAL,1,L-N),1:"0"),1,SIZE)
|
|
;
|
|
;***** INTERNAL ENTRY POINT FOR CRC-32 CALCULATION
|
|
UPDCRC32(CRC32,STR) ;
|
|
N FFFFFF,I,I32,L
|
|
S L=$L(STR),FFFFFF=$$C16TO2("FFFFFF")
|
|
F I=1:1:L D
|
|
. S I32=$$XOR(CRC32,$$CNV^XLFUTL($A(STR,I),2))
|
|
. S I32=$$DEC^XLFUTL(I32,2)#256+1
|
|
. S TMP=$$C16TO2($P($T(TBL+I32),";;",2))
|
|
. S CRC32=$$XOR($$AND($$SHR(CRC32,8,32),FFFFFF),TMP)
|
|
Q CRC32
|
|
;
|
|
;***** BINARY "EXCLUSIVE OR" OPERATION
|
|
;
|
|
; V1 Operands formatted as strings of "1" and "0"
|
|
; V2
|
|
;
|
|
XOR(V1,V2) ;
|
|
N I,L1,L2,N,RES,TMP
|
|
S L1=$L(V1),L2=$L(V2)
|
|
I L1<L2 S N=L1,RES=$E(V2,1,L2-L1),V2=$E(V2,L2-L1+1,L2)
|
|
E S N=L2,RES=$E(V1,1,L1-L2),V1=$E(V1,L1-L2+1,L1)
|
|
F I=1:1:N S RES=RES_$S($E(V1,I)+$E(V2,I)=1:"1",1:"0")
|
|
Q RES
|
|
;
|
|
;***** TABLE FOR CRC-32 CALCULATION
|
|
TBL ;
|
|
;;00000000
|
|
;;77073096
|
|
;;EE0E612C
|
|
;;990951BA
|
|
;;076DC419
|
|
;;706AF48F
|
|
;;E963A535
|
|
;;9E6495A3
|
|
;;0EDB8832
|
|
;;79DCB8A4
|
|
;;E0D5E91E
|
|
;;97D2D988
|
|
;;09B64C2B
|
|
;;7EB17CBD
|
|
;;E7B82D07
|
|
;;90BF1D91
|
|
;;1DB71064
|
|
;;6AB020F2
|
|
;;F3B97148
|
|
;;84BE41DE
|
|
;;1ADAD47D
|
|
;;6DDDE4EB
|
|
;;F4D4B551
|
|
;;83D385C7
|
|
;;136C9856
|
|
;;646BA8C0
|
|
;;FD62F97A
|
|
;;8A65C9EC
|
|
;;14015C4F
|
|
;;63066CD9
|
|
;;FA0F3D63
|
|
;;8D080DF5
|
|
;;3B6E20C8
|
|
;;4C69105E
|
|
;;D56041E4
|
|
;;A2677172
|
|
;;3C03E4D1
|
|
;;4B04D447
|
|
;;D20D85FD
|
|
;;A50AB56B
|
|
;;35B5A8FA
|
|
;;42B2986C
|
|
;;DBBBC9D6
|
|
;;ACBCF940
|
|
;;32D86CE3
|
|
;;45DF5C75
|
|
;;DCD60DCF
|
|
;;ABD13D59
|
|
;;26D930AC
|
|
;;51DE003A
|
|
;;C8D75180
|
|
;;BFD06116
|
|
;;21B4F4B5
|
|
;;56B3C423
|
|
;;CFBA9599
|
|
;;B8BDA50F
|
|
;;2802B89E
|
|
;;5F058808
|
|
;;C60CD9B2
|
|
;;B10BE924
|
|
;;2F6F7C87
|
|
;;58684C11
|
|
;;C1611DAB
|
|
;;B6662D3D
|
|
;;76DC4190
|
|
;;01DB7106
|
|
;;98D220BC
|
|
;;EFD5102A
|
|
;;71B18589
|
|
;;06B6B51F
|
|
;;9FBFE4A5
|
|
;;E8B8D433
|
|
;;7807C9A2
|
|
;;0F00F934
|
|
;;9609A88E
|
|
;;E10E9818
|
|
;;7F6A0DBB
|
|
;;086D3D2D
|
|
;;91646C97
|
|
;;E6635C01
|
|
;;6B6B51F4
|
|
;;1C6C6162
|
|
;;856530D8
|
|
;;F262004E
|
|
;;6C0695ED
|
|
;;1B01A57B
|
|
;;8208F4C1
|
|
;;F50FC457
|
|
;;65B0D9C6
|
|
;;12B7E950
|
|
;;8BBEB8EA
|
|
;;FCB9887C
|
|
;;62DD1DDF
|
|
;;15DA2D49
|
|
;;8CD37CF3
|
|
;;FBD44C65
|
|
;;4DB26158
|
|
;;3AB551CE
|
|
;;A3BC0074
|
|
;;D4BB30E2
|
|
;;4ADFA541
|
|
;;3DD895D7
|
|
;;A4D1C46D
|
|
;;D3D6F4FB
|
|
;;4369E96A
|
|
;;346ED9FC
|
|
;;AD678846
|
|
;;DA60B8D0
|
|
;;44042D73
|
|
;;33031DE5
|
|
;;AA0A4C5F
|
|
;;DD0D7CC9
|
|
;;5005713C
|
|
;;270241AA
|
|
;;BE0B1010
|
|
;;C90C2086
|
|
;;5768B525
|
|
;;206F85B3
|
|
;;B966D409
|
|
;;CE61E49F
|
|
;;5EDEF90E
|
|
;;29D9C998
|
|
;;B0D09822
|
|
;;C7D7A8B4
|
|
;;59B33D17
|
|
;;2EB40D81
|
|
;;B7BD5C3B
|
|
;;C0BA6CAD
|
|
;;EDB88320
|
|
;;9ABFB3B6
|
|
;;03B6E20C
|
|
;;74B1D29A
|
|
;;EAD54739
|
|
;;9DD277AF
|
|
;;04DB2615
|
|
;;73DC1683
|
|
;;E3630B12
|
|
;;94643B84
|
|
;;0D6D6A3E
|
|
;;7A6A5AA8
|
|
;;E40ECF0B
|
|
;;9309FF9D
|
|
;;0A00AE27
|
|
;;7D079EB1
|
|
;;F00F9344
|
|
;;8708A3D2
|
|
;;1E01F268
|
|
;;6906C2FE
|
|
;;F762575D
|
|
;;806567CB
|
|
;;196C3671
|
|
;;6E6B06E7
|
|
;;FED41B76
|
|
;;89D32BE0
|
|
;;10DA7A5A
|
|
;;67DD4ACC
|
|
;;F9B9DF6F
|
|
;;8EBEEFF9
|
|
;;17B7BE43
|
|
;;60B08ED5
|
|
;;D6D6A3E8
|
|
;;A1D1937E
|
|
;;38D8C2C4
|
|
;;4FDFF252
|
|
;;D1BB67F1
|
|
;;A6BC5767
|
|
;;3FB506DD
|
|
;;48B2364B
|
|
;;D80D2BDA
|
|
;;AF0A1B4C
|
|
;;36034AF6
|
|
;;41047A60
|
|
;;DF60EFC3
|
|
;;A867DF55
|
|
;;316E8EEF
|
|
;;4669BE79
|
|
;;CB61B38C
|
|
;;BC66831A
|
|
;;256FD2A0
|
|
;;5268E236
|
|
;;CC0C7795
|
|
;;BB0B4703
|
|
;;220216B9
|
|
;;5505262F
|
|
;;C5BA3BBE
|
|
;;B2BD0B28
|
|
;;2BB45A92
|
|
;;5CB36A04
|
|
;;C2D7FFA7
|
|
;;B5D0CF31
|
|
;;2CD99E8B
|
|
;;5BDEAE1D
|
|
;;9B64C2B0
|
|
;;EC63F226
|
|
;;756AA39C
|
|
;;026D930A
|
|
;;9C0906A9
|
|
;;EB0E363F
|
|
;;72076785
|
|
;;05005713
|
|
;;95BF4A82
|
|
;;E2B87A14
|
|
;;7BB12BAE
|
|
;;0CB61B38
|
|
;;92D28E9B
|
|
;;E5D5BE0D
|
|
;;7CDCEFB7
|
|
;;0BDBDF21
|
|
;;86D3D2D4
|
|
;;F1D4E242
|
|
;;68DDB3F8
|
|
;;1FDA836E
|
|
;;81BE16CD
|
|
;;F6B9265B
|
|
;;6FB077E1
|
|
;;18B74777
|
|
;;88085AE6
|
|
;;FF0F6A70
|
|
;;66063BCA
|
|
;;11010B5C
|
|
;;8F659EFF
|
|
;;F862AE69
|
|
;;616BFFD3
|
|
;;166CCF45
|
|
;;A00AE278
|
|
;;D70DD2EE
|
|
;;4E048354
|
|
;;3903B3C2
|
|
;;A7672661
|
|
;;D06016F7
|
|
;;4969474D
|
|
;;3E6E77DB
|
|
;;AED16A4A
|
|
;;D9D65ADC
|
|
;;40DF0B66
|
|
;;37D83BF0
|
|
;;A9BCAE53
|
|
;;DEBB9EC5
|
|
;;47B2CF7F
|
|
;;30B5FFE9
|
|
;;BDBDF21C
|
|
;;CABAC28A
|
|
;;53B39330
|
|
;;24B4A3A6
|
|
;;BAD03605
|
|
;;CDD70693
|
|
;;54DE5729
|
|
;;23D967BF
|
|
;;B3667A2E
|
|
;;C4614AB8
|
|
;;5D681B02
|
|
;;2A6F2B94
|
|
;;B40BBE37
|
|
;;C30C8EA1
|
|
;;5A05DF1B
|
|
;;2D02EF8D
|