home *** CD-ROM | disk | FTP | other *** search
-
- * Maxon C++ Library:
- * Modul "tmtime"
- * Jens Gelhar 07.01.93
-
- xdef _gmtime,gmtime__PCUi
- xdef _localtime,localtime__PCUi
-
- _gmtime:
- _localtime:
- gmtime__PCUi:
- localtime__PCUi:
- movem.l d0-d3/a0,-(a7)
- move.l 5*4+4(a7),a0
- move.l (a0),d0
- lea timebuffer(pc),a0
- move.l #$1FFFF,d1
- and.l d0,d1
- divu #60,d1
- swap d1
- clr.w (a0)
- move.w d1,2(a0) ; tm_sec
- clr.w d1
- swap d1 ; Minuten
- divu #60,d1
- clr.l 8(a0)
- move.w d1,8+2(a0) ; tm_hour
- clr.w d1
- swap d1
- move.l d1,4(a0) ; tm_min
- moveq #17,d1
- lsr.l d1,d0 ; Tage seit '78
- add.l #365,d0 ; seit '77
- move.l d0,d1
- addq.l #6,d1 ; Offset
- divu #7,d1
- clr.w d1
- swap d1
- move.l d1,24(a0) ; tm_wday
- move.l #77,20(a0) ; tm_year
- divu #4*365+1,d0 ; Anzahl Schaltjahrzyklen
- asl.w #2,d0
- add.w d0,20+2(a0) ; jeweils vier Jahre
- clr.w d0
- swap d0
- cmp.w #4*365,d0 ; Sonderfall: Schaltjahr-Sylvester
- bne.b l1
- addq.w #3,20+2(a0)
- sub.w #3*365+1,d0
- bra.b l2
- l1 divu #365,d0 ; sonstige Jahre
- add.w d0,20+2(a0)
- move.w d0,d1 ; #3 = Schaltjahr-Flag
- clr.w d0
- swap d0 ; Jahrestage
- l2 move.l d0,28(a0) ; tm_yday
- moveq #0,d2 ; Monatszähler
- move.l d0,d3
- ; Monatstag ermitteln:
- sub.w #31,d0 ; Januar
- blo.b DtOK
- addq.w #1,d2
- move.w d0,d3
- sub.w #28,d0 ; Februar
- blo.b DtOK
- cmp.w #3,d1
- bne.b keinSchaltjahr
- subq.w #1,d0 ; jetzt 29 Tage
- blo.b DtOK
- keinSchaltjahr
- addq.w #1,d2
- move.w d0,d3
- sub.w #31,d0 ; März
- blo.b DtOK
- addq.w #1,d2
- move.w d0,d3
- sub.w #30,d0 ; April
- blo.b DtOK
- addq.w #1,d2
- move.w d0,d3
- sub.w #31,d0 ; Mai
- blo.b DtOK
- addq.w #1,d2
- move.w d0,d3
- sub.w #30,d0 ; Juni
- blo.b DtOK
- addq.w #1,d2
- move.w d0,d3
- sub.w #31,d0 ; Juli
- blo.b DtOK
- addq.w #1,d2
- move.w d0,d3
- sub.w #31,d0 ; August
- blo.b DtOK
- addq.w #1,d2
- move.w d0,d3
- sub.w #30,d0 ; September
- blo.b DtOK
- addq.w #1,d2
- move.w d0,d3
- sub.w #31,d0 ; Oktober
- blo.b DtOK
- addq.w #1,d2
- move.w d0,d3
- sub.w #30,d0 ; November
- blo.b DtOK
- addq.w #1,d2
- move.w d0,d3 ; Dezember
- DtOK move.l d2,16(a0) ; tm_mon
- addq.w #1,d3
- move.l d3,12(a0) ; tm_mday
-
- move.l #-1,32(a0) ; tm_isdst
- movem.l (a7)+,d0-d3/a0
- move.l #timebuffer,d0
- rts
-
- timebuffer: blk.l 9
-
- end
-