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
/
CPM
/
BDOS
/
Z80DOS10.LBR
/
SAVESTMP.ZZ0
/
SAVESTMP.Z8°
Wrap
Text File
|
2000-06-30
|
5KB
|
216 lines
; Program: SAVESTAMP for Z80DOS systems.
; Author: Carson Wilson
; Assembly: Z80ASM, PDLN, SYSLIB
; Date: September 26, 1987
; Version: 1.0
;
; Purpose: Copies create date from one file to another under Z80DOS.
;
; Usage: By using SAVESTAMP, the creation date of modified files
; can be preserved after using an editor or other program which
; renames the original file to filename.BAK.
;
; Syntax:
;
; SAVESTMP or SAVESTMP / - Display help.
; SAVESTMP [du: or dir:]dest.fil [du: or dir:]source.fil - ZCPR usage
; SAVESTMP [d:]dest.fil [d:]source.fil - CP/M usage
;
bdos equ 5
bell equ 7
tab equ 9
cr equ 0dh
lf equ 0ah
fcb1 equ 5ch
fcb2 equ 6ch
defDMA equ 80h
dmastp equ 0e0h ; Stamp indicator in DMA after search
bwrite equ 14 ; BIOS write block call with SYSLIB
seldsk equ 14 ; BDOS select disk
sfirst equ 17
user equ 32 ; BDOS set/get user
GetStp equ 54 ; Z80DOS function call
user1 equ 69h ; ZCPR user # for fcb1
user2 equ 79h
vers equ 10
.request SYSLIB
external moveb,bios,print,pfn2
begin:
jp start
db 'Z3ENV'
db 3
envaddr:
dw 00000h ; Environment address
dw begin
start:
call print
db cr,lf,'SAVESTAMP: ',0 ; sign-on
ld a,(defdma)
or a
jr z,help ; No input?
ld a,(fcb1+1) ; Get 1st char. after possible spaces
cp '/' ; Help?
jp nz,copystmp ; No
ld a,(fcb1+2)
cp ' ' ; Next char. non-blank?
jp nz,copystmp ; Yes
;
; Display help
;
help:
call print
db 'Version ',vers/10+'0','.',vers mod 10+'0','.'
db tab,'Copies Z80DOS file create date.',cr,lf
db ' Syntax:',cr,lf
db tab,'SAVESTMP [du: or dir:]dest.fil [du: or dir:]source.fil'
db tab,'- ZCPR usage',cr,lf
db tab,'SAVESTMP [d:]dest.fil [d:]source.fil'
db tab,tab,tab,'- CP/M usage',cr,lf,0
ret
;
; Copy create date, if any
;
copystmp:
ld hl,(envaddr) ; Get environment address
ld a,h ; Test if running under Z3
or l
ld (z3flg),a ; Zero if not ZCPR environment
; ..non-zero if ZCPR
jr z,getsrc ; Don't set user
;
; Search for source file
;
ld a,(user2) ; Get ZCPR source user
ld e,a
ld c,user
call bdos ; Select source user
getsrc:
ld de,fcb2
push de ; Save for error message
ld c,sfirst ; Search for first
call bdos
pop de ; Retrieve file name
inc a
jp z,missing ; A = 0ffh --> 0 = error
;
ld c,getstp ; Z80DOS call
call bdos ; HL --> file's stamp if any
ld de,stamp ; Point to buffer for source stamp
ld b,2
call moveb ; SYSLIB copy 2 byte stamp to buffer
;
; Search for dest. file
;
ld a,(z3flg) ; ZCPR?
or a
jr z,getdest ; No, don't select user
ld a,(user1) ; Get ZCPR dest. user
ld e,a
ld c,user
call bdos ; Select dest. user
getdest:
ld de,fcb1
push de ; For error message
ld c,sfirst ; Load BIOS dirbuf with dir. sector
call bdos
pop de
inc a
jp z,missing ; 0ffh --> 0 = dest. file not found
;
dec a ; Save directory return code
push af
;
; Got both files, now test destination for stamps
;
ld a,(dmastp) ; Test time stamps on dest.
cp '!'
jr z,stamps ; Stamps found
pop af
jp nostamps ; Not found, abort
;
; Stamps exist on destination, so copy stamp
;
stamps:
call print
db 'Altering creation date of ',0
ld de,fcb1+1
call pfn2
call print
db ' . . . ',0
;
; First select disk, if necessary
;
ld a,(fcb1) ; Dest. file's disk
or a ; Default disk?
jr z,copy ; Yes, so don't select disk
dec a ; 0 = A for SelDsk
ld e,a ; Non-default disk
ld c,seldsk ; Select disk so that BIOS sector
call bdos ; ..write goes to right disk!
copy:
pop af ; Retrieve dir. search code
ld e,a ; (A = 0, 1, or 2)
sla a ; Multiply by 10
sla a
add a,e
sla a
add a,2 ; A = offset to create date (2,12,22)
ld e,a ; Save in E
xor a
ld d,a ; Zero D
ld hl,dmastp ; Dir. stamp location in DMA buffer
add hl,de
ex de,hl ; DE --> Dest file's create stamp
ld hl,stamp ; Point to buffer holding source stamp
ld b,2
call moveb ; SYSLIB copy 2 bytes from buffer to DMA
ld c,1 ; Force directory sector write of DMA
ld a,bwrite ; BIOS write sector
call bios
or a ; BIOS return code: A = 0 --> okay
jp nz,badwrite
call print ; Write ok
db 'Done.',cr,lf,0
ret ; Done
;
; Error Routines
;
nostamps:
call print
db bell,'No time stamps present on destination disk!'
db cr,lf,0
ret
;
missing:
inc de
call pfn2 ; SYSLIB print file name
call print
db ' not found.',cr,lf,bell,0
ret
;
badwrite:
call print
db bell,'Write error!',cr,lf,0
ret
;
; Data area
;
dseg
z3flg:
ds 1 ; ZCPR environment
stamp:
ds 2 ; Save date stamp
end
; END SAVESTMP.Z80