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