home *** CD-ROM | disk | FTP | other *** search
- ; breako
- ;
- cr equ 0dh
- lf equ 0ah
- ;
- .z80
- .request syslib
- ;
- start: ld sp,stack
- ld a,(5dh)
- cp ' '
- jr nz,..hf
- call print##
- cr,lf,7,'No file specified',cr,lf,0
- rst 0
- ;
- ..hf: ld hl,65h
- ld a,'O'
- cp (hl)
- jr nz,..no
- inc hl
- ld a,' '
- cp (hl)
- jr nz,..no
- inc hl
- cp (hl)
- jr z,..ho
- ..no: call print##
- cr,lf,7,'Not .O file',cr,lf,0
- rst 0
- ;
- ..ho: ld de,5ch
- call fi0$open##
- jr z,..oo
- call print##
- cr,lf,7,'Not found',cr,lf,0
- rst 0
- ;
- ..oo: call f0$get##
- jp nz,..eof
- cp 0ffh
- jp z,..eof
- cp 0fbh ; header?
- jr z,..hh
- jr ..oo
- ;
- ..hh: call header
- ..loop: call f0$get##
- jp nz,..eof
- cp 0feh
- jr z,eom
- .neo: call f1$put##
- jr ..loop
- ;
- eom: call f1$put##
- ld b,4
- .eoml: call f0$get##
- or a
- jr nz,.neo
- call f1$put##
- djnz .eoml
- ld a,0ffh
- call f1$put##
- call fo1$close##
- jp ..oo
- ;
- header: ld hl,outfcb+1
- push hl
- ld b,8
- ..fbl: ld (hl),' '
- inc hl
- djnz ..fbl
- pop hl
- call print##
- cr,lf,'Extracting ',0
- ld b,8
- ..ghl: call f0$get##
- and 5fh
- or a
- jr z,..eoh
- call cout##
- ld (hl),a
- inc hl
- djnz ..ghl
- ;
- ..eoh: ld de,outfcb
- call initfcb##
- call f$delete##
- call f$make##
- call fo1$open##
- ld a,0fbh
- call f1$put##
- ld hl,outfcb+1
- ld b,8
- ..ph: ld a,(hl)
- cp ' '
- jr z,..phx
- call f1$put##
- inc hl
- djnz ..ph
- ..phx: xor a
- call f1$put##
- ret
- ;
- ..eof: call print##
- cr,lf,'Done',cr,lf,0
- rst 0
- ;
- dseg
- ;
- outfcb: db 0,' ','O '
- ds 24
-
- ds 100
- stack equ $
- end
-