Make gmlocaltime take a parameter for the struct tm to use.
This will be needed for gmtime_r/localtime_r, but also is a step toward using this code to normalize the struct tm values for mktime.
This commit is contained in:
parent
3b0c1c2149
commit
882af9e075
63
time.asm
63
time.asm
|
@ -373,6 +373,16 @@ ad1 tay
|
||||||
rts
|
rts
|
||||||
end
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* gmlocaltime_tm - struct tm used by gmtime and localtime
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
gmlocaltime_tm private
|
||||||
|
ds 9*2
|
||||||
|
end
|
||||||
|
|
||||||
****************************************************************
|
****************************************************************
|
||||||
*
|
*
|
||||||
* struct tm *gmtime(t)
|
* struct tm *gmtime(t)
|
||||||
|
@ -406,6 +416,7 @@ t equ 6
|
||||||
sta 3,s
|
sta 3,s
|
||||||
plb
|
plb
|
||||||
|
|
||||||
|
ph4 #gmlocaltime_tm push address of struct tm to use
|
||||||
pea 0 push tm_isdst value (no DST for UTC)
|
pea 0 push tm_isdst value (no DST for UTC)
|
||||||
phx push time_t value to convert
|
phx push time_t value to convert
|
||||||
phy
|
phy
|
||||||
|
@ -484,7 +495,8 @@ t equ 6
|
||||||
sta 3,s
|
sta 3,s
|
||||||
pla
|
pla
|
||||||
sta 3,s
|
sta 3,s
|
||||||
|
|
||||||
|
ph4 #gmlocaltime_tm push address of struct tm to use
|
||||||
lda #-1 default DST setting = -1 (unknown)
|
lda #-1 default DST setting = -1 (unknown)
|
||||||
cpy lasttime determine DST setting, if we can
|
cpy lasttime determine DST setting, if we can
|
||||||
bne lb1
|
bne lb1
|
||||||
|
@ -510,6 +522,7 @@ lb1 plb
|
||||||
* tz_offset - offset of local time from desired time zone
|
* tz_offset - offset of local time from desired time zone
|
||||||
* t - time_t value (# of seconds since 13 Nov 1969)
|
* t - time_t value (# of seconds since 13 Nov 1969)
|
||||||
* isdst - value for tm_isdst flag
|
* isdst - value for tm_isdst flag
|
||||||
|
* tm - pointer to struct tm for result
|
||||||
*
|
*
|
||||||
* Outputs:
|
* Outputs:
|
||||||
* returns a pointer to a time record
|
* returns a pointer to a time record
|
||||||
|
@ -518,8 +531,18 @@ lb1 plb
|
||||||
*
|
*
|
||||||
~gmlocaltime private
|
~gmlocaltime private
|
||||||
using TimeCommon
|
using TimeCommon
|
||||||
|
tm_sec equ 0 seconds 0..59
|
||||||
|
tm_min equ tm_sec+2 minutes 0..59
|
||||||
|
tm_hour equ tm_min+2 hours 0..23
|
||||||
|
tm_mday equ tm_hour+2 day 1..31
|
||||||
|
tm_mon equ tm_mday+2 month 0..11
|
||||||
|
tm_year equ tm_mon+2 year 69..205 (1900=0)
|
||||||
|
tm_wday equ tm_year+2 day of week 0..6 (Sun = 0)
|
||||||
|
tm_yday equ tm_wday+2 day of year 0..365
|
||||||
|
tm_isdst equ tm_yday+2 daylight savings? 1 = yes, 0 = no
|
||||||
|
|
||||||
csubroutine (4:tz_offset,4:t,2:isdst),0
|
|
||||||
|
csubroutine (4:tz_offset,4:t,2:isdst,4:tm),0
|
||||||
phb
|
phb
|
||||||
phk
|
phk
|
||||||
plb
|
plb
|
||||||
|
@ -560,48 +583,44 @@ lb2a ble lb2
|
||||||
lb2b dec month
|
lb2b dec month
|
||||||
jsr factor_second32 recompute the factor
|
jsr factor_second32 recompute the factor
|
||||||
lda year set the year
|
lda year set the year
|
||||||
sta tm_year
|
ldy #tm_year
|
||||||
|
sta [tm],y
|
||||||
lda month set the month
|
lda month set the month
|
||||||
sta tm_mon
|
ldy #tm_mon
|
||||||
|
sta [tm],y
|
||||||
sub4 t,count find the number of seconds
|
sub4 t,count find the number of seconds
|
||||||
move4 t,t1
|
move4 t,t1
|
||||||
div4 t,#60
|
div4 t,#60
|
||||||
mul4 t,#60,t2
|
mul4 t,#60,t2
|
||||||
sub4 t1,t2
|
sub4 t1,t2
|
||||||
lda t1
|
lda t1
|
||||||
sta tm_sec
|
ldy #tm_sec
|
||||||
|
sta [tm],y
|
||||||
move4 t,t1 find the number of minutes
|
move4 t,t1 find the number of minutes
|
||||||
div4 t,#60
|
div4 t,#60
|
||||||
mul4 t,#60,t2
|
mul4 t,#60,t2
|
||||||
sub4 t1,t2
|
sub4 t1,t2
|
||||||
lda t1
|
lda t1
|
||||||
sta tm_min
|
ldy #tm_min
|
||||||
|
sta [tm],y
|
||||||
move4 t,t1 find the number of hours
|
move4 t,t1 find the number of hours
|
||||||
div4 t,#24
|
div4 t,#24
|
||||||
mul4 t,#24,t2
|
mul4 t,#24,t2
|
||||||
sub4 t1,t2
|
sub4 t1,t2
|
||||||
lda t1
|
lda t1
|
||||||
sta tm_hour
|
ldy #tm_hour
|
||||||
|
sta [tm],y
|
||||||
lda t set the day
|
lda t set the day
|
||||||
inc A
|
inc A
|
||||||
sta tm_mday
|
ldy #tm_mday
|
||||||
ph4 #tm_sec set the day of week/year
|
sta [tm],y
|
||||||
|
ph4 tm set the day of week/year
|
||||||
jsl mktime
|
jsl mktime
|
||||||
lla t,tm_sec
|
|
||||||
lda isdst set the DST flag
|
lda isdst set the DST flag
|
||||||
sta tm_isdst
|
ldy #tm_isdst
|
||||||
|
sta [tm],y
|
||||||
plb
|
plb
|
||||||
creturn 4:t
|
creturn 4:tm
|
||||||
|
|
||||||
tm_sec ds 2 seconds 0..59
|
|
||||||
tm_min ds 2 minutes 0..59
|
|
||||||
tm_hour ds 2 hours 0..23
|
|
||||||
tm_mday ds 2 day 1..31
|
|
||||||
tm_mon ds 2 month 0..11
|
|
||||||
tm_year ds 2 year 70..200 (1900=0)
|
|
||||||
tm_wday ds 2 day of week 0..6 (Sun = 0)
|
|
||||||
tm_yday ds 2 day of year 0..365
|
|
||||||
tm_isdst ds 2 daylight savings? 1 = yes, 0 = no
|
|
||||||
end
|
end
|
||||||
|
|
||||||
****************************************************************
|
****************************************************************
|
||||||
|
|
Loading…
Reference in New Issue