home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / A / ARC20.ARC / ARCMACS.ARC / LZWHASH.MAC < prev    next >
Text File  |  1989-10-23  |  1KB  |  86 lines

  1. ; LZW-HASH f}r Turbo-ARC, TR 231089
  2.     .z80
  3.  
  4.     extrn    i,neu,last,disp,tab,fnd
  5.  
  6. hash:    ld    hl,(neu)
  7.     ld    h,0
  8.     add    hl,hl
  9.     add    hl,hl
  10.     add    hl,hl
  11.     add    hl,hl
  12.     ld    de,(last)
  13.     ld    a,h
  14.     xor    d
  15.     ld    h,a
  16.     ld    a,l
  17.     xor    e
  18.     ld    l,a
  19.     ld    (i),hl        ; i:=(neu shl 4) xor last; 
  20.     or    h
  21.     ld    hl,1
  22.     jr    z,dsp1        ; if i=0 then disp:=1
  23.     ld    hl,5003
  24.     ld    de,(i)
  25.     sbc    hl,de        ; else disp:=hsize-i;
  26. dsp1:    ld    (disp),hl
  27. loop:    ld    hl,(i)
  28.     add    hl,hl
  29.     add    hl,hl        ; 4 * i
  30.     ld    de,(tab)
  31.     add    hl,de        ; Zeiger auf tab^(i) in HL
  32.     push    hl        ; Zeiger auf tab^(i) retten
  33.     ld    a,(neu)
  34.     cp    (hl)        ; neucod=neu ?
  35.     jr    nz,notfnd
  36.     ld    bc,(last)
  37.     inc    hl
  38.     ld    a,c
  39.     cp    (hl)        ; lastcod=last ?
  40.     jr    nz,notfnd
  41.     inc    hl
  42.     ld    a,(hl)
  43.     and    0Fh
  44.     cp    b        ; lastcod=last ?
  45.     jr    nz,notfnd
  46.     ld    a,(hl)
  47.     inc    hl
  48.     ld    h,(hl)        ; lzwcod in HA
  49.     srl    h
  50.     rra
  51.     srl    h
  52.     rra
  53.     srl    h
  54.     rra
  55.     srl    h
  56.     rra
  57.     ld    l,a        ; lzwcod in HL
  58.     ld    (last),hl    ; als LAST speichern
  59.     pop    hl
  60.     ld    a,1
  61.     ld    (fnd),a        ; fnd:=true
  62.     jr    exit        ; ende!
  63. notfnd:    xor    a
  64.     ld    (fnd),a        ; fnd:=false
  65.     pop    hl        ; Zeiger auf tab^(i)
  66.     ld    a,(hl)
  67.     inc    hl
  68.     and    (hl)
  69.     inc    hl
  70.     and    (hl)
  71.     inc    hl
  72.     and    (hl)        ; Eintrag FFFFFFFF (frei) ?
  73.     inc    a
  74.     jr    z,exit        ; frei: ende
  75.     ld    hl,(i)
  76.     ld    de,(disp)
  77.     or    a
  78.     sbc    hl,de        ; i:=i-disp;
  79.     jr    nc,ok
  80.     ld    de,5003
  81.     add    hl,de        ; if i<0 then i:=i+hsize;
  82. ok:    ld    (i),hl
  83.     jr    loop
  84. exit    equ    $
  85.     end
  86.