Alla synpunkter och förslag på förbättringar, förenkligar och effektiviseringar
tas givetvis tacksamt emot.
Koden kanske är lite svårläst p.g.a. min speciella assembler, men med
kommentarerna så bör det gå att följa utan problem vad som görs.
Givetvetvis med reservation för buggar.
Kod: Markera allt
.
.WEEK * WEEK#
JSR .SPLIT GET AND SPLIT UNIX-TIME
JSR .DATE EXTRACT YMD + DAY#
JSR .SPLIT GET UNIX-DATE AGAIN
LOD A,TIMBUF.DAYNUM GET CURRENT DAY#
SUB ACC.QUOT,A CALC UNIX-DATE FOR 1/1
LOD A,TIMBUF.DAYNUM+1
SFS CY
DEC ACC.QUOT+1
SUB ACC.QUOT+1,A
LOD A,#3+(4-1) ADJUST FOR EVEN MOD7 ON MONDAYS AND GET 4/1
ADD ACC.QUOT,A
SFC CY
INC ACC.QUOT+1
STZ ACC.DIVIS+1 GET 7
LOD A,#7
LOD ACC.DIVIS,A
JSR DIVIDE.16 CALC WHAT DAY THAT IS
LOD A,ACC.REMIND GET IT
LOD PAD0,A SAVE IT
* CALC DAY COUNT SINCE START OF WEEK1
ADD A,#4 ADJ. UPWARDS TO AVOID DAY# TURNING NEGATIVE
ADD A,TIMBUF.DAYNUM GET DAY# AND ADJUST IT
LOD ACC.QUOT,A
LOD A,TIMBUF.DAYNUM+1
SFC CY
INC A=TIMBUF.DAYNUM+1
LOD ACC.QUOT+1,A
JSR DIVIDE.16 CALC WEEK#, ALSO GIVES WEEKDAY
LOD A,ACC.REMIND PUT WEEKDAY
LOD TIMBUF.DAY,A
LOD A,ACC.QUOT PUT WEEK#
LOD TIMBUF.WEEK,A
* DONE...NOT YET. WE ALSO HAVE 29/12..3/1
SFC Z HAS WEEK# BECOME 0 = WEEK52/53 TURNOVER ?
JMP .WEEK0 YES-CORRECT IT
SUR A,#53 AT WEEK# 53?
SFS Z
RTS NO-DONE
* TEST IF WEEK# 53 IS TO KEEP
LOD A,#3 ARE WE AT LEAP YEAR?
AND A,TIMBUF.YEAR
SFC Z
INC PAD0 YES-COMPENSATE FOR 29/2
LOD A,PAD0 GET LEAP-ADJUSTED "DAYCODE" FOR 4/1
ADD A,#255-5 BEYOND SATURDAY?
SFS CY
SUR A,#255-3 NO-TEST IF REACHED THURSDAY?
LOD A,#1 GET 1
SFS CY
LOD TIMBUF.WEEK,A YES-WE ARE AT WEEK# 1, CORRECT IT
RTS DONE
.WEEK0 * WEEK# 0 MEANS HIGH WEEK# EXTENDS INTO NEW YEAR
LOD A,#52 ASSUME WEEK# 52, CORRECT IT TO THAT
LOD TIMBUF.WEEK,A
DEC PAD0 IS 4/1 A MONDAY = TURNS NEGATIVE HERE?
LOD A,TIMBUF.YEAR ARE WE AT YEAR AFTER A LEAP YEAR?
AND A,#3
EOR A,#1
SFC Z
DEC PAD0 YES-ALLOW TUEASDAYS TOO TO..
SBR PAD0,7
INC TIMBUF.WEEK ..INDICATE WE ARE AT WEEK# 53
RTS DONE