| 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
 | 
|---|