| 70 | |
| 71 | |
| 72 | uint RarVM::ReadData(BitInput &Inp) |
| 73 | { |
| 74 | uint Data=Inp.fgetbits(); |
| 75 | switch(Data&0xc000) |
| 76 | { |
| 77 | case 0: |
| 78 | Inp.faddbits(6); |
| 79 | return (Data>>10)&0xf; |
| 80 | case 0x4000: |
| 81 | if ((Data&0x3c00)==0) |
| 82 | { |
| 83 | Data=0xffffff00|((Data>>2)&0xff); |
| 84 | Inp.faddbits(14); |
| 85 | } |
| 86 | else |
| 87 | { |
| 88 | Data=(Data>>6)&0xff; |
| 89 | Inp.faddbits(10); |
| 90 | } |
| 91 | return Data; |
| 92 | case 0x8000: |
| 93 | Inp.faddbits(2); |
| 94 | Data=Inp.fgetbits(); |
| 95 | Inp.faddbits(16); |
| 96 | return Data; |
| 97 | default: |
| 98 | Inp.faddbits(2); |
| 99 | Data=(Inp.fgetbits()<<16); |
| 100 | Inp.faddbits(16); |
| 101 | Data|=Inp.fgetbits(); |
| 102 | Inp.faddbits(16); |
| 103 | return Data; |
| 104 | } |
| 105 | } |
| 106 | |
| 107 | |
| 108 | void RarVM::SetMemory(size_t Pos,byte *Data,size_t DataSize) |