Hex Artifact Content
Not logged in

Artifact 5484c50c15357bcfd0bb487446821ae91da5d836:


0000: 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 28 63 29  ;; Copyright (c)
0010: 20 32 30 30 39 20 44 65 72 69 63 6b 20 45 64 64   2009 Derick Edd
0020: 69 6e 67 74 6f 6e 2e 20 20 41 6c 6c 20 72 69 67  ington.  All rig
0030: 68 74 73 20 72 65 73 65 72 76 65 64 2e 0a 3b 3b  hts reserved..;;
0040: 20 4c 69 63 65 6e 73 65 64 20 75 6e 64 65 72 20   Licensed under 
0050: 61 6e 20 4d 49 54 2d 73 74 79 6c 65 20 6c 69 63  an MIT-style lic
0060: 65 6e 73 65 2e 20 20 4d 79 20 6c 69 63 65 6e 73  ense.  My licens
0070: 65 20 69 73 20 69 6e 20 74 68 65 20 66 69 6c 65  e is in the file
0080: 0a 3b 3b 20 6e 61 6d 65 64 20 4c 49 43 45 4e 53  .;; named LICENS
0090: 45 20 66 72 6f 6d 20 74 68 65 20 6f 72 69 67 69  E from the origi
00a0: 6e 61 6c 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 74  nal collection t
00b0: 68 69 73 20 66 69 6c 65 20 69 73 20 64 69 73 74  his file is dist
00c0: 72 69 62 75 74 65 64 0a 3b 3b 20 77 69 74 68 2e  ributed.;; with.
00d0: 20 20 49 66 20 74 68 69 73 20 66 69 6c 65 20 69    If this file i
00e0: 73 20 72 65 64 69 73 74 72 69 62 75 74 65 64 20  s redistributed 
00f0: 77 69 74 68 20 73 6f 6d 65 20 6f 74 68 65 72 20  with some other 
0100: 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 6d 79 0a 3b  collection, my.;
0110: 3b 20 6c 69 63 65 6e 73 65 20 6d 75 73 74 20 61  ; license must a
0120: 6c 73 6f 20 62 65 20 69 6e 63 6c 75 64 65 64 2e  lso be included.
0130: 0a 0a 28 6c 69 62 72 61 72 79 20 28 73 72 66 69  ..(library (srfi
0140: 20 73 31 39 20 74 69 6d 65 20 63 6f 6d 70 61 74   s19 time compat
0150: 29 0a 20 20 28 65 78 70 6f 72 74 0a 20 20 20 20  ).  (export.    
0160: 66 6f 72 6d 61 74 0a 20 20 20 20 68 6f 73 74 3a  format.    host:
0170: 74 69 6d 65 2d 72 65 73 6f 6c 75 74 69 6f 6e 0a  time-resolution.
0180: 20 20 20 20 68 6f 73 74 3a 63 75 72 72 65 6e 74      host:current
0190: 2d 74 69 6d 65 20 0a 20 20 20 20 68 6f 73 74 3a  -time .    host:
01a0: 74 69 6d 65 2d 6e 61 6e 6f 73 65 63 6f 6e 64 20  time-nanosecond 
01b0: 0a 20 20 20 20 68 6f 73 74 3a 74 69 6d 65 2d 73  .    host:time-s
01c0: 65 63 6f 6e 64 20 0a 20 20 20 20 68 6f 73 74 3a  econd .    host:
01d0: 74 69 6d 65 2d 67 6d 74 2d 6f 66 66 73 65 74 29  time-gmt-offset)
01e0: 0a 20 20 28 69 6d 70 6f 72 74 0a 20 20 20 20 28  .  (import.    (
01f0: 72 35 72 73 29 20 0a 20 20 20 20 28 72 6e 72 73  r5rs) .    (rnrs
0200: 29 0a 20 20 20 20 28 6c 61 72 63 65 6e 79 20 6c  ).    (larceny l
0210: 6f 61 64 29 0a 20 20 20 20 28 70 72 69 6d 69 74  oad).    (primit
0220: 69 76 65 73 20 72 35 72 73 3a 72 65 71 75 69 72  ives r5rs:requir
0230: 65 20 63 75 72 72 65 6e 74 2d 75 74 63 2d 74 69  e current-utc-ti
0240: 6d 65 20 74 69 6d 65 7a 6f 6e 65 2d 6f 66 66 73  me timezone-offs
0250: 65 74 29 20 20 20 20 0a 20 20 20 20 28 73 72 66  et)    .    (srf
0260: 69 20 73 34 38 20 69 6e 74 65 72 6d 65 64 69 61  i s48 intermedia
0270: 74 65 2d 66 6f 72 6d 61 74 2d 73 74 72 69 6e 67  te-format-string
0280: 73 29 29 0a 20 20 0a 20 20 28 64 65 66 69 6e 65  s)).  .  (define
0290: 2d 72 65 63 6f 72 64 2d 74 79 70 65 20 74 69 6d  -record-type tim
02a0: 65 20 28 66 69 65 6c 64 73 20 73 65 63 73 20 75  e (fields secs u
02b0: 73 65 63 73 29 29 0a 20 20 0a 20 20 3b 3b 20 4c  secs)).  .  ;; L
02c0: 61 72 63 65 6e 79 20 75 73 65 73 20 67 65 74 74  arceny uses gett
02d0: 69 6d 65 6f 66 64 61 79 28 29 20 77 68 69 63 68  imeofday() which
02e0: 20 67 69 76 65 73 20 6d 69 63 72 6f 73 65 63 6f   gives microseco
02f0: 6e 64 73 2c 0a 20 20 3b 3b 20 73 6f 20 6f 75 72  nds,.  ;; so our
0300: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 69 73 20 31   resolution is 1
0310: 30 30 30 20 6e 61 6e 6f 73 65 63 6f 6e 64 73 0a  000 nanoseconds.
0320: 20 20 28 64 65 66 69 6e 65 20 68 6f 73 74 3a 74    (define host:t
0330: 69 6d 65 2d 72 65 73 6f 6c 75 74 69 6f 6e 20 31  ime-resolution 1
0340: 30 30 30 29 0a 20 20 0a 20 20 28 64 65 66 69 6e  000).  .  (defin
0350: 65 20 28 68 6f 73 74 3a 63 75 72 72 65 6e 74 2d  e (host:current-
0360: 74 69 6d 65 29 0a 20 20 20 20 28 6c 65 74 2d 76  time).    (let-v
0370: 61 6c 75 65 73 20 28 5b 28 73 65 63 73 20 75 73  alues ([(secs us
0380: 65 63 73 29 20 28 63 75 72 72 65 6e 74 2d 75 74  ecs) (current-ut
0390: 63 2d 74 69 6d 65 29 5d 29 0a 20 20 20 20 20 20  c-time)]).      
03a0: 28 6d 61 6b 65 2d 74 69 6d 65 20 73 65 63 73 20  (make-time secs 
03b0: 75 73 65 63 73 29 29 29 0a 20 20 0a 20 20 28 64  usecs))).  .  (d
03c0: 65 66 69 6e 65 20 28 68 6f 73 74 3a 74 69 6d 65  efine (host:time
03d0: 2d 6e 61 6e 6f 73 65 63 6f 6e 64 20 74 29 0a 20  -nanosecond t). 
03e0: 20 20 20 28 2a 20 28 74 69 6d 65 2d 75 73 65 63     (* (time-usec
03f0: 73 20 74 29 20 31 30 30 30 29 29 0a 20 20 0a 20  s t) 1000)).  . 
0400: 20 28 64 65 66 69 6e 65 20 28 68 6f 73 74 3a 74   (define (host:t
0410: 69 6d 65 2d 73 65 63 6f 6e 64 20 74 29 0a 20 20  ime-second t).  
0420: 20 20 28 74 69 6d 65 2d 73 65 63 73 20 74 29 29    (time-secs t))
0430: 0a 20 20 0a 20 20 28 64 65 66 69 6e 65 20 28 68  .  .  (define (h
0440: 6f 73 74 3a 74 69 6d 65 2d 67 6d 74 2d 6f 66 66  ost:time-gmt-off
0450: 73 65 74 20 74 29 20 0a 20 20 20 20 28 74 69 6d  set t) .    (tim
0460: 65 7a 6f 6e 65 2d 6f 66 66 73 65 74 20 28 74 69  ezone-offset (ti
0470: 6d 65 2d 73 65 63 73 20 74 29 29 29 0a 20 20 0a  me-secs t))).  .
0480: 20 20 28 72 35 72 73 3a 72 65 71 75 69 72 65 20    (r5rs:require 
0490: 27 74 69 6d 65 29 0a 0a 29 0a                    'time)..).