;
; Ullrich von Bassewitz, 12.11.2002
;
-; time_t __fastcall__ time (time_t* t);
+; time_t __fastcall__ time (time_t* timep);
;
.export _time
+ .import __systime
.import __errno
- .importzp ptr1, sreg
+ .importzp ptr1, sreg, tmp1
.include "errno.inc"
.proc _time
- sta ptr1
- stx ptr1+1 ; t
+ pha
+ txa
+ pha ; Save timep
+
+ jsr __systime ; Get the time (machine dependent)
+
+ sta tmp1 ; Save low byte of result
- ldx #$FF
- stx sreg
- stx sreg+1
+; Restore timep and check if it is NULL
- ora ptr1+1 ; t == 0?
+ pla
+ sta ptr1
+ pla
+ sta ptr1+1 ; Restore timep
+ ora ptr1 ; timep == 0?
beq @L1
- ldy #$03
+; timep is not NULL, store the result there
+
+ ldy #3
+ lda sreg+1
+ sta (ptr1),y
+ dey
+ lda sreg
+ sta (ptr1),y
+ dey
txa
-@L0: sta (ptr1),y ; *t = -1
+ sta (ptr1),y
dey
- bpl @L0
- lda #$00
+ lda tmp1
+ sta (ptr1),y
+
+; If the result is less than zero, set ERRNO
-@L1: sta __errno+1
+@L1: ldy sreg+1
+ bpl @L2
+
+ lda #$00
+ sta __errno+1
lda #ENOSYS ; Function not implemented
sta __errno
- txa ; A = $FF
+; Reload the low byte of the result and return
+
+@L2: lda tmp1
rts
.endproc