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 >
Wrap
Text File
|
1989-10-23
|
1KB
|
86 lines
; LZW-HASH f}r Turbo-ARC, TR 231089
.z80
extrn i,neu,last,disp,tab,fnd
hash: ld hl,(neu)
ld h,0
add hl,hl
add hl,hl
add hl,hl
add hl,hl
ld de,(last)
ld a,h
xor d
ld h,a
ld a,l
xor e
ld l,a
ld (i),hl ; i:=(neu shl 4) xor last;
or h
ld hl,1
jr z,dsp1 ; if i=0 then disp:=1
ld hl,5003
ld de,(i)
sbc hl,de ; else disp:=hsize-i;
dsp1: ld (disp),hl
loop: ld hl,(i)
add hl,hl
add hl,hl ; 4 * i
ld de,(tab)
add hl,de ; Zeiger auf tab^(i) in HL
push hl ; Zeiger auf tab^(i) retten
ld a,(neu)
cp (hl) ; neucod=neu ?
jr nz,notfnd
ld bc,(last)
inc hl
ld a,c
cp (hl) ; lastcod=last ?
jr nz,notfnd
inc hl
ld a,(hl)
and 0Fh
cp b ; lastcod=last ?
jr nz,notfnd
ld a,(hl)
inc hl
ld h,(hl) ; lzwcod in HA
srl h
rra
srl h
rra
srl h
rra
srl h
rra
ld l,a ; lzwcod in HL
ld (last),hl ; als LAST speichern
pop hl
ld a,1
ld (fnd),a ; fnd:=true
jr exit ; ende!
notfnd: xor a
ld (fnd),a ; fnd:=false
pop hl ; Zeiger auf tab^(i)
ld a,(hl)
inc hl
and (hl)
inc hl
and (hl)
inc hl
and (hl) ; Eintrag FFFFFFFF (frei) ?
inc a
jr z,exit ; frei: ende
ld hl,(i)
ld de,(disp)
or a
sbc hl,de ; i:=i-disp;
jr nc,ok
ld de,5003
add hl,de ; if i<0 then i:=i+hsize;
ok: ld (i),hl
jr loop
exit equ $
end