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