home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / progmisc / hellsrc.zip / DECODE0.ASM next >
Assembly Source File  |  1993-10-15  |  3KB  |  132 lines

  1.         .386p
  2.         jumps
  3. code32  segment para public use32
  4.         assume cs:code32, ds:code32
  5.  
  6. public  _decode0ibufptr, _decode0ibuflen
  7.  
  8. public  _decode0
  9.  
  10. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  11. ; DATA
  12. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  13. _decode0ibufptr dd      ?               ; must be in low mem, (can share with
  14. _decode0ibuflen dd      1000h           ;                      _filebufloc)
  15.  
  16. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  17. ; CODE
  18. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  19.  
  20. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  21. ; Decode from a compressed input stream
  22. ; In:
  23. ;   EAX -> stream input routine (In:ECX=len,EDX->buf, Out:EAX=len,CF=1 error)
  24. ;   EDI -> decode buffer
  25. ; Out:
  26. ;   CF=1 - error in stream
  27. ;   CF=0 - no error
  28. ;     EAX - decompressed size
  29. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  30. _decode0:
  31.         pushad
  32.         mov esi,_decode0ibufptr
  33.         lea edx,[esi-128]
  34.         mov eax,_decode0ibuflen
  35.         add esi,eax
  36.         add edx,eax
  37.         xor ecx,ecx
  38.         mov bx,(18*256)+3
  39.         call decoder0
  40.         jc short decoded
  41. decodeml:
  42.         cmp esi,edx
  43.         jae short decodef4
  44. decodef0:
  45.         mov bp,[esi]
  46.         add esi,2
  47.         stc
  48.         rcr bp,1
  49.         jc short decodef3
  50. decodef1:
  51.         movsb
  52.         shr bp,1
  53.         jc short decodef2
  54.         movsb
  55.         shr bp,1
  56.         jc short decodef2
  57.         movsb
  58.         shr bp,1
  59.         jc short decodef2
  60.         movsb
  61.         shr bp,1
  62.         jnc decodef1
  63. decodef2:
  64.         jz decodeml
  65. decodef3:
  66.         movzx eax,word ptr [esi]
  67.         add esi,2
  68.         mov cl,al
  69.         shr eax,4
  70.         neg eax
  71.         add eax,edi
  72.         and cl,01111b
  73.         add cl,bl
  74.         cmp cl,bh
  75.         je short decodef5
  76.         xchg esi,eax
  77.         rep movsb
  78.         mov esi,eax
  79.         shr bp,1
  80.         jc decodef2
  81.         jmp decodef1
  82. decodef4:
  83.         call decoder0
  84.         jnc decodef0
  85. decoded:
  86.         popad
  87.         ret
  88. decodef5:
  89.         add cl,[esi]
  90.         jc short decodef7
  91. decodef6:
  92.         inc esi
  93.         xchg esi,eax
  94.         rep movsb
  95.         mov esi,eax
  96.         shr bp,1
  97.         jc decodef2
  98.         jmp decodef1
  99. decodef7:
  100.         rcl ch,1
  101.         cmp cl,011h
  102.         jne decodef6
  103.         sub edi,[esp]
  104.         mov [esp+28],edi
  105.         clc
  106.         popad
  107.         ret
  108. ;-----------------------------------------------------------------------------
  109. decoder0:
  110.         push ecx edx edi
  111.         mov ecx,_decode0ibufptr
  112.         mov edi,ecx
  113.         add ecx,_decode0ibuflen
  114.         push ecx
  115.         sub ecx,esi
  116.         shr ecx,1
  117.         rep movsw
  118.         adc cl,0
  119.         rep movsb
  120.         pop ecx
  121.         sub ecx,edi
  122.         mov edx,edi
  123.         call [esp+44]
  124.         mov esi,_decode0ibufptr
  125.         pop edi edx ecx
  126.         ret
  127.  
  128.  
  129. code32  ends
  130.         end
  131.  
  132.