0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68 #!/usr/bin/tclsh
0010: 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .# -------------
0020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 -----------.#.#
0060: 74 65 73 74 2d 70 65 72 66 6f 72 6d 61 6e 63 65 test-performance
0070: 2e 74 63 6c 20 2d 2d 0a 23 20 0a 23 20 20 54 68 .tcl --.# .# Th
0080: 69 73 20 66 69 6c 65 20 70 72 6f 76 69 64 65 73 is file provides
0090: 20 63 6f 6d 6d 6f 6e 20 70 65 72 66 6f 72 6d 61 common performa
00a0: 6e 63 65 20 74 65 73 74 73 20 66 6f 72 20 63 6f nce tests for co
00b0: 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 63 6c 2d mparison of tcl-
00c0: 73 70 65 65 64 0a 23 20 20 64 65 67 72 61 64 61 speed.# degrada
00d0: 74 69 6f 6e 20 62 79 20 73 77 69 74 63 68 69 6e tion by switchin
00e0: 67 20 62 65 74 77 65 65 6e 20 62 72 61 6e 63 68 g between branch
00f0: 65 73 2e 0a 23 20 20 28 63 75 72 72 65 6e 74 6c es..# (currentl
0100: 79 20 66 6f 72 20 63 6c 6f 63 6b 20 65 6e 73 65 y for clock ense
0110: 6d 62 6c 65 20 6f 6e 6c 79 29 0a 23 0a 23 20 2d mble only).#.# -
0120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0160: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 0a 23 20 43 6f 70 -------.# .# Cop
0170: 79 72 69 67 68 74 20 28 63 29 20 32 30 31 34 20 yright (c) 2014
0180: 53 65 72 67 20 47 2e 20 42 72 65 73 74 65 72 20 Serg G. Brester
0190: 28 61 6b 61 20 73 65 62 72 65 73 29 0a 23 20 0a (aka sebres).# .
01a0: 23 20 53 65 65 20 74 68 65 20 66 69 6c 65 20 22 # See the file "
01b0: 6c 69 63 65 6e 73 65 2e 74 65 72 6d 73 22 20 66 license.terms" f
01c0: 6f 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f or information o
01d0: 6e 20 75 73 61 67 65 20 61 6e 64 20 72 65 64 69 n usage and redi
01e0: 73 74 72 69 62 75 74 69 6f 6e 0a 23 20 6f 66 20 stribution.# of
01f0: 74 68 69 73 20 66 69 6c 65 2e 0a 23 20 0a 0a 61 this file..# ..a
0200: 72 72 61 79 20 73 65 74 20 69 6e 20 7b 2d 74 69 rray set in {-ti
0210: 6d 65 20 35 30 30 7d 0a 69 66 20 7b 5b 69 6e 66 me 500}.if {[inf
0220: 6f 20 65 78 69 73 74 73 20 3a 3a 61 72 67 76 30 o exists ::argv0
0230: 5d 20 26 26 20 5b 66 69 6c 65 20 74 61 69 6c 20 ] && [file tail
0240: 24 3a 3a 61 72 67 76 30 5d 20 65 71 20 5b 66 69 $::argv0] eq [fi
0250: 6c 65 20 74 61 69 6c 20 5b 69 6e 66 6f 20 73 63 le tail [info sc
0260: 72 69 70 74 5d 5d 7d 20 7b 0a 20 20 61 72 72 61 ript]]} {. arra
0270: 79 20 73 65 74 20 69 6e 20 24 61 72 67 76 0a 7d y set in $argv.}
0280: 0a 0a 23 23 20 63 6f 6d 6d 6f 6e 20 74 65 73 74 ..## common test
0290: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 66 72 61 performance fra
02a0: 6d 65 77 6f 72 6b 3a 0a 69 66 20 7b 21 5b 6e 61 mework:.if {![na
02b0: 6d 65 73 70 61 63 65 20 65 78 69 73 74 73 20 3a mespace exists :
02c0: 3a 74 63 6c 54 65 73 74 50 65 72 66 5d 7d 20 7b :tclTestPerf]} {
02d0: 0a 20 20 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 . source [file
02e0: 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 join [file dirna
02f0: 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d me [info script]
0300: 5d 20 74 65 73 74 2d 70 65 72 66 6f 72 6d 61 6e ] test-performan
0310: 63 65 2e 74 63 6c 5d 0a 7d 0a 0a 6e 61 6d 65 73 ce.tcl].}..names
0320: 70 61 63 65 20 65 76 61 6c 20 3a 3a 74 63 6c 54 pace eval ::tclT
0330: 65 73 74 50 65 72 66 2d 54 63 6c 43 6c 6f 63 6b estPerf-TclClock
0340: 20 7b 0a 0a 6e 61 6d 65 73 70 61 63 65 20 70 61 {..namespace pa
0350: 74 68 20 7b 3a 3a 74 63 6c 54 65 73 74 50 65 72 th {::tclTestPer
0360: 66 7d 0a 0a 23 23 20 73 65 74 20 74 65 73 74 69 f}..## set testi
0370: 6e 67 20 64 65 66 61 75 6c 74 73 3a 0a 73 65 74 ng defaults:.set
0380: 20 3a 3a 65 6e 76 28 54 43 4c 5f 54 5a 29 20 3a ::env(TCL_TZ) :
0390: 43 45 54 0a 0a 23 20 77 61 72 6d 2d 75 70 20 69 CET..# warm-up i
03a0: 6e 74 65 72 70 65 74 65 72 20 63 6f 6d 70 69 6c nterpeter compil
03b0: 65 72 20 65 6e 76 2c 20 63 6c 6f 63 6b 20 70 6c er env, clock pl
03c0: 61 74 66 6f 72 6d 2d 72 65 6c 61 74 65 64 20 66 atform-related f
03d0: 65 61 74 75 72 65 73 3a 0a 0a 23 23 20 77 61 72 eatures:..## war
03e0: 6d 2d 75 70 20 74 65 73 74 2d 72 65 6c 61 74 65 m-up test-relate
03f0: 64 20 66 65 61 74 75 72 65 73 20 28 6c 6f 61 64 d features (load
0400: 20 63 6c 6f 63 6b 2e 74 63 6c 2c 20 73 79 73 74 clock.tcl, syst
0410: 65 6d 20 7a 6f 6e 65 73 2c 20 6c 6f 63 61 6c 65 em zones, locale
0420: 73 2c 20 65 74 63 2e 29 3a 0a 63 6c 6f 63 6b 20 s, etc.):.clock
0430: 73 63 61 6e 20 22 22 20 2d 67 6d 74 20 31 0a 63 scan "" -gmt 1.c
0440: 6c 6f 63 6b 20 73 63 61 6e 20 22 22 0a 63 6c 6f lock scan "".clo
0450: 63 6b 20 73 63 61 6e 20 22 22 20 2d 74 69 6d 65 ck scan "" -time
0460: 7a 6f 6e 65 20 3a 43 45 54 0a 63 6c 6f 63 6b 20 zone :CET.clock
0470: 73 63 61 6e 20 22 22 20 2d 66 6f 72 6d 61 74 20 scan "" -format
0480: 22 22 20 2d 6c 6f 63 61 6c 65 20 65 6e 0a 63 6c "" -locale en.cl
0490: 6f 63 6b 20 73 63 61 6e 20 22 22 20 2d 66 6f 72 ock scan "" -for
04a0: 6d 61 74 20 22 22 20 2d 6c 6f 63 61 6c 65 20 64 mat "" -locale d
04b0: 65 0a 0a 23 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d e..## ----------
04c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
04d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
04e0: 0a 0a 70 72 6f 63 20 74 65 73 74 2d 66 6f 72 6d ..proc test-form
04f0: 61 74 20 7b 7b 72 65 70 74 69 6d 65 20 31 30 30 at {{reptime 100
0500: 30 7d 7d 20 7b 0a 20 20 5f 74 65 73 74 5f 72 75 0}} {. _test_ru
0510: 6e 20 24 72 65 70 74 69 6d 65 20 7b 0a 20 20 20 n $reptime {.
0520: 20 23 20 46 6f 72 6d 61 74 20 3a 20 73 68 6f 72 # Format : shor
0530: 74 2c 20 77 65 65 6b 20 6f 6e 6c 79 20 28 69 6e t, week only (in
0540: 20 67 6d 74 29 0a 20 20 20 20 7b 63 6c 6f 63 6b gmt). {clock
0550: 20 66 6f 72 6d 61 74 20 31 34 38 32 35 32 35 39 format 14825259
0560: 33 36 20 2d 66 6f 72 6d 61 74 20 22 25 75 22 20 36 -format "%u"
0570: 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 46 6f -gmt 1}. # Fo
0580: 72 6d 61 74 20 3a 20 73 68 6f 72 74 2c 20 77 65 rmat : short, we
0590: 65 6b 20 6f 6e 6c 79 20 28 73 79 73 74 65 6d 20 ek only (system
05a0: 7a 6f 6e 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b zone). {clock
05b0: 20 66 6f 72 6d 61 74 20 31 34 38 32 35 32 35 39 format 14825259
05c0: 33 36 20 2d 66 6f 72 6d 61 74 20 22 25 75 22 7d 36 -format "%u"}
05d0: 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 . # Format :
05e0: 73 68 6f 72 74 2c 20 77 65 65 6b 20 6f 6e 6c 79 short, week only
05f0: 20 28 43 45 53 54 29 0a 20 20 20 20 7b 63 6c 6f (CEST). {clo
0600: 63 6b 20 66 6f 72 6d 61 74 20 31 34 38 32 35 32 ck format 148252
0610: 35 39 33 36 20 2d 66 6f 72 6d 61 74 20 22 25 75 5936 -format "%u
0620: 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 43 45 54 " -timezone :CET
0630: 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 3a }. # Format :
0640: 20 64 61 74 65 20 6f 6e 6c 79 20 28 69 6e 20 67 date only (in g
0650: 6d 74 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 mt). {clock f
0660: 6f 72 6d 61 74 20 31 34 38 32 35 32 35 39 33 36 ormat 1482525936
0670: 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d 2d -format "%Y-%m-
0680: 25 64 22 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 %d" -gmt 1}.
0690: 23 20 46 6f 72 6d 61 74 20 3a 20 64 61 74 65 20 # Format : date
06a0: 6f 6e 6c 79 20 28 73 79 73 74 65 6d 20 7a 6f 6e only (system zon
06b0: 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f e). {clock fo
06c0: 72 6d 61 74 20 31 34 38 32 35 32 35 39 33 36 20 rmat 1482525936
06d0: 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d 2d 25 -format "%Y-%m-%
06e0: 64 22 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 d"}. # Format
06f0: 20 3a 20 64 61 74 65 20 6f 6e 6c 79 20 28 43 45 : date only (CE
0700: 53 54 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 ST). {clock f
0710: 6f 72 6d 61 74 20 31 34 38 32 35 32 35 39 33 36 ormat 1482525936
0720: 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d 2d -format "%Y-%m-
0730: 25 64 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 43 %d" -timezone :C
0740: 45 54 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 ET}. # Format
0750: 20 3a 20 74 69 6d 65 20 6f 6e 6c 79 20 28 69 6e : time only (in
0760: 20 67 6d 74 29 0a 20 20 20 20 7b 63 6c 6f 63 6b gmt). {clock
0770: 20 66 6f 72 6d 61 74 20 31 34 38 32 35 32 35 39 format 14825259
0780: 33 36 20 2d 66 6f 72 6d 61 74 20 22 25 48 3a 25 36 -format "%H:%
0790: 4d 22 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 M" -gmt 1}. #
07a0: 20 46 6f 72 6d 61 74 20 3a 20 74 69 6d 65 20 6f Format : time o
07b0: 6e 6c 79 20 28 73 79 73 74 65 6d 20 7a 6f 6e 65 nly (system zone
07c0: 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 ). {clock for
07d0: 6d 61 74 20 31 34 38 32 35 32 35 39 33 36 20 2d mat 1482525936 -
07e0: 66 6f 72 6d 61 74 20 22 25 48 3a 25 4d 22 7d 0a format "%H:%M"}.
07f0: 20 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 74 # Format : t
0800: 69 6d 65 20 6f 6e 6c 79 20 28 43 45 53 54 29 0a ime only (CEST).
0810: 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 {clock forma
0820: 74 20 31 34 38 32 35 32 35 39 33 36 20 2d 66 6f t 1482525936 -fo
0830: 72 6d 61 74 20 22 25 48 3a 25 4d 22 20 2d 74 69 rmat "%H:%M" -ti
0840: 6d 65 7a 6f 6e 65 20 3a 43 45 54 7d 0a 20 20 20 mezone :CET}.
0850: 20 23 20 46 6f 72 6d 61 74 20 3a 20 74 69 6d 65 # Format : time
0860: 20 6f 6e 6c 79 20 28 69 6e 20 67 6d 74 29 0a 20 only (in gmt).
0870: 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 {clock format
0880: 20 31 34 38 32 35 32 35 39 33 36 20 2d 66 6f 72 1482525936 -for
0890: 6d 61 74 20 22 25 48 3a 25 4d 3a 25 53 22 20 2d mat "%H:%M:%S" -
08a0: 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 46 6f 72 gmt 1}. # For
08b0: 6d 61 74 20 3a 20 74 69 6d 65 20 6f 6e 6c 79 20 mat : time only
08c0: 28 73 79 73 74 65 6d 20 7a 6f 6e 65 29 0a 20 20 (system zone).
08d0: 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 {clock format
08e0: 31 34 38 32 35 32 35 39 33 36 20 2d 66 6f 72 6d 1482525936 -form
08f0: 61 74 20 22 25 48 3a 25 4d 3a 25 53 22 7d 0a 20 at "%H:%M:%S"}.
0900: 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 74 69 # Format : ti
0910: 6d 65 20 6f 6e 6c 79 20 28 43 45 53 54 29 0a 20 me only (CEST).
0920: 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 {clock format
0930: 20 31 34 38 32 35 32 35 39 33 36 20 2d 66 6f 72 1482525936 -for
0940: 6d 61 74 20 22 25 48 3a 25 4d 3a 25 53 22 20 2d mat "%H:%M:%S" -
0950: 74 69 6d 65 7a 6f 6e 65 20 3a 43 45 54 7d 0a 20 timezone :CET}.
0960: 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 64 65 # Format : de
0970: 66 61 75 6c 74 20 28 69 6e 20 67 6d 74 29 0a 20 fault (in gmt).
0980: 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 {clock format
0990: 20 31 34 38 32 35 32 35 39 33 36 20 2d 67 6d 74 1482525936 -gmt
09a0: 20 31 20 2d 6c 6f 63 61 6c 65 20 65 6e 7d 0a 20 1 -locale en}.
09b0: 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 64 65 # Format : de
09c0: 66 61 75 6c 74 20 28 73 79 73 74 65 6d 20 7a 6f fault (system zo
09d0: 6e 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 ne). {clock f
09e0: 6f 72 6d 61 74 20 31 34 38 32 35 32 35 39 33 36 ormat 1482525936
09f0: 20 2d 6c 6f 63 61 6c 65 20 65 6e 7d 0a 20 20 20 -locale en}.
0a00: 20 23 20 46 6f 72 6d 61 74 20 3a 20 64 65 66 61 # Format : defa
0a10: 75 6c 74 20 28 43 45 53 54 29 0a 20 20 20 20 7b ult (CEST). {
0a20: 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 31 34 38 clock format 148
0a30: 32 35 32 35 39 33 36 20 2d 74 69 6d 65 7a 6f 6e 2525936 -timezon
0a40: 65 20 3a 43 45 54 20 2d 6c 6f 63 61 6c 65 20 65 e :CET -locale e
0a50: 6e 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 n}. # Format
0a60: 3a 20 49 53 4f 20 64 61 74 65 2d 74 69 6d 65 20 : ISO date-time
0a70: 28 69 6e 20 67 6d 74 2c 20 6e 75 6d 65 72 69 63 (in gmt, numeric
0a80: 20 7a 6f 6e 65 29 0a 20 20 20 20 7b 63 6c 6f 63 zone). {cloc
0a90: 6b 20 66 6f 72 6d 61 74 20 31 32 34 36 33 37 39 k format 1246379
0aa0: 34 30 30 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 400 -format "%Y-
0ab0: 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 20 25 %m-%dT%H:%M:%S %
0ac0: 7a 22 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 z" -gmt 1}. #
0ad0: 20 46 6f 72 6d 61 74 20 3a 20 49 53 4f 20 64 61 Format : ISO da
0ae0: 74 65 2d 74 69 6d 65 20 28 73 79 73 74 65 6d 20 te-time (system
0af0: 7a 6f 6e 65 2c 20 43 45 53 54 2c 20 6e 75 6d 65 zone, CEST, nume
0b00: 72 69 63 20 7a 6f 6e 65 29 0a 20 20 20 20 7b 63 ric zone). {c
0b10: 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 31 32 34 36 lock format 1246
0b20: 33 37 39 34 30 30 20 2d 66 6f 72 6d 61 74 20 22 379400 -format "
0b30: 25 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 %Y-%m-%dT%H:%M:%
0b40: 53 20 25 7a 22 7d 0a 20 20 20 20 23 20 46 6f 72 S %z"}. # For
0b50: 6d 61 74 20 3a 20 49 53 4f 20 64 61 74 65 2d 74 mat : ISO date-t
0b60: 69 6d 65 20 28 43 45 53 54 2c 20 6e 75 6d 65 72 ime (CEST, numer
0b70: 69 63 20 7a 6f 6e 65 29 0a 20 20 20 20 7b 63 6c ic zone). {cl
0b80: 6f 63 6b 20 66 6f 72 6d 61 74 20 31 32 34 36 33 ock format 12463
0b90: 37 39 34 30 30 20 2d 66 6f 72 6d 61 74 20 22 25 79400 -format "%
0ba0: 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 Y-%m-%dT%H:%M:%S
0bb0: 20 25 7a 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a %z" -timezone :
0bc0: 43 45 54 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 CET}. # Forma
0bd0: 74 20 3a 20 49 53 4f 20 64 61 74 65 2d 74 69 6d t : ISO date-tim
0be0: 65 20 28 73 79 73 74 65 6d 20 7a 6f 6e 65 2c 20 e (system zone,
0bf0: 43 45 53 54 29 0a 20 20 20 20 7b 63 6c 6f 63 6b CEST). {clock
0c00: 20 66 6f 72 6d 61 74 20 31 32 34 36 33 37 39 34 format 12463794
0c10: 30 30 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 00 -format "%Y-%
0c20: 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 20 25 5a m-%dT%H:%M:%S %Z
0c30: 22 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 "}. # Format
0c40: 3a 20 6a 75 6c 69 61 6e 20 64 61 79 20 77 69 74 : julian day wit
0c50: 68 20 74 69 6d 65 20 28 69 6e 20 67 6d 74 29 3a h time (in gmt):
0c60: 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d . {clock form
0c70: 61 74 20 31 32 34 36 33 37 39 34 31 35 20 2d 66 at 1246379415 -f
0c80: 6f 72 6d 61 74 20 22 25 4a 20 25 48 3a 25 4d 3a ormat "%J %H:%M:
0c90: 25 53 22 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 %S" -gmt 1}.
0ca0: 23 20 46 6f 72 6d 61 74 20 3a 20 6a 75 6c 69 61 # Format : julia
0cb0: 6e 20 64 61 79 20 77 69 74 68 20 74 69 6d 65 20 n day with time
0cc0: 28 73 79 73 74 65 6d 20 7a 6f 6e 65 29 3a 0a 20 (system zone):.
0cd0: 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 {clock format
0ce0: 20 31 32 34 36 33 37 39 34 31 35 20 2d 66 6f 72 1246379415 -for
0cf0: 6d 61 74 20 22 25 4a 20 25 48 3a 25 4d 3a 25 53 mat "%J %H:%M:%S
0d00: 22 7d 0a 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 "}.. # Format
0d10: 20 3a 20 6c 6f 63 61 6c 65 20 64 61 74 65 2d 74 : locale date-t
0d20: 69 6d 65 20 28 65 6e 29 3a 0a 20 20 20 20 7b 63 ime (en):. {c
0d30: 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 31 32 34 36 lock format 1246
0d40: 33 37 39 34 31 35 20 2d 66 6f 72 6d 61 74 20 22 379415 -format "
0d50: 25 78 20 25 58 22 20 2d 6c 6f 63 61 6c 65 20 65 %x %X" -locale e
0d60: 6e 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 n}. # Format
0d70: 3a 20 6c 6f 63 61 6c 65 20 64 61 74 65 2d 74 69 : locale date-ti
0d80: 6d 65 20 28 64 65 29 3a 0a 20 20 20 20 7b 63 6c me (de):. {cl
0d90: 6f 63 6b 20 66 6f 72 6d 61 74 20 31 32 34 36 33 ock format 12463
0da0: 37 39 34 31 35 20 2d 66 6f 72 6d 61 74 20 22 25 79415 -format "%
0db0: 78 20 25 58 22 20 2d 6c 6f 63 61 6c 65 20 64 65 x %X" -locale de
0dc0: 7d 0a 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 }.. # Format
0dd0: 3a 20 6c 6f 63 61 6c 65 20 6c 6f 6f 6b 75 70 20 : locale lookup
0de0: 74 61 62 6c 65 20 6d 6f 6e 74 68 3a 0a 20 20 20 table month:.
0df0: 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 31 {clock format 1
0e00: 32 34 36 33 37 39 34 30 30 20 2d 66 6f 72 6d 61 246379400 -forma
0e10: 74 20 22 25 62 22 20 2d 6c 6f 63 61 6c 65 20 65 t "%b" -locale e
0e20: 6e 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 n -gmt 1}. #
0e30: 46 6f 72 6d 61 74 20 3a 20 6c 6f 63 61 6c 65 20 Format : locale
0e40: 6c 6f 6f 6b 75 70 20 32 20 74 61 62 6c 65 73 20 lookup 2 tables
0e50: 2d 20 6d 6f 6e 74 68 20 61 6e 64 20 64 61 79 3a - month and day:
0e60: 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d . {clock form
0e70: 61 74 20 31 32 34 36 33 37 39 34 30 30 20 2d 66 at 1246379400 -f
0e80: 6f 72 6d 61 74 20 22 25 62 20 25 4f 64 22 20 2d ormat "%b %Od" -
0e90: 6c 6f 63 61 6c 65 20 65 6e 20 2d 67 6d 74 20 31 locale en -gmt 1
0ea0: 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 3a }. # Format :
0eb0: 20 6c 6f 63 61 6c 65 20 6c 6f 6f 6b 75 70 20 33 locale lookup 3
0ec0: 20 74 61 62 6c 65 73 20 2d 20 77 65 65 6b 2c 20 tables - week,
0ed0: 6d 6f 6e 74 68 20 61 6e 64 20 64 61 79 3a 0a 20 month and day:.
0ee0: 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 {clock format
0ef0: 20 31 32 34 36 33 37 39 34 30 30 20 2d 66 6f 72 1246379400 -for
0f00: 6d 61 74 20 22 25 61 20 25 62 20 25 4f 64 22 20 mat "%a %b %Od"
0f10: 2d 6c 6f 63 61 6c 65 20 65 6e 20 2d 67 6d 74 20 -locale en -gmt
0f20: 31 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 1}. # Format
0f30: 3a 20 6c 6f 63 61 6c 65 20 6c 6f 6f 6b 75 70 20 : locale lookup
0f40: 34 20 74 61 62 6c 65 73 20 2d 20 77 65 65 6b 2c 4 tables - week,
0f50: 20 6d 6f 6e 74 68 2c 20 64 61 79 20 61 6e 64 20 month, day and
0f60: 79 65 61 72 3a 0a 20 20 20 20 7b 63 6c 6f 63 6b year:. {clock
0f70: 20 66 6f 72 6d 61 74 20 31 32 34 36 33 37 39 34 format 12463794
0f80: 30 30 20 2d 66 6f 72 6d 61 74 20 22 25 61 20 25 00 -format "%a %
0f90: 62 20 25 4f 64 20 25 4f 79 22 20 2d 6c 6f 63 61 b %Od %Oy" -loca
0fa0: 6c 65 20 65 6e 20 2d 67 6d 74 20 31 7d 0a 0a 20 le en -gmt 1}..
0fb0: 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 64 79 # Format : dy
0fc0: 6e 61 6d 69 63 20 63 6c 6f 63 6b 20 76 61 6c 75 namic clock valu
0fd0: 65 20 28 77 69 74 68 6f 75 74 20 63 6f 6e 76 65 e (without conve
0fe0: 72 74 65 72 20 63 61 63 68 65 73 29 3a 0a 20 20 rter caches):.
0ff0: 20 20 73 65 74 75 70 20 7b 73 65 74 20 69 20 30 setup {set i 0
1000: 7d 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 }. {clock for
1010: 6d 61 74 20 5b 69 6e 63 72 20 69 5d 20 2d 66 6f mat [incr i] -fo
1020: 72 6d 61 74 20 22 25 59 2d 25 6d 2d 25 64 54 25 rmat "%Y-%m-%dT%
1030: 48 3a 25 4d 3a 25 53 22 20 2d 6c 6f 63 61 6c 65 H:%M:%S" -locale
1040: 20 65 6e 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 43 en -timezone :C
1050: 45 54 7d 0a 20 20 20 20 63 6c 65 61 6e 75 70 20 ET}. cleanup
1060: 7b 70 75 74 73 20 5b 63 6c 6f 63 6b 20 66 6f 72 {puts [clock for
1070: 6d 61 74 20 24 69 20 2d 66 6f 72 6d 61 74 20 22 mat $i -format "
1080: 25 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 %Y-%m-%dT%H:%M:%
1090: 53 22 20 2d 6c 6f 63 61 6c 65 20 65 6e 20 2d 74 S" -locale en -t
10a0: 69 6d 65 7a 6f 6e 65 20 3a 43 45 54 5d 7d 0a 20 imezone :CET]}.
10b0: 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 64 79 # Format : dy
10c0: 6e 61 6d 69 63 20 63 6c 6f 63 6b 20 76 61 6c 75 namic clock valu
10d0: 65 20 28 77 69 74 68 6f 75 74 20 61 6e 79 20 63 e (without any c
10e0: 6f 6e 76 65 72 74 65 72 20 63 61 63 68 65 73 2c onverter caches,
10f0: 20 7a 6f 6e 65 20 72 61 6e 67 65 20 6f 76 65 72 zone range over
1100: 66 6c 6f 77 29 3a 0a 20 20 20 20 73 65 74 75 70 flow):. setup
1110: 20 7b 73 65 74 20 69 20 30 7d 0a 20 20 20 20 7b {set i 0}. {
1120: 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 69 6e clock format [in
1130: 63 72 20 69 20 38 36 34 30 30 5d 20 2d 66 6f 72 cr i 86400] -for
1140: 6d 61 74 20 22 25 59 2d 25 6d 2d 25 64 54 25 48 mat "%Y-%m-%dT%H
1150: 3a 25 4d 3a 25 53 22 20 2d 6c 6f 63 61 6c 65 20 :%M:%S" -locale
1160: 65 6e 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 43 45 en -timezone :CE
1170: 54 7d 0a 20 20 20 20 63 6c 65 61 6e 75 70 20 7b T}. cleanup {
1180: 70 75 74 73 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d puts [clock form
1190: 61 74 20 24 69 20 2d 66 6f 72 6d 61 74 20 22 25 at $i -format "%
11a0: 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 Y-%m-%dT%H:%M:%S
11b0: 22 20 2d 6c 6f 63 61 6c 65 20 65 6e 20 2d 74 69 " -locale en -ti
11c0: 6d 65 7a 6f 6e 65 20 3a 43 45 54 5d 7d 0a 0a 20 mezone :CET]}..
11d0: 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 64 79 # Format : dy
11e0: 6e 61 6d 69 63 20 66 6f 72 6d 61 74 20 28 63 61 namic format (ca
11f0: 63 68 65 61 62 6c 65 29 0a 20 20 20 20 7b 63 6c cheable). {cl
1200: 6f 63 6b 20 66 6f 72 6d 61 74 20 31 32 34 36 33 ock format 12463
1210: 37 39 34 31 35 20 2d 66 6f 72 6d 61 74 20 5b 73 79415 -format [s
1220: 74 72 69 6e 67 20 74 72 69 6d 20 22 25 64 2e 25 tring trim "%d.%
1230: 6d 2e 25 59 20 25 48 3a 25 4d 3a 25 53 20 22 5d m.%Y %H:%M:%S "]
1240: 20 2d 67 6d 74 20 31 7d 0a 0a 20 20 20 20 23 20 -gmt 1}.. #
1250: 46 6f 72 6d 61 74 20 3a 20 61 6c 6c 20 28 69 6e Format : all (in
1260: 20 67 6d 74 2c 20 6c 6f 63 61 6c 65 20 65 6e 29 gmt, locale en)
1270: 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d . {clock form
1280: 61 74 20 31 34 38 32 35 32 35 39 33 36 20 2d 66 at 1482525936 -f
1290: 6f 72 6d 61 74 20 22 25 25 61 20 3d 20 25 61 20 ormat "%%a = %a
12a0: 7c 20 25 25 41 20 3d 20 25 41 20 7c 20 25 25 62 | %%A = %A | %%b
12b0: 20 3d 20 25 62 20 7c 20 25 25 68 20 3d 20 25 68 = %b | %%h = %h
12c0: 20 7c 20 25 25 42 20 3d 20 25 42 20 7c 20 25 25 | %%B = %B | %%
12d0: 43 20 3d 20 25 43 20 7c 20 25 25 64 20 3d 20 25 C = %C | %%d = %
12e0: 64 20 7c 20 25 25 65 20 3d 20 25 65 20 7c 20 25 d | %%e = %e | %
12f0: 25 67 20 3d 20 25 67 20 7c 20 25 25 47 20 3d 20 %g = %g | %%G =
1300: 25 47 20 7c 20 25 25 48 20 3d 20 25 48 20 7c 20 %G | %%H = %H |
1310: 25 25 49 20 3d 20 25 49 20 7c 20 25 25 6a 20 3d %%I = %I | %%j =
1320: 20 25 6a 20 7c 20 25 25 4a 20 3d 20 25 4a 20 7c %j | %%J = %J |
1330: 20 25 25 6b 20 3d 20 25 6b 20 7c 20 25 25 6c 20 %%k = %k | %%l
1340: 3d 20 25 6c 20 7c 20 25 25 6d 20 3d 20 25 6d 20 = %l | %%m = %m
1350: 7c 20 25 25 4d 20 3d 20 25 4d 20 7c 20 25 25 4e | %%M = %M | %%N
1360: 20 3d 20 25 4e 20 7c 20 25 25 70 20 3d 20 25 70 = %N | %%p = %p
1370: 20 7c 20 25 25 50 20 3d 20 25 50 20 7c 20 25 25 | %%P = %P | %%
1380: 51 20 3d 20 25 51 20 7c 20 25 25 73 20 3d 20 25 Q = %Q | %%s = %
1390: 73 20 7c 20 25 25 53 20 3d 20 25 53 20 7c 20 25 s | %%S = %S | %
13a0: 25 74 20 3d 20 25 74 20 7c 20 25 25 75 20 3d 20 %t = %t | %%u =
13b0: 25 75 20 7c 20 25 25 55 20 3d 20 25 55 20 7c 20 %u | %%U = %U |
13c0: 25 25 56 20 3d 20 25 56 20 7c 20 25 25 77 20 3d %%V = %V | %%w =
13d0: 20 25 77 20 7c 20 25 25 57 20 3d 20 25 57 20 7c %w | %%W = %W |
13e0: 20 25 25 79 20 3d 20 25 79 20 7c 20 25 25 59 20 %%y = %y | %%Y
13f0: 3d 20 25 59 20 7c 20 25 25 7a 20 3d 20 25 7a 20 = %Y | %%z = %z
1400: 7c 20 25 25 5a 20 3d 20 25 5a 20 7c 20 25 25 6e | %%Z = %Z | %%n
1410: 20 3d 20 25 6e 20 7c 20 25 25 45 45 20 3d 20 25 = %n | %%EE = %
1420: 45 45 20 7c 20 25 25 45 43 20 3d 20 25 45 43 20 EE | %%EC = %EC
1430: 7c 20 25 25 45 79 20 3d 20 25 45 79 20 7c 20 25 | %%Ey = %Ey | %
1440: 25 6e 20 3d 20 25 6e 20 7c 20 25 25 4f 64 20 3d %n = %n | %%Od =
1450: 20 25 4f 64 20 7c 20 25 25 4f 65 20 3d 20 25 4f %Od | %%Oe = %O
1460: 65 20 7c 20 25 25 4f 48 20 3d 20 25 4f 48 20 7c e | %%OH = %OH |
1470: 20 25 25 4f 6b 20 3d 20 25 4f 6b 20 7c 20 25 25 %%Ok = %Ok | %%
1480: 4f 49 20 3d 20 25 4f 49 20 7c 20 25 25 4f 6c 20 OI = %OI | %%Ol
1490: 3d 20 25 4f 6c 20 7c 20 25 25 4f 6d 20 3d 20 25 = %Ol | %%Om = %
14a0: 4f 6d 20 7c 20 25 25 4f 4d 20 3d 20 25 4f 4d 20 Om | %%OM = %OM
14b0: 7c 20 25 25 4f 53 20 3d 20 25 4f 53 20 7c 20 25 | %%OS = %OS | %
14c0: 25 4f 75 20 3d 20 25 4f 75 20 7c 20 25 25 4f 77 %Ou = %Ou | %%Ow
14d0: 20 3d 20 25 4f 77 20 7c 20 25 25 4f 79 20 3d 20 = %Ow | %%Oy =
14e0: 25 4f 79 22 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 %Oy" -gmt 1 -loc
14f0: 61 6c 65 20 65 6e 7d 0a 20 20 20 20 23 20 46 6f ale en}. # Fo
1500: 72 6d 61 74 20 3a 20 61 6c 6c 20 28 69 6e 20 43 rmat : all (in C
1510: 45 54 2c 20 6c 6f 63 61 6c 65 20 64 65 29 0a 20 ET, locale de).
1520: 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 {clock format
1530: 20 31 34 38 32 35 32 35 39 33 36 20 2d 66 6f 72 1482525936 -for
1540: 6d 61 74 20 22 25 25 61 20 3d 20 25 61 20 7c 20 mat "%%a = %a |
1550: 25 25 41 20 3d 20 25 41 20 7c 20 25 25 62 20 3d %%A = %A | %%b =
1560: 20 25 62 20 7c 20 25 25 68 20 3d 20 25 68 20 7c %b | %%h = %h |
1570: 20 25 25 42 20 3d 20 25 42 20 7c 20 25 25 43 20 %%B = %B | %%C
1580: 3d 20 25 43 20 7c 20 25 25 64 20 3d 20 25 64 20 = %C | %%d = %d
1590: 7c 20 25 25 65 20 3d 20 25 65 20 7c 20 25 25 67 | %%e = %e | %%g
15a0: 20 3d 20 25 67 20 7c 20 25 25 47 20 3d 20 25 47 = %g | %%G = %G
15b0: 20 7c 20 25 25 48 20 3d 20 25 48 20 7c 20 25 25 | %%H = %H | %%
15c0: 49 20 3d 20 25 49 20 7c 20 25 25 6a 20 3d 20 25 I = %I | %%j = %
15d0: 6a 20 7c 20 25 25 4a 20 3d 20 25 4a 20 7c 20 25 j | %%J = %J | %
15e0: 25 6b 20 3d 20 25 6b 20 7c 20 25 25 6c 20 3d 20 %k = %k | %%l =
15f0: 25 6c 20 7c 20 25 25 6d 20 3d 20 25 6d 20 7c 20 %l | %%m = %m |
1600: 25 25 4d 20 3d 20 25 4d 20 7c 20 25 25 4e 20 3d %%M = %M | %%N =
1610: 20 25 4e 20 7c 20 25 25 70 20 3d 20 25 70 20 7c %N | %%p = %p |
1620: 20 25 25 50 20 3d 20 25 50 20 7c 20 25 25 51 20 %%P = %P | %%Q
1630: 3d 20 25 51 20 7c 20 25 25 73 20 3d 20 25 73 20 = %Q | %%s = %s
1640: 7c 20 25 25 53 20 3d 20 25 53 20 7c 20 25 25 74 | %%S = %S | %%t
1650: 20 3d 20 25 74 20 7c 20 25 25 75 20 3d 20 25 75 = %t | %%u = %u
1660: 20 7c 20 25 25 55 20 3d 20 25 55 20 7c 20 25 25 | %%U = %U | %%
1670: 56 20 3d 20 25 56 20 7c 20 25 25 77 20 3d 20 25 V = %V | %%w = %
1680: 77 20 7c 20 25 25 57 20 3d 20 25 57 20 7c 20 25 w | %%W = %W | %
1690: 25 79 20 3d 20 25 79 20 7c 20 25 25 59 20 3d 20 %y = %y | %%Y =
16a0: 25 59 20 7c 20 25 25 7a 20 3d 20 25 7a 20 7c 20 %Y | %%z = %z |
16b0: 25 25 5a 20 3d 20 25 5a 20 7c 20 25 25 6e 20 3d %%Z = %Z | %%n =
16c0: 20 25 6e 20 7c 20 25 25 45 45 20 3d 20 25 45 45 %n | %%EE = %EE
16d0: 20 7c 20 25 25 45 43 20 3d 20 25 45 43 20 7c 20 | %%EC = %EC |
16e0: 25 25 45 79 20 3d 20 25 45 79 20 7c 20 25 25 6e %%Ey = %Ey | %%n
16f0: 20 3d 20 25 6e 20 7c 20 25 25 4f 64 20 3d 20 25 = %n | %%Od = %
1700: 4f 64 20 7c 20 25 25 4f 65 20 3d 20 25 4f 65 20 Od | %%Oe = %Oe
1710: 7c 20 25 25 4f 48 20 3d 20 25 4f 48 20 7c 20 25 | %%OH = %OH | %
1720: 25 4f 6b 20 3d 20 25 4f 6b 20 7c 20 25 25 4f 49 %Ok = %Ok | %%OI
1730: 20 3d 20 25 4f 49 20 7c 20 25 25 4f 6c 20 3d 20 = %OI | %%Ol =
1740: 25 4f 6c 20 7c 20 25 25 4f 6d 20 3d 20 25 4f 6d %Ol | %%Om = %Om
1750: 20 7c 20 25 25 4f 4d 20 3d 20 25 4f 4d 20 7c 20 | %%OM = %OM |
1760: 25 25 4f 53 20 3d 20 25 4f 53 20 7c 20 25 25 4f %%OS = %OS | %%O
1770: 75 20 3d 20 25 4f 75 20 7c 20 25 25 4f 77 20 3d u = %Ou | %%Ow =
1780: 20 25 4f 77 20 7c 20 25 25 4f 79 20 3d 20 25 4f %Ow | %%Oy = %O
1790: 79 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 43 45 y" -timezone :CE
17a0: 54 20 2d 6c 6f 63 61 6c 65 20 64 65 7d 0a 20 20 T -locale de}.
17b0: 7d 0a 7d 0a 0a 70 72 6f 63 20 74 65 73 74 2d 73 }.}..proc test-s
17c0: 63 61 6e 20 7b 7b 72 65 70 74 69 6d 65 20 31 30 can {{reptime 10
17d0: 30 30 7d 7d 20 7b 0a 20 20 5f 74 65 73 74 5f 72 00}} {. _test_r
17e0: 75 6e 20 24 72 65 70 74 69 6d 65 20 7b 0a 20 20 un $reptime {.
17f0: 20 20 23 20 53 63 61 6e 20 3a 20 64 61 74 65 20 # Scan : date
1800: 28 69 6e 20 67 6d 74 29 0a 20 20 20 20 7b 63 6c (in gmt). {cl
1810: 6f 63 6b 20 73 63 61 6e 20 22 32 35 2e 31 31 2e ock scan "25.11.
1820: 32 30 31 35 22 20 2d 66 6f 72 6d 61 74 20 22 25 2015" -format "%
1830: 64 2e 25 6d 2e 25 59 22 20 2d 62 61 73 65 20 30 d.%m.%Y" -base 0
1840: 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 53 -gmt 1}. # S
1850: 63 61 6e 20 3a 20 64 61 74 65 20 28 73 79 73 74 can : date (syst
1860: 65 6d 20 74 69 6d 65 20 7a 6f 6e 65 2c 20 77 69 em time zone, wi
1870: 74 68 20 62 61 73 65 29 0a 20 20 20 20 7b 63 6c th base). {cl
1880: 6f 63 6b 20 73 63 61 6e 20 22 32 35 2e 31 31 2e ock scan "25.11.
1890: 32 30 31 35 22 20 2d 66 6f 72 6d 61 74 20 22 25 2015" -format "%
18a0: 64 2e 25 6d 2e 25 59 22 20 2d 62 61 73 65 20 30 d.%m.%Y" -base 0
18b0: 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 3a 20 64 }. # Scan : d
18c0: 61 74 65 20 28 73 79 73 74 65 6d 20 74 69 6d 65 ate (system time
18d0: 20 7a 6f 6e 65 2c 20 77 69 74 68 6f 75 74 20 62 zone, without b
18e0: 61 73 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 ase). {clock
18f0: 73 63 61 6e 20 22 32 35 2e 31 31 2e 32 30 31 35 scan "25.11.2015
1900: 22 20 2d 66 6f 72 6d 61 74 20 22 25 64 2e 25 6d " -format "%d.%m
1910: 2e 25 59 22 7d 0a 20 20 20 20 23 20 53 63 61 6e .%Y"}. # Scan
1920: 20 3a 20 67 72 65 65 64 79 20 6d 61 74 63 68 0a : greedy match.
1930: 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 {clock scan
1940: 22 31 31 31 22 20 2d 66 6f 72 6d 61 74 20 22 25 "111" -format "%
1950: 64 25 6d 25 79 22 20 2d 62 61 73 65 20 30 20 2d d%m%y" -base 0 -
1960: 67 6d 74 20 31 7d 0a 20 20 20 20 7b 63 6c 6f 63 gmt 1}. {cloc
1970: 6b 20 73 63 61 6e 20 22 31 31 31 31 22 20 2d 66 k scan "1111" -f
1980: 6f 72 6d 61 74 20 22 25 64 25 6d 25 79 22 20 2d ormat "%d%m%y" -
1990: 62 61 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a 20 base 0 -gmt 1}.
19a0: 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 {clock scan "
19b0: 31 31 31 31 31 22 20 2d 66 6f 72 6d 61 74 20 22 11111" -format "
19c0: 25 64 25 6d 25 79 22 20 2d 62 61 73 65 20 30 20 %d%m%y" -base 0
19d0: 2d 67 6d 74 20 31 7d 0a 20 20 20 20 7b 63 6c 6f -gmt 1}. {clo
19e0: 63 6b 20 73 63 61 6e 20 22 31 31 31 31 31 31 22 ck scan "111111"
19f0: 20 2d 66 6f 72 6d 61 74 20 22 25 64 25 6d 25 79 -format "%d%m%y
1a00: 22 20 2d 62 61 73 65 20 30 20 2d 67 6d 74 20 31 " -base 0 -gmt 1
1a10: 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 3a 20 67 }. # Scan : g
1a20: 72 65 65 64 79 20 6d 61 74 63 68 20 28 73 70 61 reedy match (spa
1a30: 63 65 20 73 65 70 61 72 61 74 65 64 29 0a 20 20 ce separated).
1a40: 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 {clock scan "1
1a50: 20 31 20 31 22 20 2d 66 6f 72 6d 61 74 20 22 25 1 1" -format "%
1a60: 64 25 6d 25 79 22 20 2d 62 61 73 65 20 30 20 2d d%m%y" -base 0 -
1a70: 67 6d 74 20 31 7d 0a 20 20 20 20 7b 63 6c 6f 63 gmt 1}. {cloc
1a80: 6b 20 73 63 61 6e 20 22 31 31 31 20 31 22 20 2d k scan "111 1" -
1a90: 66 6f 72 6d 61 74 20 22 25 64 25 6d 25 79 22 20 format "%d%m%y"
1aa0: 2d 62 61 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a -base 0 -gmt 1}.
1ab0: 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 {clock scan
1ac0: 22 31 20 31 31 31 22 20 2d 66 6f 72 6d 61 74 20 "1 111" -format
1ad0: 22 25 64 25 6d 25 79 22 20 2d 62 61 73 65 20 30 "%d%m%y" -base 0
1ae0: 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 7b 63 6c -gmt 1}. {cl
1af0: 6f 63 6b 20 73 63 61 6e 20 22 31 20 31 31 20 31 ock scan "1 11 1
1b00: 22 20 2d 66 6f 72 6d 61 74 20 22 25 64 25 6d 25 " -format "%d%m%
1b10: 79 22 20 2d 62 61 73 65 20 30 20 2d 67 6d 74 20 y" -base 0 -gmt
1b20: 31 7d 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 1}. {clock sc
1b30: 61 6e 20 22 31 20 31 31 20 31 31 22 20 2d 66 6f an "1 11 11" -fo
1b40: 72 6d 61 74 20 22 25 64 25 6d 25 79 22 20 2d 62 rmat "%d%m%y" -b
1b50: 61 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a 20 20 ase 0 -gmt 1}.
1b60: 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 {clock scan "1
1b70: 31 20 31 31 20 31 31 22 20 2d 66 6f 72 6d 61 74 1 11 11" -format
1b80: 20 22 25 64 25 6d 25 79 22 20 2d 62 61 73 65 20 "%d%m%y" -base
1b90: 30 20 2d 67 6d 74 20 31 7d 0a 0a 20 20 20 20 23 0 -gmt 1}.. #
1ba0: 20 53 63 61 6e 20 3a 20 74 69 6d 65 20 28 69 6e Scan : time (in
1bb0: 20 67 6d 74 29 0a 20 20 20 20 7b 63 6c 6f 63 6b gmt). {clock
1bc0: 20 73 63 61 6e 20 22 31 30 3a 33 35 3a 35 35 22 scan "10:35:55"
1bd0: 20 2d 66 6f 72 6d 61 74 20 22 25 48 3a 25 4d 3a -format "%H:%M:
1be0: 25 53 22 20 2d 62 61 73 65 20 31 30 30 30 30 30 %S" -base 100000
1bf0: 30 30 30 30 20 2d 67 6d 74 20 31 7d 0a 20 20 20 0000 -gmt 1}.
1c00: 20 23 20 53 63 61 6e 20 3a 20 74 69 6d 65 20 28 # Scan : time (
1c10: 73 79 73 74 65 6d 20 74 69 6d 65 20 7a 6f 6e 65 system time zone
1c20: 2c 20 77 69 74 68 20 62 61 73 65 29 0a 20 20 20 , with base).
1c30: 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 30 {clock scan "10
1c40: 3a 33 35 3a 35 35 22 20 2d 66 6f 72 6d 61 74 20 :35:55" -format
1c50: 22 25 48 3a 25 4d 3a 25 53 22 20 2d 62 61 73 65 "%H:%M:%S" -base
1c60: 20 31 30 30 30 30 30 30 30 30 30 7d 0a 20 20 20 1000000000}.
1c70: 20 23 20 53 63 61 6e 20 3a 20 74 69 6d 65 20 28 # Scan : time (
1c80: 67 6d 74 2c 20 77 69 74 68 6f 75 74 20 62 61 73 gmt, without bas
1c90: 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 e). {clock sc
1ca0: 61 6e 20 22 31 30 3a 33 35 3a 35 35 22 20 2d 66 an "10:35:55" -f
1cb0: 6f 72 6d 61 74 20 22 25 48 3a 25 4d 3a 25 53 22 ormat "%H:%M:%S"
1cc0: 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 53 -gmt 1}. # S
1cd0: 63 61 6e 20 3a 20 74 69 6d 65 20 28 73 79 73 74 can : time (syst
1ce0: 65 6d 20 74 69 6d 65 20 7a 6f 6e 65 2c 20 77 69 em time zone, wi
1cf0: 74 68 6f 75 74 20 62 61 73 65 29 0a 20 20 20 20 thout base).
1d00: 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 30 3a {clock scan "10:
1d10: 33 35 3a 35 35 22 20 2d 66 6f 72 6d 61 74 20 22 35:55" -format "
1d20: 25 48 3a 25 4d 3a 25 53 22 7d 0a 0a 20 20 20 20 %H:%M:%S"}..
1d30: 23 20 53 63 61 6e 20 3a 20 64 61 74 65 2d 74 69 # Scan : date-ti
1d40: 6d 65 20 28 69 6e 20 67 6d 74 29 0a 20 20 20 20 me (in gmt).
1d50: 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 32 35 2e {clock scan "25.
1d60: 31 31 2e 32 30 31 35 20 31 30 3a 33 35 3a 35 35 11.2015 10:35:55
1d70: 22 20 2d 66 6f 72 6d 61 74 20 22 25 64 2e 25 6d " -format "%d.%m
1d80: 2e 25 59 20 25 48 3a 25 4d 3a 25 53 22 20 2d 62 .%Y %H:%M:%S" -b
1d90: 61 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a 20 20 ase 0 -gmt 1}.
1da0: 20 20 23 20 53 63 61 6e 20 3a 20 64 61 74 65 2d # Scan : date-
1db0: 74 69 6d 65 20 28 73 79 73 74 65 6d 20 74 69 6d time (system tim
1dc0: 65 20 7a 6f 6e 65 20 77 69 74 68 20 62 61 73 65 e zone with base
1dd0: 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 ). {clock sca
1de0: 6e 20 22 32 35 2e 31 31 2e 32 30 31 35 20 31 30 n "25.11.2015 10
1df0: 3a 33 35 3a 35 35 22 20 2d 66 6f 72 6d 61 74 20 :35:55" -format
1e00: 22 25 64 2e 25 6d 2e 25 59 20 25 48 3a 25 4d 3a "%d.%m.%Y %H:%M:
1e10: 25 53 22 20 2d 62 61 73 65 20 30 7d 0a 20 20 20 %S" -base 0}.
1e20: 20 23 20 53 63 61 6e 20 3a 20 64 61 74 65 2d 74 # Scan : date-t
1e30: 69 6d 65 20 28 73 79 73 74 65 6d 20 74 69 6d 65 ime (system time
1e40: 20 7a 6f 6e 65 20 77 69 74 68 6f 75 74 20 62 61 zone without ba
1e50: 73 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 se). {clock s
1e60: 63 61 6e 20 22 32 35 2e 31 31 2e 32 30 31 35 20 can "25.11.2015
1e70: 31 30 3a 33 35 3a 35 35 22 20 2d 66 6f 72 6d 61 10:35:55" -forma
1e80: 74 20 22 25 64 2e 25 6d 2e 25 59 20 25 48 3a 25 t "%d.%m.%Y %H:%
1e90: 4d 3a 25 53 22 7d 0a 0a 20 20 20 20 23 20 53 63 M:%S"}.. # Sc
1ea0: 61 6e 20 3a 20 6a 75 6c 69 61 6e 20 64 61 79 20 an : julian day
1eb0: 69 6e 20 67 6d 74 0a 20 20 20 20 7b 63 6c 6f 63 in gmt. {cloc
1ec0: 6b 20 73 63 61 6e 20 32 34 35 31 35 34 35 20 2d k scan 2451545 -
1ed0: 66 6f 72 6d 61 74 20 25 4a 20 2d 67 6d 74 20 31 format %J -gmt 1
1ee0: 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 3a 20 6a }. # Scan : j
1ef0: 75 6c 69 61 6e 20 64 61 79 20 69 6e 20 73 79 73 ulian day in sys
1f00: 74 65 6d 20 54 5a 0a 20 20 20 20 7b 63 6c 6f 63 tem TZ. {cloc
1f10: 6b 20 73 63 61 6e 20 32 34 35 31 35 34 35 20 2d k scan 2451545 -
1f20: 66 6f 72 6d 61 74 20 25 4a 7d 0a 20 20 20 20 23 format %J}. #
1f30: 20 53 63 61 6e 20 3a 20 6a 75 6c 69 61 6e 20 64 Scan : julian d
1f40: 61 79 20 69 6e 20 6f 74 68 65 72 20 54 5a 0a 20 ay in other TZ.
1f50: 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 32 {clock scan 2
1f60: 34 35 31 35 34 35 20 2d 66 6f 72 6d 61 74 20 25 451545 -format %
1f70: 4a 20 2d 74 69 6d 65 7a 6f 6e 65 20 2b 30 32 30 J -timezone +020
1f80: 30 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 3a 20 0}. # Scan :
1f90: 6a 75 6c 69 61 6e 20 64 61 79 20 77 69 74 68 20 julian day with
1fa0: 74 69 6d 65 3a 0a 20 20 20 20 7b 63 6c 6f 63 6b time:. {clock
1fb0: 20 73 63 61 6e 20 22 32 34 35 31 35 34 35 20 31 scan "2451545 1
1fc0: 30 3a 32 30 3a 33 30 22 20 2d 66 6f 72 6d 61 74 0:20:30" -format
1fd0: 20 22 25 4a 20 25 48 3a 25 4d 3a 25 53 22 7d 0a "%J %H:%M:%S"}.
1fe0: 20 20 20 20 23 20 53 63 61 6e 20 3a 20 6a 75 6c # Scan : jul
1ff0: 69 61 6e 20 64 61 79 20 77 69 74 68 20 74 69 6d ian day with tim
2000: 65 20 28 67 72 65 65 64 79 20 6d 61 74 63 68 29 e (greedy match)
2010: 3a 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 :. {clock sca
2020: 6e 20 22 32 34 35 31 35 34 35 20 31 30 32 30 33 n "2451545 10203
2030: 30 22 20 2d 66 6f 72 6d 61 74 20 22 25 4a 25 48 0" -format "%J%H
2040: 25 4d 25 53 22 7d 0a 0a 20 20 20 20 23 20 53 63 %M%S"}.. # Sc
2050: 61 6e 20 3a 20 63 65 6e 74 75 72 79 2c 20 6c 6f an : century, lo
2060: 6f 6b 75 70 20 74 61 62 6c 65 20 6d 6f 6e 74 68 okup table month
2070: 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e . {clock scan
2080: 20 7b 31 39 37 30 20 4a 61 6e 20 32 7d 20 2d 66 {1970 Jan 2} -f
2090: 6f 72 6d 61 74 20 7b 25 43 25 79 20 25 62 20 25 ormat {%C%y %b %
20a0: 64 7d 20 2d 6c 6f 63 61 6c 65 20 65 6e 20 2d 67 d} -locale en -g
20b0: 6d 74 20 31 7d 0a 20 20 20 20 23 20 53 63 61 6e mt 1}. # Scan
20c0: 20 3a 20 63 65 6e 74 75 72 79 2c 20 6c 6f 6f 6b : century, look
20d0: 75 70 20 74 61 62 6c 65 20 6d 6f 6e 74 68 20 61 up table month a
20e0: 6e 64 20 64 61 79 20 28 62 6f 74 68 20 65 6e 74 nd day (both ent
20f0: 72 69 65 73 20 61 72 65 20 66 69 72 73 74 29 0a ries are first).
2100: 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 {clock scan
2110: 7b 31 39 37 30 20 4a 61 6e 20 30 31 7d 20 2d 66 {1970 Jan 01} -f
2120: 6f 72 6d 61 74 20 7b 25 43 25 79 20 25 62 20 25 ormat {%C%y %b %
2130: 4f 64 7d 20 2d 6c 6f 63 61 6c 65 20 65 6e 20 2d Od} -locale en -
2140: 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 53 63 61 gmt 1}. # Sca
2150: 6e 20 3a 20 63 65 6e 74 75 72 79 2c 20 6c 6f 6f n : century, loo
2160: 6b 75 70 20 74 61 62 6c 65 20 6d 6f 6e 74 68 20 kup table month
2170: 61 6e 64 20 64 61 79 20 28 6c 69 73 74 20 73 63 and day (list sc
2180: 61 6e 3a 20 65 6e 74 72 69 65 73 20 77 69 74 68 an: entries with
2190: 20 70 6f 73 69 74 69 6f 6e 20 31 32 20 2f 20 33 position 12 / 3
21a0: 31 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 1). {clock sc
21b0: 61 6e 20 7b 32 30 31 36 20 44 65 63 20 33 31 7d an {2016 Dec 31}
21c0: 20 2d 66 6f 72 6d 61 74 20 7b 25 43 25 79 20 25 -format {%C%y %
21d0: 62 20 25 4f 64 7d 20 2d 6c 6f 63 61 6c 65 20 65 b %Od} -locale e
21e0: 6e 20 2d 67 6d 74 20 31 7d 0a 0a 20 20 20 20 23 n -gmt 1}.. #
21f0: 20 53 63 61 6e 20 3a 20 49 53 4f 20 64 61 74 65 Scan : ISO date
2200: 2d 74 69 6d 65 20 28 43 45 53 54 29 0a 20 20 20 -time (CEST).
2210: 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 32 30 {clock scan "20
2220: 30 39 2d 30 36 2d 33 30 54 31 38 3a 33 30 3a 30 09-06-30T18:30:0
2230: 30 2b 30 32 3a 30 30 22 20 2d 66 6f 72 6d 61 74 0+02:00" -format
2240: 20 22 25 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d "%Y-%m-%dT%H:%M
2250: 3a 25 53 25 7a 22 7d 0a 20 20 20 20 7b 63 6c 6f :%S%z"}. {clo
2260: 63 6b 20 73 63 61 6e 20 22 32 30 30 39 2d 30 36 ck scan "2009-06
2270: 2d 33 30 54 31 38 3a 33 30 3a 30 30 20 43 45 53 -30T18:30:00 CES
2280: 54 22 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 T" -format "%Y-%
2290: 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 20 25 7a m-%dT%H:%M:%S %z
22a0: 22 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 3a 20 "}. # Scan :
22b0: 49 53 4f 20 64 61 74 65 2d 74 69 6d 65 20 28 55 ISO date-time (U
22c0: 54 43 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 TC). {clock s
22d0: 63 61 6e 20 22 32 30 30 39 2d 30 36 2d 33 30 54 can "2009-06-30T
22e0: 31 38 3a 33 30 3a 30 30 5a 22 20 2d 66 6f 72 6d 18:30:00Z" -form
22f0: 61 74 20 22 25 59 2d 25 6d 2d 25 64 54 25 48 3a at "%Y-%m-%dT%H:
2300: 25 4d 3a 25 53 25 7a 22 7d 0a 20 20 20 20 7b 63 %M:%S%z"}. {c
2310: 6c 6f 63 6b 20 73 63 61 6e 20 22 32 30 30 39 2d lock scan "2009-
2320: 30 36 2d 33 30 54 31 38 3a 33 30 3a 30 30 20 55 06-30T18:30:00 U
2330: 54 43 22 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d TC" -format "%Y-
2340: 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 20 25 %m-%dT%H:%M:%S %
2350: 7a 22 7d 0a 0a 20 20 20 20 23 20 53 63 61 6e 20 z"}.. # Scan
2360: 3a 20 6c 6f 63 61 6c 65 20 64 61 74 65 2d 74 69 : locale date-ti
2370: 6d 65 20 28 65 6e 29 3a 0a 20 20 20 20 7b 63 6c me (en):. {cl
2380: 6f 63 6b 20 73 63 61 6e 20 22 30 36 2f 33 30 2f ock scan "06/30/
2390: 32 30 30 39 20 31 38 3a 33 30 3a 31 35 22 20 2d 2009 18:30:15" -
23a0: 66 6f 72 6d 61 74 20 22 25 78 20 25 58 22 20 2d format "%x %X" -
23b0: 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 20 65 6e gmt 1 -locale en
23c0: 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 3a 20 6c }. # Scan : l
23d0: 6f 63 61 6c 65 20 64 61 74 65 2d 74 69 6d 65 20 ocale date-time
23e0: 28 64 65 29 3a 0a 20 20 20 20 7b 63 6c 6f 63 6b (de):. {clock
23f0: 20 73 63 61 6e 20 22 33 30 2e 30 36 2e 32 30 30 scan "30.06.200
2400: 39 20 31 38 3a 33 30 3a 31 35 22 20 2d 66 6f 72 9 18:30:15" -for
2410: 6d 61 74 20 22 25 78 20 25 58 22 20 2d 67 6d 74 mat "%x %X" -gmt
2420: 20 31 20 2d 6c 6f 63 61 6c 65 20 64 65 7d 0a 0a 1 -locale de}..
2430: 20 20 20 20 23 20 53 63 61 6e 20 3a 20 64 79 6e # Scan : dyn
2440: 61 6d 69 63 20 66 6f 72 6d 61 74 20 28 63 61 63 amic format (cac
2450: 68 65 61 62 6c 65 29 0a 20 20 20 20 7b 63 6c 6f heable). {clo
2460: 63 6b 20 73 63 61 6e 20 22 32 35 2e 31 31 2e 32 ck scan "25.11.2
2470: 30 31 35 20 31 30 3a 33 35 3a 35 35 22 20 2d 66 015 10:35:55" -f
2480: 6f 72 6d 61 74 20 5b 73 74 72 69 6e 67 20 74 72 ormat [string tr
2490: 69 6d 20 22 25 64 2e 25 6d 2e 25 59 20 25 48 3a im "%d.%m.%Y %H:
24a0: 25 4d 3a 25 53 20 22 5d 20 2d 62 61 73 65 20 30 %M:%S "] -base 0
24b0: 20 2d 67 6d 74 20 31 7d 0a 0a 20 20 20 20 62 72 -gmt 1}.. br
24c0: 65 61 6b 0a 20 20 20 20 23 20 23 20 53 63 61 6e eak. # # Scan
24d0: 20 3a 20 6c 6f 6e 67 20 66 6f 72 6d 61 74 20 74 : long format t
24e0: 65 73 74 20 28 61 6c 6c 6f 63 6b 20 63 68 61 69 est (allock chai
24f0: 6e 29 0a 20 20 20 20 23 20 7b 63 6c 6f 63 6b 20 n). # {clock
2500: 73 63 61 6e 20 22 32 35 2e 31 31 2e 32 30 31 35 scan "25.11.2015
2510: 22 20 2d 66 6f 72 6d 61 74 20 22 25 64 2e 25 6d " -format "%d.%m
2520: 2e 25 59 20 25 64 2e 25 6d 2e 25 59 20 25 64 2e .%Y %d.%m.%Y %d.
2530: 25 6d 2e 25 59 20 25 64 2e 25 6d 2e 25 59 20 25 %m.%Y %d.%m.%Y %
2540: 64 2e 25 6d 2e 25 59 20 25 64 2e 25 6d 2e 25 59 d.%m.%Y %d.%m.%Y
2550: 20 25 64 2e 25 6d 2e 25 59 20 25 64 2e 25 6d 2e %d.%m.%Y %d.%m.
2560: 25 59 22 20 2d 62 61 73 65 20 30 20 2d 67 6d 74 %Y" -base 0 -gmt
2570: 20 31 7d 0a 20 20 20 20 23 20 23 20 53 63 61 6e 1}. # # Scan
2580: 20 3a 20 64 79 6e 61 6d 69 63 2c 20 76 65 72 79 : dynamic, very
2590: 20 6c 6f 6e 67 20 66 6f 72 6d 61 74 20 74 65 73 long format tes
25a0: 74 20 28 63 72 65 61 74 65 20 6f 62 6a 20 72 65 t (create obj re
25b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2c 20 61 6c presentation, al
25c0: 6c 6f 63 6b 20 63 68 61 69 6e 2c 20 47 43 2c 20 lock chain, GC,
25d0: 65 74 63 29 3a 0a 20 20 20 20 23 20 7b 63 6c 6f etc):. # {clo
25e0: 63 6b 20 73 63 61 6e 20 22 32 35 2e 31 31 2e 32 ck scan "25.11.2
25f0: 30 31 35 22 20 2d 66 6f 72 6d 61 74 20 5b 73 74 015" -format [st
2600: 72 69 6e 67 20 72 65 70 65 61 74 20 22 5b 69 6e ring repeat "[in
2610: 63 72 20 69 5d 20 25 64 2e 25 6d 2e 25 59 20 25 cr i] %d.%m.%Y %
2620: 64 2e 25 6d 2e 25 59 22 20 31 30 5d 20 2d 62 61 d.%m.%Y" 10] -ba
2630: 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a 20 20 20 se 0 -gmt 1}.
2640: 20 23 20 23 20 53 63 61 6e 20 3a 20 61 67 61 69 # # Scan : agai
2650: 6e 3a 0a 20 20 20 20 23 20 7b 63 6c 6f 63 6b 20 n:. # {clock
2660: 73 63 61 6e 20 22 32 35 2e 31 31 2e 32 30 31 35 scan "25.11.2015
2670: 22 20 2d 66 6f 72 6d 61 74 20 5b 73 74 72 69 6e " -format [strin
2680: 67 20 72 65 70 65 61 74 20 22 5b 69 6e 63 72 20 g repeat "[incr
2690: 69 20 2d 31 5d 20 25 64 2e 25 6d 2e 25 59 20 25 i -1] %d.%m.%Y %
26a0: 64 2e 25 6d 2e 25 59 22 20 31 30 5d 20 2d 62 61 d.%m.%Y" 10] -ba
26b0: 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a 20 20 7d se 0 -gmt 1}. }
26c0: 20 7b 70 75 74 73 20 5b 63 6c 6f 63 6b 20 66 6f {puts [clock fo
26d0: 72 6d 61 74 20 24 5f 28 72 29 20 2d 6c 6f 63 61 rmat $_(r) -loca
26e0: 6c 65 20 65 6e 5d 7d 0a 7d 0a 0a 70 72 6f 63 20 le en]}.}..proc
26f0: 74 65 73 74 2d 66 72 65 65 73 63 61 6e 20 7b 7b test-freescan {{
2700: 72 65 70 74 69 6d 65 20 31 30 30 30 7d 7d 20 7b reptime 1000}} {
2710: 0a 20 20 5f 74 65 73 74 5f 72 75 6e 20 24 72 65 . _test_run $re
2720: 70 74 69 6d 65 20 7b 0a 20 20 20 20 23 20 46 72 ptime {. # Fr
2730: 65 65 53 63 61 6e 20 3a 20 72 65 6c 61 74 69 76 eeScan : relativ
2740: 65 20 64 61 74 65 0a 20 20 20 20 7b 63 6c 6f 63 e date. {cloc
2750: 6b 20 73 63 61 6e 20 22 35 20 79 65 61 72 73 20 k scan "5 years
2760: 31 38 20 6d 6f 6e 74 68 73 20 33 38 35 20 64 61 18 months 385 da
2770: 79 73 22 20 2d 62 61 73 65 20 30 20 2d 67 6d 74 ys" -base 0 -gmt
2780: 20 31 7d 0a 20 20 20 20 23 20 46 72 65 65 53 63 1}. # FreeSc
2790: 61 6e 20 3a 20 72 65 6c 61 74 69 76 65 20 64 61 an : relative da
27a0: 74 65 20 77 69 74 68 20 72 65 6c 61 74 69 76 65 te with relative
27b0: 20 77 65 65 6b 64 61 79 0a 20 20 20 20 7b 63 6c weekday. {cl
27c0: 6f 63 6b 20 73 63 61 6e 20 22 35 20 79 65 61 72 ock scan "5 year
27d0: 73 20 31 38 20 6d 6f 6e 74 68 73 20 33 38 35 20 s 18 months 385
27e0: 64 61 79 73 20 46 72 69 22 20 2d 62 61 73 65 20 days Fri" -base
27f0: 30 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 0 -gmt 1}. #
2800: 46 72 65 65 53 63 61 6e 20 3a 20 72 65 6c 61 74 FreeScan : relat
2810: 69 76 65 20 64 61 74 65 20 77 69 74 68 20 6f 72 ive date with or
2820: 64 69 6e 61 6c 20 6d 6f 6e 74 68 0a 20 20 20 20 dinal month.
2830: 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 35 20 79 {clock scan "5 y
2840: 65 61 72 73 20 31 38 20 6d 6f 6e 74 68 73 20 33 ears 18 months 3
2850: 38 35 20 64 61 79 73 20 6e 65 78 74 20 31 20 4a 85 days next 1 J
2860: 61 6e 75 61 72 79 22 20 2d 62 61 73 65 20 30 20 anuary" -base 0
2870: 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 46 72 -gmt 1}. # Fr
2880: 65 65 53 63 61 6e 20 3a 20 72 65 6c 61 74 69 76 eeScan : relativ
2890: 65 20 64 61 74 65 20 77 69 74 68 20 6f 72 64 69 e date with ordi
28a0: 6e 61 6c 20 6d 6f 6e 74 68 20 61 6e 64 20 72 65 nal month and re
28b0: 6c 61 74 69 76 65 20 77 65 65 6b 64 61 79 0a 20 lative weekday.
28c0: 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 {clock scan "
28d0: 35 20 79 65 61 72 73 20 31 38 20 6d 6f 6e 74 68 5 years 18 month
28e0: 73 20 33 38 35 20 64 61 79 73 20 6e 65 78 74 20 s 385 days next
28f0: 4a 61 6e 75 61 72 79 20 46 72 69 22 20 2d 62 61 January Fri" -ba
2900: 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a 20 20 20 se 0 -gmt 1}.
2910: 20 23 20 46 72 65 65 53 63 61 6e 20 3a 20 6f 72 # FreeScan : or
2920: 64 69 6e 61 6c 20 6d 6f 6e 74 68 0a 20 20 20 20 dinal month.
2930: 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 6e 65 78 {clock scan "nex
2940: 74 20 4a 61 6e 75 61 72 79 22 20 2d 62 61 73 65 t January" -base
2950: 20 30 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 0 -gmt 1}. #
2960: 20 46 72 65 65 53 63 61 6e 20 3a 20 72 65 6c 61 FreeScan : rela
2970: 74 69 76 65 20 77 65 65 6b 0a 20 20 20 20 7b 63 tive week. {c
2980: 6c 6f 63 6b 20 73 63 61 6e 20 22 6e 65 78 74 20 lock scan "next
2990: 46 72 69 22 20 2d 62 61 73 65 20 30 20 2d 67 6d Fri" -base 0 -gm
29a0: 74 20 31 7d 0a 20 20 20 20 23 20 46 72 65 65 53 t 1}. # FreeS
29b0: 63 61 6e 20 3a 20 72 65 6c 61 74 69 76 65 20 77 can : relative w
29c0: 65 65 6b 64 61 79 20 61 6e 64 20 77 65 65 6b 20 eekday and week
29d0: 6f 66 66 73 65 74 20 0a 20 20 20 20 7b 63 6c 6f offset . {clo
29e0: 63 6b 20 73 63 61 6e 20 22 6e 65 78 74 20 4a 61 ck scan "next Ja
29f0: 6e 75 61 72 79 20 2b 20 32 20 77 65 65 6b 22 20 nuary + 2 week"
2a00: 2d 62 61 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a -base 0 -gmt 1}.
2a10: 20 20 20 20 23 20 46 72 65 65 53 63 61 6e 20 3a # FreeScan :
2a20: 20 74 69 6d 65 20 6f 6e 6c 79 20 77 69 74 68 20 time only with
2a30: 62 61 73 65 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 base. {clock
2a40: 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 30 22 20 scan "19:18:30"
2a50: 2d 62 61 73 65 20 31 34 38 38 36 33 36 30 30 20 -base 148863600
2a60: 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 46 72 -gmt 1}. # Fr
2a70: 65 65 53 63 61 6e 20 3a 20 74 69 6d 65 20 6f 6e eeScan : time on
2a80: 6c 79 20 77 69 74 68 6f 75 74 20 62 61 73 65 2c ly without base,
2a90: 20 67 6d 74 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 gmt. {clock
2aa0: 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 30 22 20 scan "19:18:30"
2ab0: 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 46 72 -gmt 1}. # Fr
2ac0: 65 65 53 63 61 6e 20 3a 20 74 69 6d 65 20 6f 6e eeScan : time on
2ad0: 6c 79 20 77 69 74 68 6f 75 74 20 62 61 73 65 2c ly without base,
2ae0: 20 73 79 73 74 65 6d 0a 20 20 20 20 7b 63 6c 6f system. {clo
2af0: 63 6b 20 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 ck scan "19:18:3
2b00: 30 22 7d 0a 20 20 20 20 23 20 46 72 65 65 53 63 0"}. # FreeSc
2b10: 61 6e 20 3a 20 64 61 74 65 2c 20 73 79 73 74 65 an : date, syste
2b20: 6d 20 74 69 6d 65 20 7a 6f 6e 65 0a 20 20 20 20 m time zone.
2b30: 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 30 35 2f {clock scan "05/
2b40: 30 38 2f 32 30 31 36 20 32 30 3a 31 38 3a 33 30 08/2016 20:18:30
2b50: 22 7d 0a 20 20 20 20 23 20 46 72 65 65 53 63 61 "}. # FreeSca
2b60: 6e 20 3a 20 64 61 74 65 2c 20 73 75 70 70 6c 69 n : date, suppli
2b70: 65 64 20 74 69 6d 65 20 7a 6f 6e 65 0a 20 20 20 ed time zone.
2b80: 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 30 35 {clock scan "05
2b90: 2f 30 38 2f 32 30 31 36 20 32 30 3a 31 38 3a 33 /08/2016 20:18:3
2ba0: 30 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 43 45 0" -timezone :CE
2bb0: 54 7d 0a 20 20 20 20 23 20 46 72 65 65 53 63 61 T}. # FreeSca
2bc0: 6e 20 3a 20 64 61 74 65 2c 20 73 75 70 70 6c 69 n : date, suppli
2bd0: 65 64 20 67 6d 74 20 28 65 71 75 69 76 61 6c 65 ed gmt (equivale
2be0: 6e 74 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 47 4d nt -timezone :GM
2bf0: 54 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 T). {clock sc
2c00: 61 6e 20 22 30 35 2f 30 38 2f 32 30 31 36 20 32 an "05/08/2016 2
2c10: 30 3a 31 38 3a 33 30 22 20 2d 67 6d 74 20 31 7d 0:18:30" -gmt 1}
2c20: 0a 20 20 20 20 23 20 46 72 65 65 53 63 61 6e 20 . # FreeScan
2c30: 3a 20 64 61 74 65 2c 20 73 75 70 70 6c 69 65 64 : date, supplied
2c40: 20 74 69 6d 65 20 7a 6f 6e 65 20 67 6d 74 0a 20 time zone gmt.
2c50: 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 {clock scan "
2c60: 30 35 2f 30 38 2f 32 30 31 36 20 32 30 3a 31 38 05/08/2016 20:18
2c70: 3a 33 30 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a :30" -timezone :
2c80: 47 4d 54 7d 0a 20 20 20 20 23 20 46 72 65 65 53 GMT}. # FreeS
2c90: 63 61 6e 20 3a 20 74 69 6d 65 20 6f 6e 6c 79 2c can : time only,
2ca0: 20 6e 75 6d 65 72 69 63 20 7a 6f 6e 65 20 69 6e numeric zone in
2cb0: 20 73 74 72 69 6e 67 2c 20 62 61 73 65 20 74 69 string, base ti
2cc0: 6d 65 20 67 6d 74 20 28 65 78 63 68 61 6e 67 65 me gmt (exchange
2cd0: 20 7a 6f 6e 65 73 20 62 65 74 77 65 65 6e 20 67 zones between g
2ce0: 6d 74 20 2f 20 2d 30 35 30 30 29 0a 20 20 20 20 mt / -0500).
2cf0: 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 32 30 3a {clock scan "20:
2d00: 31 38 3a 33 30 20 2d 30 35 30 30 22 20 2d 62 61 18:30 -0500" -ba
2d10: 73 65 20 31 34 38 38 36 33 36 30 30 20 2d 67 6d se 148863600 -gm
2d20: 74 20 31 7d 0a 20 20 20 20 23 20 46 72 65 65 53 t 1}. # FreeS
2d30: 63 61 6e 20 3a 20 74 69 6d 65 20 6f 6e 6c 79 2c can : time only,
2d40: 20 7a 6f 6e 65 20 69 6e 20 73 74 72 69 6e 67 20 zone in string
2d50: 28 65 78 63 68 61 6e 67 65 20 7a 6f 6e 65 73 20 (exchange zones
2d60: 62 65 74 77 65 65 6e 20 73 79 73 74 65 6d 20 2f between system /
2d70: 20 67 6d 74 29 0a 20 20 20 20 7b 63 6c 6f 63 6b gmt). {clock
2d80: 20 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 30 20 scan "19:18:30
2d90: 47 4d 54 22 20 2d 62 61 73 65 20 31 34 38 38 36 GMT" -base 14886
2da0: 33 36 30 30 7d 0a 20 20 20 20 23 20 46 72 65 65 3600}. # Free
2db0: 53 63 61 6e 20 3a 20 66 61 73 74 20 73 77 69 74 Scan : fast swit
2dc0: 63 68 20 6f 66 20 7a 6f 6e 65 73 20 69 6e 20 63 ch of zones in c
2dd0: 79 63 6c 65 20 2d 20 47 4d 54 2c 20 4d 53 54 2c ycle - GMT, MST,
2de0: 20 43 45 54 20 28 73 79 73 74 65 6d 29 20 61 6e CET (system) an
2df0: 64 20 45 53 54 0a 20 20 20 20 7b 63 6c 6f 63 6b d EST. {clock
2e00: 20 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 30 20 scan "19:18:30
2e10: 4d 53 54 22 20 2d 62 61 73 65 20 31 34 38 38 36 MST" -base 14886
2e20: 33 36 30 30 20 2d 67 6d 74 20 31 0a 20 20 20 20 3600 -gmt 1.
2e30: 20 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 39 3a clock scan "19:
2e40: 31 38 3a 33 30 20 45 53 54 22 20 2d 62 61 73 65 18:30 EST" -base
2e50: 20 31 34 38 38 36 33 36 30 30 0a 20 20 20 20 7d 148863600. }
2e60: 0a 20 20 7d 20 7b 70 75 74 73 20 5b 63 6c 6f 63 . } {puts [cloc
2e70: 6b 20 66 6f 72 6d 61 74 20 24 5f 28 72 29 20 2d k format $_(r) -
2e80: 6c 6f 63 61 6c 65 20 65 6e 5d 7d 0a 7d 0a 0a 70 locale en]}.}..p
2e90: 72 6f 63 20 74 65 73 74 2d 61 64 64 20 7b 7b 72 roc test-add {{r
2ea0: 65 70 74 69 6d 65 20 31 30 30 30 7d 7d 20 7b 0a eptime 1000}} {.
2eb0: 20 20 73 65 74 20 74 65 73 74 73 20 7b 0a 20 20 set tests {.
2ec0: 20 20 23 20 41 64 64 20 3a 20 79 65 61 72 73 0a # Add : years.
2ed0: 20 20 20 20 7b 63 6c 6f 63 6b 20 61 64 64 20 31 {clock add 1
2ee0: 32 34 36 33 37 39 34 31 35 20 35 20 79 65 61 72 246379415 5 year
2ef0: 73 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 s -gmt 1}. #
2f00: 41 64 64 20 3a 20 6d 6f 6e 74 68 73 0a 20 20 20 Add : months.
2f10: 20 7b 63 6c 6f 63 6b 20 61 64 64 20 31 32 34 36 {clock add 1246
2f20: 33 37 39 34 31 35 20 31 38 20 6d 6f 6e 74 68 73 379415 18 months
2f30: 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 41 -gmt 1}. # A
2f40: 64 64 20 3a 20 77 65 65 6b 73 0a 20 20 20 20 7b dd : weeks. {
2f50: 63 6c 6f 63 6b 20 61 64 64 20 31 32 34 36 33 37 clock add 124637
2f60: 39 34 31 35 20 32 30 20 77 65 65 6b 73 20 2d 67 9415 20 weeks -g
2f70: 6d 74 20 31 7d 0a 20 20 20 20 23 20 41 64 64 20 mt 1}. # Add
2f80: 3a 20 64 61 79 73 0a 20 20 20 20 7b 63 6c 6f 63 : days. {cloc
2f90: 6b 20 61 64 64 20 31 32 34 36 33 37 39 34 31 35 k add 1246379415
2fa0: 20 33 38 35 20 64 61 79 73 20 2d 67 6d 74 20 31 385 days -gmt 1
2fb0: 7d 0a 20 20 20 20 23 20 41 64 64 20 3a 20 77 65 }. # Add : we
2fc0: 65 6b 64 61 79 73 0a 20 20 20 20 7b 63 6c 6f 63 ekdays. {cloc
2fd0: 6b 20 61 64 64 20 31 32 34 36 33 37 39 34 31 35 k add 1246379415
2fe0: 20 33 20 77 65 65 6b 64 61 79 73 20 2d 67 6d 74 3 weekdays -gmt
2ff0: 20 31 7d 0a 0a 20 20 20 20 23 20 41 64 64 20 3a 1}.. # Add :
3000: 20 68 6f 75 72 73 0a 20 20 20 20 7b 63 6c 6f 63 hours. {cloc
3010: 6b 20 61 64 64 20 31 32 34 36 33 37 39 34 31 35 k add 1246379415
3020: 20 35 20 68 6f 75 72 73 20 2d 67 6d 74 20 31 7d 5 hours -gmt 1}
3030: 0a 20 20 20 20 23 20 41 64 64 20 3a 20 6d 69 6e . # Add : min
3040: 75 74 65 73 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 utes. {clock
3050: 61 64 64 20 31 32 34 36 33 37 39 34 31 35 20 35 add 1246379415 5
3060: 35 20 6d 69 6e 75 74 65 73 20 2d 67 6d 74 20 31 5 minutes -gmt 1
3070: 7d 0a 20 20 20 20 23 20 41 64 64 20 3a 20 73 65 }. # Add : se
3080: 63 6f 6e 64 73 0a 20 20 20 20 7b 63 6c 6f 63 6b conds. {clock
3090: 20 61 64 64 20 31 32 34 36 33 37 39 34 31 35 20 add 1246379415
30a0: 31 30 30 20 73 65 63 6f 6e 64 73 20 2d 67 6d 74 100 seconds -gmt
30b0: 20 31 7d 0a 0a 20 20 20 20 23 20 41 64 64 20 3a 1}.. # Add :
30c0: 20 2b 2f 2d 20 69 6e 20 67 6d 74 0a 20 20 20 20 +/- in gmt.
30d0: 7b 63 6c 6f 63 6b 20 61 64 64 20 31 32 34 36 33 {clock add 12463
30e0: 37 39 34 31 35 20 2d 35 20 79 65 61 72 73 20 2b 79415 -5 years +
30f0: 32 31 20 6d 6f 6e 74 68 73 20 2d 32 30 20 77 65 21 months -20 we
3100: 65 6b 73 20 2b 33 38 36 20 64 61 79 73 20 2d 31 eks +386 days -1
3110: 39 20 68 6f 75 72 73 20 2b 33 30 20 6d 69 6e 75 9 hours +30 minu
3120: 74 65 73 20 2d 31 30 20 73 65 63 6f 6e 64 73 20 tes -10 seconds
3130: 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 41 64 -gmt 1}. # Ad
3140: 64 20 3a 20 2b 2f 2d 20 69 6e 20 73 79 73 74 65 d : +/- in syste
3150: 6d 20 74 69 6d 65 7a 6f 6e 65 0a 20 20 20 20 7b m timezone. {
3160: 63 6c 6f 63 6b 20 61 64 64 20 31 32 34 36 33 37 clock add 124637
3170: 39 34 31 35 20 2d 35 20 79 65 61 72 73 20 2b 32 9415 -5 years +2
3180: 31 20 6d 6f 6e 74 68 73 20 2d 32 30 20 77 65 65 1 months -20 wee
3190: 6b 73 20 2b 33 38 36 20 64 61 79 73 20 2d 31 39 ks +386 days -19
31a0: 20 68 6f 75 72 73 20 2b 33 30 20 6d 69 6e 75 74 hours +30 minut
31b0: 65 73 20 2d 31 30 20 73 65 63 6f 6e 64 73 20 2d es -10 seconds -
31c0: 74 69 6d 65 7a 6f 6e 65 20 3a 43 45 54 7d 0a 0a timezone :CET}..
31d0: 20 20 20 20 23 20 41 64 64 20 3a 20 67 6d 74 0a # Add : gmt.
31e0: 20 20 20 20 7b 63 6c 6f 63 6b 20 61 64 64 20 31 {clock add 1
31f0: 32 34 36 33 37 39 34 31 35 20 2d 35 20 79 65 61 246379415 -5 yea
3200: 72 73 20 31 38 20 6d 6f 6e 74 68 73 20 33 36 36 rs 18 months 366
3210: 20 64 61 79 73 20 35 20 68 6f 75 72 73 20 33 30 days 5 hours 30
3220: 20 6d 69 6e 75 74 65 73 20 31 30 20 73 65 63 6f minutes 10 seco
3230: 6e 64 73 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 nds -gmt 1}.
3240: 23 20 41 64 64 20 3a 20 73 79 73 74 65 6d 20 74 # Add : system t
3250: 69 6d 65 7a 6f 6e 65 0a 20 20 20 20 7b 63 6c 6f imezone. {clo
3260: 63 6b 20 61 64 64 20 31 32 34 36 33 37 39 34 31 ck add 124637941
3270: 35 20 2d 35 20 79 65 61 72 73 20 31 38 20 6d 6f 5 -5 years 18 mo
3280: 6e 74 68 73 20 33 36 36 20 64 61 79 73 20 35 20 nths 366 days 5
3290: 68 6f 75 72 73 20 33 30 20 6d 69 6e 75 74 65 73 hours 30 minutes
32a0: 20 31 30 20 73 65 63 6f 6e 64 73 20 2d 74 69 6d 10 seconds -tim
32b0: 65 7a 6f 6e 65 20 3a 43 45 54 7d 0a 0a 20 20 20 ezone :CET}..
32c0: 20 23 20 41 64 64 20 3a 20 61 6c 6c 20 69 6e 20 # Add : all in
32d0: 67 6d 74 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 61 gmt. {clock a
32e0: 64 64 20 31 32 34 36 33 37 39 34 31 35 20 34 20 dd 1246379415 4
32f0: 79 65 61 72 73 20 31 38 20 6d 6f 6e 74 68 73 20 years 18 months
3300: 35 30 20 77 65 65 6b 73 20 33 37 38 20 64 61 79 50 weeks 378 day
3310: 73 20 33 20 77 65 65 6b 64 61 79 73 20 35 20 68 s 3 weekdays 5 h
3320: 6f 75 72 73 20 33 30 20 6d 69 6e 75 74 65 73 20 ours 30 minutes
3330: 31 30 20 73 65 63 6f 6e 64 73 20 2d 67 6d 74 20 10 seconds -gmt
3340: 31 7d 0a 20 20 20 20 23 20 41 64 64 20 3a 20 61 1}. # Add : a
3350: 6c 6c 20 69 6e 20 73 79 73 74 65 6d 20 74 69 6d ll in system tim
3360: 65 7a 6f 6e 65 0a 20 20 20 20 7b 63 6c 6f 63 6b ezone. {clock
3370: 20 61 64 64 20 31 32 34 36 33 37 39 34 31 35 20 add 1246379415
3380: 34 20 79 65 61 72 73 20 31 38 20 6d 6f 6e 74 68 4 years 18 month
3390: 73 20 35 30 20 77 65 65 6b 73 20 33 37 38 20 64 s 50 weeks 378 d
33a0: 61 79 73 20 33 20 77 65 65 6b 64 61 79 73 20 35 ays 3 weekdays 5
33b0: 20 68 6f 75 72 73 20 33 30 20 6d 69 6e 75 74 65 hours 30 minute
33c0: 73 20 31 30 20 73 65 63 6f 6e 64 73 20 2d 74 69 s 10 seconds -ti
33d0: 6d 65 7a 6f 6e 65 20 3a 43 45 54 7d 0a 0a 20 20 mezone :CET}..
33e0: 7d 0a 20 20 23 20 69 66 20 64 6f 65 73 20 6e 6f }. # if does no
33f0: 74 20 73 75 70 70 6f 72 74 20 61 64 64 20 6f 66 t support add of
3400: 20 77 65 65 6b 64 61 79 73 3a 0a 20 20 69 66 20 weekdays:. if
3410: 7b 5b 63 61 74 63 68 20 7b 63 6c 6f 63 6b 20 61 {[catch {clock a
3420: 64 64 20 30 20 33 20 77 65 65 6b 64 61 79 73 20 dd 0 3 weekdays
3430: 2d 67 6d 74 20 31 7d 5d 7d 20 7b 0a 20 20 20 20 -gmt 1}]} {.
3440: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 6d 77 regsub -all {\mw
3450: 65 65 6b 64 61 79 73 5c 4d 7d 20 24 74 65 73 74 eekdays\M} $test
3460: 73 20 22 64 61 79 73 22 20 74 65 73 74 73 0a 20 s "days" tests.
3470: 20 7d 0a 20 20 5f 74 65 73 74 5f 72 75 6e 20 24 }. _test_run $
3480: 72 65 70 74 69 6d 65 20 24 74 65 73 74 73 20 7b reptime $tests {
3490: 70 75 74 73 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d puts [clock form
34a0: 61 74 20 24 5f 28 72 29 20 2d 6c 6f 63 61 6c 65 at $_(r) -locale
34b0: 20 65 6e 5d 7d 0a 7d 0a 0a 70 72 6f 63 20 74 65 en]}.}..proc te
34c0: 73 74 2d 63 6f 6e 76 65 72 74 20 7b 7b 72 65 70 st-convert {{rep
34d0: 74 69 6d 65 20 31 30 30 30 7d 7d 20 7b 0a 20 20 time 1000}} {.
34e0: 5f 74 65 73 74 5f 72 75 6e 20 24 72 65 70 74 69 _test_run $repti
34f0: 6d 65 20 7b 0a 20 20 20 20 23 20 43 6f 6e 76 65 me {. # Conve
3500: 72 74 20 6c 6f 63 61 6c 65 20 28 65 6e 20 2d 3e rt locale (en ->
3510: 20 64 65 29 3a 0a 20 20 20 20 7b 63 6c 6f 63 6b de):. {clock
3520: 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 format [clock s
3530: 63 61 6e 20 22 54 75 65 20 4d 61 79 20 33 30 20 can "Tue May 30
3540: 32 30 31 37 22 20 2d 66 6f 72 6d 61 74 20 22 25 2017" -format "%
3550: 61 20 25 62 20 25 64 20 25 59 22 20 2d 67 6d 74 a %b %d %Y" -gmt
3560: 20 31 20 2d 6c 6f 63 61 6c 65 20 65 6e 5d 20 2d 1 -locale en] -
3570: 66 6f 72 6d 61 74 20 22 25 61 20 25 62 20 25 64 format "%a %b %d
3580: 20 25 59 22 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 %Y" -gmt 1 -loc
3590: 61 6c 65 20 64 65 7d 0a 20 20 20 20 23 20 43 6f ale de}. # Co
35a0: 6e 76 65 72 74 20 6c 6f 63 61 6c 65 20 28 64 65 nvert locale (de
35b0: 20 2d 3e 20 65 6e 29 3a 0a 20 20 20 20 7b 63 6c -> en):. {cl
35c0: 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 ock format [cloc
35d0: 6b 20 73 63 61 6e 20 22 44 69 20 4d 61 69 20 33 k scan "Di Mai 3
35e0: 30 20 32 30 31 37 22 20 2d 66 6f 72 6d 61 74 20 0 2017" -format
35f0: 22 25 61 20 25 62 20 25 64 20 25 59 22 20 2d 67 "%a %b %d %Y" -g
3600: 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 20 64 65 5d mt 1 -locale de]
3610: 20 2d 66 6f 72 6d 61 74 20 22 25 61 20 25 62 20 -format "%a %b
3620: 25 64 20 25 59 22 20 2d 67 6d 74 20 31 20 2d 6c %d %Y" -gmt 1 -l
3630: 6f 63 61 6c 65 20 65 6e 7d 0a 0a 20 20 20 20 23 ocale en}.. #
3640: 20 43 6f 6e 76 65 72 74 20 54 5a 3a 20 64 69 72 Convert TZ: dir
3650: 65 63 74 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 ect. {clock f
3660: 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 63 61 ormat [clock sca
3670: 6e 20 22 31 39 3a 31 38 3a 33 30 22 20 2d 62 61 n "19:18:30" -ba
3680: 73 65 20 31 34 38 38 36 33 36 30 30 20 2d 74 69 se 148863600 -ti
3690: 6d 65 7a 6f 6e 65 20 45 53 54 5d 20 2d 74 69 6d mezone EST] -tim
36a0: 65 7a 6f 6e 65 20 4d 53 54 7d 0a 20 20 20 20 7b ezone MST}. {
36b0: 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c clock format [cl
36c0: 6f 63 6b 20 73 63 61 6e 20 22 31 39 3a 31 38 3a ock scan "19:18:
36d0: 33 30 22 20 2d 62 61 73 65 20 31 34 38 38 36 33 30" -base 148863
36e0: 36 30 30 20 2d 74 69 6d 65 7a 6f 6e 65 20 4d 53 600 -timezone MS
36f0: 54 5d 20 2d 74 69 6d 65 7a 6f 6e 65 20 45 53 54 T] -timezone EST
3700: 7d 0a 20 20 20 20 23 20 43 6f 6e 76 65 72 74 20 }. # Convert
3710: 54 5a 3a 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 TZ: included in
3720: 73 63 61 6e 20 73 74 72 69 6e 67 20 26 20 66 6f scan string & fo
3730: 72 6d 61 74 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 rmat. {clock
3740: 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 63 format [clock sc
3750: 61 6e 20 22 31 39 3a 31 38 3a 33 30 20 45 53 54 an "19:18:30 EST
3760: 22 20 2d 62 61 73 65 20 31 34 38 38 36 33 36 30 " -base 14886360
3770: 30 5d 20 2d 66 6f 72 6d 61 74 20 22 25 48 3a 25 0] -format "%H:%
3780: 4d 3a 25 53 20 25 7a 22 20 2d 74 69 6d 65 7a 6f M:%S %z" -timezo
3790: 6e 65 20 4d 53 54 7d 0a 20 20 20 20 7b 63 6c 6f ne MST}. {clo
37a0: 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b ck format [clock
37b0: 20 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 30 20 scan "19:18:30
37c0: 45 53 54 22 20 2d 62 61 73 65 20 31 34 38 38 36 EST" -base 14886
37d0: 33 36 30 30 5d 20 2d 66 6f 72 6d 61 74 20 22 25 3600] -format "%
37e0: 48 3a 25 4d 3a 25 53 20 25 7a 22 20 2d 74 69 6d H:%M:%S %z" -tim
37f0: 65 7a 6f 6e 65 20 45 53 54 7d 0a 0a 20 20 20 20 ezone EST}..
3800: 23 20 46 6f 72 6d 61 74 20 6c 6f 63 61 6c 65 20 # Format locale
3810: 31 78 3a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 76 1x: comparison v
3820: 61 6c 75 65 73 0a 20 20 20 20 7b 63 6c 6f 63 6b alues. {clock
3830: 20 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 20 31 format 0 -gmt 1
3840: 20 2d 6c 6f 63 61 6c 65 20 65 6e 7d 20 0a 20 20 -locale en} .
3850: 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 {clock format
3860: 30 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 0 -gmt 1 -locale
3870: 20 64 65 7d 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 de}. {clock
3880: 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 20 31 20 format 0 -gmt 1
3890: 2d 6c 6f 63 61 6c 65 20 66 72 7d 0a 20 20 20 20 -locale fr}.
38a0: 23 20 46 6f 72 6d 61 74 20 6c 6f 63 61 6c 65 20 # Format locale
38b0: 32 78 3a 20 77 69 74 68 6f 75 74 20 73 77 69 74 2x: without swit
38c0: 63 68 69 6e 67 20 6c 6f 63 61 6c 65 20 28 65 6e ching locale (en
38d0: 2c 20 65 6e 29 0a 20 20 20 20 7b 63 6c 6f 63 6b , en). {clock
38e0: 20 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 20 31 format 0 -gmt 1
38f0: 20 2d 6c 6f 63 61 6c 65 20 65 6e 3b 20 63 6c 6f -locale en; clo
3900: 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 ck format 0 -gmt
3910: 20 31 20 2d 6c 6f 63 61 6c 65 20 65 6e 7d 0a 20 1 -locale en}.
3920: 20 20 20 23 20 46 6f 72 6d 61 74 20 6c 6f 63 61 # Format loca
3930: 6c 65 20 32 78 3a 20 77 69 74 68 20 73 77 69 74 le 2x: with swit
3940: 63 68 69 6e 67 20 6c 6f 63 61 6c 65 20 28 65 6e ching locale (en
3950: 2c 20 64 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b , de). {clock
3960: 20 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 20 31 format 0 -gmt 1
3970: 20 2d 6c 6f 63 61 6c 65 20 65 6e 3b 20 63 6c 6f -locale en; clo
3980: 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 ck format 0 -gmt
3990: 20 31 20 2d 6c 6f 63 61 6c 65 20 64 65 7d 0a 20 1 -locale de}.
39a0: 20 20 20 23 20 46 6f 72 6d 61 74 20 6c 6f 63 61 # Format loca
39b0: 6c 65 20 33 78 3a 20 77 69 74 68 6f 75 74 20 73 le 3x: without s
39c0: 77 69 74 63 68 69 6e 67 20 6c 6f 63 61 6c 65 20 witching locale
39d0: 28 65 6e 2c 20 65 6e 2c 20 65 6e 29 0a 20 20 20 (en, en, en).
39e0: 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 30 {clock format 0
39f0: 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 20 -gmt 1 -locale
3a00: 65 6e 3b 20 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 en; clock format
3a10: 20 30 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 0 -gmt 1 -local
3a20: 65 20 65 6e 3b 20 63 6c 6f 63 6b 20 66 6f 72 6d e en; clock form
3a30: 61 74 20 30 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 at 0 -gmt 1 -loc
3a40: 61 6c 65 20 65 6e 7d 0a 20 20 20 20 23 20 46 6f ale en}. # Fo
3a50: 72 6d 61 74 20 6c 6f 63 61 6c 65 20 33 78 3a 20 rmat locale 3x:
3a60: 77 69 74 68 20 73 77 69 74 63 68 69 6e 67 20 6c with switching l
3a70: 6f 63 61 6c 65 20 28 65 6e 2c 20 64 65 2c 20 66 ocale (en, de, f
3a80: 72 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f r). {clock fo
3a90: 72 6d 61 74 20 30 20 2d 67 6d 74 20 31 20 2d 6c rmat 0 -gmt 1 -l
3aa0: 6f 63 61 6c 65 20 65 6e 3b 20 63 6c 6f 63 6b 20 ocale en; clock
3ab0: 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 20 31 20 format 0 -gmt 1
3ac0: 2d 6c 6f 63 61 6c 65 20 64 65 3b 20 63 6c 6f 63 -locale de; cloc
3ad0: 6b 20 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 20 k format 0 -gmt
3ae0: 31 20 2d 6c 6f 63 61 6c 65 20 66 72 7d 0a 0a 20 1 -locale fr}..
3af0: 20 20 20 23 20 53 63 61 6e 20 6c 6f 63 61 6c 65 # Scan locale
3b00: 20 32 78 3a 20 77 69 74 68 6f 75 74 20 73 77 69 2x: without swi
3b10: 74 63 68 69 6e 67 20 6c 6f 63 61 6c 65 20 28 65 tching locale (e
3b20: 6e 2c 20 65 6e 29 20 2b 20 28 64 65 2c 20 64 65 n, en) + (de, de
3b30: 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 ). {clock sca
3b40: 6e 20 22 54 75 65 20 4d 61 79 20 33 30 20 32 30 n "Tue May 30 20
3b50: 31 37 22 20 2d 66 6f 72 6d 61 74 20 22 25 61 20 17" -format "%a
3b60: 25 62 20 25 64 20 25 59 22 20 2d 67 6d 74 20 31 %b %d %Y" -gmt 1
3b70: 20 2d 6c 6f 63 61 6c 65 20 65 6e 3b 20 63 6c 6f -locale en; clo
3b80: 63 6b 20 73 63 61 6e 20 22 54 75 65 20 4d 61 79 ck scan "Tue May
3b90: 20 33 30 20 32 30 31 37 22 20 2d 66 6f 72 6d 61 30 2017" -forma
3ba0: 74 20 22 25 61 20 25 62 20 25 64 20 25 59 22 20 t "%a %b %d %Y"
3bb0: 2d 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 20 65 -gmt 1 -locale e
3bc0: 6e 7d 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 n}. {clock sc
3bd0: 61 6e 20 22 44 69 20 4d 61 69 20 33 30 20 32 30 an "Di Mai 30 20
3be0: 31 37 22 20 2d 66 6f 72 6d 61 74 20 22 25 61 20 17" -format "%a
3bf0: 25 62 20 25 64 20 25 59 22 20 2d 67 6d 74 20 31 %b %d %Y" -gmt 1
3c00: 20 2d 6c 6f 63 61 6c 65 20 64 65 3b 20 63 6c 6f -locale de; clo
3c10: 63 6b 20 73 63 61 6e 20 22 44 69 20 4d 61 69 20 ck scan "Di Mai
3c20: 33 30 20 32 30 31 37 22 20 2d 66 6f 72 6d 61 74 30 2017" -format
3c30: 20 22 25 61 20 25 62 20 25 64 20 25 59 22 20 2d "%a %b %d %Y" -
3c40: 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 20 64 65 gmt 1 -locale de
3c50: 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 6c 6f 63 }. # Scan loc
3c60: 61 6c 65 20 32 78 3a 20 77 69 74 68 20 73 77 69 ale 2x: with swi
3c70: 74 63 68 69 6e 67 20 6c 6f 63 61 6c 65 20 28 65 tching locale (e
3c80: 6e 2c 20 64 65 29 0a 20 20 20 20 7b 63 6c 6f 63 n, de). {cloc
3c90: 6b 20 73 63 61 6e 20 22 54 75 65 20 4d 61 79 20 k scan "Tue May
3ca0: 33 30 20 32 30 31 37 22 20 2d 66 6f 72 6d 61 74 30 2017" -format
3cb0: 20 22 25 61 20 25 62 20 25 64 20 25 59 22 20 2d "%a %b %d %Y" -
3cc0: 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 20 65 6e gmt 1 -locale en
3cd0: 3b 20 63 6c 6f 63 6b 20 73 63 61 6e 20 22 44 69 ; clock scan "Di
3ce0: 20 4d 61 69 20 33 30 20 32 30 31 37 22 20 2d 66 Mai 30 2017" -f
3cf0: 6f 72 6d 61 74 20 22 25 61 20 25 62 20 25 64 20 ormat "%a %b %d
3d00: 25 59 22 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 61 %Y" -gmt 1 -loca
3d10: 6c 65 20 64 65 7d 0a 20 20 20 20 23 20 53 63 61 le de}. # Sca
3d20: 6e 20 6c 6f 63 61 6c 65 20 33 78 3a 20 77 69 74 n locale 3x: wit
3d30: 68 20 73 77 69 74 63 68 69 6e 67 20 6c 6f 63 61 h switching loca
3d40: 6c 65 20 28 65 6e 2c 20 64 65 2c 20 66 72 29 0a le (en, de, fr).
3d50: 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 {clock scan
3d60: 22 54 75 65 20 4d 61 79 20 33 30 20 32 30 31 37 "Tue May 30 2017
3d70: 22 20 2d 66 6f 72 6d 61 74 20 22 25 61 20 25 62 " -format "%a %b
3d80: 20 25 64 20 25 59 22 20 2d 67 6d 74 20 31 20 2d %d %Y" -gmt 1 -
3d90: 6c 6f 63 61 6c 65 20 65 6e 3b 20 63 6c 6f 63 6b locale en; clock
3da0: 20 73 63 61 6e 20 22 44 69 20 4d 61 69 20 33 30 scan "Di Mai 30
3db0: 20 32 30 31 37 22 20 2d 66 6f 72 6d 61 74 20 22 2017" -format "
3dc0: 25 61 20 25 62 20 25 64 20 25 59 22 20 2d 67 6d %a %b %d %Y" -gm
3dd0: 74 20 31 20 2d 6c 6f 63 61 6c 65 20 64 65 3b 20 t 1 -locale de;
3de0: 63 6c 6f 63 6b 20 73 63 61 6e 20 22 6d 61 72 2e clock scan "mar.
3df0: 20 6d 61 69 20 33 30 20 32 30 31 37 22 20 2d 66 mai 30 2017" -f
3e00: 6f 72 6d 61 74 20 22 25 61 20 25 62 20 25 64 20 ormat "%a %b %d
3e10: 25 59 22 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 61 %Y" -gmt 1 -loca
3e20: 6c 65 20 66 72 7d 0a 0a 20 20 20 20 23 20 46 6f le fr}.. # Fo
3e30: 72 6d 61 74 20 54 5a 20 32 78 3a 20 63 6f 6d 70 rmat TZ 2x: comp
3e40: 61 72 69 73 6f 6e 20 76 61 6c 75 65 73 0a 20 20 arison values.
3e50: 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 {clock format
3e60: 30 20 2d 74 69 6d 65 7a 6f 6e 65 20 43 45 54 20 0 -timezone CET
3e70: 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d 2d 25 -format "%Y-%m-%
3e80: 64 20 25 48 3a 25 4d 3a 25 53 20 25 7a 22 7d 0a d %H:%M:%S %z"}.
3e90: 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 {clock forma
3ea0: 74 20 30 20 2d 74 69 6d 65 7a 6f 6e 65 20 45 53 t 0 -timezone ES
3eb0: 54 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d T -format "%Y-%m
3ec0: 2d 25 64 20 25 48 3a 25 4d 3a 25 53 20 25 7a 22 -%d %H:%M:%S %z"
3ed0: 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 54 }. # Format T
3ee0: 5a 20 32 78 3a 20 77 69 74 68 6f 75 74 20 73 77 Z 2x: without sw
3ef0: 69 74 63 68 69 6e 67 0a 20 20 20 20 7b 63 6c 6f itching. {clo
3f00: 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d 74 69 6d ck format 0 -tim
3f10: 65 7a 6f 6e 65 20 43 45 54 20 2d 66 6f 72 6d 61 ezone CET -forma
3f20: 74 20 22 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 t "%Y-%m-%d %H:%
3f30: 4d 3a 25 53 20 25 7a 22 3b 20 63 6c 6f 63 6b 20 M:%S %z"; clock
3f40: 66 6f 72 6d 61 74 20 30 20 2d 74 69 6d 65 7a 6f format 0 -timezo
3f50: 6e 65 20 43 45 54 20 2d 66 6f 72 6d 61 74 20 22 ne CET -format "
3f60: 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 %Y-%m-%d %H:%M:%
3f70: 53 20 25 7a 22 7d 0a 20 20 20 20 7b 63 6c 6f 63 S %z"}. {cloc
3f80: 6b 20 66 6f 72 6d 61 74 20 30 20 2d 74 69 6d 65 k format 0 -time
3f90: 7a 6f 6e 65 20 45 53 54 20 2d 66 6f 72 6d 61 74 zone EST -format
3fa0: 20 22 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d "%Y-%m-%d %H:%M
3fb0: 3a 25 53 20 25 7a 22 3b 20 63 6c 6f 63 6b 20 66 :%S %z"; clock f
3fc0: 6f 72 6d 61 74 20 30 20 2d 74 69 6d 65 7a 6f 6e ormat 0 -timezon
3fd0: 65 20 45 53 54 20 2d 66 6f 72 6d 61 74 20 22 25 e EST -format "%
3fe0: 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 Y-%m-%d %H:%M:%S
3ff0: 20 25 7a 22 7d 0a 20 20 20 20 23 20 46 6f 72 6d %z"}. # Form
4000: 61 74 20 54 5a 20 32 78 3a 20 77 69 74 68 20 73 at TZ 2x: with s
4010: 77 69 74 63 68 69 6e 67 0a 20 20 20 20 7b 63 6c witching. {cl
4020: 6f 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d 74 69 ock format 0 -ti
4030: 6d 65 7a 6f 6e 65 20 43 45 54 20 2d 66 6f 72 6d mezone CET -form
4040: 61 74 20 22 25 59 2d 25 6d 2d 25 64 20 25 48 3a at "%Y-%m-%d %H:
4050: 25 4d 3a 25 53 20 25 7a 22 3b 20 63 6c 6f 63 6b %M:%S %z"; clock
4060: 20 66 6f 72 6d 61 74 20 30 20 2d 74 69 6d 65 7a format 0 -timez
4070: 6f 6e 65 20 45 53 54 20 2d 66 6f 72 6d 61 74 20 one EST -format
4080: 22 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a "%Y-%m-%d %H:%M:
4090: 25 53 20 25 7a 22 7d 0a 20 20 20 20 23 20 46 6f %S %z"}. # Fo
40a0: 72 6d 61 74 20 54 5a 20 33 78 3a 20 77 69 74 68 rmat TZ 3x: with
40b0: 20 73 77 69 74 63 68 69 6e 67 20 28 43 45 54 2c switching (CET,
40c0: 20 45 53 54 2c 20 4d 53 54 29 0a 20 20 20 20 7b EST, MST). {
40d0: 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d clock format 0 -
40e0: 74 69 6d 65 7a 6f 6e 65 20 43 45 54 20 2d 66 6f timezone CET -fo
40f0: 72 6d 61 74 20 22 25 59 2d 25 6d 2d 25 64 20 25 rmat "%Y-%m-%d %
4100: 48 3a 25 4d 3a 25 53 20 25 7a 22 3b 20 63 6c 6f H:%M:%S %z"; clo
4110: 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d 74 69 6d ck format 0 -tim
4120: 65 7a 6f 6e 65 20 45 53 54 20 2d 66 6f 72 6d 61 ezone EST -forma
4130: 74 20 22 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 t "%Y-%m-%d %H:%
4140: 4d 3a 25 53 20 25 7a 22 3b 20 63 6c 6f 63 6b 20 M:%S %z"; clock
4150: 66 6f 72 6d 61 74 20 30 20 2d 74 69 6d 65 7a 6f format 0 -timezo
4160: 6e 65 20 4d 53 54 20 2d 66 6f 72 6d 61 74 20 22 ne MST -format "
4170: 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 %Y-%m-%d %H:%M:%
4180: 53 20 25 7a 22 7d 0a 20 20 20 20 23 20 46 6f 72 S %z"}. # For
4190: 6d 61 74 20 54 5a 20 33 78 3a 20 77 69 74 68 20 mat TZ 3x: with
41a0: 73 77 69 74 63 68 69 6e 67 20 28 47 4d 54 2c 20 switching (GMT,
41b0: 45 53 54 2c 20 4d 53 54 29 0a 20 20 20 20 7b 63 EST, MST). {c
41c0: 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d 67 lock format 0 -g
41d0: 6d 74 20 31 20 2d 66 6f 72 6d 61 74 20 22 25 59 mt 1 -format "%Y
41e0: 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 20 -%m-%d %H:%M:%S
41f0: 25 7a 22 3b 20 63 6c 6f 63 6b 20 66 6f 72 6d 61 %z"; clock forma
4200: 74 20 30 20 2d 74 69 6d 65 7a 6f 6e 65 20 45 53 t 0 -timezone ES
4210: 54 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d T -format "%Y-%m
4220: 2d 25 64 20 25 48 3a 25 4d 3a 25 53 20 25 7a 22 -%d %H:%M:%S %z"
4230: 3b 20 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 30 ; clock format 0
4240: 20 2d 74 69 6d 65 7a 6f 6e 65 20 4d 53 54 20 2d -timezone MST -
4250: 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d 2d 25 64 format "%Y-%m-%d
4260: 20 25 48 3a 25 4d 3a 25 53 20 25 7a 22 7d 0a 0a %H:%M:%S %z"}..
4270: 20 20 20 20 23 20 46 72 65 65 53 63 61 6e 20 54 # FreeScan T
4280: 5a 20 32 78 20 28 2b 31 20 73 79 73 74 65 6d 2d Z 2x (+1 system-
4290: 64 65 66 61 75 6c 74 29 3a 20 77 69 74 68 6f 75 default): withou
42a0: 74 20 73 77 69 74 63 68 69 6e 67 20 54 5a 0a 20 t switching TZ.
42b0: 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 {clock scan "
42c0: 31 39 3a 31 38 3a 33 30 20 4d 53 54 22 20 2d 62 19:18:30 MST" -b
42d0: 61 73 65 20 31 34 38 38 36 33 36 30 30 3b 20 63 ase 148863600; c
42e0: 6c 6f 63 6b 20 73 63 61 6e 20 22 31 39 3a 31 38 lock scan "19:18
42f0: 3a 33 30 20 4d 53 54 22 20 2d 62 61 73 65 20 31 :30 MST" -base 1
4300: 34 38 38 36 33 36 30 30 7d 0a 20 20 20 20 7b 63 48863600}. {c
4310: 6c 6f 63 6b 20 73 63 61 6e 20 22 31 39 3a 31 38 lock scan "19:18
4320: 3a 33 30 20 45 53 54 22 20 2d 62 61 73 65 20 31 :30 EST" -base 1
4330: 34 38 38 36 33 36 30 30 3b 20 63 6c 6f 63 6b 20 48863600; clock
4340: 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 30 20 45 scan "19:18:30 E
4350: 53 54 22 20 2d 62 61 73 65 20 31 34 38 38 36 33 ST" -base 148863
4360: 36 30 30 7d 0a 20 20 20 20 23 20 46 72 65 65 53 600}. # FreeS
4370: 63 61 6e 20 54 5a 20 32 78 20 28 2b 31 20 73 79 can TZ 2x (+1 sy
4380: 73 74 65 6d 2d 64 65 66 61 75 6c 74 29 3a 20 77 stem-default): w
4390: 69 74 68 20 73 77 69 74 63 68 69 6e 67 20 54 5a ith switching TZ
43a0: 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e . {clock scan
43b0: 20 22 31 39 3a 31 38 3a 33 30 20 4d 53 54 22 20 "19:18:30 MST"
43c0: 2d 62 61 73 65 20 31 34 38 38 36 33 36 30 30 3b -base 148863600;
43d0: 20 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 39 3a clock scan "19:
43e0: 31 38 3a 33 30 20 45 53 54 22 20 2d 62 61 73 65 18:30 EST" -base
43f0: 20 31 34 38 38 36 33 36 30 30 7d 0a 20 20 20 20 148863600}.
4400: 23 20 46 72 65 65 53 63 61 6e 20 54 5a 20 32 78 # FreeScan TZ 2x
4410: 20 28 2b 31 20 67 6d 74 2c 20 2b 31 20 73 79 73 (+1 gmt, +1 sys
4420: 74 65 6d 2d 64 65 66 61 75 6c 74 29 0a 20 20 20 tem-default).
4430: 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 39 {clock scan "19
4440: 3a 31 38 3a 33 30 20 4d 53 54 22 20 2d 62 61 73 :18:30 MST" -bas
4450: 65 20 31 34 38 38 36 33 36 30 30 20 2d 67 6d 74 e 148863600 -gmt
4460: 20 31 3b 20 63 6c 6f 63 6b 20 73 63 61 6e 20 22 1; clock scan "
4470: 31 39 3a 31 38 3a 33 30 20 45 53 54 22 20 2d 62 19:18:30 EST" -b
4480: 61 73 65 20 31 34 38 38 36 33 36 30 30 7d 0a 20 ase 148863600}.
4490: 20 20 20 0a 20 20 20 20 23 20 53 63 61 6e 20 54 . # Scan T
44a0: 5a 3a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 6e Z: comparison in
44b0: 63 6c 75 64 65 64 20 69 6e 20 73 63 61 6e 20 73 cluded in scan s
44c0: 74 72 69 6e 67 20 76 73 2e 20 67 69 76 65 6e 0a tring vs. given.
44d0: 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 {clock scan
44e0: 22 32 30 30 39 2d 30 36 2d 33 30 54 31 38 3a 33 "2009-06-30T18:3
44f0: 30 3a 30 30 20 43 45 53 54 22 20 2d 66 6f 72 6d 0:00 CEST" -form
4500: 61 74 20 22 25 59 2d 25 6d 2d 25 64 54 25 48 3a at "%Y-%m-%dT%H:
4510: 25 4d 3a 25 53 20 25 7a 22 7d 0a 20 20 20 20 7b %M:%S %z"}. {
4520: 63 6c 6f 63 6b 20 73 63 61 6e 20 22 32 30 30 39 clock scan "2009
4530: 2d 30 36 2d 33 30 54 31 38 3a 33 30 3a 30 30 20 -06-30T18:30:00
4540: 43 45 54 22 20 2d 66 6f 72 6d 61 74 20 22 25 59 CET" -format "%Y
4550: 2d 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 20 -%m-%dT%H:%M:%S
4560: 25 7a 22 7d 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 %z"}. {clock
4570: 73 63 61 6e 20 22 32 30 30 39 2d 30 36 2d 33 30 scan "2009-06-30
4580: 54 31 38 3a 33 30 3a 30 30 22 20 2d 74 69 6d 65 T18:30:00" -time
4590: 7a 6f 6e 65 20 43 45 54 20 2d 66 6f 72 6d 61 74 zone CET -format
45a0: 20 22 25 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d "%Y-%m-%dT%H:%M
45b0: 3a 25 53 22 7d 0a 20 20 7d 0a 7d 0a 0a 70 72 6f :%S"}. }.}..pro
45c0: 63 20 74 65 73 74 2d 6f 74 68 65 72 20 7b 7b 72 c test-other {{r
45d0: 65 70 74 69 6d 65 20 31 30 30 30 7d 7d 20 7b 0a eptime 1000}} {.
45e0: 20 20 5f 74 65 73 74 5f 72 75 6e 20 24 72 65 70 _test_run $rep
45f0: 74 69 6d 65 20 7b 0a 20 20 20 20 23 20 42 61 64 time {. # Bad
4600: 20 7a 6f 6e 65 0a 20 20 20 20 7b 63 61 74 63 68 zone. {catch
4610: 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 20 {clock scan "1
4620: 64 61 79 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 42 day" -timezone B
4630: 41 44 5f 5a 4f 4e 45 20 2d 6c 6f 63 61 6c 65 20 AD_ZONE -locale
4640: 65 6e 7d 7d 0a 0a 20 20 20 20 23 20 53 63 61 6e en}}.. # Scan
4650: 20 3a 20 6a 75 6c 69 61 6e 20 64 61 79 20 28 6f : julian day (o
4660: 76 65 72 66 6c 6f 77 29 0a 20 20 20 20 7b 63 61 verflow). {ca
4670: 74 63 68 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 tch {clock scan
4680: 35 33 37 33 34 38 35 20 2d 66 6f 72 6d 61 74 20 5373485 -format
4690: 25 4a 7d 7d 0a 0a 20 20 20 20 23 20 53 63 61 6e %J}}.. # Scan
46a0: 20 3a 20 74 65 73 74 20 72 6f 74 61 74 65 20 6f : test rotate o
46b0: 66 20 47 43 20 6f 62 6a 65 63 74 73 20 28 66 6f f GC objects (fo
46c0: 72 6d 61 74 20 69 73 20 64 79 6e 61 6d 69 63 2c rmat is dynamic,
46d0: 20 73 6f 20 74 63 6c 2d 6f 62 6a 20 72 65 6d 6f so tcl-obj remo
46e0: 76 65 64 20 77 69 74 68 20 6c 61 73 74 20 72 65 ved with last re
46f0: 66 65 72 65 6e 63 65 29 0a 20 20 20 20 7b 73 65 ference). {se
4700: 74 20 69 20 30 3b 20 74 69 6d 65 20 7b 20 63 6c t i 0; time { cl
4710: 6f 63 6b 20 73 63 61 6e 20 22 5b 69 6e 63 72 20 ock scan "[incr
4720: 69 5d 20 2d 20 32 35 2e 31 31 2e 32 30 31 35 22 i] - 25.11.2015"
4730: 20 2d 66 6f 72 6d 61 74 20 22 24 69 20 2d 20 25 -format "$i - %
4740: 64 2e 25 6d 2e 25 59 22 20 2d 62 61 73 65 20 30 d.%m.%Y" -base 0
4750: 20 2d 67 6d 74 20 31 20 7d 20 35 30 7d 0a 20 20 -gmt 1 } 50}.
4760: 20 20 23 20 53 63 61 6e 20 3a 20 74 65 73 74 20 # Scan : test
4770: 72 65 75 73 61 62 69 6c 69 74 79 20 6f 66 20 47 reusability of G
4780: 43 20 6f 62 6a 65 63 74 73 20 28 66 6f 72 6d 61 C objects (forma
4790: 74 20 69 73 20 64 79 6e 61 6d 69 63 2c 20 73 6f t is dynamic, so
47a0: 20 74 63 6c 2d 6f 62 6a 20 72 65 6d 6f 76 65 64 tcl-obj removed
47b0: 20 77 69 74 68 20 6c 61 73 74 20 72 65 66 65 72 with last refer
47c0: 65 6e 63 65 29 0a 20 20 20 20 7b 73 65 74 20 69 ence). {set i
47d0: 20 35 30 3b 20 74 69 6d 65 20 7b 20 63 6c 6f 63 50; time { cloc
47e0: 6b 20 73 63 61 6e 20 22 5b 69 6e 63 72 20 69 20 k scan "[incr i
47f0: 2d 31 5d 20 2d 20 32 35 2e 31 31 2e 32 30 31 35 -1] - 25.11.2015
4800: 22 20 2d 66 6f 72 6d 61 74 20 22 24 69 20 2d 20 " -format "$i -
4810: 25 64 2e 25 6d 2e 25 59 22 20 2d 62 61 73 65 20 %d.%m.%Y" -base
4820: 30 20 2d 67 6d 74 20 31 20 7d 20 35 30 7d 0a 20 0 -gmt 1 } 50}.
4830: 20 7d 0a 7d 0a 0a 70 72 6f 63 20 74 65 73 74 2d }.}..proc test-
4840: 65 6e 73 65 6d 62 6c 65 2d 70 65 72 66 20 7b 7b ensemble-perf {{
4850: 72 65 70 74 69 6d 65 20 31 30 30 30 7d 7d 20 7b reptime 1000}} {
4860: 0a 20 20 5f 74 65 73 74 5f 72 75 6e 20 24 72 65 . _test_run $re
4870: 70 74 69 6d 65 20 7b 0a 20 20 20 20 23 20 43 6c ptime {. # Cl
4880: 6f 63 6b 20 63 6c 69 63 6b 73 20 28 65 6e 73 65 ock clicks (ense
4890: 6d 62 6c 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b mble). {clock
48a0: 20 63 6c 69 63 6b 73 7d 0a 20 20 20 20 23 20 43 clicks}. # C
48b0: 6c 6f 63 6b 20 63 6c 69 63 6b 73 20 28 64 69 72 lock clicks (dir
48c0: 65 63 74 29 0a 20 20 20 20 7b 3a 3a 74 63 6c 3a ect). {::tcl:
48d0: 3a 63 6c 6f 63 6b 3a 3a 63 6c 69 63 6b 73 7d 0a :clock::clicks}.
48e0: 20 20 20 20 23 20 43 6c 6f 63 6b 20 73 65 63 6f # Clock seco
48f0: 6e 64 73 20 28 65 6e 73 65 6d 62 6c 65 29 0a 20 nds (ensemble).
4900: 20 20 20 7b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 {clock second
4910: 73 7d 0a 20 20 20 20 23 20 43 6c 6f 63 6b 20 73 s}. # Clock s
4920: 65 63 6f 6e 64 73 20 28 64 69 72 65 63 74 29 0a econds (direct).
4930: 20 20 20 20 7b 3a 3a 74 63 6c 3a 3a 63 6c 6f 63 {::tcl::cloc
4940: 6b 3a 3a 73 65 63 6f 6e 64 73 7d 0a 20 20 20 20 k::seconds}.
4950: 23 20 43 6c 6f 63 6b 20 6d 69 63 72 6f 73 65 63 # Clock microsec
4960: 6f 6e 64 73 20 28 65 6e 73 65 6d 62 6c 65 29 0a onds (ensemble).
4970: 20 20 20 20 7b 63 6c 6f 63 6b 20 6d 69 63 72 6f {clock micro
4980: 73 65 63 6f 6e 64 73 7d 0a 20 20 20 20 23 20 43 seconds}. # C
4990: 6c 6f 63 6b 20 6d 69 63 72 6f 73 65 63 6f 6e 64 lock microsecond
49a0: 73 20 28 64 69 72 65 63 74 29 0a 20 20 20 20 7b s (direct). {
49b0: 3a 3a 74 63 6c 3a 3a 63 6c 6f 63 6b 3a 3a 6d 69 ::tcl::clock::mi
49c0: 63 72 6f 73 65 63 6f 6e 64 73 7d 0a 20 20 20 20 croseconds}.
49d0: 23 20 43 6c 6f 63 6b 20 73 63 61 6e 20 28 65 6e # Clock scan (en
49e0: 73 65 6d 62 6c 65 29 0a 20 20 20 20 7b 63 6c 6f semble). {clo
49f0: 63 6b 20 73 63 61 6e 20 22 22 7d 0a 20 20 20 20 ck scan ""}.
4a00: 23 20 43 6c 6f 63 6b 20 73 63 61 6e 20 28 64 69 # Clock scan (di
4a10: 72 65 63 74 29 0a 20 20 20 20 7b 3a 3a 74 63 6c rect). {::tcl
4a20: 3a 3a 63 6c 6f 63 6b 3a 3a 73 63 61 6e 20 22 22 ::clock::scan ""
4a30: 7d 0a 20 20 20 20 23 20 43 6c 6f 63 6b 20 66 6f }. # Clock fo
4a40: 72 6d 61 74 20 28 65 6e 73 65 6d 62 6c 65 29 0a rmat (ensemble).
4a50: 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 {clock forma
4a60: 74 20 30 20 2d 66 20 25 73 7d 0a 20 20 20 20 23 t 0 -f %s}. #
4a70: 20 43 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 28 64 Clock format (d
4a80: 69 72 65 63 74 29 0a 20 20 20 20 7b 3a 3a 74 63 irect). {::tc
4a90: 6c 3a 3a 63 6c 6f 63 6b 3a 3a 66 6f 72 6d 61 74 l::clock::format
4aa0: 20 30 20 2d 66 20 25 73 7d 0a 20 20 7d 0a 7d 0a 0 -f %s}. }.}.
4ab0: 0a 70 72 6f 63 20 74 65 73 74 20 7b 7b 72 65 70 .proc test {{rep
4ac0: 74 69 6d 65 20 31 30 30 30 7d 7d 20 7b 0a 20 20 time 1000}} {.
4ad0: 70 75 74 73 20 22 22 0a 20 20 74 65 73 74 2d 65 puts "". test-e
4ae0: 6e 73 65 6d 62 6c 65 2d 70 65 72 66 20 5b 65 78 nsemble-perf [ex
4af0: 70 72 20 7b 24 72 65 70 74 69 6d 65 20 2f 20 32 pr {$reptime / 2
4b00: 7d 5d 3b 20 23 66 61 73 74 20 65 6e 6f 75 67 68 }]; #fast enough
4b10: 0a 20 20 74 65 73 74 2d 66 6f 72 6d 61 74 20 24 . test-format $
4b20: 72 65 70 74 69 6d 65 0a 20 20 74 65 73 74 2d 73 reptime. test-s
4b30: 63 61 6e 20 24 72 65 70 74 69 6d 65 0a 20 20 74 can $reptime. t
4b40: 65 73 74 2d 66 72 65 65 73 63 61 6e 20 24 72 65 est-freescan $re
4b50: 70 74 69 6d 65 0a 20 20 74 65 73 74 2d 61 64 64 ptime. test-add
4b60: 20 24 72 65 70 74 69 6d 65 0a 20 20 74 65 73 74 $reptime. test
4b70: 2d 63 6f 6e 76 65 72 74 20 5b 65 78 70 72 20 7b -convert [expr {
4b80: 24 72 65 70 74 69 6d 65 20 2f 20 32 7d 5d 3b 20 $reptime / 2}];
4b90: 23 66 61 73 74 20 65 6e 6f 75 67 68 0a 20 20 74 #fast enough. t
4ba0: 65 73 74 2d 6f 74 68 65 72 20 24 72 65 70 74 69 est-other $repti
4bb0: 6d 65 0a 0a 20 20 70 75 74 73 20 5c 6e 2a 2a 4f me.. puts \n**O
4bc0: 4b 2a 2a 0a 7d 0a 0a 7d 3b 20 23 20 65 6e 64 20 K**.}..}; # end
4bd0: 6f 66 20 3a 3a 74 63 6c 54 65 73 74 50 65 72 66 of ::tclTestPerf
4be0: 2d 54 63 6c 43 6c 6f 63 6b 0a 0a 23 20 2d 2d 2d -TclClock..# ---
4bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4c30: 2d 2d 2d 2d 2d 0a 0a 23 20 69 66 20 63 61 6c 6c -----..# if call
4c40: 69 6e 67 20 64 69 72 65 63 74 3a 0a 69 66 20 7b ing direct:.if {
4c50: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 61 [info exists ::a
4c60: 72 67 76 30 5d 20 26 26 20 5b 66 69 6c 65 20 74 rgv0] && [file t
4c70: 61 69 6c 20 24 3a 3a 61 72 67 76 30 5d 20 65 71 ail $::argv0] eq
4c80: 20 5b 66 69 6c 65 20 74 61 69 6c 20 5b 69 6e 66 [file tail [inf
4c90: 6f 20 73 63 72 69 70 74 5d 5d 7d 20 7b 0a 20 20 o script]]} {.
4ca0: 3a 3a 74 63 6c 54 65 73 74 50 65 72 66 2d 54 63 ::tclTestPerf-Tc
4cb0: 6c 43 6c 6f 63 6b 3a 3a 74 65 73 74 20 24 69 6e lClock::test $in
4cc0: 28 2d 74 69 6d 65 29 0a 7d 0a (-time).}.