source: project/wiki/eggref/3/srfi-19 @ 13957

Last change on this file since 13957 was 13957, checked in by Kon Lovett, 11 years ago

Release.

File size: 22.3 KB
Line 
1[[tags: egg]]
2
3== srfi-19
4
5Time Data Types and Procedures
6
7[[toc:]]
8
9
10== Documentation
11
12This is a Chicken port of SRFI-19. This document only describes the extensions.
13For the SRFI-19 API see [[http://srfi.schemers.org/srfi-19/srfi-19.html|SRFI-19]].
14
15=== Core Procedures
16
17<enscript language=scheme>
18(require-extension srfi-19-core)
19</enscript>
20
21==== SRFI-19 Document Changes
22
23The '''nanosecond''' time object element is an integer between 0 and
24999,999,999 inclusive. (The SRFI-19 document mis-states the value.)
25
26A ''tz-offset'' value follows ISO 8601; positive for '''east''' of UTC, and
27negative for '''west'''. This is the '''opposite''' of the POSIX TZ environment
28variable.
29
30Where the SRFI-19 document states a ''tz-offset'' argument a
31timezone-components object is also legal.
32
33The {{string->date}} procedure allows the template-name argument to be
34optional. When missing the locale's date-time-format string is used. The
35supplied locale bundle's strings are invertible.
36
37===== make-date
38
39<procedure>(make-date NANOSECOND SECOND MINUTE HOUR DAY MONTH YEAR ZONE-OFFSET [TZ-NAME #f] [DST-FLAG #f])</procedure>
40
41Same as SRFI-19 except for the optional parameters and allowing a
42timezone-components object for the {{ZONE-OFFSET}}.
43
44===== read-leap-second-table
45
46<procedure>(read-leap-second-table FILENAME)</procedure>
47
48Sets the leap second table from the specified {{FILENAME}}.
49
50The file format is the same as the "tai-utc.dat" file in the distribution.
51Provided by the U.S. Naval Observatory.
52
53===== leap-year?
54
55<procedure>(leap-year? DATE)</procedure>
56
57Does the specified {{DATE}} fall on a leap year?
58
59==== SRFI-18 Time
60
61Due to conflicts between SRFI-18 and SRFI-19 procedure variables
62{{srfi-19:current-time}} is a synonym for {{current-time}} and
63{{srfi-19:time?}} is a synonym for {{time?}}.
64
65===== time->srfi-18-time
66
67<procedure>(time->srfi-18-time TIME)</procedure>
68
69Converts a SRFI-19 time object to a SRFI-18 time object. The conversion is
70really only meaningful for time-duration, but any time-type is accepted.
71
72===== srfi-18-time->time
73
74<procedure>(srfi-18-time->time TIME)</procedure>
75
76Converts a SRFI-18 time object into a SRFI-19 time-duration object.
77
78==== Time Conversion
79
80===== seconds->time/type
81
82<procedure>(seconds->time/type SECONDS [TIME-TYPE time-duration])</procedure>
83
84Converts a {{SECONDS}} value, may be fractional, into a {{TIME-TYPE}} time
85object.
86
87===== seconds->date/type
88
89<procedure>(seconds->date/type SECONDS [TIMEZONE-INFO #f])</procedure>
90
91Converts a {{SECONDS}} value, which may be fractional, into a date object. The
92{{TIMEZONE-INFO}} is {{#t}} for the local timezone, {{#f}} for the utc
93timezone, or a timezone-components object.
94
95{{SECONDS}} is relative to 00:00:00 January 1, 1970 UTC.
96
97===== time->nanoseconds
98
99<procedure>(time->nanoseconds TIME)</procedure>
100
101Returns the {{TIME}} object value as a nanoseconds value.
102
103===== nanoseconds->time
104
105<procedure>(nanoseconds->time NANOSECONDS [TIME-TYPE time-duration])</procedure>
106
107Returns the {{NANOSECONDS}} value as a time {{TIME-TYPE}} object.
108
109===== nanoseconds->seconds
110
111<procedure>(nanoseconds->seconds NANOSECONDS)</procedure>
112
113Returns the {{NANOSECONDS}} value as an inexact seconds value.
114
115===== time->milliseconds
116
117<procedure>(time->milliseconds TIME)</procedure>
118
119Returns the {{TIME}} object value as a milliseconds value.
120
121===== milliseconds->time
122
123<procedure>(milliseconds->time MILLISECONDS [TIME-TYPE time-duration])</procedure>
124
125Returns the {{MILLISECONDS}} value as a time {{TIME-TYPE}} object.
126
127===== milliseconds->seconds
128
129<procedure>(milliseconds->seconds MILLISECONDS)</procedure>
130
131Returns the {{MILLISECONDS}} value as an inexact seconds value.
132
133===== time->date
134
135<procedure>(time->date TIME)</procedure>
136
137Returns the {{TIME}} object value as a date. A shorthand for the
138{{(time-*->date...)}} procedures.
139
140===== time->julian-day
141
142<procedure>(time->julian-day TIME)</procedure>
143
144Returns the julian day for the {{TIME}} object.
145
146===== time->modified-julian-day
147
148<procedure>(time->modified-julian-day TIME)</procedure>
149
150Returns the modified julian day for the {{TIME}} object.
151
152==== Time Arithmetic
153
154===== make-duration
155
156<procedure>(make-duration [#:days 0] [#:hours 0] [#:minutes 0] [#:seconds 0] [#:milliseconds 0] [#:microseconds 0] [#:nanoseconds 0])</procedure>
157
158Returns a time-object of clock-type {{time-duration}} where the seconds and
159nanoseconds values are calculated by summing the keyword arguments.
160
161{{ONE-SECOND-DURATION}} and {{ONE-NANOSECOND-DURATION}} are pre-defined.
162
163===== divide-duration
164
165<procedure>(divide-duration DURATION NUMBER)</procedure>
166
167Returns a duration, from {{DURATION}}, divided by {{NUMBER}}, without
168remainder.
169
170===== divide-duration!
171
172<procedure>(divide-duration! DURATION NUMBER)</procedure>
173
174Returns {{DURATION}}, divided by {{NUMBER}}, without remainder.
175
176===== multiply-duration
177
178<procedure>(multiply-duration DURATION NUMBER)</procedure>
179
180Returns a duration, from {{DURATION}}, multiplied by {{NUMBER}}, truncated.
181
182===== multiply-duration!
183
184<procedure>(multiply-duration! DURATION NUMBER)</procedure>
185
186Returns {{DURATION}}, multiplied by {{NUMBER}}, truncated.
187
188===== time-negative?
189
190<procedure>(time-negative? TIME)</procedure>
191
192Is {{TIME}} negative?
193
194A time object will never have a negative nanoseconds value.
195
196===== time-positve?
197
198<procedure>(time-positve? TIME)</procedure>
199
200Is {{TIME}} positive?
201
202===== time-zero?
203
204<procedure>(time-zero? TIME)</procedure>
205
206Is {{TIME}} zero?
207
208===== time-abs
209
210<procedure>(time-abs TIME)</procedure>
211
212Returns the absolute time value, from {{TIME}}.
213
214===== time-abs!
215
216<procedure>(time-abs! TIME)</procedure>
217
218Returns the absolute {{TIME}} value.
219
220===== time-negate
221
222<procedure>(time-negate TIME)</procedure>
223
224Returns the sign inverted time value, from {{TIME}}.
225
226===== time-negate!
227
228<procedure>(time-negate! TIME)</procedure>
229
230Returns the {{TIME}} sign inverted value.
231
232==== Time Comparison
233
234===== time-compare
235
236<procedure>(time-compare TIME1 TIME2)</procedure>
237
238Returns -1, 0, or 1.
239
240===== time-max
241
242<procedure>(time-max TIME1 [TIME2...])</procedure>
243
244Returns the maximum time object from {{TIME1 TIME2...}}.
245
246===== time-min
247
248<procedure>(time-min TIME1 [TIME2...])</procedure>
249
250Returns the minimum time object from {{TIME1 TIME2...}}.
251
252==== Dates
253
254===== default-date-clock-type
255
256<parameter>(default-date-clock-type [CLOCK-TYPE time-utc])</parameter>
257
258Sets or gets the clock-type used by default for conversion of a date to a time.
259
260===== copy-date
261
262<procedure>(copy-date DATE)</procedure>
263
264Returns an exact copy of the specified {{DATE}} object.
265
266===== date->time
267
268<procedure>(date->time DATE [CLOCK-TYPE (default-date-clock-type)])</procedure>
269
270Returns the specified {{DATE}} as a time-object of type {{CLOCK-TYPE}}.
271
272===== date-zone-name
273
274<procedure>(date-zone-name DATE)</procedure>
275
276Returns the timezone abbreviation of the specified {{DATE}} object. The result
277is either a string or {{#f}}.
278
279===== date-dst?
280
281<procedure>(date-dst? DATE)</procedure>
282
283Returns the daylight saving time flag of the specified {{DATE}} object.
284
285Only valid for "current" dates. Historical dates will not have a correct
286setting. Future dates cannot have a correct setting.
287
288==== Date Arithmetic
289
290===== date-difference
291
292<procedure>(date-difference DATE1 DATE2 [CLOCK-TYPE])</procedure>
293
294Returns the duration between {{DATE1}} and {{DATE2}}.
295
296===== date-add-duration
297
298<procedure>(date-add-duration DATE DURATION [CLOCK-TYPE])</procedure>
299
300Returns the {{DATE}} plus the {{DURATION}}.
301
302===== date-subtract-duration
303
304<procedure>(date-subtract-duration DATE DURATION [CLOCK-TYPE])</procedure>
305
306Returns the {{DATE}} minus the {{DURATION}}.
307
308==== Date Comparison
309
310===== date-compare
311
312<procedure>(date-compare DATE1 DATE2)</procedure>
313
314Returns -1, 0, or 1.
315
316===== date=?
317
318<procedure>(date=? DATE1 DATE2)</procedure>
319
320Is {{DATE1}} on {{DATE2}}?
321
322===== date>?
323
324<procedure>(date>? DATE1 DATE2)</procedure>
325
326Is {{DATE1}} after {{DATE2}}?
327
328===== date<?
329
330<procedure>(date<? DATE1 DATE2)</procedure>
331
332Is {{DATE1}} before {{DATE2}}?
333
334===== date>=?
335
336<procedure>(date>=? DATE1 DATE2)</procedure>
337
338Is {{DATE1}} after or on {{DATE2}}?
339
340===== date<=?
341
342<procedure>(date<=? DATE1 DATE2)</procedure>
343
344Is {{DATE1}} before or on {{DATE2}}?
345
346==== Timezone
347
348* Note that the daylight saving time (summer time) flag is '''always''' taken
349from the system, unless supplied. Any summer time rule component of a
350{{timezone-components}} object is '''not''' processed.
351
352Remember that SRFI-19 timezone offset follows ISO 8601.
353
354===== local-timezone-locale
355
356<parameter>(local-timezone-locale [TZ-COMPONENTS])</parameter>
357
358Gets or sets the local timezone-locale object.
359
360===== utc-timezone-locale
361
362<parameter>(utc-timezone-locale [TZ-COMPONENTS])</parameter>
363
364Gets or sets the utc timezone-locale object.
365
366Probably not a good idea to change the value.
367
368===== timezone-locale-name
369
370<procedure>(timezone-locale-name [TZ-COMPONENTS])</procedure>
371
372Returns the timezone-locale name of the supplied {{TZ-COMPONENTS}}, or the
373{{(local-timezone-locale)}} if missing.
374
375===== timezone-locale-offset
376
377<procedure>(timezone-locale-offset [TZ-COMPONENTS])</procedure>
378
379Returns the timezone-locale offset of the supplied {{TZ-COMPONENTS}}, or the
380{{(local-timezone-locale)}} if missing.
381
382===== timezone-locale-dst?
383
384<procedure>(timezone-locale-dst? [TZ-COMPONENTS])</procedure>
385
386Returns the timezone-locale daylight saving time flag of the supplied
387{{TZ-COMPONENTS}}, or the {{(local-timezone-locale)}} if missing.
388
389=== Time Period
390
391<enscript language=scheme>
392(require-extension srfi-19-period)
393</enscript>
394
395A time-period is an interval, [begin end), where begin and end are time objects
396of the same clock type. When end <= begin the interval is null.
397
398===== make-null-time-period
399
400<procedure>(make-null-time-period [CLOCK-TYPE (default-date-clock-type)])</procedure>
401
402Returns a null interval for the specified {{CLOCK-TYPE}}.
403
404===== make-time-period
405
406<procedure>(make-time-period BEGIN END [CLOCK-TYPE (default-date-clock-type)])</procedure>
407
408Returns a new time-period object. The clock types must be compatible.
409
410{{BEGIN}} maybe a seconds value, a date, or a time (except time-duration). A
411seconds value or date are converted to {{CLOCK-TYPE}}.
412
413{{END}} maybe a seconds value, a date, or a time. A seconds value or date are
414converted to the same clock type as {{BEGIN}}. A time-duration is treated as an
415offset from {{BEGIN}}.
416
417===== copy-time-period
418
419<procedure>(copy-time-period TIME-PERIOD)</procedure>
420
421Returns a copy of {{TIME-PERIOD}}.
422
423===== time-period-begin
424
425<procedure>(time-period-begin TIME-PERIOD)</procedure>
426
427Returns the start time for the {{TIME-PERIOD}}.
428
429===== time-period-end
430
431<procedure>(time-period-end TIME-PERIOD)</procedure>
432
433Returns the end time for the {{TIME-PERIOD}}.
434
435===== time-period-last
436
437<procedure>(time-period-last TIME-PERIOD)</procedure>
438
439Returns the last time for the {{TIME-PERIOD}}; (time-period-end - 1ns).
440
441===== time-period-type
442
443<procedure>(time-period-type TIME-PERIOD)</procedure>
444
445Returns the clock-type of the {{TIME-PERIOD}}.
446
447===== time-period?
448
449<procedure>(time-period? OBJECT)</procedure>
450
451Is {{OBJECT}} a time-period?
452
453===== time-period-null?
454
455<procedure>(time-period-null? TIME-PERIOD)</procedure>
456
457Is the {{TIME-PERIOD}} null?
458
459===== time-period-length
460
461<procedure>(time-period-length TIME-PERIOD)</procedure>
462
463Returns the time-duration of the {{TIME-PERIOD}}.
464
465===== time-period=?
466
467<procedure>(time-period=? TIME-PERIOD-1 TIME-PERIOD-2)</procedure>
468
469Does {{TIME-PERIOD-1}} begin & end with {{TIME-PERIOD-2}}?
470
471===== time-period<?
472
473<procedure>(time-period<? TIME-PERIOD-1 TIME-PERIOD-2)</procedure>
474
475Does {{TIME-PERIOD-1}} end before {{TIME-PERIOD-2}} begins?
476
477===== time-period>?
478
479<procedure>(time-period>? TIME-PERIOD-1 TIME-PERIOD-2)</procedure>
480
481Does {{TIME-PERIOD-1}} begin after {{TIME-PERIOD-2}} ends?
482
483===== time-period<=?
484
485<procedure>(time-period<=? TIME-PERIOD-1 TIME-PERIOD-2)</procedure>
486
487Does {{TIME-PERIOD-1}} end on or before {{TIME-PERIOD-2}} begins?
488
489===== time-period>=?
490
491<procedure>(time-period>=? TIME-PERIOD-1 TIME-PERIOD-2)</procedure>
492
493Does {{TIME-PERIOD-1}} begin on or after {{TIME-PERIOD-2}} ends?
494
495===== time-period-preceding
496
497<procedure>(time-period-preceding TIME-PERIOD-1 TIME-PERIOD-2)</procedure>
498
499Return the portion of {{TIME-PERIOD-1}} before {{TIME-PERIOD-2}} or {{#f}} when
500it doesn't precede.
501
502===== time-period-succeeding
503
504<procedure>(time-period-succeeding TIME-PERIOD-1 TIME-PERIOD-2)</procedure>
505
506Return the portion of {{TIME-PERIOD-1}} after {{TIME-PERIOD-2}} or {{#f}} when
507it doesn't succeed.
508
509===== time-period-contains/period?
510
511<procedure>(time-period-contains/period? TIME-PERIOD-1 TIME-PERIOD-2)</procedure>
512
513Is {{TIME-PERIOD-2}} within {{TIME-PERIOD-1}}?
514
515===== time-period-contains/time?
516
517<procedure>(time-period-contains/time? TIME-PERIOD TIME)</procedure>
518
519Is {{TIME}} within {{TIME-PERIOD}}?
520
521{{TIME}} is converted to a compatible clock-type if possible.
522
523===== time-period-contains/date?
524
525<procedure>(time-period-contains/date? TIME-PERIOD DATE)</procedure>
526
527Is {{DATE}} within {{TIME-PERIOD}}?
528
529{{DATE}} is converted to a compatible time if possible.
530
531===== time-period-contains?
532
533<procedure>(time-period-contains? TIME-PERIOD OBJECT)</procedure>
534
535Is {{OBJECT}} within {{TIME-PERIOD}}?
536
537{{OBJECT}} maybe a time, date, or time-period.
538
539===== time-period-intersects?
540
541<procedure>(time-period-intersects? TIME-PERIOD-1 TIME-PERIOD-2)</procedure>
542
543Does {{TIME-PERIOD-2}} overlap {{TIME-PERIOD-1}}?
544
545===== time-period-intersection
546
547<procedure>(time-period-intersection TIME-PERIOD-1 TIME-PERIOD-2)</procedure>
548
549The overlapping time-period of {{TIME-PERIOD-2}} and {{TIME-PERIOD-1}}, or
550{{#f}} when no overlap.
551
552===== time-period-union
553
554<procedure>(time-period-union TIME-PERIOD-1 TIME-PERIOD-2)</procedure>
555
556Returns the time-period spanned by {{TIME-PERIOD-1}} and {{TIME-PERIOD-2}}, or
557{{#f}} when they do not intersect.
558
559===== time-period-span
560
561<procedure>(time-period-span TIME-PERIOD-1 TIME-PERIOD-2)</procedure>
562
563Returns the time-period spanned by {{TIME-PERIOD-1}} and {{TIME-PERIOD-2}},
564including any gaps.
565
566===== time-period-shift
567
568<procedure>(time-period-shift TIME-PERIOD DURATION)</procedure>
569
570Returns a copy of {{TIME-PERIOD}} shifted by {{DURATION}}.
571
572===== time-period-shift!
573
574<procedure>(time-period-shift! TIME-PERIOD DURATION)</procedure>
575
576Returns {{TIME-PERIOD}} shifted by {{DURATION}}.
577
578=== Input/Output Procedures
579
580<enscript language=scheme>
581(require-extension srfi-19-io)
582</enscript>
583
584===== format-date
585
586<procedure>(format-date DESTINATION DATE-FORMAT-STRING [DATE])</procedure>
587
588Displays a text form of the {{DATE}} on the {{DESTINATION}} using the
589{{DATE-FORMAT-STRING}}.
590
591When the destination is {{#t}} the {{(current-output-port)}} is used, and the
592date object must be specified.
593
594When the destination is a string the {{DATE-FORMAT-STRING}} value must be a
595date object, the {{DESTINATION}} value is used as the {{DATE-FORMAT-STRING}},
596and the result is returned as a string.
597
598When the destination is a port it must be an {{output-port}}, and the date
599object must be specified. When the destination is a number the
600{{(current-error-port)}} is the destination, and the {{DATE}} object must be
601specified.
602
603When the destination is {{#f}} the result is returned as a string, and the
604{{DATE}} object must be specified.
605
606===== scan-date
607
608<procedure>(scan-date SOURCE TEMPLATE-STRING)</procedure>
609
610Reads a text form of a date from the {{SOURCE}}, following the
611{{TEMPLATE-STRING}}, and returns a date object.
612
613When the source is {{#t}} the {{(current-input-port)}} is used.
614
615When the source is a port it must be an {{input-port}}.
616
617When the source is string it should be a date text form.
618
619
620== Usage
621
622This loads all modules.
623
624<enscript language=scheme>
625(require-extension srfi-19
626</enscript>
627
628
629== Examples
630
631
632== Notes
633
634* 31 December 1 BCE + 1 day => 1 January 1 CE. There is no year 0. Unlike the
635ISO 8601 convention do not subtract 1 when converting a year BCE to a SRFI-19
636year, just negate the year.
637
638* The SRFI-18 {{current-time}} and {{time?}} bindings conflict with SRFI-19
639bindings.
640
641* The SRFI-18 time object is not accepted except by the conversion procedures.
642
643* The expression {{(time=? (seconds->time/type (nanoseconds->seconds
644(time->nanoseconds <time-duration>))) <time-duration>)}} might be {{#f}}, due
645to the use of inexact arithmetic.
646
647* Be careful using the procedures that return some form of 'julian-day'. These
648are implemented using the full numeric tower and  '''will''' return rational
649numbers. Performing arithmetic with such a result will require the "numbers"
650egg. See the file "srfi-19-test.scm" in this egg for an example.
651
652* This will be a problem with code that assumes fixnum and/or flonum '''only'''
653numbers. Perhaps an intermediate file that wraps any 'julian-day' calls and
654coerces to an inexact number. Use the wrapped 'julian-day' call in the
655problematic code.
656
657
658== Requirements
659
660[[locale]]
661[[srfi-29]]
662[[miscmacros]]
663[[numbers]]
664
665== Bugs and Limitations
666
667* Local timezone information is not necessarily valid for historic dates and
668problematic for future dates. Daylight saving time is especially an issue.
669Conversion of a time or seconds value to a local date will use the current
670timezone offset value. The current offset will reflect the daylight saving time
671status. So target dates outside of the DST period will be converted
672incorrectly!
673
674* Will not read years less than 1 properly. The ISO 8601 year convention for
675years 1 BCE and before and years 10000 CE and after is not supported.
676
677
678== Author
679
680[[kon lovett]]
681
682
683== Version history
684
685; 2.9.0 : Inlining of "leap-second-delta" algorithm. Needs release 0.5.0 of "locale".
686; 2.8.1 : Updated 'tai-utc.dat'.
687; 2.8.0 : Timezone locale creation removed. Removed 'make-local-timezone-locale'. Deprecated 'make-timezone-locale' & 'timezone-locale?'.
688; 2.7.1 : Fix for 'add/subtract-duration[!].
689; 2.7.0 : Replaced date comparison w/ a field by field algorithm. Removed local-timezone-info, local-timezone-name, local-timezone-offset, and local-timezone-dst?.
690; 2.6.11 : Printing of "xxx.0" => xxx. More use of fixnum ops in srfi-19-io.
691; 2.6.10 : Dropped :optional.
692; 2.6.9 : Needs Chicken 2.610 for MacOS X & Windows.
693; 2.6.8 : Bug fix for make-date supplied dst flag. Added Bugs section.
694; 2.6.7 : Uses fixnum arithmetic where possible. Added time->julian-day, time->modified-julian-day, date comparisons. Bug fix for multiply-duration, divide-duration, & make-duration. Changed read-leap-second-table to required filename parameter.
695; 2.6.6 : Bug fix for time<=? & time>=?. Added time-period-preceding & time-period-succeeding. Split periods into srfi-19-period.
696; 2.6.5 : Bug fix for platforms not MacOS X, timezone offset was sign reversed.
697; 2.6.4 : Bug fix to time ctors/setters - allowed negative nanoseconds. Added make-local-timezone-locale w/ special case for platforms not Windows or Macintosh. Made local-timezone-locale a parameter.
698; 2.6.3 : Made time-max & time-min n-ary. Added make-null-time-period, time-negative?, time-positive?, time-zero?. Bug fix for local-timezone-offset [reported by Hans Bulfone]
699; 2.6.2 : Bug fix for local-timezone-locale, seconds->date/type, current-nanoseconds, & current-date [reported by Hans Bulfone]
700; 2.6.1 : Deprecated local-timezone-info, local-timezone-name, local-timezone-offset, and local-timezone-dst?. Bug fix for milliseconds->time. Bug fix for current-date when no tz-locale. [reported by Graham Fawcett]
701; 2.6 : Added time-period, date arithmetic, duration routines, fix for possible seconds limit in time object
702; 2.5 : Added Dutch locale, ISO-8601 conversion bug fix, 'date-year-day' bug fix [thanks to Arno Peters]
703; 2.4 : Removed annoying warnings, made srfi-19 an umbrella - uses -core & -io
704; 2.3 : Date dst? field, timezone-locale structure accessors
705; 2.2 : Bug fix for no local timezone setting situation [reported by Mario Domenech Goulart]
706; 2.1 : Bug fix for ->fixnum [reported by Mario Domenech Goulart]
707; 2.0 : Removed I/O routines to own extension
708; 1.9 : Fix, in conjunction w/ srfi-29, for locale details
709; 1.8 : Version removed
710; 1.7 : Brazilian Portuguese [thanks to Mario Domenech Goulart]
711; 1.6 : Bug fix for inexact seconds in time->date [thanks to Peter Bex]
712; 1.5 : Bug fix for compiled use
713; 1.4 : Exports
714; 1.3 : Bug fix
715; 1.2 : Slightly smaller and faster
716; 1.1 : Some SRFI-18 conflict reduction
717; 1.0 : Initial release
718
719
720== License
721
722Copyright (C) 2009 Kon Lovett.  All rights reserved.
723
724Permission is hereby granted, free of charge, to any person obtaining a
725copy of this software and associated documentation files (the Software),
726to deal in the Software without restriction, including without limitation
727the rights to use, copy, modify, merge, publish, distribute, sublicense,
728and/or sell copies of the Software, and to permit persons to whom the
729Software is furnished to do so, subject to the following conditions:
730
731The above copyright notice and this permission notice shall be included
732in all copies or substantial portions of the Software.
733
734THE SOFTWARE IS PROVIDED ASIS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
735IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
736FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
737THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
738OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
739ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
740OTHER DEALINGS IN THE SOFTWARE.
741
742Copyright (C) I/NET, Inc. (2000, 2002, 2003). All Rights Reserved.
743Copyright (C) Neodesic Corporation (2000). All Rights Reserved.
744
745This document and translations of it may be copied and furnished to others,
746and derivative works that comment on or otherwise explain it or assist in its
747implementation may be prepared, copied, published and distributed, in whole or
748in part, without restriction of any kind, provided that the above copyright
749notice and this paragraph are included on all such copies and derivative works.
750However, this document itself may not be modified in any way, such as by
751removing the copyright notice or references to the Scheme Request For
752Implementation process or editors, except as needed for the purpose of
753developing SRFIs in which case the procedures for copyrights defined in the SRFI
754process must be followed, or as required to translate it into languages other
755than English.
756
757The limited permissions granted above are perpetual and will not be revoked
758by the authors or their successors or assigns.
759
760This document and the information contained herein is provided on an AS IS
761basis and THE AUTHOR AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR
762IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
763INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
764MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Note: See TracBrowser for help on using the repository browser.