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
/
NCRPACK.MAC
< prev
next >
Wrap
Text File
|
1989-10-30
|
2KB
|
103 lines
; NCR-PACKING (GETC_NCR) f}r Turbo-ARC. TR 301089
.z80
extrn ncrlen,ncrstate,ncrend,getc_dir,f,ncrlast,rep,cc
extrn valcount,inc_long
ld de,(f) ; Zeiger auf File
ld ix,108h
add ix,de ; Zeiger auf f.feof
ld a,(ncrstate) ; CASE NCRSTATE OF ...
dec a
jr z,state1
dec a
jr z,state2
dec a
jr z,state3
ld a,1 ; NCRSTATE = 0 :
ld (ncrstate),a ; NCRSTATE:=1;
push ix
push de
call getc_dir ; NCRLAST:=GETC_DIR(F)
pop ix
ld a,l
ld (ncrlast),a
cp 90h ; IF NCRLAST=$90 THEN
jr z,end_f ; NCREND:=FALSE;
jr end_t
state2: ld a,1 ; NCRSTATE=2:
ld (ncrstate),a ; NCRSTATE:=1;
ld hl,(cc)
ld h,0 ; GETC_NCR:=CC;
ld a,l
ld (ncrlast),a ; NCRLAST:=CC;
end_t: ld a,(ix)
ld (ncrend),a
jr ende ; ncrend:=f.feof
state3: ld a,2 ; NCRSTATE=3:
ld (ncrstate),a ; NCRSTATE:=2;
ld hl,(rep)
ld h,0 ; GETC_NCR:=REP;
end_f: xor a
ld (ncrend),a ; ncrend:=false
ende: push hl
add hl,hl
add hl,hl ; *4
ld de,valcount
add hl,de
push hl
call inc_long ; INCLONG(VALCOUNT(.CODE.));
pop hl
ret
state1: ld a,(ncrlast) ; NCRSTATE=1 :
cp 90h ; IF NCRLAST=$90 THEN BEGIN
jr nz,stat1_1
xor a
ld (ncrstate),a ; NCRSTATE:=0;
ld hl,0 ; GETC_NCR:=0;
jr end_t ; END
stat1_1:ld b,0 ; ELSE BEGIN REP:=0;
stat1lp:inc b ; REPEAT REP:=SUCC(REP)
push ix
push bc
ld hl,(f)
push hl
call getc_dir ; CC:=GETC_DIR(F)
pop bc
pop ix
ld a,(ncrlast)
cp l
jr nz,stat1_2 ; UNTIL CC<>NCRLAST
ld a,b
inc a
jr z,stat1_2 ; OR REP=255
bit 0,(ix)
jr z,stat1lp ; OR F.FEOF
stat1_2:ld a,l
ld (cc),a
ld a,b
ld (rep),a
dec a ; CASE REP OF ...
jr z,rep1
dec a
jr z,rep2
ld a,3 ; REP>=3:
ld (ncrstate),a ; NCRSTATE:=3;
ld hl,90h ; GETC_NCR:=$90;
jr end_f ; NCREND:=FALSE; END;
rep1: ld a,l ; REP=1:
ld (ncrlast),a ; NCRLAST:=CC;
jr end_t ; GETC_NCR:=CC; END;
rep2: ld a,2 ; REP=2:
ld (ncrstate),a ; NCRSTATE:=2;
ld hl,(ncrlast)
ld h,0 ; GETC_NCR:=NCRLAST;
jr end_f ; NCREND:=FALSE; END;
end