; 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