home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC6.DMS / in.adf / libsrc.lha / LIBSRC / tmtime.asm < prev    next >
Encoding:
Assembly Source File  |  1994-04-16  |  2.4 KB  |  121 lines

  1.  
  2. * Maxon C++ Library:
  3. * Modul "tmtime"
  4. * Jens Gelhar 07.01.93
  5.  
  6.     xdef    _gmtime,gmtime__PCUi
  7.     xdef    _localtime,localtime__PCUi
  8.  
  9. _gmtime:
  10. _localtime:
  11. gmtime__PCUi:
  12. localtime__PCUi:
  13.     movem.l d0-d3/a0,-(a7)
  14.     move.l 5*4+4(a7),a0
  15.     move.l (a0),d0
  16.     lea timebuffer(pc),a0
  17.     move.l #$1FFFF,d1
  18.     and.l d0,d1
  19.     divu #60,d1
  20.     swap d1
  21.     clr.w (a0)
  22.     move.w d1,2(a0)         ; tm_sec
  23.     clr.w d1
  24.     swap d1                 ; Minuten
  25.     divu #60,d1
  26.     clr.l 8(a0)
  27.     move.w d1,8+2(a0)       ; tm_hour
  28.     clr.w d1
  29.     swap d1
  30.     move.l d1,4(a0)         ; tm_min
  31.     moveq #17,d1
  32.     lsr.l d1,d0             ; Tage seit '78
  33.     add.l #365,d0           ; seit '77
  34.     move.l d0,d1
  35.     addq.l #6,d1            ; Offset
  36.     divu #7,d1
  37.     clr.w d1
  38.     swap d1
  39.     move.l d1,24(a0)        ; tm_wday
  40.     move.l #77,20(a0)       ; tm_year
  41.     divu #4*365+1,d0        ; Anzahl Schaltjahrzyklen
  42.     asl.w #2,d0
  43.     add.w d0,20+2(a0)       ; jeweils vier Jahre
  44.     clr.w d0
  45.     swap d0
  46.     cmp.w #4*365,d0         ; Sonderfall: Schaltjahr-Sylvester
  47.     bne.b l1
  48.     addq.w #3,20+2(a0)
  49.     sub.w #3*365+1,d0
  50.     bra.b l2
  51. l1    divu #365,d0            ; sonstige Jahre
  52.     add.w d0,20+2(a0)
  53.     move.w d0,d1            ; #3 = Schaltjahr-Flag
  54.     clr.w d0
  55.     swap d0                 ; Jahrestage
  56. l2    move.l d0,28(a0)        ; tm_yday
  57.     moveq #0,d2             ; Monatszähler
  58.     move.l d0,d3
  59.     ; Monatstag ermitteln:
  60.     sub.w #31,d0            ; Januar
  61.     blo.b DtOK
  62.     addq.w #1,d2
  63.     move.w d0,d3
  64.     sub.w #28,d0            ; Februar
  65.     blo.b DtOK
  66.     cmp.w #3,d1
  67.     bne.b keinSchaltjahr
  68.     subq.w #1,d0            ; jetzt 29 Tage
  69.     blo.b DtOK
  70. keinSchaltjahr
  71.     addq.w #1,d2
  72.     move.w d0,d3
  73.     sub.w #31,d0            ; März
  74.     blo.b DtOK
  75.     addq.w #1,d2
  76.     move.w d0,d3
  77.     sub.w #30,d0            ; April
  78.     blo.b DtOK
  79.     addq.w #1,d2
  80.     move.w d0,d3
  81.     sub.w #31,d0            ; Mai
  82.     blo.b DtOK
  83.     addq.w #1,d2
  84.     move.w d0,d3
  85.     sub.w #30,d0            ; Juni
  86.     blo.b DtOK
  87.     addq.w #1,d2
  88.     move.w d0,d3
  89.     sub.w #31,d0            ; Juli
  90.     blo.b DtOK
  91.     addq.w #1,d2
  92.     move.w d0,d3
  93.     sub.w #31,d0            ; August
  94.     blo.b DtOK
  95.     addq.w #1,d2
  96.     move.w d0,d3
  97.     sub.w #30,d0            ; September
  98.     blo.b DtOK
  99.     addq.w #1,d2
  100.     move.w d0,d3
  101.     sub.w #31,d0            ; Oktober
  102.     blo.b DtOK
  103.     addq.w #1,d2
  104.     move.w d0,d3
  105.     sub.w #30,d0            ; November
  106.     blo.b DtOK
  107.     addq.w #1,d2
  108.     move.w d0,d3            ; Dezember
  109. DtOK    move.l d2,16(a0)        ; tm_mon
  110.     addq.w #1,d3
  111.     move.l d3,12(a0)        ; tm_mday
  112.  
  113.     move.l #-1,32(a0)       ; tm_isdst
  114.     movem.l (a7)+,d0-d3/a0
  115.     move.l #timebuffer,d0
  116.     rts
  117.  
  118. timebuffer:    blk.l 9
  119.  
  120.     end
  121.