home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / UTILS / ARC-LBR / ARK11.ARK / ARKDATE.MAC < prev   
Text File  |  1989-09-08  |  4KB  |  189 lines

  1. ;
  2. ; ARKDATE - support for Time and Date stamping
  3. ;
  4. ; 4/18/89 -- Written for Z80DOS file-modify stamps
  5. ;
  6. ;
  7. ; The user should use the area starting at Z80Date
  8.     .z80
  9.     aseg            ; keep M80 happy....
  10.     org    103h
  11.  
  12. yr:    DB    88        ; [103h]
  13. mo:    DB    4        ; [104h]
  14. day:    DB    14        ; [105h]
  15. hour:    db    0        ; [106h]
  16. min:    db    0        ; [107h]
  17.  
  18. TDate_:    jp    Signon        ; Today's-Date (called at init-time)           [108h]
  19. FDate_:    jp    Z80Date        ; File-Date (called immediately after F_OPEN)  [10Bh]
  20. CDate_: ds    3        ; convert and save date (don't overwrite this) [10Eh]
  21. Puts_:    ds    3        ; handy output routine
  22.  
  23. Signon:    ld    hl,Version
  24.     call    Puts_
  25.     ret
  26.  
  27. Version:
  28.     db    'Z80DOS Version',10,0
  29.  
  30. ;  Get Z80-DOS date, convert to YYMMDDHHMM and save at 0103h -- DO NOT
  31. ;  ALTER BC, IX, or IY
  32. Z80Date:push    ix
  33.     push    iy
  34.     push    bc
  35.     ld    c,54        ; Z80Dos Get-Stamp
  36.     call    5
  37.     ld    de,mo
  38.     inc    hl        ; skip over creation date
  39.     inc    hl        ;   and we point to Last Modify
  40.     ld    bc,4        ; only care about the next 4 (no seconds)
  41.     ldir            ; and move for easier access
  42.  
  43.     ld    hl,(mo)
  44. ;
  45. ; DATEHL converts the value in HL to BCD year, month, day
  46. ;     for use with Z80DOS time stamps.
  47. ;
  48. ; Inputs:    HL contains hex days since December 31, 1977
  49. ;
  50. ; Outputs:    H contains BCD 20th century year
  51. ;        L contains BCD month
  52. ;        A contains BCD day
  53. ;
  54. ;        Zero flag set (Z) and A=0 if invalid date (zero) detected,
  55. ;        Zero flag reset (NZ) and A=0ffh otherwise.
  56.  
  57. ; Converted to 8080 from DATEHL by Carson Wilson who Adapted from B5C-CPM3.INS
  58.  
  59. DateHL:
  60.     LD    A,H
  61.     OR    L        ; Test blank date (zero)
  62.     jp    Z,nodate    ; make date = 00/00/00 00:00
  63.     LD    (DAYS),HL    ; Save initial value
  64.     LD    B,78        ; Set years counter
  65. loop:
  66.     call    ckleap
  67.     LD    DE,-365        ; Set up for subtract
  68.     jr    NZ,NOLPY    ; Skip if no leap year
  69.     DEC    DE        ; Set for leap year
  70. nolpy:
  71.     ADD    HL,DE        ; Subtract
  72.     jr    NC,YDONE    ; Continue if years done
  73.     LD    A,H
  74.     OR    L
  75.     jr    Z,YDONE
  76.     LD    (DAYS),HL    ; Else save days count
  77.     INC    B        ; Increment years count
  78.     jr    LOOP        ; And do again
  79. ;
  80. ; The years are now finished, the years count is in 'B' (HL is invalid)
  81. ;
  82. ydone:
  83.     LD    A,B
  84.     LD    (yr),A        ; save year
  85. ;
  86.     call    ckleap        ; Check if leap year
  87.     LD    A,-28
  88.     JP    NZ,FEBNO    ; February not 29 days
  89.     LD    A,-29        ; Leap year
  90. febno:
  91.     LD    (FEB),A        ; Set february
  92.     LD    HL,(DAYS)    ; Get days count
  93.     LD    DE,MTABLE    ; Point to months table
  94.     LD    B,0FFH        ; Set up 'B' for subtract
  95.     LD    A,0        ; Set a for # of months
  96. mloop:
  97.     PUSH    AF
  98.     LD    A,(DE)        ; Get month
  99.     LD    C,A        ; Put in 'C' for subtract
  100.     POP    AF
  101.     LD    (DAYS),HL    ; save days count
  102.     ADD    HL,BC        ; Subtract
  103.     INC    DE        ; Increment months counter
  104.     INC    A
  105.     jr    C,MLOOP        ; Loop for next month
  106.  
  107. ;
  108. ; The months are finished, days count is on stack.  First, calculate
  109. ; month.
  110. ;
  111. mdone:
  112.     LD    B,A        ; Save months
  113.     LD    HL,(DAYS)
  114.     LD    A,H
  115.     OR    L
  116.     jr    NZ,NZD
  117.     DEC    DE
  118.     DEC    DE
  119.     LD    A,(DE)
  120.     CPL
  121.     INC    A
  122.     LD    L,A
  123.     DEC    B
  124. nzd:
  125.     LD    A,L        ; Retrieve binary day of month
  126.     ld    (day),a
  127. ;
  128.     LD    A,B        ; Retrieve the binary month
  129.     ld    (mo),a
  130. ;
  131.     OR    A        ; Set NZ flag
  132.  
  133. jtoc4:    ld    a,(hour)    ; Z80DOS (and DRI) want the time as BCD --
  134.     call    bcd2bin        ;  better convert it to binary for ARK
  135.     ld    (hour),a
  136.     ld    a,(min)
  137.     call    bcd2bin
  138.     ld    (min),a
  139. nodate:    pop    bc
  140.     pop    iy
  141.     pop    ix
  142.     call    CDate_        ; make it readable to ARK
  143.     ret
  144.  
  145.  
  146. bcd2bin: ld    d,a
  147.     and    0fh        ; E = the 1's digit
  148.     ld    e,a
  149.     ld    a,d        ; get back our BCD number
  150.     and    0f0h        ; mask off ones for just the 10's
  151.     rrca
  152.     rrca
  153.     rrca
  154.     rrca            ; and put in LS bits
  155.     ld    d,a        ; save a copy for multiplying back
  156.     add    a,a        ;  times 2
  157.     add    a,a        ;    "   4
  158.     add    a,a        ;  times 8
  159.     add    a,d        ;  times 9
  160.     add    a,d        ;  times 10
  161.     add    a,e        ; add in ones
  162.     ret            ; and we're done!
  163.  
  164.  
  165. ;
  166. ; Support Routines:
  167. ;
  168.  
  169. ;
  170. ; Check for leap years.
  171. ;
  172. ckleap:
  173.     LD    A,B
  174.     AND    0FCH
  175.     CP    B
  176.     ret
  177.  
  178.  
  179. mtable:
  180.     db    -31        ;January
  181. feb:    db    -28        ;February
  182.     db    -31,-30,-31,-30    ;Mar-Jun
  183.     db    -31,-31,-30    ;Jul-Sep
  184.     db    -31,-30,-31    ;Oct-Dec
  185.  
  186. days:    dw    0        ; temp storage
  187.  
  188.     end
  189.