home *** CD-ROM | disk | FTP | other *** search
- ;RS-16
- ;
- cr equ 0dh
- lf equ 0ah
- ;
- dfcb equ 5ch
- dbuf equ 80h
- ;
- extrn f$open,f$close,f$read,f$write
- extrn scanner,codend,cout
- extrn bbline,print,phl4hc,eval16,phlfdc
- extrn initfcb,pfn2,crlf
- extrn wildex
- ;
- .z80
- ;
- start: ld sp,stack
- call print
- cr,lf
- ' --------------------------------------------------',cr,lf
- '| RS-16 reserializer for 16-bit TurboDOS |',cr,lf
- '| WARNING: (c) infringement is YOUR responsibility |',cr,lf
- ' --------------------------------------------------',cr,lf,lf,0
- ld a,(dfcb+1)
- cp ' '
- jr nz,..ct1
- call print
- 'No file specified',cr,lf,0
- rst 0
- ;
- ..ct1: ld a,(dfcb+9)
- cp 'O'
- jr nz,..noo
- ld hl,(dfcb+10)
- ld de,' '
- xor a
- sbc hl,de
- jr nz,..noo
- call codend
- ld de,dfcb
- call wildex
- jr nz,..ct2
- call print
- 'File(s) not found',cr,lf,0
- rst 0
- ;
- ..noo: call print
- 'File(s) must be type .O',cr,lf,0
- rst 0
- ;
- ..ct2: call phlfdc
- call print
- ' files matched.',cr,lf,lf
- 'Enter: New Origin (hex) : ',0
- push hl
- ld a,1
- call bbline
- call eval16
- ld (neworg),de
- call print
- cr,lf
- ' New Unit (hex) : ',0
- ld a,1
- call bbline
- call eval16
- ld (newuni),de
- pop hl
- inc hl
- ld (count),hl ;save # of files
- ex de,hl
- ld hl,0
- ld bc,16 ;find file buffer start
- ..mlp: add hl,bc
- dec de
- ld a,d
- or e
- jr nz,..mlp
- ex de,hl
- call codend
- ld (fcbs),hl
- add hl,de
- inc h
- ld l,0
- ld (buffer),hl
- ;
- ; come here for each file
- ;
- loop: ld hl,(count)
- dec hl
- ld (count),hl
- ld a,h
- or l
- jp z,done
- ld hl,(fcbs)
- ld bc,16
- ld de,dfcb
- ldir
- ld (fcbs),hl
- ld de,dfcb
- call initfcb
- call print
- cr,lf,lf
- 'Now processing ',0
- inc de
- call pfn2
- call crlf
- ld de,dfcb
- call f$open
- ld hl,(buffer)
- ld (bufptr),hl
- xor a
- ld (chgd),a
- rdlp: call f$read
- jr nz,allrd
- ld hl,(bufptr)
- ld bc,dbuf
- ..mvl: ld a,(bc)
- ld (hl),a
- inc hl
- inc c
- jr nz,..mvl
- ld (bufptr),hl
- jr rdlp
- ;
- allrd: call f$close
- ld hl,(bufptr)
- ld (bufend),hl
- ld hl,(buffer)
- ld (bufptr),hl
- ..fol: call findo
- jr nz,lku ;exhausted, look for unit
- push hl ;save pointer
- call getbd ;get seg=BC, val=DE
- ld a,b
- or c
- jr nz,..no1
- push hl ;(HL=.val)
- call print
- cr,lf
- '"Origin" value ',0
- push bc
- pop hl
- call phl4hc
- ld a,':'
- call cout
- ex de,hl
- call phl4hc
- ld de,(neworg)
- pop hl
- ld (hl),e
- inc hl
- ld (hl),d
- ..no1: pop hl
- jr ..fol
- ;
- lku: ld hl,(buffer)
- ..ful: call findu
- jr nz,endsb ;end of substitutions
- push hl ;save pointer
- call getbd ;get seg=BC, val=DE
- ld a,b
- or c
- jr nz,..nu1
- push hl ;(HL=.val)
- call print
- cr,lf
- '"Unit" value ',0
- push bc
- pop hl
- call phl4hc
- ld a,':'
- call cout
- ex de,hl
- call phl4hc
- ld de,(newuni)
- xor a
- sbc hl,de
- jr z,ch
- ld a,1
- ld (chgd),a
- ch: pop hl
- ld (hl),e
- inc hl
- ld (hl),d
- ..nu1: pop hl
- jr ..ful
- ;
- endsb: ld a,(chgd)
- or a
- jp z,loop
- ;
- ; write back to disk
- ;
- ld de,dfcb
- call initfcb
- call f$open ;open for write
- ld hl,(buffer)
- ld (bufptr),hl
- wrlp: ld hl,(bufptr)
- ld bc,(bufend)
- ld a,b
- cp h
- jr nz,..ne
- ld a,c
- cp l
- jr z,wrend
- ..ne: ld bc,80h
- ..ss: ld a,(hl)
- ld (bc),a
- inc hl
- inc c
- jr nz,..ss
- ld (bufptr),hl
- call f$write
- jr wrlp
- ;
- wrend: call f$close
- JP LOOP
- ;
- getbd: dec hl
- ld a,(hl)
- cp ' '+1
- jr nc,getbd
- ld b,(hl)
- dec hl
- ld c,(hl)
- dec hl
- ld d,(hl)
- dec hl
- ld e,(hl)
- ret
- ;
- findu: ld de,unit
- jr ..fnd
- ;
- findo: ld de,orgin
- ..fnd: push de
- ..flop: ld a,(de)
- or a
- jr z,..fxt
- cp (hl)
- inc hl
- call ..ckb
- jr nz,..nfd
- inc de
- jr ..flop
- ;
- ..nfd: pop de
- jr ..fnd
- ;
- ..fxt: pop de
- xor a
- ret
- ;
- ..ckb: ld bc,(bufend)
- push af
- ld a,b
- cp h
- jr nz,..nbd
- ld a,c
- cp l
- jr nz,..nbd
- pop af
- pop de ;dummy
- pop de
- xor a
- inc a
- ret
- ;
- ..nbd: pop af
- ret
- ;
- done: call print
- cr,lf,lf
- '*** END OF EXECUTION ***',cr,lf,lf,0
- rst 0
- ;
- neworg: dw 24
- newuni: dw 227
- orgin: db 'Origin',0
- unit: db 'Unit',0
- chgd: db 0 ;0=no change, NZ=must write
- fcbs: dw 0 ;pointer to next file name
- buffer: dw 0 ;buffer start
- bufptr: dw 0
- bufend: dw 0
- count: dw 0 ;file count
- ds 80
- stack equ $
- end
- (hl)
- ld (bc),a
- inc hl
- inc c
- jr nz,..ss