; ; Program: DATEDEMO ; Author: Carson Wilson ; Date: September 19, 1987 ; Version: 1.0 ; Assembly: Z80ASM, PDLN, SYSLIB.REL, DATEHL.REL ; ; Purpose: Example program using Z80DOS and DATEHL module. ; ; Comments: Produces a non-alphabetized listing of matching filenames ; and their Z80DOS time stamps on console. ; ; Usage: ; DATEDEMO / display help (both versions) ; ; DATEDEMO [d:][afn] non-ZCPR version ; DATEDEMO [du: or dir:][afn] ZCPR version no equ 0 yes equ not no Z80ASM equ no ; Assemble with Z80ASM tab equ 09h cr equ 0dh lf equ 0ah fcb1 equ 05ch dskbuf equ 80h bdos equ 5 sfirst equ 17 snext equ 18 zuser equ 069h ; ZCPR location getstp equ 54 ; Z80DOS call vers equ 10 .request syslib,datehl ; Linker request for PDLN.COM external datehl ; DATEHL module external pa2hc,print,crlf,cout ; SYSLIB routines external pfn1,sua,cin,condin ; SYSLIB routines if Z80ASM ; Z80ASM pseudo-op .accept 'Assemble for ZCPR ("yes" or "no"): ',ZCPR else ZCPR equ no ; Assemble for ZCPR endif ; ; Begin ; if ZCPR ld a,(zuser) ; Log to ZCPR user # call sua endif ; ; Test for help command ; ld a,(dskbuf) ; # chars on command line cp 1 ; One character? jr nz,nohelp ; No ld a,(fcb1+1) ; Yes cp '/' ; Help command? jr nz,nohelp ; No call print ; Display help and exit db 'DATEDEMO Version ' db vers / 10 + '0','.', vers mod 10 + '0' db ' for Z80DOS',cr,lf db ' Syntax:',cr,lf if ZCPR db tab,'DATEDEMO [du: or dir:][afn]',cr,lf,0 else db tab,'DATEDEMO [d:][afn]',cr,lf,0 endif ; ZCPR ret ; Return to user ; ; Begin output ; nohelp: ld a,(fcb1+1) cp ' ' ; Filespec given? jr nz,test ld hl,fcb1+1 ; No, match all files ld a,'?' ld b,11 fill: ; Fill with '?' ld (hl),a inc hl djnz fill ; ; Search for match ; test: ld de,fcb1 ld c,sfirst call bdos cp 0ffh ; No matches jp nz,found call print db 'DATEDEMO: no matching files.',cr,lf,0 ret ; ; Matches found - print header: ; found: call print db tab,tab,'----Access---- ----Update---- -Create-' db cr,lf,0 call process ; Display name and stamp of first match ; ; Search for next match ; next: call condin ; Test pause call nz,cin ; Get input to restart ld de,fcb1 ld c,snext call bdos cp 0ffh ; No more matches ret z call process ; Display name and stamp of next match jr next ; ; Process - Get date/time stamp, display filename and stamp ; process: push af ; save dir. return code from search ; ; Store time stamp ; ld c,getstp ; Z80DOS call call bdos ; HL --> stamp ld b,10 ; copy 10 byte stamp ld de,cdate ldir ; to cdate, udate, utime, adate, atime ; ; Print file name and stamp ; pop af ; Get return code add a,a add a,a add a,a add a,a add a,a add 81h ; Point to matching filename in DMA ld e,a ld d,0 call pfn1 ; SYSLIB print file name pointed to by DE call ptab call printstp ; Display stamp call crlf ret ; ; PrintStp - Display file's time stamp from buffers ; PrintStp: ld hl,(adate) ; Print last access date call datedisp call space ld hl,(atime) ; ..and time call timedisp call space call space call space ld hl,(udate) ; Print update date call datedisp call space ld hl,(utime) ; ..and time call timedisp call space call space call space ld hl,(cdate) ; Print create date call datedisp ret ; ; DateDisp - Display mm-dd-yy on console ; ; Inputs: HL = Days since Dec. 31, 1977 in hex. ; DateDisp: call datehl ; --> H = BCD year, L = BCD month, ; ..A = BCD day ld b,a ; Save day ld a,l ; Get month call pa2hc ; Print 2 digit month call dash ld a,b ; Get day call pa2hc ; Print 2 digit day call dash ld a,h ; Get year call pa2hc ; Print 2 digit year ret ; Done with date ; ; TimeDisp - Display hh:mm on console ; ; Inputs: H = minutes in BCD, L = hours in BCD ; TimeDisp: ld a,l call pa2hc ; Print 2 digit hour ld a,':' ; Print ':' call cout ld a,h call pa2hc ; Print 2 digit minute ret ; Done with time ; ptab: ; Print a tab on console ld a,tab call cout ret ; space: ; Print a space on console ld a,' ' call cout ret ; dash: ; Print a dash on console ld a,'-' call cout ret ; ----------------------- ; Data Area ; ----------------------- dseg ; Or else we collide with code segment cdate: ds 2 ; Create date udate: ds 2 ; Update date utime: ds 2 ; Update time adate: ds 2 ; Last access date atime: ds 2 ; Last access time ; end ; END of DATEDEMO.Z80