home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CBM Funet Archive
/
cbm-funet-archive-2003.iso
/
cpm
/
archivers
/
ark11.com
/
ARKDATE.MAC
< prev
Wrap
Text File
|
1979-11-30
|
4KB
|
189 lines
;
; arkdate - SUPPORT FOR tIME AND dATE STAMPING
;
; 4/18/89 -- wRITTEN FOR z80dos FILE-MODIFY STAMPS
;
;
; tHE USER SHOULD USE THE AREA STARTING AT z80dATE
.Z80
ASEG; KEEP m80 HAPPY....
ORG103H
YR:db88; [103H]
MO:db4; [104H]
DAY:db14; [105H]
HOUR:DB0; [106H]
MIN:DB0; [107H]
tdATE_:JPsIGNON; tODAY'S-dATE (CALLED AT INIT-TIME) [108H]
fdATE_:JPz80dATE; fILE-dATE (CALLED IMMEDIATELY AFTER f_open) [10bH]
cdATE_: DS3; CONVERT AND SAVE DATE (DON'T OVERWRITE THIS) [10eH]
pUTS_:DS3; HANDY OUTPUT ROUTINE
sIGNON:LDHL,vERSION
CALLpUTS_
RET
vERSION:
DB'z80dos vERSION',10,0
; gET z80-dos DATE, CONVERT TO yymmddhhmm AND SAVE AT 0103H -- do not
; alter bc, ix, OR iy
z80dATE:PUSHIX
PUSHIY
PUSHBC
LDC,54; z80dOS gET-sTAMP
CALL5
LDDE,MO
INCHL; SKIP OVER CREATION DATE
INCHL; AND WE POINT TO lAST mODIFY
LDBC,4; ONLY CARE ABOUT THE NEXT 4 (NO SECONDS)
LDIR; AND MOVE FOR EASIER ACCESS
LDHL,(MO)
;
; datehl CONVERTS THE VALUE IN hl TO bcd YEAR, MONTH, DAY
; FOR USE WITH z80dos TIME STAMPS.
;
; iNPUTS:hl CONTAINS HEX DAYS SINCE dECEMBER 31, 1977
;
; oUTPUTS:h CONTAINS bcd 20TH CENTURY YEAR
;l CONTAINS bcd MONTH
;a CONTAINS bcd DAY
;
;zERO FLAG SET (z) AND a=0 IF INVALID DATE (ZERO) DETECTED,
;zERO FLAG RESET (nz) AND a=0FFH OTHERWISE.
; cONVERTED TO 8080 FROM datehl BY cARSON wILSON WHO aDAPTED FROM b5c-cpm3.ins
dATEhl:
lda,h
orl; tEST BLANK DATE (ZERO)
JPz,NODATE; MAKE DATE = 00/00/00 00:00
ld(days),hl; sAVE INITIAL VALUE
ldb,78; sET YEARS COUNTER
LOOP:
CALLCKLEAP
ldde,-365; sET UP FOR SUBTRACT
JRnz,nolpy; sKIP IF NO LEAP YEAR
decde; sET FOR LEAP YEAR
NOLPY:
addhl,de; sUBTRACT
JRnc,ydone; cONTINUE IF YEARS DONE
lda,h
orl
JRz,ydone
ld(days),hl; eLSE SAVE DAYS COUNT
incb; iNCREMENT YEARS COUNT
JRloop; aND DO AGAIN
;
; tHE YEARS ARE NOW FINISHED, THE YEARS COUNT IS IN 'b' (hl IS INVALID)
;
YDONE:
lda,b
ld(YR),a; SAVE YEAR
;
CALLCKLEAP; cHECK IF LEAP YEAR
lda,-28
jpnz,febno; fEBRUARY NOT 29 DAYS
lda,-29; lEAP YEAR
FEBNO:
ld(feb),a; sET FEBRUARY
ldhl,(days); gET DAYS COUNT
ldde,mtable; pOINT TO MONTHS TABLE
ldb,0ffh; sET UP 'b' FOR SUBTRACT
lda,0; sET A FOR # OF MONTHS
MLOOP:
pushaf
lda,(de); gET MONTH
ldc,a; pUT IN 'c' FOR SUBTRACT
popaf
ld(days),hl; SAVE DAYS COUNT
addhl,bc; sUBTRACT
incde; iNCREMENT MONTHS COUNTER
inca
JRc,mloop; lOOP FOR NEXT MONTH
;
; tHE MONTHS ARE FINISHED, DAYS COUNT IS ON STACK. fIRST, CALCULATE
; MONTH.
;
MDONE:
ldb,a; sAVE MONTHS
ldhl,(days)
lda,h
orl
JRnz,nzd
decde
decde
lda,(de)
cpl
inca
ldl,a
decb
NZD:
lda,l; rETRIEVE BINARY DAY OF MONTH
LD(DAY),A
;
lda,b; rETRIEVE THE BINARY MONTH
LD(MO),A
;
ora; sET nz FLAG
JTOC4:LDA,(HOUR); z80dos (AND dri) WANT THE TIME AS bcd --
CALLBCD2BIN; BETTER CONVERT IT TO BINARY FOR ark
LD(HOUR),A
LDA,(MIN)
CALLBCD2BIN
LD(MIN),A
NODATE:POPBC
POPIY
POPIX
CALLcdATE_; MAKE IT READABLE TO ark
RET
BCD2BIN: LDD,A
AND0FH; e = THE 1'S DIGIT
LDE,A
LDA,D; GET BACK OUR bcd NUMBER
AND0F0H; MASK OFF ONES FOR JUST THE 10'S
RRCA
RRCA
RRCA
RRCA; AND PUT IN ls BITS
LDD,A; SAVE A COPY FOR MULTIPLYING BACK
ADDA,A; TIMES 2
ADDA,A; " 4
ADDA,A; TIMES 8
ADDA,D; TIMES 9
ADDA,D; TIMES 10
ADDA,E; ADD IN ONES
RET; AND WE'RE DONE!
;
; sUPPORT rOUTINES:
;
;
; cHECK FOR LEAP YEARS.
;
CKLEAP:
lda,b
and0fch
cpb
RET
MTABLE:
DB-31;jANUARY
FEB:DB-28;fEBRUARY
DB-31,-30,-31,-30;mAR-jUN
DB-31,-31,-30;jUL-sEP
DB-31,-30,-31;oCT-dEC
DAYS:DW0; TEMP STORAGE
END