| 730 | |
| 731 | |
| 732 | uint RarVM::ReadData(BitInput &Inp) |
| 733 | { |
| 734 | uint Data=Inp.fgetbits(); |
| 735 | switch(Data&0xc000) |
| 736 | { |
| 737 | case 0: |
| 738 | Inp.faddbits(6); |
| 739 | return((Data>>10)&0xf); |
| 740 | case 0x4000: |
| 741 | if ((Data&0x3c00)==0) |
| 742 | { |
| 743 | Data=0xffffff00|((Data>>2)&0xff); |
| 744 | Inp.faddbits(14); |
| 745 | } |
| 746 | else |
| 747 | { |
| 748 | Data=(Data>>6)&0xff; |
| 749 | Inp.faddbits(10); |
| 750 | } |
| 751 | return(Data); |
| 752 | case 0x8000: |
| 753 | Inp.faddbits(2); |
| 754 | Data=Inp.fgetbits(); |
| 755 | Inp.faddbits(16); |
| 756 | return(Data); |
| 757 | default: |
| 758 | Inp.faddbits(2); |
| 759 | Data=(Inp.fgetbits()<<16); |
| 760 | Inp.faddbits(16); |
| 761 | Data|=Inp.fgetbits(); |
| 762 | Inp.faddbits(16); |
| 763 | return(Data); |
| 764 | } |
| 765 | } |
| 766 | |
| 767 | |
| 768 | void RarVM::SetMemory(uint Pos,byte *Data,uint DataSize) |