| [613] | 1 | RORBIN ;HCIOFO/SG - BINARY OPERATIONS  ; 1/23/06 1:54pm
 | 
|---|
 | 2 |  ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 |  Q
 | 
|---|
 | 5 |  ;
 | 
|---|
 | 6 |  ;***** BINARY "AND" OPERATION
 | 
|---|
 | 7 |  ;
 | 
|---|
 | 8 |  ; V1            Operands formatted as strings of "1" and "0"
 | 
|---|
 | 9 |  ; V2
 | 
|---|
 | 10 |  ;
 | 
|---|
 | 11 | AND(V1,V2) ;
 | 
|---|
 | 12 |  N I,L1,L2,N,RES
 | 
|---|
 | 13 |  S L1=$L(V1),L2=$L(V2),RES=""
 | 
|---|
 | 14 |  I L1<L2  S N=L1,V2=$E(V2,L2-L1+1,L2)
 | 
|---|
 | 15 |  E        S N=L2,V1=$E(V1,L1-L2+1,L1)
 | 
|---|
 | 16 |  F I=1:1:N  S RES=RES_$S($E(V1,I)&$E(V2,I):"1",1:"0")
 | 
|---|
 | 17 |  Q RES
 | 
|---|
 | 18 |  ;
 | 
|---|
 | 19 |  ;***** FAST CONVERSIONS FROM HEXADECIMAL TO BINARY
 | 
|---|
 | 20 |  ;
 | 
|---|
 | 21 |  ; VAL           Hexadecimal value
 | 
|---|
 | 22 |  ;
 | 
|---|
 | 23 | C16TO2(VAL) ;
 | 
|---|
 | 24 |  N I,J,L,RES
 | 
|---|
 | 25 |  S L=$L(VAL),RES=""
 | 
|---|
 | 26 |  F I=1:1:L  D
 | 
|---|
 | 27 |  . S J=$F("0123456789ABCDEF",$E(VAL,I))-1
 | 
|---|
 | 28 |  . S RES=RES_$P("0000^0001^0010^0011^0100^0101^0110^0111^1000^1001^1010^1011^1100^1101^1110^1111","^",J)
 | 
|---|
 | 29 |  Q RES
 | 
|---|
 | 30 |  ;
 | 
|---|
 | 31 |  ;***** CALCULATES CRC-32 FOR PROVIDED DATA
 | 
|---|
 | 32 |  ;
 | 
|---|
 | 33 |  ; ROR8NODE      Closed root of an array that contains the data
 | 
|---|
 | 34 |  ;
 | 
|---|
 | 35 | CRC32(ROR8NODE) ;
 | 
|---|
 | 36 |  N TMPCRC  S TMPCRC=$$C16TO2("FFFFFFFF")
 | 
|---|
 | 37 |  F  S ROR8NODE=$Q(@ROR8NODE)  Q:ROR8NODE=""  D
 | 
|---|
 | 38 |  . S TMPCRC=$$UPDCRC32(TMPCRC,@ROR8NODE)
 | 
|---|
 | 39 |  S TMPCRC=$$BASE^XLFUTL($$NOT(TMPCRC),2,16)
 | 
|---|
 | 40 |  Q $TR($J(TMPCRC,8)," ","0")
 | 
|---|
 | 41 |  ;
 | 
|---|
 | 42 |  ;***** BINARY "NOT" OPERATION
 | 
|---|
 | 43 |  ;
 | 
|---|
 | 44 |  ; V1            Operand formatted as string of "1" and "0"
 | 
|---|
 | 45 |  ;
 | 
|---|
 | 46 | NOT(VAL) ;
 | 
|---|
 | 47 |  Q $TR(VAL,"01","10")
 | 
|---|
 | 48 |  ;
 | 
|---|
 | 49 |  ;***** BINARY "OR" OPERATION
 | 
|---|
 | 50 |  ;
 | 
|---|
 | 51 |  ; V1            Operands formatted as strings of "1" and "0"
 | 
|---|
 | 52 |  ; V2
 | 
|---|
 | 53 |  ;
 | 
|---|
 | 54 | OR(V1,V2) ;
 | 
|---|
 | 55 |  N I,L1,L2,N,RES,TMP
 | 
|---|
 | 56 |  S L1=$L(V1),L2=$L(V2)
 | 
|---|
 | 57 |  I L1<L2  S N=L1,RES=$E(V2,1,L2-L1),V2=$E(V2,L2-L1+1,L2)
 | 
|---|
 | 58 |  E        S N=L2,RES=$E(V1,1,L1-L2),V1=$E(V1,L1-L2+1,L1)
 | 
|---|
 | 59 |  F I=1:1:N  S RES=RES_$S($E(V1,I)!$E(V2,I):"1",1:"0")
 | 
|---|
 | 60 |  Q RES
 | 
|---|
 | 61 |  ;
 | 
|---|
 | 62 |  ;***** RIGHT SHIFT (SIGNED OF UNSIGNED)
 | 
|---|
 | 63 |  ;
 | 
|---|
 | 64 |  ; V1            Operands formatted as strings of "1" and "0"
 | 
|---|
 | 65 |  ; V2
 | 
|---|
 | 66 |  ;
 | 
|---|
 | 67 |  ; N             Number of bits to shift by
 | 
|---|
 | 68 |  ;
 | 
|---|
 | 69 |  ; SIGN          If this parameter defined and greater than 0, then
 | 
|---|
 | 70 |  ;               "signed" shift is performed (sign bit is propagated).
 | 
|---|
 | 71 |  ;               Parameter value defines the maximum number of bits
 | 
|---|
 | 72 |  ;               allowed for the values.
 | 
|---|
 | 73 |  ;
 | 
|---|
 | 74 |  ;               By default ($G(SIGN)'>0), "unsigned" shift is
 | 
|---|
 | 75 |  ;               performed.
 | 
|---|
 | 76 |  ;
 | 
|---|
 | 77 | SHR(VAL,N,SIGN) ;
 | 
|---|
 | 78 |  N FILL,L,RES,SIZE
 | 
|---|
 | 79 |  S L=$L(VAL)
 | 
|---|
 | 80 |  Q:$G(SIGN)'>0 $S(N<L:$E(VAL,1,L-N),1:"0")
 | 
|---|
 | 81 |  S SIZE=+SIGN
 | 
|---|
 | 82 |  ;---
 | 
|---|
 | 83 |  S:L>SIZE VAL=$E(VAL,L-SIZE+1,L),L=SIZE
 | 
|---|
 | 84 |  S SIGN=$S(L<SIZE:0,1:$E(VAL,1))
 | 
|---|
 | 85 |  S:N>SIZE N=SIZE
 | 
|---|
 | 86 |  S:SIGN $P(FILL,"1",N+1)=""
 | 
|---|
 | 87 |  Q $E($G(FILL)_$S(N<L:$E(VAL,1,L-N),1:"0"),1,SIZE)
 | 
|---|
 | 88 |  ;
 | 
|---|
 | 89 |  ;***** INTERNAL ENTRY POINT FOR CRC-32 CALCULATION
 | 
|---|
 | 90 | UPDCRC32(CRC32,STR) ;
 | 
|---|
 | 91 |  N FFFFFF,I,I32,L
 | 
|---|
 | 92 |  S L=$L(STR),FFFFFF=$$C16TO2("FFFFFF")
 | 
|---|
 | 93 |  F I=1:1:L  D
 | 
|---|
 | 94 |  . S I32=$$XOR(CRC32,$$CNV^XLFUTL($A(STR,I),2))
 | 
|---|
 | 95 |  . S I32=$$DEC^XLFUTL(I32,2)#256+1
 | 
|---|
 | 96 |  . S TMP=$$C16TO2($P($T(TBL+I32),";;",2))
 | 
|---|
 | 97 |  . S CRC32=$$XOR($$AND($$SHR(CRC32,8,32),FFFFFF),TMP)
 | 
|---|
 | 98 |  Q CRC32
 | 
|---|
 | 99 |  ;
 | 
|---|
 | 100 |  ;***** BINARY "EXCLUSIVE OR" OPERATION
 | 
|---|
 | 101 |  ;
 | 
|---|
 | 102 |  ; V1            Operands formatted as strings of "1" and "0"
 | 
|---|
 | 103 |  ; V2
 | 
|---|
 | 104 |  ;
 | 
|---|
 | 105 | XOR(V1,V2) ;
 | 
|---|
 | 106 |  N I,L1,L2,N,RES,TMP
 | 
|---|
 | 107 |  S L1=$L(V1),L2=$L(V2)
 | 
|---|
 | 108 |  I L1<L2  S N=L1,RES=$E(V2,1,L2-L1),V2=$E(V2,L2-L1+1,L2)
 | 
|---|
 | 109 |  E        S N=L2,RES=$E(V1,1,L1-L2),V1=$E(V1,L1-L2+1,L1)
 | 
|---|
 | 110 |  F I=1:1:N  S RES=RES_$S($E(V1,I)+$E(V2,I)=1:"1",1:"0")
 | 
|---|
 | 111 |  Q RES
 | 
|---|
 | 112 |  ;
 | 
|---|
 | 113 |  ;***** TABLE FOR CRC-32 CALCULATION
 | 
|---|
 | 114 | TBL ;
 | 
|---|
 | 115 |  ;;00000000
 | 
|---|
 | 116 |  ;;77073096
 | 
|---|
 | 117 |  ;;EE0E612C
 | 
|---|
 | 118 |  ;;990951BA
 | 
|---|
 | 119 |  ;;076DC419
 | 
|---|
 | 120 |  ;;706AF48F
 | 
|---|
 | 121 |  ;;E963A535
 | 
|---|
 | 122 |  ;;9E6495A3
 | 
|---|
 | 123 |  ;;0EDB8832
 | 
|---|
 | 124 |  ;;79DCB8A4
 | 
|---|
 | 125 |  ;;E0D5E91E
 | 
|---|
 | 126 |  ;;97D2D988
 | 
|---|
 | 127 |  ;;09B64C2B
 | 
|---|
 | 128 |  ;;7EB17CBD
 | 
|---|
 | 129 |  ;;E7B82D07
 | 
|---|
 | 130 |  ;;90BF1D91
 | 
|---|
 | 131 |  ;;1DB71064
 | 
|---|
 | 132 |  ;;6AB020F2
 | 
|---|
 | 133 |  ;;F3B97148
 | 
|---|
 | 134 |  ;;84BE41DE
 | 
|---|
 | 135 |  ;;1ADAD47D
 | 
|---|
 | 136 |  ;;6DDDE4EB
 | 
|---|
 | 137 |  ;;F4D4B551
 | 
|---|
 | 138 |  ;;83D385C7
 | 
|---|
 | 139 |  ;;136C9856
 | 
|---|
 | 140 |  ;;646BA8C0
 | 
|---|
 | 141 |  ;;FD62F97A
 | 
|---|
 | 142 |  ;;8A65C9EC
 | 
|---|
 | 143 |  ;;14015C4F
 | 
|---|
 | 144 |  ;;63066CD9
 | 
|---|
 | 145 |  ;;FA0F3D63
 | 
|---|
 | 146 |  ;;8D080DF5
 | 
|---|
 | 147 |  ;;3B6E20C8
 | 
|---|
 | 148 |  ;;4C69105E
 | 
|---|
 | 149 |  ;;D56041E4
 | 
|---|
 | 150 |  ;;A2677172
 | 
|---|
 | 151 |  ;;3C03E4D1
 | 
|---|
 | 152 |  ;;4B04D447
 | 
|---|
 | 153 |  ;;D20D85FD
 | 
|---|
 | 154 |  ;;A50AB56B
 | 
|---|
 | 155 |  ;;35B5A8FA
 | 
|---|
 | 156 |  ;;42B2986C
 | 
|---|
 | 157 |  ;;DBBBC9D6
 | 
|---|
 | 158 |  ;;ACBCF940
 | 
|---|
 | 159 |  ;;32D86CE3
 | 
|---|
 | 160 |  ;;45DF5C75
 | 
|---|
 | 161 |  ;;DCD60DCF
 | 
|---|
 | 162 |  ;;ABD13D59
 | 
|---|
 | 163 |  ;;26D930AC
 | 
|---|
 | 164 |  ;;51DE003A
 | 
|---|
 | 165 |  ;;C8D75180
 | 
|---|
 | 166 |  ;;BFD06116
 | 
|---|
 | 167 |  ;;21B4F4B5
 | 
|---|
 | 168 |  ;;56B3C423
 | 
|---|
 | 169 |  ;;CFBA9599
 | 
|---|
 | 170 |  ;;B8BDA50F
 | 
|---|
 | 171 |  ;;2802B89E
 | 
|---|
 | 172 |  ;;5F058808
 | 
|---|
 | 173 |  ;;C60CD9B2
 | 
|---|
 | 174 |  ;;B10BE924
 | 
|---|
 | 175 |  ;;2F6F7C87
 | 
|---|
 | 176 |  ;;58684C11
 | 
|---|
 | 177 |  ;;C1611DAB
 | 
|---|
 | 178 |  ;;B6662D3D
 | 
|---|
 | 179 |  ;;76DC4190
 | 
|---|
 | 180 |  ;;01DB7106
 | 
|---|
 | 181 |  ;;98D220BC
 | 
|---|
 | 182 |  ;;EFD5102A
 | 
|---|
 | 183 |  ;;71B18589
 | 
|---|
 | 184 |  ;;06B6B51F
 | 
|---|
 | 185 |  ;;9FBFE4A5
 | 
|---|
 | 186 |  ;;E8B8D433
 | 
|---|
 | 187 |  ;;7807C9A2
 | 
|---|
 | 188 |  ;;0F00F934
 | 
|---|
 | 189 |  ;;9609A88E
 | 
|---|
 | 190 |  ;;E10E9818
 | 
|---|
 | 191 |  ;;7F6A0DBB
 | 
|---|
 | 192 |  ;;086D3D2D
 | 
|---|
 | 193 |  ;;91646C97
 | 
|---|
 | 194 |  ;;E6635C01
 | 
|---|
 | 195 |  ;;6B6B51F4
 | 
|---|
 | 196 |  ;;1C6C6162
 | 
|---|
 | 197 |  ;;856530D8
 | 
|---|
 | 198 |  ;;F262004E
 | 
|---|
 | 199 |  ;;6C0695ED
 | 
|---|
 | 200 |  ;;1B01A57B
 | 
|---|
 | 201 |  ;;8208F4C1
 | 
|---|
 | 202 |  ;;F50FC457
 | 
|---|
 | 203 |  ;;65B0D9C6
 | 
|---|
 | 204 |  ;;12B7E950
 | 
|---|
 | 205 |  ;;8BBEB8EA
 | 
|---|
 | 206 |  ;;FCB9887C
 | 
|---|
 | 207 |  ;;62DD1DDF
 | 
|---|
 | 208 |  ;;15DA2D49
 | 
|---|
 | 209 |  ;;8CD37CF3
 | 
|---|
 | 210 |  ;;FBD44C65
 | 
|---|
 | 211 |  ;;4DB26158
 | 
|---|
 | 212 |  ;;3AB551CE
 | 
|---|
 | 213 |  ;;A3BC0074
 | 
|---|
 | 214 |  ;;D4BB30E2
 | 
|---|
 | 215 |  ;;4ADFA541
 | 
|---|
 | 216 |  ;;3DD895D7
 | 
|---|
 | 217 |  ;;A4D1C46D
 | 
|---|
 | 218 |  ;;D3D6F4FB
 | 
|---|
 | 219 |  ;;4369E96A
 | 
|---|
 | 220 |  ;;346ED9FC
 | 
|---|
 | 221 |  ;;AD678846
 | 
|---|
 | 222 |  ;;DA60B8D0
 | 
|---|
 | 223 |  ;;44042D73
 | 
|---|
 | 224 |  ;;33031DE5
 | 
|---|
 | 225 |  ;;AA0A4C5F
 | 
|---|
 | 226 |  ;;DD0D7CC9
 | 
|---|
 | 227 |  ;;5005713C
 | 
|---|
 | 228 |  ;;270241AA
 | 
|---|
 | 229 |  ;;BE0B1010
 | 
|---|
 | 230 |  ;;C90C2086
 | 
|---|
 | 231 |  ;;5768B525
 | 
|---|
 | 232 |  ;;206F85B3
 | 
|---|
 | 233 |  ;;B966D409
 | 
|---|
 | 234 |  ;;CE61E49F
 | 
|---|
 | 235 |  ;;5EDEF90E
 | 
|---|
 | 236 |  ;;29D9C998
 | 
|---|
 | 237 |  ;;B0D09822
 | 
|---|
 | 238 |  ;;C7D7A8B4
 | 
|---|
 | 239 |  ;;59B33D17
 | 
|---|
 | 240 |  ;;2EB40D81
 | 
|---|
 | 241 |  ;;B7BD5C3B
 | 
|---|
 | 242 |  ;;C0BA6CAD
 | 
|---|
 | 243 |  ;;EDB88320
 | 
|---|
 | 244 |  ;;9ABFB3B6
 | 
|---|
 | 245 |  ;;03B6E20C
 | 
|---|
 | 246 |  ;;74B1D29A
 | 
|---|
 | 247 |  ;;EAD54739
 | 
|---|
 | 248 |  ;;9DD277AF
 | 
|---|
 | 249 |  ;;04DB2615
 | 
|---|
 | 250 |  ;;73DC1683
 | 
|---|
 | 251 |  ;;E3630B12
 | 
|---|
 | 252 |  ;;94643B84
 | 
|---|
 | 253 |  ;;0D6D6A3E
 | 
|---|
 | 254 |  ;;7A6A5AA8
 | 
|---|
 | 255 |  ;;E40ECF0B
 | 
|---|
 | 256 |  ;;9309FF9D
 | 
|---|
 | 257 |  ;;0A00AE27
 | 
|---|
 | 258 |  ;;7D079EB1
 | 
|---|
 | 259 |  ;;F00F9344
 | 
|---|
 | 260 |  ;;8708A3D2
 | 
|---|
 | 261 |  ;;1E01F268
 | 
|---|
 | 262 |  ;;6906C2FE
 | 
|---|
 | 263 |  ;;F762575D
 | 
|---|
 | 264 |  ;;806567CB
 | 
|---|
 | 265 |  ;;196C3671
 | 
|---|
 | 266 |  ;;6E6B06E7
 | 
|---|
 | 267 |  ;;FED41B76
 | 
|---|
 | 268 |  ;;89D32BE0
 | 
|---|
 | 269 |  ;;10DA7A5A
 | 
|---|
 | 270 |  ;;67DD4ACC
 | 
|---|
 | 271 |  ;;F9B9DF6F
 | 
|---|
 | 272 |  ;;8EBEEFF9
 | 
|---|
 | 273 |  ;;17B7BE43
 | 
|---|
 | 274 |  ;;60B08ED5
 | 
|---|
 | 275 |  ;;D6D6A3E8
 | 
|---|
 | 276 |  ;;A1D1937E
 | 
|---|
 | 277 |  ;;38D8C2C4
 | 
|---|
 | 278 |  ;;4FDFF252
 | 
|---|
 | 279 |  ;;D1BB67F1
 | 
|---|
 | 280 |  ;;A6BC5767
 | 
|---|
 | 281 |  ;;3FB506DD
 | 
|---|
 | 282 |  ;;48B2364B
 | 
|---|
 | 283 |  ;;D80D2BDA
 | 
|---|
 | 284 |  ;;AF0A1B4C
 | 
|---|
 | 285 |  ;;36034AF6
 | 
|---|
 | 286 |  ;;41047A60
 | 
|---|
 | 287 |  ;;DF60EFC3
 | 
|---|
 | 288 |  ;;A867DF55
 | 
|---|
 | 289 |  ;;316E8EEF
 | 
|---|
 | 290 |  ;;4669BE79
 | 
|---|
 | 291 |  ;;CB61B38C
 | 
|---|
 | 292 |  ;;BC66831A
 | 
|---|
 | 293 |  ;;256FD2A0
 | 
|---|
 | 294 |  ;;5268E236
 | 
|---|
 | 295 |  ;;CC0C7795
 | 
|---|
 | 296 |  ;;BB0B4703
 | 
|---|
 | 297 |  ;;220216B9
 | 
|---|
 | 298 |  ;;5505262F
 | 
|---|
 | 299 |  ;;C5BA3BBE
 | 
|---|
 | 300 |  ;;B2BD0B28
 | 
|---|
 | 301 |  ;;2BB45A92
 | 
|---|
 | 302 |  ;;5CB36A04
 | 
|---|
 | 303 |  ;;C2D7FFA7
 | 
|---|
 | 304 |  ;;B5D0CF31
 | 
|---|
 | 305 |  ;;2CD99E8B
 | 
|---|
 | 306 |  ;;5BDEAE1D
 | 
|---|
 | 307 |  ;;9B64C2B0
 | 
|---|
 | 308 |  ;;EC63F226
 | 
|---|
 | 309 |  ;;756AA39C
 | 
|---|
 | 310 |  ;;026D930A
 | 
|---|
 | 311 |  ;;9C0906A9
 | 
|---|
 | 312 |  ;;EB0E363F
 | 
|---|
 | 313 |  ;;72076785
 | 
|---|
 | 314 |  ;;05005713
 | 
|---|
 | 315 |  ;;95BF4A82
 | 
|---|
 | 316 |  ;;E2B87A14
 | 
|---|
 | 317 |  ;;7BB12BAE
 | 
|---|
 | 318 |  ;;0CB61B38
 | 
|---|
 | 319 |  ;;92D28E9B
 | 
|---|
 | 320 |  ;;E5D5BE0D
 | 
|---|
 | 321 |  ;;7CDCEFB7
 | 
|---|
 | 322 |  ;;0BDBDF21
 | 
|---|
 | 323 |  ;;86D3D2D4
 | 
|---|
 | 324 |  ;;F1D4E242
 | 
|---|
 | 325 |  ;;68DDB3F8
 | 
|---|
 | 326 |  ;;1FDA836E
 | 
|---|
 | 327 |  ;;81BE16CD
 | 
|---|
 | 328 |  ;;F6B9265B
 | 
|---|
 | 329 |  ;;6FB077E1
 | 
|---|
 | 330 |  ;;18B74777
 | 
|---|
 | 331 |  ;;88085AE6
 | 
|---|
 | 332 |  ;;FF0F6A70
 | 
|---|
 | 333 |  ;;66063BCA
 | 
|---|
 | 334 |  ;;11010B5C
 | 
|---|
 | 335 |  ;;8F659EFF
 | 
|---|
 | 336 |  ;;F862AE69
 | 
|---|
 | 337 |  ;;616BFFD3
 | 
|---|
 | 338 |  ;;166CCF45
 | 
|---|
 | 339 |  ;;A00AE278
 | 
|---|
 | 340 |  ;;D70DD2EE
 | 
|---|
 | 341 |  ;;4E048354
 | 
|---|
 | 342 |  ;;3903B3C2
 | 
|---|
 | 343 |  ;;A7672661
 | 
|---|
 | 344 |  ;;D06016F7
 | 
|---|
 | 345 |  ;;4969474D
 | 
|---|
 | 346 |  ;;3E6E77DB
 | 
|---|
 | 347 |  ;;AED16A4A
 | 
|---|
 | 348 |  ;;D9D65ADC
 | 
|---|
 | 349 |  ;;40DF0B66
 | 
|---|
 | 350 |  ;;37D83BF0
 | 
|---|
 | 351 |  ;;A9BCAE53
 | 
|---|
 | 352 |  ;;DEBB9EC5
 | 
|---|
 | 353 |  ;;47B2CF7F
 | 
|---|
 | 354 |  ;;30B5FFE9
 | 
|---|
 | 355 |  ;;BDBDF21C
 | 
|---|
 | 356 |  ;;CABAC28A
 | 
|---|
 | 357 |  ;;53B39330
 | 
|---|
 | 358 |  ;;24B4A3A6
 | 
|---|
 | 359 |  ;;BAD03605
 | 
|---|
 | 360 |  ;;CDD70693
 | 
|---|
 | 361 |  ;;54DE5729
 | 
|---|
 | 362 |  ;;23D967BF
 | 
|---|
 | 363 |  ;;B3667A2E
 | 
|---|
 | 364 |  ;;C4614AB8
 | 
|---|
 | 365 |  ;;5D681B02
 | 
|---|
 | 366 |  ;;2A6F2B94
 | 
|---|
 | 367 |  ;;B40BBE37
 | 
|---|
 | 368 |  ;;C30C8EA1
 | 
|---|
 | 369 |  ;;5A05DF1B
 | 
|---|
 | 370 |  ;;2D02EF8D
 | 
|---|