Compare commits
199
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c2ea0542f | ||
|
|
346eec1892 | ||
|
|
ddb7bbe66c | ||
|
|
567fb6cc27 | ||
|
|
75bd116527 | ||
|
|
7ac6487eda | ||
|
|
df94eecf11 | ||
|
|
8d0340e39e | ||
|
|
61f580bd36 | ||
|
|
08c1a8dd34 | ||
|
|
fb91d4b68b | ||
|
|
327595170b | ||
|
|
6b8039a952 | ||
|
|
62ea5e49a1 | ||
|
|
5dff80f2fe | ||
|
|
f316d7539c | ||
|
|
31a291920a | ||
|
|
05845fbe5f | ||
|
|
80e5aed49e | ||
|
|
47fc4afd86 | ||
|
|
08d704bbb1 | ||
|
|
2d5be38603 | ||
|
|
019016e71a | ||
|
|
4647cfb665 | ||
|
|
ff7812fe97 | ||
|
|
689f5653f9 | ||
|
|
634c443219 | ||
|
|
43507f353b | ||
|
|
eb8817687f | ||
|
|
0ad3b13e26 | ||
|
|
a5d6e9657a | ||
|
|
a27e0ef2ce | ||
|
|
220d2d7d9c | ||
|
|
08dc58ce40 | ||
|
|
3abde0eac5 | ||
|
|
29f8e6add3 | ||
|
|
05c789647a | ||
|
|
919a1c67ab | ||
|
|
dc07332444 | ||
|
|
bac2aebf10 | ||
|
|
df06afadcf | ||
|
|
7435702d63 | ||
|
|
a8ffcb0b4c | ||
|
|
aa199edba6 | ||
|
|
c5e979695a | ||
|
|
5d355c0fd9 | ||
|
|
e6e44fb3b8 | ||
|
|
6fcbcd9f12 | ||
|
|
4751bcf256 | ||
|
|
99ab923ed5 | ||
|
|
72c721f3e7 | ||
|
|
6d4320b5fb | ||
|
|
73de582148 | ||
|
|
d0bce3e99f | ||
|
|
1bf60bab3c | ||
|
|
43f670e530 | ||
|
|
77ab9f868a | ||
|
|
6e7c474da7 | ||
|
|
2d87ed6d29 | ||
|
|
3cda2dc805 | ||
|
|
0a3e263036 | ||
|
|
864d754a8a | ||
|
|
b16ec6f23b | ||
|
|
17e2ed6919 | ||
|
|
15bfd5756e | ||
|
|
0d0b8e03ed | ||
|
|
fd2d896c8f | ||
|
|
f597744c5f | ||
|
|
261fbdac7e | ||
|
|
ec5288cc2e | ||
|
|
90f38b1023 | ||
|
|
64eaafad72 | ||
|
|
62079a5c69 | ||
|
|
41ed3e0e2b | ||
|
|
9ac074bd09 | ||
|
|
bbae63cfa9 | ||
|
|
a275b8a5ea | ||
|
|
962427e8cd | ||
|
|
debafda1e7 | ||
|
|
1af314024c | ||
|
|
23178bb208 | ||
|
|
2ae2445072 | ||
|
|
8bd4a8cf2c | ||
|
|
5ff641a603 | ||
|
|
71618ce230 | ||
|
|
f35817ce5a | ||
|
|
3af272b07a | ||
|
|
67a242e003 | ||
|
|
4ba8623115 | ||
|
|
410bda416e | ||
|
|
861217dbe3 | ||
|
|
a28f176470 | ||
|
|
9b9635f82e | ||
|
|
45f5143205 | ||
|
|
de9c1aff4a | ||
|
|
e7a5b8aaa5 | ||
|
|
cd39f34fa5 | ||
|
|
e7be4a19a0 | ||
|
|
a0374a6e61 | ||
|
|
3f3c89a947 | ||
|
|
d660f467cb | ||
|
|
6b5d0e5d8d | ||
|
|
d9dbcf5afb | ||
|
|
4dc5255a8e | ||
|
|
e7a86d967c | ||
|
|
6fce39545c | ||
|
|
87fd09e44a | ||
|
|
cd4e0ec5de | ||
|
|
954522812e | ||
|
|
db9b0eccf3 | ||
|
|
06c3fd0c5b | ||
|
|
c13e34da37 | ||
|
|
a9d546dfbc | ||
|
|
6798b2404f | ||
|
|
5fd318bc35 | ||
|
|
88812125b1 | ||
|
|
947fb98db5 | ||
|
|
ed53b715ac | ||
|
|
b8b87e5280 | ||
|
|
0c5bd7480e | ||
|
|
64038c5656 | ||
|
|
101ac8bca7 | ||
|
|
30e7e05895 | ||
|
|
b4d6691add | ||
|
|
ce6aa3ea08 | ||
|
|
3492c92f3d | ||
|
|
d7f41b448c | ||
|
|
405b9175e6 | ||
|
|
2c44354d13 | ||
|
|
612199cbe9 | ||
|
|
f337281f75 | ||
|
|
7fe003f8d2 | ||
|
|
f003df5624 | ||
|
|
9fb9471807 | ||
|
|
0254080ca0 | ||
|
|
8c2cbf3211 | ||
|
|
c68d043691 | ||
|
|
720c8de452 | ||
|
|
596e89b17d | ||
|
|
847a048c18 | ||
|
|
a735b5d3ac | ||
|
|
d2d193de11 | ||
|
|
da8fbb89c4 | ||
|
|
77d58c5993 | ||
|
|
6bb961ffc6 | ||
|
|
0d33258649 | ||
|
|
f406561f40 | ||
|
|
80c3bfdcaa | ||
|
|
465d28aa75 | ||
|
|
96e07632d9 | ||
|
|
6c0170972f | ||
|
|
4d47b7f97f | ||
|
|
b1e6769ef3 | ||
|
|
0e5d21e88f | ||
|
|
0c568099ee | ||
|
|
5753c7a42b | ||
|
|
914d6e1546 | ||
|
|
683dada217 | ||
|
|
2cd8bf554e | ||
|
|
e9c0312caf | ||
|
|
9a809e614a | ||
|
|
0bceead396 | ||
|
|
ffae8c82da | ||
|
|
4cff9271ac | ||
|
|
3f2c5cd5aa | ||
|
|
46e8af13b6 | ||
|
|
b0fce7a700 | ||
|
|
83df36ac41 | ||
|
|
eb9e2858c1 | ||
|
|
7c60d44ce6 | ||
|
|
e89d1e331e | ||
|
|
e841295386 | ||
|
|
87c12599bf | ||
|
|
eaacc9bb56 | ||
|
|
ecaec63f48 | ||
|
|
e1ffd3f005 | ||
|
|
2cfe8bb561 | ||
|
|
e9f2695255 | ||
|
|
1fda13591a | ||
|
|
3b5858bcd2 | ||
|
|
fc03549d34 | ||
|
|
54590627ee | ||
|
|
651697f7cd | ||
|
|
0f6d3fd959 | ||
|
|
2ad54a6f6e | ||
|
|
6fff25ecbc | ||
|
|
d8cae66217 | ||
|
|
40ce2eccbc | ||
|
|
0a8718312d | ||
|
|
68b53cfb25 | ||
|
|
935e991786 | ||
|
|
43c89a019c | ||
|
|
57aa77515a | ||
|
|
8dd2373a08 | ||
|
|
03470df2ff | ||
|
|
5aaef06572 | ||
|
|
0b8e964f45 | ||
|
|
c86a23de04 | ||
|
|
f0aac87b35 |
@@ -8879,3 +8879,8 @@ in this changeset (new minor version) rather than bug fixes:
|
||||
2017-09-02 (bug)[0e4d88] replace command, delete trace kills namespace (porter)
|
||||
|
||||
--- Released 8.7a1, September 8, 2017 --- http://core.tcl.tk/tcl/ for details
|
||||
|
||||
2018-03-12 (TIP 490) add oo support for msgcat => msgcat 1.7.0 (oehlmann)
|
||||
|
||||
2018-03-12 (TIP 499) custom locale preference list (oehlmann)
|
||||
=> msgcat 1.7.0
|
||||
|
||||
@@ -47,6 +47,15 @@ been the return value from a previous invocation of
|
||||
Returns 1 if \fIarrayName\fR is an array variable, 0 if there
|
||||
is no variable by that name or if it is a scalar variable.
|
||||
.TP
|
||||
\fBarray for {\fIkeyVariable valueVariable\fB} \fIarrayName body\fP
|
||||
The first argument is a two element list of variable names for the
|
||||
key and value of each entry in the array. The second argument is the
|
||||
array name to iterate over. The third argument is the body to execute
|
||||
for each key and value returned.
|
||||
The ordering of the returned keys is undefined.
|
||||
If an array element is deleted or a new array element is inserted during
|
||||
the \fIarray for\fP process, the command will terminate with an error.
|
||||
.TP
|
||||
\fBarray get \fIarrayName\fR ?\fIpattern\fR?
|
||||
Returns a list containing pairs of elements. The first
|
||||
element in each pair is the name of an element in \fIarrayName\fR
|
||||
|
||||
@@ -148,6 +148,19 @@ or \fB\-not\fR.
|
||||
These options are used to search lists of lists. They may be used
|
||||
with any other options.
|
||||
.TP
|
||||
\fB\-stride\0\fIstrideLength\fR
|
||||
.
|
||||
If this option is specified, the list is treated as consisting of
|
||||
groups of \fIstrideLength\fR elements and the groups are searched by
|
||||
either their first element or, if the \fB\-index\fR option is used,
|
||||
by the element within each group given by the first index passed to
|
||||
\fB\-index\fR (which is then ignored by \fB\-index\fR). The resulting
|
||||
index always points to the first element in a group.
|
||||
.PP
|
||||
The list length must be an integer multiple of \fIstrideLength\fR, which
|
||||
in turn must be at least 1. A \fIstrideLength\fR of 1 is the default and
|
||||
indicates no grouping.
|
||||
.TP
|
||||
\fB\-index\fR\0\fIindexList\fR
|
||||
.
|
||||
This option is designed for use when searching within nested lists.
|
||||
@@ -208,6 +221,13 @@ It is also possible to search inside elements:
|
||||
\fBlsearch\fR -index 1 -all -inline {{a abc} {b bcd} {c cde}} *bc*
|
||||
\fI\(-> {a abc} {b bcd}\fR
|
||||
.CE
|
||||
.PP
|
||||
The same thing for a flattened list:
|
||||
.PP
|
||||
.CS
|
||||
\fBlsearch\fR -stride 2 -index 1 -all -inline {a abc b bcd c cde} *bc*
|
||||
\fI\(-> {a abc b bcd}\fR
|
||||
.CE
|
||||
.SH "SEE ALSO"
|
||||
foreach(n), list(n), lappend(n), lindex(n), linsert(n), llength(n),
|
||||
lset(n), lsort(n), lrange(n), lreplace(n),
|
||||
|
||||
+178
-27
@@ -11,9 +11,9 @@
|
||||
.SH NAME
|
||||
msgcat \- Tcl message catalog
|
||||
.SH SYNOPSIS
|
||||
\fBpackage require Tcl 8.5\fR
|
||||
\fBpackage require Tcl 8.7\fR
|
||||
.sp
|
||||
\fBpackage require msgcat 1.6\fR
|
||||
\fBpackage require msgcat 1.7\fR
|
||||
.sp
|
||||
\fB::msgcat::mc \fIsrc-string\fR ?\fIarg arg ...\fR?
|
||||
.sp
|
||||
@@ -23,9 +23,15 @@ msgcat \- Tcl message catalog
|
||||
\fB::msgcat::mcexists\fR ?\fB-exactnamespace\fR? ?\fB-exactlocale\fR? \fIsrc-string\fR
|
||||
.VE "TIP 412"
|
||||
.sp
|
||||
.VS "TIP 490"
|
||||
\fB::msgcat::mcpackagenamespaceget\fR
|
||||
.VE "TIP 490"
|
||||
.sp
|
||||
\fB::msgcat::mclocale \fR?\fInewLocale\fR?
|
||||
.sp
|
||||
\fB::msgcat::mcpreferences\fR
|
||||
.VS "TIP 499"
|
||||
\fB::msgcat::mcpreferences\fR ?\fIlocale preference\fR? ...
|
||||
.VE "TIP 499"
|
||||
.sp
|
||||
.VS "TIP 412"
|
||||
\fB::msgcat::mcloadedlocales subcommand\fR ?\fIlocale\fR?
|
||||
@@ -50,6 +56,10 @@ msgcat \- Tcl message catalog
|
||||
.sp
|
||||
\fB::msgcat::mcforgetpackage\fR
|
||||
.VE "TIP 412"
|
||||
.sp
|
||||
.VS "TIP 499"
|
||||
\fB::msgcat::mcutil subcommand\fR ?\fIlocale\fR?
|
||||
.VS "TIP 499"
|
||||
.BE
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
@@ -71,6 +81,11 @@ In \fBmsgcat\fR, there is a global locale initialized by the system locale of th
|
||||
Each package may decide to use the global locale or to use a package specific locale.
|
||||
.PP
|
||||
The global locale may be changed on demand, for example by a user initiated language change or within a multi user application like a web server.
|
||||
.PP
|
||||
.VS tip490
|
||||
Object oriented programming is supported by the use of a package namespace.
|
||||
.VE tip490
|
||||
.PP
|
||||
.SH COMMANDS
|
||||
.TP
|
||||
\fB::msgcat::mc \fIsrc-string\fR ?\fIarg arg ...\fR?
|
||||
@@ -95,6 +110,17 @@ use the result. If an application is written for a single language in
|
||||
this fashion, then it is easy to add support for additional languages
|
||||
later simply by defining new message catalog entries.
|
||||
.RE
|
||||
.VS "TIP 490"
|
||||
.TP
|
||||
\fB::msgcat::mcn \fInamespace\fR \fIsrc-string\fR ?\fIarg arg ...\fR?
|
||||
.
|
||||
Like \fB::msgcat::mc\fR, but with the message namespace specified as first argument.
|
||||
.PP
|
||||
.RS
|
||||
\fBmcn\fR may be used for cases where the package namespace is not the namespace of the caller.
|
||||
An example is shown within the description of the command \fB::msgcat::mcpackagenamespaceget\fR below.
|
||||
.RE
|
||||
.PP
|
||||
.TP
|
||||
\fB::msgcat::mcmax ?\fIsrc-string src-string ...\fR?
|
||||
.
|
||||
@@ -103,28 +129,68 @@ of the longest translated string. This is useful when designing
|
||||
localized GUIs, which may require that all buttons, for example, be a
|
||||
fixed width (which will be the width of the widest button).
|
||||
.TP
|
||||
\fB::msgcat::mcexists\fR ?\fB-exactnamespace\fR? ?\fB-exactlocale\fR? \fIsrc-string\fR
|
||||
.
|
||||
.VS "TIP 412"
|
||||
\fB::msgcat::mcexists\fR ?\fB-exactnamespace\fR? ?\fB-exactlocale\fR? ?\fB-namespace\fR \fInamespace\fR? \fIsrc-string\fR
|
||||
.
|
||||
Return true, if there is a translation for the given \fIsrc-string\fR.
|
||||
.PP
|
||||
.RS
|
||||
The search may be limited by the option \fB\-exactnamespace\fR to only check the current namespace and not any parent namespaces.
|
||||
.PP
|
||||
It may also be limited by the option \fB\-exactlocale\fR to only check the first prefered locale (e.g. first element returned by \fB::msgcat::mcpreferences\fR if global locale is used).
|
||||
.RE
|
||||
.PP
|
||||
.VE "TIP 412"
|
||||
.VS "TIP 490"
|
||||
An explicit package namespace may be specified by the option \fB-namespace\fR.
|
||||
The namespace of the caller is used if not explicitly specified.
|
||||
.RE
|
||||
.PP
|
||||
.VE "TIP 490"
|
||||
.VS "TIP 490"
|
||||
.TP
|
||||
\fB::msgcat::mcpackagenamespaceget\fR
|
||||
.
|
||||
Return the package namespace of the caller.
|
||||
This command handles all cases described in section \fBOBJECT ORIENTED PROGRAMMING\fR.
|
||||
.PP
|
||||
.RS
|
||||
Example usage is a tooltip package, which saves the caller package namespace to update the translation each time the tooltip is shown:
|
||||
.CS
|
||||
proc ::tooltip::tooltip {widget message} {
|
||||
...
|
||||
set messagenamespace [uplevel 1 {::msgcat::mcpackagenamespaceget}]
|
||||
...
|
||||
bind $widget [list ::tooltip::show $widget $messagenamespace $message]
|
||||
}
|
||||
|
||||
proc ::tooltip::show {widget messagenamespace message} {
|
||||
...
|
||||
set message [::msgcat::mcn $messagenamespace $message]
|
||||
...
|
||||
}
|
||||
.CE
|
||||
.RE
|
||||
.PP
|
||||
.VE "TIP 490"
|
||||
.TP
|
||||
\fB::msgcat::mclocale \fR?\fInewLocale\fR?
|
||||
.
|
||||
This function sets the locale to \fInewLocale\fR. If \fInewLocale\fR
|
||||
is omitted, the current locale is returned, otherwise the current locale
|
||||
is set to \fInewLocale\fR. msgcat stores and compares the locale in a
|
||||
If \fInewLocale\fR is omitted, the current locale is returned, otherwise the current locale
|
||||
is set to \fInewLocale\fR.
|
||||
.PP
|
||||
.RS
|
||||
If the new locale is set to \fInewLocale\fR, the corresponding preferences are calculated and set.
|
||||
For example, if the current locale is en_US_funky, then \fB::msgcat::mcpreferences\fR returns \fB{en_us_funky en_us en {}}\fR.
|
||||
.PP
|
||||
The same result may be acheved by \fB::msgcat::mcpreferences\fR {*}[\fB::msgcat::mcutil getpreferences\fR \fInewLocale\fR].
|
||||
.PP
|
||||
The current locale is always the first element of the list returned by \fBmcpreferences\fR.
|
||||
.PP
|
||||
msgcat stores and compares the locale in a
|
||||
case-insensitive manner, and returns locales in lowercase.
|
||||
The initial locale is determined by the locale specified in
|
||||
the user's environment. See \fBLOCALE SPECIFICATION\fR
|
||||
below for a description of the locale string format.
|
||||
.RS
|
||||
.PP
|
||||
.VS "TIP 412"
|
||||
If the locale is set, the preference list of locales is evaluated.
|
||||
@@ -132,16 +198,26 @@ Locales in this list are loaded now, if not jet loaded.
|
||||
.VE "TIP 412"
|
||||
.RE
|
||||
.TP
|
||||
\fB::msgcat::mcpreferences\fR
|
||||
\fB::msgcat::mcpreferences\fR ?\fIlocale preference\fR? ...
|
||||
.
|
||||
Returns an ordered list of the locales preferred by
|
||||
the user, based on the user's language specification.
|
||||
The list is ordered from most specific to least
|
||||
preference. The list is derived from the current
|
||||
locale set in msgcat by \fB::msgcat::mclocale\fR, and
|
||||
cannot be set independently. For example, if the
|
||||
current locale is en_US_funky, then \fB::msgcat::mcpreferences\fR
|
||||
returns \fB{en_us_funky en_us en {}}\fR.
|
||||
Without arguments, returns an ordered list of the locales preferred by
|
||||
the user.
|
||||
The list is ordered from most specific to least preference.
|
||||
.PP
|
||||
.VS "TIP 499"
|
||||
.RS
|
||||
A set of locale preferences may be given to set the list of locale preferences.
|
||||
The current locale is also set, which is the first element of the locale preferences list.
|
||||
.PP
|
||||
Locale preferences are loaded now, if not jet loaded.
|
||||
.PP
|
||||
As an example, the user may prefer French or English text. This may be configured by:
|
||||
.CS
|
||||
::msgcat::mcpreferences fr en {}
|
||||
.CE
|
||||
.RE
|
||||
.PP
|
||||
.VS "TIP 499"
|
||||
.TP
|
||||
\fB::msgcat:mcloadedlocales subcommand\fR ?\fIlocale\fR?
|
||||
.
|
||||
@@ -232,6 +308,22 @@ Note that this routine is only called if the concerned package did not set a pac
|
||||
The calling package clears all its state within the \fBmsgcat\fR package including all settings and translations.
|
||||
.VE "TIP 412"
|
||||
.PP
|
||||
.VS "TIP 499"
|
||||
.TP
|
||||
\fB::msgcat::mcutil getpreferences\fR \fIlocale\fR
|
||||
.
|
||||
Return the preferences list of the given locale as described in section \fBLOCALE SPECIFICATION\fR.
|
||||
An example is the composition of a preference list for the bilingual region "Biel/Bienne" as a concatenation of swiss german and swiss french:
|
||||
.CS
|
||||
% concat [lrange [msgcat::mcutil getpreferences fr_CH] 0 end-1] [msgcat::mcutil getpreferences de_CH]
|
||||
fr_ch fr de_ch de {}
|
||||
.CE
|
||||
.TP
|
||||
\fB::msgcat::mcutil getsystemlocale\fR
|
||||
.
|
||||
The system locale is returned as described by the section \fBLOCALE SPECIFICATION\fR.
|
||||
.VE "TIP 499"
|
||||
.PP
|
||||
.SH "LOCALE SPECIFICATION"
|
||||
.PP
|
||||
The locale is specified to \fBmsgcat\fR by a locale string
|
||||
@@ -437,7 +529,7 @@ formatting substitution is done directly.
|
||||
# human-oriented versions by \fBmsgcat::mcset\fR
|
||||
.CE
|
||||
.VS "TIP 412"
|
||||
.SH Package private locale
|
||||
.SH "PACKAGE PRIVATE LOCALE"
|
||||
.PP
|
||||
A package using \fBmsgcat\fR may choose to use its own package private
|
||||
locale and its own set of loaded locales, independent to the global
|
||||
@@ -461,10 +553,22 @@ This command may cause the load of locales.
|
||||
.
|
||||
Return the package private locale or the global locale, if no package private locale is set.
|
||||
.TP
|
||||
\fB::msgcat::mcpackagelocale preferences\fR
|
||||
\fB::msgcat::mcpackagelocale preferences\fR ?\fIlocale preference\fR? ...
|
||||
.
|
||||
Return the package private preferences or the global preferences,
|
||||
With no parameters, return the package private preferences or the global preferences,
|
||||
if no package private locale is set.
|
||||
The package locale state (set or not) is not changed (in contrast to the command \fB::msgcat::mcpackagelocale set\fR).
|
||||
.PP
|
||||
.RS
|
||||
.VS "TIP 499"
|
||||
If a set of locale preferences is given, it is set as package locale preference list.
|
||||
The package locale is set to the first element of the preference list.
|
||||
A package locale is activated, if it was not set so far.
|
||||
.PP
|
||||
Locale preferences are loaded now for the package, if not jet loaded.
|
||||
.VE "TIP 499"
|
||||
.RE
|
||||
.PP
|
||||
.TP
|
||||
\fB::msgcat::mcpackagelocale loaded\fR
|
||||
.
|
||||
@@ -488,7 +592,7 @@ Returns true, if the given locale is loaded for the package.
|
||||
.
|
||||
Clear any loaded locales of the package not present in the package preferences.
|
||||
.PP
|
||||
.SH Changing package options
|
||||
.SH "CHANGING PACKAGE OPTIONS"
|
||||
.PP
|
||||
Each package using msgcat has a set of options within \fBmsgcat\fR.
|
||||
The package options are described in the next sectionPackage options.
|
||||
@@ -563,7 +667,7 @@ A generic unknown handler is used if set to the empty string. This consists in r
|
||||
See section \fBcallback invocation\fR below.
|
||||
The appended arguments are identical to \fB::msgcat::mcunknown\fR.
|
||||
.RE
|
||||
.SS Callback invocation
|
||||
.SH "Callback invocation"
|
||||
A package may decide to register one or multiple callbacks, as described above.
|
||||
.PP
|
||||
Callbacks are invoked, if:
|
||||
@@ -577,7 +681,54 @@ Callbacks are invoked, if:
|
||||
If a called routine fails with an error, the \fBbgerror\fR routine for the interpreter is invoked after command completion.
|
||||
Only exception is the callback \fBunknowncmd\fR, where an error causes the invoking \fBmc\fR-command to fail with that error.
|
||||
.PP
|
||||
.SS Examples
|
||||
.VS tip490
|
||||
.SH "OBJECT ORIENTED PROGRAMMING"
|
||||
\fBmsgcat\fR supports packages implemented by object oriented programming.
|
||||
Objects and classes should be defined within a package namespace.
|
||||
.PP
|
||||
There are 3 supported cases where package namespace sensitive commands of msgcat (\fBmc\fR, \fBmcexists\fR, \fBmcpackagelocale\fR, \fBmcforgetpackage\fR, \fBmcpackagenamespaceget\fR, \fBmcpackageconfig\fR, \fBmcset\fR and \fBmcmset\fR) may be called:
|
||||
.PP
|
||||
.TP
|
||||
\fB1) In class definition script\fR
|
||||
.
|
||||
\fBmsgcat\fR command is called within a class definition script.
|
||||
.CS
|
||||
namespace eval ::N2 {
|
||||
mcload $dir/msgs
|
||||
oo::class create C1 {puts [mc Hi!]}
|
||||
}
|
||||
.CE
|
||||
.PP
|
||||
.TP
|
||||
\fB2) method defined in a class\fR
|
||||
.
|
||||
\fBmsgcat\fR command is called from a method in an object and the method is defined in a class.
|
||||
.CS
|
||||
namespace eval ::N3Class {
|
||||
mcload $dir/msgs
|
||||
oo::class create C1
|
||||
oo::define C1 method m1 {
|
||||
puts [mc Hi!]
|
||||
}
|
||||
}
|
||||
.CE
|
||||
.PP
|
||||
.TP
|
||||
\fB3) method defined in a classless object\fR
|
||||
.
|
||||
\fBmsgcat\fR command is called from a method of a classless object.
|
||||
.CS
|
||||
namespace eval ::N4 {
|
||||
mcload $dir/msgs
|
||||
oo::object create O1
|
||||
oo::objdefine O1 method m1 {} {
|
||||
puts [mc Hi!]
|
||||
}
|
||||
}
|
||||
.CE
|
||||
.PP
|
||||
.VE tip490
|
||||
.SH EXAMPLES
|
||||
Packages which display a GUI may update their widgets when the global locale changes.
|
||||
To register to a callback, use:
|
||||
.CS
|
||||
@@ -643,9 +794,9 @@ proc ::tcl::clock::LocalizeFormat { locale format } {
|
||||
.PP
|
||||
The message catalog code was developed by Mark Harrison.
|
||||
.SH "SEE ALSO"
|
||||
format(n), scan(n), namespace(n), package(n)
|
||||
format(n), scan(n), namespace(n), package(n), oo::class(n), oo::object
|
||||
.SH KEYWORDS
|
||||
internationalization, i18n, localization, l10n, message, text, translation
|
||||
internationalization, i18n, localization, l10n, message, text, translation, class, object
|
||||
.\" Local Variables:
|
||||
.\" mode: nroff
|
||||
.\" End:
|
||||
|
||||
+3
-5
@@ -115,9 +115,7 @@ Any Unicode control character.
|
||||
Any Unicode digit character. Note that this includes characters
|
||||
outside of the [0\-9] range.
|
||||
.IP \fBdouble\fR 12
|
||||
Any of the valid forms for a double in Tcl, with optional surrounding
|
||||
whitespace. In case of under/overflow in the value, 0 is returned and
|
||||
the \fIvarname\fR will contain \-1.
|
||||
Any of the forms allowed to \fBTcl_GetDoubleFromObj\fR.
|
||||
.IP \fBentier\fR 12
|
||||
.VS 8.6
|
||||
Any of the valid string formats for an integer value of arbitrary size
|
||||
@@ -131,7 +129,7 @@ false.
|
||||
Any Unicode printing character, except space.
|
||||
.IP \fBinteger\fR 12
|
||||
Any of the valid string formats for a 32-bit integer value in Tcl,
|
||||
with optional surrounding whitespace. In case of under/overflow in
|
||||
with optional surrounding whitespace. In case of overflow in
|
||||
the value, 0 is returned and the \fIvarname\fR will contain \-1.
|
||||
.IP \fBlist\fR 12
|
||||
Any proper list structure, with optional surrounding whitespace. In
|
||||
@@ -156,7 +154,7 @@ true.
|
||||
Any upper case alphabet character in the Unicode character set.
|
||||
.IP \fBwideinteger\fR 12
|
||||
Any of the valid forms for a wide integer in Tcl, with optional
|
||||
surrounding whitespace. In case of under/overflow in the value, 0 is
|
||||
surrounding whitespace. In case of overflow in the value, 0 is
|
||||
returned and the \fIvarname\fR will contain \-1.
|
||||
.IP \fBwordchar\fR 12
|
||||
Any Unicode word character. That is any alphanumeric character, and
|
||||
|
||||
@@ -269,8 +269,6 @@ extern "C" {
|
||||
#ifndef CONST
|
||||
# define CONST const
|
||||
#endif
|
||||
#define CONST84 const
|
||||
#define CONST84_RETURN const
|
||||
|
||||
#endif /* !TCL_NO_DEPRECATED */
|
||||
|
||||
@@ -468,31 +466,9 @@ typedef struct Tcl_Interp
|
||||
{
|
||||
/* TIP #330: Strongly discourage extensions from using the string
|
||||
* result. */
|
||||
#ifdef USE_INTERP_RESULT
|
||||
char *result TCL_DEPRECATED_API("use Tcl_GetStringResult/Tcl_SetResult");
|
||||
/* If the last command returned a string
|
||||
* result, this points to it. */
|
||||
void (*freeProc) (char *blockPtr)
|
||||
TCL_DEPRECATED_API("use Tcl_GetStringResult/Tcl_SetResult");
|
||||
/* Zero means the string result is statically
|
||||
* allocated. TCL_DYNAMIC means it was
|
||||
* allocated with ckalloc and should be freed
|
||||
* with ckfree. Other values give the address
|
||||
* of function to invoke to free the result.
|
||||
* Tcl_Eval must free it before executing next
|
||||
* command. */
|
||||
#else
|
||||
char *resultDontUse; /* Don't use in extensions! */
|
||||
void (*freeProcDontUse) (char *); /* Don't use in extensions! */
|
||||
#endif
|
||||
#ifdef USE_INTERP_ERRORLINE
|
||||
int errorLine TCL_DEPRECATED_API("use Tcl_GetErrorLine/Tcl_SetErrorLine");
|
||||
/* When TCL_ERROR is returned, this gives the
|
||||
* line number within the command where the
|
||||
* error occurred (1 if first line). */
|
||||
#else
|
||||
int errorLineDontUse; /* Don't use in extensions! */
|
||||
#endif
|
||||
}
|
||||
#endif /* !TCL_NO_DEPRECATED */
|
||||
Tcl_Interp;
|
||||
|
||||
+12
-11
@@ -2246,23 +2246,24 @@ GetListIndexOperand(
|
||||
Tcl_Token* tokenPtr = *tokenPtrPtr;
|
||||
/* INOUT: Pointer to the next token in the
|
||||
* source code */
|
||||
Tcl_Obj* intObj; /* Integer from the source code */
|
||||
int status; /* Tcl status return */
|
||||
Tcl_Obj *value;
|
||||
int status;
|
||||
|
||||
/*
|
||||
* Extract the next token as a string.
|
||||
*/
|
||||
|
||||
if (GetNextOperand(assemEnvPtr, tokenPtrPtr, &intObj) != TCL_OK) {
|
||||
/* General operand validity check */
|
||||
if (GetNextOperand(assemEnvPtr, tokenPtrPtr, &value) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
|
||||
/* Convert to an integer, advance to the next token and return. */
|
||||
/*
|
||||
* Convert to an integer, advance to the next token and return.
|
||||
* NOTE: Indexing a list with an index before it yields the
|
||||
* same result as indexing after it, and might be more easily portable
|
||||
* when list size limits grow.
|
||||
*/
|
||||
status = TclIndexEncode(interp, value,
|
||||
TCL_INDEX_BEFORE,TCL_INDEX_BEFORE, result);
|
||||
|
||||
status = TclGetIntForIndex(interp, intObj, -2, result);
|
||||
Tcl_DecrRefCount(intObj);
|
||||
Tcl_DecrRefCount(value);
|
||||
*tokenPtrPtr = TokenAfter(tokenPtr);
|
||||
return status;
|
||||
}
|
||||
|
||||
+10
-4
@@ -819,6 +819,7 @@ Tcl_CreateInterp(void)
|
||||
TclInitNamespaceCmd(interp);
|
||||
TclInitStringCmd(interp);
|
||||
TclInitPrefixCmd(interp);
|
||||
TclInitProcessCmd(interp);
|
||||
|
||||
/*
|
||||
* Register "clock" subcommands. These *do* go through
|
||||
@@ -4462,7 +4463,9 @@ TclNRRunCallbacks(
|
||||
/* All callbacks down to rootPtr not inclusive
|
||||
* are to be run. */
|
||||
{
|
||||
#if !defined(TCL_NO_DEPRECATED) && TCL_MAJOR_VERSION < 9
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
#endif /* !defined(TCL_NO_DEPRECATED) */
|
||||
NRE_callback *callbackPtr;
|
||||
Tcl_NRPostProc *procPtr;
|
||||
|
||||
@@ -4476,9 +4479,11 @@ TclNRRunCallbacks(
|
||||
* are for NR function calls, and those are Tcl_Obj based.
|
||||
*/
|
||||
|
||||
#if !defined(TCL_NO_DEPRECATED) && TCL_MAJOR_VERSION < 9
|
||||
if (*(iPtr->result) != 0) {
|
||||
(void) Tcl_GetObjResult(interp);
|
||||
}
|
||||
#endif /* !defined(TCL_NO_DEPRECATED) */
|
||||
|
||||
/* This is the trampoline. */
|
||||
|
||||
@@ -6873,7 +6878,8 @@ Tcl_AddObjErrorInfo(
|
||||
|
||||
iPtr->flags |= ERR_LEGACY_COPY;
|
||||
if (iPtr->errorInfo == NULL) {
|
||||
if (iPtr->result[0] != 0) {
|
||||
#if !defined(TCL_NO_DEPRECATED) && TCL_MAJOR_VERSION < 9
|
||||
if (*(iPtr->result) != 0) {
|
||||
/*
|
||||
* The interp's string result is set, apparently by some extension
|
||||
* making a deprecated direct write to it. That extension may
|
||||
@@ -6883,9 +6889,9 @@ Tcl_AddObjErrorInfo(
|
||||
*/
|
||||
|
||||
iPtr->errorInfo = Tcl_NewStringObj(iPtr->result, -1);
|
||||
} else {
|
||||
} else
|
||||
#endif /* !defined(TCL_NO_DEPRECATED) */
|
||||
iPtr->errorInfo = iPtr->objResultPtr;
|
||||
}
|
||||
Tcl_IncrRefCount(iPtr->errorInfo);
|
||||
if (!iPtr->errorCode) {
|
||||
Tcl_SetErrorCode(interp, "NONE", NULL);
|
||||
@@ -7527,7 +7533,7 @@ ExprAbsFunc(
|
||||
}
|
||||
|
||||
if (type == TCL_NUMBER_BIG) {
|
||||
if (mp_cmp_d((const mp_int *) ptr, 0) == MP_LT) {
|
||||
if (mp_isneg((const mp_int *) ptr)) {
|
||||
Tcl_GetBignumFromObj(NULL, objv[1], &big);
|
||||
tooLarge:
|
||||
mp_neg(&big, &big);
|
||||
|
||||
+182
-129
@@ -64,8 +64,9 @@ typedef struct SortInfo {
|
||||
* SORTMODE_COMMAND. Pre-initialized to hold
|
||||
* base of command. */
|
||||
int *indexv; /* If the -index option was specified, this
|
||||
* holds the indexes contained in the list
|
||||
* supplied as an argument to that option.
|
||||
* holds an encoding of the indexes contained
|
||||
* in the list supplied as an argument to
|
||||
* that option.
|
||||
* NULL if no indexes supplied, and points to
|
||||
* singleIndex field when only one
|
||||
* supplied. */
|
||||
@@ -92,14 +93,6 @@ typedef struct SortInfo {
|
||||
#define SORTMODE_DICTIONARY 4
|
||||
#define SORTMODE_ASCII_NC 8
|
||||
|
||||
/*
|
||||
* Magic values for the index field of the SortInfo structure. Note that the
|
||||
* index "end-1" will be translated to SORTIDX_END-1, etc.
|
||||
*/
|
||||
|
||||
#define SORTIDX_NONE -1 /* Not indexed; use whole value. */
|
||||
#define SORTIDX_END -2 /* Indexed from end. */
|
||||
|
||||
/*
|
||||
* Forward declarations for procedures defined in this file:
|
||||
*/
|
||||
@@ -2543,7 +2536,6 @@ Tcl_LrangeObjCmd(
|
||||
register Tcl_Obj *const objv[])
|
||||
/* Argument objects. */
|
||||
{
|
||||
Tcl_Obj **elemPtrs;
|
||||
int listLen, first, last, result;
|
||||
|
||||
if (objc != 4) {
|
||||
@@ -2561,55 +2553,14 @@ Tcl_LrangeObjCmd(
|
||||
if (result != TCL_OK) {
|
||||
return result;
|
||||
}
|
||||
if (first < 0) {
|
||||
first = 0;
|
||||
}
|
||||
|
||||
result = TclGetIntForIndexM(interp, objv[3], /*endValue*/ listLen - 1,
|
||||
&last);
|
||||
if (result != TCL_OK) {
|
||||
return result;
|
||||
}
|
||||
if (last >= listLen) {
|
||||
last = listLen - 1;
|
||||
}
|
||||
|
||||
if (first > last) {
|
||||
/*
|
||||
* Returning an empty list is easy.
|
||||
*/
|
||||
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
result = TclListObjGetElements(interp, objv[1], &listLen, &elemPtrs);
|
||||
if (result != TCL_OK) {
|
||||
return result;
|
||||
}
|
||||
|
||||
if (Tcl_IsShared(objv[1]) ||
|
||||
((ListRepPtr(objv[1])->refCount > 1))) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewListObj(last - first + 1,
|
||||
&elemPtrs[first]));
|
||||
} else {
|
||||
/*
|
||||
* In-place is possible.
|
||||
*/
|
||||
|
||||
if (last < (listLen - 1)) {
|
||||
Tcl_ListObjReplace(interp, objv[1], last + 1, listLen - 1 - last,
|
||||
0, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* This one is not conditioned on (first > 0) in order to preserve the
|
||||
* string-canonizing effect of [lrange 0 end].
|
||||
*/
|
||||
|
||||
Tcl_ListObjReplace(interp, objv[1], 0, first, 0, NULL);
|
||||
Tcl_SetObjResult(interp, objv[1]);
|
||||
}
|
||||
|
||||
Tcl_SetObjResult(interp, TclListObjRange(objv[1], first, last));
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
@@ -2787,7 +2738,7 @@ Tcl_LreplaceObjCmd(
|
||||
* (to allow for replacing the last elem).
|
||||
*/
|
||||
|
||||
if ((first > listLen) && (listLen > 0)) {
|
||||
if ((first >= listLen) && (listLen > 0)) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"list doesn't contain element %s", TclGetString(objv[2])));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "LREPLACE", "BADIDX",
|
||||
@@ -2938,8 +2889,9 @@ Tcl_LsearchObjCmd(
|
||||
Tcl_Obj *const objv[]) /* Argument values. */
|
||||
{
|
||||
const char *bytes, *patternBytes;
|
||||
int i, match, index, result, listc, length, elemLen, bisect;
|
||||
int dataType, isIncreasing, lower, upper, offset;
|
||||
int i, match, index, result=TCL_OK, listc, length, elemLen, bisect;
|
||||
int allocatedIndexVector = 0;
|
||||
int dataType, isIncreasing, lower, upper, start, groupSize, groupOffset;
|
||||
Tcl_WideInt patWide, objWide;
|
||||
int allMatches, inlineReturn, negatedMatch, returnSubindices, noCase;
|
||||
double patDouble, objDouble;
|
||||
@@ -2951,7 +2903,7 @@ Tcl_LsearchObjCmd(
|
||||
"-all", "-ascii", "-bisect", "-decreasing", "-dictionary",
|
||||
"-exact", "-glob", "-increasing", "-index",
|
||||
"-inline", "-integer", "-nocase", "-not",
|
||||
"-real", "-regexp", "-sorted", "-start",
|
||||
"-real", "-regexp", "-sorted", "-start", "-stride",
|
||||
"-subindices", NULL
|
||||
};
|
||||
enum options {
|
||||
@@ -2959,7 +2911,7 @@ Tcl_LsearchObjCmd(
|
||||
LSEARCH_DICTIONARY, LSEARCH_EXACT, LSEARCH_GLOB, LSEARCH_INCREASING,
|
||||
LSEARCH_INDEX, LSEARCH_INLINE, LSEARCH_INTEGER, LSEARCH_NOCASE,
|
||||
LSEARCH_NOT, LSEARCH_REAL, LSEARCH_REGEXP, LSEARCH_SORTED,
|
||||
LSEARCH_START, LSEARCH_SUBINDICES
|
||||
LSEARCH_START, LSEARCH_STRIDE, LSEARCH_SUBINDICES
|
||||
};
|
||||
enum datatypes {
|
||||
ASCII, DICTIONARY, INTEGER, REAL
|
||||
@@ -2979,7 +2931,9 @@ Tcl_LsearchObjCmd(
|
||||
bisect = 0;
|
||||
listPtr = NULL;
|
||||
startPtr = NULL;
|
||||
offset = 0;
|
||||
groupSize = 1;
|
||||
groupOffset = 0;
|
||||
start = 0;
|
||||
noCase = 0;
|
||||
sortInfo.compareCmdPtr = NULL;
|
||||
sortInfo.isIncreasing = 1;
|
||||
@@ -2997,9 +2951,6 @@ Tcl_LsearchObjCmd(
|
||||
for (i = 1; i < objc-2; i++) {
|
||||
if (Tcl_GetIndexFromObj(interp, objv[i], options, "option", 0, &index)
|
||||
!= TCL_OK) {
|
||||
if (startPtr != NULL) {
|
||||
Tcl_DecrRefCount(startPtr);
|
||||
}
|
||||
result = TCL_ERROR;
|
||||
goto done;
|
||||
}
|
||||
@@ -3064,6 +3015,7 @@ Tcl_LsearchObjCmd(
|
||||
|
||||
if (startPtr != NULL) {
|
||||
Tcl_DecrRefCount(startPtr);
|
||||
startPtr = NULL;
|
||||
}
|
||||
if (i > objc-4) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
@@ -3084,25 +3036,47 @@ Tcl_LsearchObjCmd(
|
||||
startPtr = Tcl_DuplicateObj(objv[i]);
|
||||
} else {
|
||||
startPtr = objv[i];
|
||||
Tcl_IncrRefCount(startPtr);
|
||||
}
|
||||
Tcl_IncrRefCount(startPtr);
|
||||
break;
|
||||
case LSEARCH_STRIDE: /* -stride */
|
||||
if (i > objc-4) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"\"-stride\" option must be "
|
||||
"followed by stride length", -1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "ARGUMENT", "MISSING", NULL);
|
||||
result = TCL_ERROR;
|
||||
goto done;
|
||||
}
|
||||
if (Tcl_GetIntFromObj(interp, objv[i+1], &groupSize) != TCL_OK) {
|
||||
result = TCL_ERROR;
|
||||
goto done;
|
||||
}
|
||||
if (groupSize < 1) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"stride length must be at least 1", -1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "LSORT",
|
||||
"BADSTRIDE", NULL);
|
||||
result = TCL_ERROR;
|
||||
goto done;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
case LSEARCH_INDEX: { /* -index */
|
||||
Tcl_Obj **indices;
|
||||
int j;
|
||||
|
||||
if (sortInfo.indexc > 1) {
|
||||
if (allocatedIndexVector) {
|
||||
TclStackFree(interp, sortInfo.indexv);
|
||||
allocatedIndexVector = 0;
|
||||
}
|
||||
if (i > objc-4) {
|
||||
if (startPtr != NULL) {
|
||||
Tcl_DecrRefCount(startPtr);
|
||||
}
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"\"-index\" option must be followed by list index",
|
||||
-1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "ARGUMENT", "MISSING", NULL);
|
||||
return TCL_ERROR;
|
||||
result = TCL_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3114,10 +3088,8 @@ Tcl_LsearchObjCmd(
|
||||
i++;
|
||||
if (TclListObjGetElements(interp, objv[i],
|
||||
&sortInfo.indexc, &indices) != TCL_OK) {
|
||||
if (startPtr != NULL) {
|
||||
Tcl_DecrRefCount(startPtr);
|
||||
}
|
||||
return TCL_ERROR;
|
||||
result = TCL_ERROR;
|
||||
goto done;
|
||||
}
|
||||
switch (sortInfo.indexc) {
|
||||
case 0:
|
||||
@@ -3129,6 +3101,8 @@ Tcl_LsearchObjCmd(
|
||||
default:
|
||||
sortInfo.indexv =
|
||||
TclStackAlloc(interp, sizeof(int) * sortInfo.indexc);
|
||||
allocatedIndexVector = 1; /* Cannot use indexc field, as it
|
||||
* might be decreased by 1 later. */
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3138,13 +3112,26 @@ Tcl_LsearchObjCmd(
|
||||
*/
|
||||
|
||||
for (j=0 ; j<sortInfo.indexc ; j++) {
|
||||
if (TclGetIntForIndexM(interp, indices[j], SORTIDX_END,
|
||||
&sortInfo.indexv[j]) != TCL_OK) {
|
||||
int encoded = 0;
|
||||
if (TclIndexEncode(interp, indices[j], TCL_INDEX_BEFORE,
|
||||
TCL_INDEX_AFTER, &encoded) != TCL_OK) {
|
||||
result = TCL_ERROR;
|
||||
}
|
||||
if ((encoded == TCL_INDEX_BEFORE)
|
||||
|| (encoded == TCL_INDEX_AFTER)) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"index \"%s\" cannot select an element "
|
||||
"from any list", Tcl_GetString(indices[j])));
|
||||
Tcl_SetErrorCode(interp, "TCL", "VALUE", "INDEX"
|
||||
"OUTOFRANGE", NULL);
|
||||
result = TCL_ERROR;
|
||||
}
|
||||
if (result == TCL_ERROR) {
|
||||
Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf(
|
||||
"\n (-index option item number %d)", j));
|
||||
result = TCL_ERROR;
|
||||
goto done;
|
||||
}
|
||||
sortInfo.indexv[j] = encoded;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -3156,14 +3143,12 @@ Tcl_LsearchObjCmd(
|
||||
*/
|
||||
|
||||
if (returnSubindices && sortInfo.indexc==0) {
|
||||
if (startPtr != NULL) {
|
||||
Tcl_DecrRefCount(startPtr);
|
||||
}
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"-subindices cannot be used without -index option", -1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "LSEARCH",
|
||||
"BAD_OPTION_MIX", NULL);
|
||||
return TCL_ERROR;
|
||||
result = TCL_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (bisect && (allMatches || negatedMatch)) {
|
||||
@@ -3171,7 +3156,8 @@ Tcl_LsearchObjCmd(
|
||||
"-bisect is not compatible with -all or -not", -1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "LSEARCH",
|
||||
"BAD_OPTION_MIX", NULL);
|
||||
return TCL_ERROR;
|
||||
result = TCL_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (mode == REGEXP) {
|
||||
@@ -3197,9 +3183,6 @@ Tcl_LsearchObjCmd(
|
||||
}
|
||||
|
||||
if (regexp == NULL) {
|
||||
if (startPtr != NULL) {
|
||||
Tcl_DecrRefCount(startPtr);
|
||||
}
|
||||
result = TCL_ERROR;
|
||||
goto done;
|
||||
}
|
||||
@@ -3212,24 +3195,64 @@ Tcl_LsearchObjCmd(
|
||||
|
||||
result = TclListObjGetElements(interp, objv[objc - 2], &listc, &listv);
|
||||
if (result != TCL_OK) {
|
||||
if (startPtr != NULL) {
|
||||
Tcl_DecrRefCount(startPtr);
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for sanity when grouping elements of the overall list together
|
||||
* because of the -stride option. [TIP #351]
|
||||
*/
|
||||
|
||||
if (groupSize > 1) {
|
||||
if (listc % groupSize) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"list size must be a multiple of the stride length",
|
||||
-1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "LSEARCH", "BADSTRIDE",
|
||||
NULL);
|
||||
result = TCL_ERROR;
|
||||
goto done;
|
||||
}
|
||||
if (sortInfo.indexc > 0) {
|
||||
/*
|
||||
* Use the first value in the list supplied to -index as the
|
||||
* offset of the element within each group by which to sort.
|
||||
*/
|
||||
|
||||
groupOffset = TclIndexDecode(sortInfo.indexv[0], groupSize - 1);
|
||||
if (groupOffset < 0 || groupOffset >= groupSize) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"when used with \"-stride\", the leading \"-index\""
|
||||
" value must be within the group", -1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "LSEARCH",
|
||||
"BADINDEX", NULL);
|
||||
result = TCL_ERROR;
|
||||
goto done;
|
||||
}
|
||||
if (sortInfo.indexc == 1) {
|
||||
sortInfo.indexc = 0;
|
||||
sortInfo.indexv = NULL;
|
||||
} else {
|
||||
sortInfo.indexc--;
|
||||
|
||||
for (i = 0; i < sortInfo.indexc; i++) {
|
||||
sortInfo.indexv[i] = sortInfo.indexv[i+1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the user-specified start offset.
|
||||
*/
|
||||
|
||||
if (startPtr) {
|
||||
result = TclGetIntForIndexM(interp, startPtr, listc-1, &offset);
|
||||
Tcl_DecrRefCount(startPtr);
|
||||
result = TclGetIntForIndexM(interp, startPtr, listc-1, &start);
|
||||
if (result != TCL_OK) {
|
||||
goto done;
|
||||
}
|
||||
if (offset < 0) {
|
||||
offset = 0;
|
||||
if (start < 0) {
|
||||
start = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3237,16 +3260,21 @@ Tcl_LsearchObjCmd(
|
||||
* "did not match anything at all" result straight away. [Bug 1374778]
|
||||
*/
|
||||
|
||||
if (offset > listc-1) {
|
||||
if (sortInfo.indexc > 1) {
|
||||
TclStackFree(interp, sortInfo.indexv);
|
||||
}
|
||||
if (start > listc-1) {
|
||||
if (allMatches || inlineReturn) {
|
||||
Tcl_ResetResult(interp);
|
||||
} else {
|
||||
Tcl_SetObjResult(interp, Tcl_NewIntObj(-1));
|
||||
}
|
||||
return TCL_OK;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/*
|
||||
* If start points within a group, it points to the start of the group.
|
||||
*/
|
||||
|
||||
if (groupSize > 1) {
|
||||
start -= (start % groupSize);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3305,18 +3333,23 @@ Tcl_LsearchObjCmd(
|
||||
* sense in doing this when the match sense is inverted.
|
||||
*/
|
||||
|
||||
lower = offset - 1;
|
||||
/*
|
||||
* With -stride, lower, upper and i are kept as multiples of groupSize.
|
||||
*/
|
||||
|
||||
lower = start - groupSize;
|
||||
upper = listc;
|
||||
while (lower + 1 != upper && sortInfo.resultCode == TCL_OK) {
|
||||
while (lower + groupSize != upper && sortInfo.resultCode == TCL_OK) {
|
||||
i = (lower + upper)/2;
|
||||
i -= i % groupSize;
|
||||
if (sortInfo.indexc != 0) {
|
||||
itemPtr = SelectObjFromSublist(listv[i], &sortInfo);
|
||||
itemPtr = SelectObjFromSublist(listv[i+groupOffset], &sortInfo);
|
||||
if (sortInfo.resultCode != TCL_OK) {
|
||||
result = sortInfo.resultCode;
|
||||
goto done;
|
||||
}
|
||||
} else {
|
||||
itemPtr = listv[i];
|
||||
itemPtr = listv[i+groupOffset];
|
||||
}
|
||||
switch ((enum datatypes) dataType) {
|
||||
case ASCII:
|
||||
@@ -3405,10 +3438,10 @@ Tcl_LsearchObjCmd(
|
||||
if (allMatches) {
|
||||
listPtr = Tcl_NewListObj(0, NULL);
|
||||
}
|
||||
for (i = offset; i < listc; i++) {
|
||||
for (i = start; i < listc; i += groupSize) {
|
||||
match = 0;
|
||||
if (sortInfo.indexc != 0) {
|
||||
itemPtr = SelectObjFromSublist(listv[i], &sortInfo);
|
||||
itemPtr = SelectObjFromSublist(listv[i+groupOffset], &sortInfo);
|
||||
if (sortInfo.resultCode != TCL_OK) {
|
||||
if (listPtr != NULL) {
|
||||
Tcl_DecrRefCount(listPtr);
|
||||
@@ -3417,7 +3450,7 @@ Tcl_LsearchObjCmd(
|
||||
goto done;
|
||||
}
|
||||
} else {
|
||||
itemPtr = listv[i];
|
||||
itemPtr = listv[i+groupOffset];
|
||||
}
|
||||
|
||||
switch (mode) {
|
||||
@@ -3507,18 +3540,23 @@ Tcl_LsearchObjCmd(
|
||||
*/
|
||||
|
||||
if (returnSubindices && (sortInfo.indexc != 0)) {
|
||||
itemPtr = SelectObjFromSublist(listv[i], &sortInfo);
|
||||
itemPtr = SelectObjFromSublist(listv[i+groupOffset],
|
||||
&sortInfo);
|
||||
Tcl_ListObjAppendElement(interp, listPtr, itemPtr);
|
||||
} else if (groupSize > 1) {
|
||||
Tcl_ListObjReplace(interp, listPtr, LIST_MAX, 0,
|
||||
groupSize, &listv[i]);
|
||||
} else {
|
||||
itemPtr = listv[i];
|
||||
Tcl_ListObjAppendElement(interp, listPtr, itemPtr);
|
||||
}
|
||||
Tcl_ListObjAppendElement(interp, listPtr, itemPtr);
|
||||
} else if (returnSubindices) {
|
||||
int j;
|
||||
|
||||
itemPtr = Tcl_NewIntObj(i);
|
||||
itemPtr = Tcl_NewIntObj(i+groupOffset);
|
||||
for (j=0 ; j<sortInfo.indexc ; j++) {
|
||||
Tcl_ListObjAppendElement(interp, itemPtr,
|
||||
Tcl_NewIntObj(sortInfo.indexv[j]));
|
||||
Tcl_ListObjAppendElement(interp, itemPtr, Tcl_NewIntObj(
|
||||
TclIndexDecode(sortInfo.indexv[j], listc)));
|
||||
}
|
||||
Tcl_ListObjAppendElement(interp, listPtr, itemPtr);
|
||||
} else {
|
||||
@@ -3537,10 +3575,10 @@ Tcl_LsearchObjCmd(
|
||||
if (returnSubindices) {
|
||||
int j;
|
||||
|
||||
itemPtr = Tcl_NewIntObj(index);
|
||||
itemPtr = Tcl_NewIntObj(index+groupOffset);
|
||||
for (j=0 ; j<sortInfo.indexc ; j++) {
|
||||
Tcl_ListObjAppendElement(interp, itemPtr,
|
||||
Tcl_NewIntObj(sortInfo.indexv[j]));
|
||||
Tcl_ListObjAppendElement(interp, itemPtr, Tcl_NewIntObj(
|
||||
TclIndexDecode(sortInfo.indexv[j], listc)));
|
||||
}
|
||||
Tcl_SetObjResult(interp, itemPtr);
|
||||
} else {
|
||||
@@ -3554,7 +3592,14 @@ Tcl_LsearchObjCmd(
|
||||
|
||||
Tcl_SetObjResult(interp, Tcl_NewObj());
|
||||
} else {
|
||||
Tcl_SetObjResult(interp, listv[index]);
|
||||
if (returnSubindices) {
|
||||
Tcl_SetObjResult(interp, SelectObjFromSublist(listv[i+groupOffset],
|
||||
&sortInfo));
|
||||
} else if (groupSize > 1) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewListObj(groupSize, &listv[index]));
|
||||
} else {
|
||||
Tcl_SetObjResult(interp, listv[index]);
|
||||
}
|
||||
}
|
||||
result = TCL_OK;
|
||||
|
||||
@@ -3563,7 +3608,10 @@ Tcl_LsearchObjCmd(
|
||||
*/
|
||||
|
||||
done:
|
||||
if (sortInfo.indexc > 1) {
|
||||
if (startPtr != NULL) {
|
||||
Tcl_DecrRefCount(startPtr);
|
||||
}
|
||||
if (allocatedIndexVector) {
|
||||
TclStackFree(interp, sortInfo.indexv);
|
||||
}
|
||||
return result;
|
||||
@@ -3757,7 +3805,7 @@ Tcl_LsortObjCmd(
|
||||
sortInfo.isIncreasing = 1;
|
||||
break;
|
||||
case LSORT_INDEX: {
|
||||
int indexc, dummy;
|
||||
int indexc;
|
||||
Tcl_Obj **indexv;
|
||||
|
||||
if (i == objc-2) {
|
||||
@@ -3783,8 +3831,20 @@ Tcl_LsortObjCmd(
|
||||
*/
|
||||
|
||||
for (j=0 ; j<indexc ; j++) {
|
||||
if (TclGetIntForIndexM(interp, indexv[j], SORTIDX_END,
|
||||
&dummy) != TCL_OK) {
|
||||
int encoded = 0;
|
||||
int result = TclIndexEncode(interp, indexv[j],
|
||||
TCL_INDEX_BEFORE, TCL_INDEX_AFTER, &encoded);
|
||||
|
||||
if ((result == TCL_OK) && ((encoded == TCL_INDEX_BEFORE)
|
||||
|| (encoded == TCL_INDEX_AFTER))) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"index \"%s\" cannot select an element "
|
||||
"from any list", Tcl_GetString(indexv[j])));
|
||||
Tcl_SetErrorCode(interp, "TCL", "VALUE", "INDEX"
|
||||
"OUTOFRANGE", NULL);
|
||||
result = TCL_ERROR;
|
||||
}
|
||||
if (result == TCL_ERROR) {
|
||||
Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf(
|
||||
"\n (-index option item number %d)", j));
|
||||
sortInfo.resultCode = TCL_ERROR;
|
||||
@@ -3864,8 +3924,8 @@ Tcl_LsortObjCmd(
|
||||
* might be decreased by 1 later. */
|
||||
}
|
||||
for (j=0 ; j<sortInfo.indexc ; j++) {
|
||||
TclGetIntForIndexM(interp, indexv[j], SORTIDX_END,
|
||||
&sortInfo.indexv[j]);
|
||||
/* Prescreened values, no errors or out of range possible */
|
||||
TclIndexEncode(NULL, indexv[j], 0, 0, &sortInfo.indexv[j]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3936,10 +3996,7 @@ Tcl_LsortObjCmd(
|
||||
* offset of the element within each group by which to sort.
|
||||
*/
|
||||
|
||||
groupOffset = sortInfo.indexv[0];
|
||||
if (groupOffset <= SORTIDX_END) {
|
||||
groupOffset = (groupOffset - SORTIDX_END) + groupSize - 1;
|
||||
}
|
||||
groupOffset = TclIndexDecode(sortInfo.indexv[0], groupSize - 1);
|
||||
if (groupOffset < 0 || groupOffset >= groupSize) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"when used with \"-stride\", the leading \"-index\""
|
||||
@@ -3958,6 +4015,9 @@ Tcl_LsortObjCmd(
|
||||
/*
|
||||
* Do not shrink the actual memory block used; that doesn't
|
||||
* work with TclStackAlloc-allocated memory. [Bug 2918962]
|
||||
*
|
||||
* TODO: Consider a pointer increment to replace this
|
||||
* array shift.
|
||||
*/
|
||||
|
||||
for (i = 0; i < sortInfo.indexc; i++) {
|
||||
@@ -4526,15 +4586,8 @@ SelectObjFromSublist(
|
||||
infoPtr->resultCode = TCL_ERROR;
|
||||
return NULL;
|
||||
}
|
||||
index = infoPtr->indexv[i];
|
||||
|
||||
/*
|
||||
* Adjust for end-based indexing.
|
||||
*/
|
||||
|
||||
if (index < SORTIDX_NONE) {
|
||||
index += listLen + 1;
|
||||
}
|
||||
index = TclIndexDecode(infoPtr->indexv[i], listLen - 1);
|
||||
|
||||
if (Tcl_ListObjIndex(infoPtr->interp, objPtr, index,
|
||||
¤tObj) != TCL_OK) {
|
||||
|
||||
+27
-21
@@ -1586,7 +1586,6 @@ StringIsCmd(
|
||||
chcomp = Tcl_UniCharIsDigit;
|
||||
break;
|
||||
case STR_IS_DOUBLE: {
|
||||
/* TODO */
|
||||
if ((objPtr->typePtr == &tclDoubleType) ||
|
||||
(objPtr->typePtr == &tclIntType) ||
|
||||
(objPtr->typePtr == &tclBignumType)) {
|
||||
@@ -2305,42 +2304,50 @@ StringRplcCmd(
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
Tcl_UniChar *ustring;
|
||||
int first, last, length;
|
||||
int first, last, length, end;
|
||||
|
||||
if (objc < 4 || objc > 5) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "string first last ?string?");
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
ustring = Tcl_GetUnicodeFromObj(objv[1], &length);
|
||||
length--;
|
||||
length = Tcl_GetCharLength(objv[1]);
|
||||
end = length - 1;
|
||||
|
||||
if (TclGetIntForIndexM(interp, objv[2], length, &first) != TCL_OK ||
|
||||
TclGetIntForIndexM(interp, objv[3], length, &last) != TCL_OK){
|
||||
if (TclGetIntForIndexM(interp, objv[2], end, &first) != TCL_OK ||
|
||||
TclGetIntForIndexM(interp, objv[3], end, &last) != TCL_OK){
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
if ((last < first) || (last < 0) || (first > length)) {
|
||||
/*
|
||||
* The following test screens out most empty substrings as
|
||||
* candidates for replacement. When they are detected, no
|
||||
* replacement is done, and the result is the original string,
|
||||
*/
|
||||
if ((last < 0) || /* Range ends before start of string */
|
||||
(first > end) || /* Range begins after end of string */
|
||||
(last < first)) { /* Range begins after it starts */
|
||||
|
||||
/*
|
||||
* BUT!!! when (end < 0) -- an empty original string -- we can
|
||||
* have (first <= end < 0 <= last) and an empty string is permitted
|
||||
* to be replaced.
|
||||
*/
|
||||
Tcl_SetObjResult(interp, objv[1]);
|
||||
} else {
|
||||
Tcl_Obj *resultPtr;
|
||||
|
||||
ustring = Tcl_GetUnicodeFromObj(objv[1], &length);
|
||||
length--;
|
||||
|
||||
if (first < 0) {
|
||||
first = 0;
|
||||
}
|
||||
if (last > end) {
|
||||
last = end;
|
||||
}
|
||||
|
||||
resultPtr = TclStringReplace(interp, objv[1], first,
|
||||
last + 1 - first, (objc == 5) ? objv[4] : NULL,
|
||||
TCL_STRING_IN_PLACE);
|
||||
|
||||
resultPtr = Tcl_NewUnicodeObj(ustring, first);
|
||||
if (objc == 5) {
|
||||
Tcl_AppendObjToObj(resultPtr, objv[4]);
|
||||
}
|
||||
if (last < length) {
|
||||
Tcl_AppendUnicodeToObj(resultPtr, ustring + last + 1,
|
||||
length - last);
|
||||
}
|
||||
Tcl_SetObjResult(interp, resultPtr);
|
||||
}
|
||||
return TCL_OK;
|
||||
@@ -3210,8 +3217,7 @@ StringTrimCmd(
|
||||
}
|
||||
string1 = TclGetStringFromObj(objv[1], &length1);
|
||||
|
||||
triml = TclTrimLeft(string1, length1, string2, length2);
|
||||
trimr = TclTrimRight(string1 + triml, length1 - triml, string2, length2);
|
||||
triml = TclTrim(string1, length1, string2, length2, &trimr);
|
||||
|
||||
Tcl_SetObjResult(interp,
|
||||
Tcl_NewStringObj(string1 + triml, length1 - triml - trimr));
|
||||
|
||||
+15
-3
@@ -322,11 +322,22 @@ TclCompileArraySetCmd(
|
||||
*/
|
||||
|
||||
if (isDataValid && !isDataEven) {
|
||||
/* Abandon custom compile and let invocation raise the error */
|
||||
code = TclCompileBasic2ArgCmd(interp, parsePtr, cmdPtr, envPtr);
|
||||
goto done;
|
||||
|
||||
/*
|
||||
* We used to compile to the bytecode that would throw the error,
|
||||
* but that was wrong because it would not invoke the array trace
|
||||
* on the variable.
|
||||
*
|
||||
PushStringLiteral(envPtr, "list must have an even number of elements");
|
||||
PushStringLiteral(envPtr, "-errorcode {TCL ARGUMENT FORMAT}");
|
||||
TclEmitInstInt4(INST_RETURN_IMM, TCL_ERROR, envPtr);
|
||||
TclEmitInt4( 0, envPtr);
|
||||
goto done;
|
||||
*
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -404,6 +415,10 @@ TclCompileArraySetCmd(
|
||||
* Start issuing instructions to write to the array.
|
||||
*/
|
||||
|
||||
TclEmitInstInt4(INST_ARRAY_EXISTS_IMM, localIndex, envPtr);
|
||||
TclEmitInstInt1(INST_JUMP_TRUE1, 7, envPtr);
|
||||
TclEmitInstInt4(INST_ARRAY_MAKE_IMM, localIndex, envPtr);
|
||||
|
||||
CompileWord(envPtr, dataTokenPtr, interp, 2);
|
||||
if (!isDataLiteral || !isDataValid) {
|
||||
/*
|
||||
@@ -428,9 +443,6 @@ TclCompileArraySetCmd(
|
||||
TclStoreInt1AtPtr(fwd, envPtr->codeStart+offsetFwd+1);
|
||||
}
|
||||
|
||||
TclEmitInstInt4(INST_ARRAY_EXISTS_IMM, localIndex, envPtr);
|
||||
TclEmitInstInt1(INST_JUMP_TRUE1, 7, envPtr);
|
||||
TclEmitInstInt4(INST_ARRAY_MAKE_IMM, localIndex, envPtr);
|
||||
TclEmitInstInt4(INST_FOREACH_START, infoIndex, envPtr);
|
||||
offsetBack = CurrentOffset(envPtr);
|
||||
Emit14Inst( INST_LOAD_SCALAR, keyVar, envPtr);
|
||||
|
||||
+195
-270
@@ -28,56 +28,39 @@ static void CompileReturnInternal(CompileEnv *envPtr,
|
||||
static int IndexTailVarIfKnown(Tcl_Interp *interp,
|
||||
Tcl_Token *varTokenPtr, CompileEnv *envPtr);
|
||||
|
||||
#define INDEX_END (-2)
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* GetIndexFromToken --
|
||||
* TclGetIndexFromToken --
|
||||
*
|
||||
* Parse a token and get the encoded version of the index (as understood
|
||||
* by TEBC), assuming it is at all knowable at compile time. Only handles
|
||||
* indices that are integers or 'end' or 'end-integer'.
|
||||
* Parse a token to determine if an index value is known at
|
||||
* compile time.
|
||||
*
|
||||
* Returns:
|
||||
* TCL_OK if parsing succeeded, and TCL_ERROR if it failed.
|
||||
*
|
||||
* Side effects:
|
||||
* Sets *index to the index value if successful.
|
||||
* When TCL_OK is returned, the encoded index value is written
|
||||
* to *index.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static inline int
|
||||
GetIndexFromToken(
|
||||
int
|
||||
TclGetIndexFromToken(
|
||||
Tcl_Token *tokenPtr,
|
||||
int *index)
|
||||
int before,
|
||||
int after,
|
||||
int *indexPtr)
|
||||
{
|
||||
Tcl_Obj *tmpObj = Tcl_NewObj();
|
||||
int result, idx;
|
||||
int result = TCL_ERROR;
|
||||
|
||||
if (!TclWordKnownAtCompileTime(tokenPtr, tmpObj)) {
|
||||
Tcl_DecrRefCount(tmpObj);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
result = TclGetIntFromObj(NULL, tmpObj, &idx);
|
||||
if (result == TCL_OK) {
|
||||
if (idx < 0) {
|
||||
result = TCL_ERROR;
|
||||
}
|
||||
} else {
|
||||
result = TclGetIntForIndexM(NULL, tmpObj, INDEX_END, &idx);
|
||||
if (result == TCL_OK && idx > INDEX_END) {
|
||||
result = TCL_ERROR;
|
||||
}
|
||||
if (TclWordKnownAtCompileTime(tokenPtr, tmpObj)) {
|
||||
result = TclIndexEncode(NULL, tmpObj, before, after, indexPtr);
|
||||
}
|
||||
Tcl_DecrRefCount(tmpObj);
|
||||
|
||||
if (result == TCL_OK) {
|
||||
*index = idx;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -144,7 +127,7 @@ TclCompileGlobalCmd(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/* TODO: Consider what value can pass throug the
|
||||
/* TODO: Consider what value can pass through the
|
||||
* IndexTailVarIfKnown() screen. Full CompileWord()
|
||||
* likely does not apply here. Push known value instead. */
|
||||
CompileWord(envPtr, varTokenPtr, interp, i);
|
||||
@@ -1053,7 +1036,7 @@ TclCompileLassignCmd(
|
||||
*/
|
||||
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, idx, envPtr);
|
||||
TclEmitInt4( INDEX_END, envPtr);
|
||||
TclEmitInt4( TCL_INDEX_END, envPtr);
|
||||
|
||||
return TCL_OK;
|
||||
}
|
||||
@@ -1104,14 +1087,14 @@ TclCompileLindexCmd(
|
||||
}
|
||||
|
||||
idxTokenPtr = TokenAfter(valTokenPtr);
|
||||
if (GetIndexFromToken(idxTokenPtr, &idx) == TCL_OK) {
|
||||
if (TclGetIndexFromToken(idxTokenPtr, TCL_INDEX_BEFORE, TCL_INDEX_BEFORE,
|
||||
&idx) == TCL_OK) {
|
||||
/*
|
||||
* All checks have been completed, and we have exactly one of these
|
||||
* constructs:
|
||||
* lindex <arbitraryValue> <posInt>
|
||||
* lindex <arbitraryValue> end-<posInt>
|
||||
* This is best compiled as a push of the arbitrary value followed by
|
||||
* an "immediate lindex" which is the most efficient variety.
|
||||
* The idxTokenPtr parsed as a valid index value and was
|
||||
* encoded as expected by INST_LIST_INDEX_IMM.
|
||||
*
|
||||
* NOTE: that we rely on indexing before a list producing the
|
||||
* same result as indexing after a list.
|
||||
*/
|
||||
|
||||
CompileWord(envPtr, valTokenPtr, interp, 1);
|
||||
@@ -1258,7 +1241,7 @@ TclCompileListCmd(
|
||||
|
||||
if (concat && numWords == 2) {
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, 0, envPtr);
|
||||
TclEmitInt4( INDEX_END, envPtr);
|
||||
TclEmitInt4( TCL_INDEX_END, envPtr);
|
||||
}
|
||||
return TCL_OK;
|
||||
}
|
||||
@@ -1332,21 +1315,25 @@ TclCompileLrangeCmd(
|
||||
}
|
||||
listTokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
|
||||
tokenPtr = TokenAfter(listTokenPtr);
|
||||
if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_START, TCL_INDEX_AFTER,
|
||||
&idx1) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
/*
|
||||
* Parse the indices. Will only compile if both are constants and not an
|
||||
* _integer_ less than zero (since we reserve negative indices here for
|
||||
* end-relative indexing) or an end-based index greater than 'end' itself.
|
||||
* Token was an index value, and we treat all "first" indices
|
||||
* before the list same as the start of the list.
|
||||
*/
|
||||
|
||||
tokenPtr = TokenAfter(listTokenPtr);
|
||||
if (GetIndexFromToken(tokenPtr, &idx1) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
if (GetIndexFromToken(tokenPtr, &idx2) != TCL_OK) {
|
||||
if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_BEFORE, TCL_INDEX_END,
|
||||
&idx2) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
/*
|
||||
* Token was an index value, and we treat all "last" indices
|
||||
* after the list same as the end of the list.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Issue instructions. It's not safe to skip doing the LIST_RANGE, as
|
||||
@@ -1396,21 +1383,30 @@ TclCompileLinsertCmd(
|
||||
*/
|
||||
|
||||
tokenPtr = TokenAfter(listTokenPtr);
|
||||
if (GetIndexFromToken(tokenPtr, &idx) != TCL_OK) {
|
||||
|
||||
/*
|
||||
* NOTE: This command treats all inserts at indices before the list
|
||||
* the same as inserts at the start of the list, and all inserts
|
||||
* after the list the same as inserts at the end of the list. We
|
||||
* make that transformation here so we can use the optimized bytecode
|
||||
* as much as possible.
|
||||
*/
|
||||
if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_START, TCL_INDEX_END,
|
||||
&idx) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* There are four main cases. If there are no values to insert, this is
|
||||
* just a confirm-listiness check. If the index is '0', this is a prepend.
|
||||
* If the index is 'end' (== INDEX_END), this is an append. Otherwise,
|
||||
* If the index is 'end' (== TCL_INDEX_END), this is an append. Otherwise,
|
||||
* this is a splice (== split, insert values as list, concat-3).
|
||||
*/
|
||||
|
||||
CompileWord(envPtr, listTokenPtr, interp, 1);
|
||||
if (parsePtr->numWords == 3) {
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, 0, envPtr);
|
||||
TclEmitInt4( INDEX_END, envPtr);
|
||||
TclEmitInt4( TCL_INDEX_END, envPtr);
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
@@ -1420,13 +1416,25 @@ TclCompileLinsertCmd(
|
||||
}
|
||||
TclEmitInstInt4( INST_LIST, i-3, envPtr);
|
||||
|
||||
if (idx == 0 /*start*/) {
|
||||
if (idx == TCL_INDEX_START) {
|
||||
TclEmitInstInt4( INST_REVERSE, 2, envPtr);
|
||||
TclEmitOpcode( INST_LIST_CONCAT, envPtr);
|
||||
} else if (idx == INDEX_END /*end*/) {
|
||||
} else if (idx == TCL_INDEX_END) {
|
||||
TclEmitOpcode( INST_LIST_CONCAT, envPtr);
|
||||
} else {
|
||||
if (idx < 0) {
|
||||
/*
|
||||
* Here we handle two ranges for idx. First when idx > 0, we
|
||||
* want the first half of the split to end at index idx-1 and
|
||||
* the second half to start at index idx.
|
||||
* Second when idx < TCL_INDEX_END, indicating "end-N" indexing,
|
||||
* we want the first half of the split to end at index end-N and
|
||||
* the second half to start at index end-N+1. We accomplish this
|
||||
* with a pre-adjustment of the end-N value.
|
||||
* The root of this is that the commands [lrange] and [linsert]
|
||||
* differ in their interpretation of the "end" index.
|
||||
*/
|
||||
|
||||
if (idx < TCL_INDEX_END) {
|
||||
idx++;
|
||||
}
|
||||
TclEmitInstInt4( INST_OVER, 1, envPtr);
|
||||
@@ -1434,7 +1442,7 @@ TclCompileLinsertCmd(
|
||||
TclEmitInt4( idx-1, envPtr);
|
||||
TclEmitInstInt4( INST_REVERSE, 3, envPtr);
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, idx, envPtr);
|
||||
TclEmitInt4( INDEX_END, envPtr);
|
||||
TclEmitInt4( TCL_INDEX_END, envPtr);
|
||||
TclEmitOpcode( INST_LIST_CONCAT, envPtr);
|
||||
TclEmitOpcode( INST_LIST_CONCAT, envPtr);
|
||||
}
|
||||
@@ -1464,250 +1472,167 @@ TclCompileLreplaceCmd(
|
||||
{
|
||||
Tcl_Token *tokenPtr, *listTokenPtr;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
Tcl_Obj *tmpObj;
|
||||
int idx1, idx2, i, offset, offset2;
|
||||
int emptyPrefix=1, suffixStart = 0;
|
||||
|
||||
if (parsePtr->numWords < 4) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
listTokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
|
||||
/*
|
||||
* Parse the indices. Will only compile if both are constants and not an
|
||||
* _integer_ less than zero (since we reserve negative indices here for
|
||||
* end-relative indexing) or an end-based index greater than 'end' itself.
|
||||
*/
|
||||
|
||||
tokenPtr = TokenAfter(listTokenPtr);
|
||||
if (GetIndexFromToken(tokenPtr, &idx1) != TCL_OK) {
|
||||
if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_START, TCL_INDEX_AFTER,
|
||||
&idx1) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
if (GetIndexFromToken(tokenPtr, &idx2) != TCL_OK) {
|
||||
if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_BEFORE, TCL_INDEX_END,
|
||||
&idx2) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* idx1, idx2 are now in canonical form:
|
||||
* idx1, idx2 are the conventional encoded forms of the tokens parsed
|
||||
* as all forms of index values. Values of idx1 that come before the
|
||||
* list are treated the same as if they were the start of the list.
|
||||
* Values of idx2 that come after the list are treated the same as if
|
||||
* they were the end of the list.
|
||||
*/
|
||||
|
||||
if (idx1 == TCL_INDEX_AFTER) {
|
||||
/*
|
||||
* [lreplace] treats idx1 value end+1 differently from end+2, etc.
|
||||
* The operand encoding cannot distinguish them, so we must bail
|
||||
* out to direct evaluation.
|
||||
*/
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* General structure of the [lreplace] result is
|
||||
* prefix replacement suffix
|
||||
* In a few cases we can predict various parts will be empty and
|
||||
* take advantage.
|
||||
*
|
||||
* - integer: [0,len+1]
|
||||
* - end index: INDEX_END
|
||||
* - -ive offset: INDEX_END-[len-1,0]
|
||||
* - +ive offset: INDEX_END+1
|
||||
* The proper suffix begins with the greater of indices idx1 or
|
||||
* idx2 + 1. If we cannot tell at compile time which is greater,
|
||||
* we must defer to direct evaluation.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Compilation fails when one index is end-based but the other isn't.
|
||||
* Fixing this will require more bytecodes, but this is a workaround for
|
||||
* now. [Bug 47ac84309b]
|
||||
*/
|
||||
|
||||
if ((idx1 <= INDEX_END) != (idx2 <= INDEX_END)) {
|
||||
if (idx2 == TCL_INDEX_BEFORE) {
|
||||
suffixStart = idx1;
|
||||
} else if (idx2 == TCL_INDEX_END) {
|
||||
suffixStart = TCL_INDEX_AFTER;
|
||||
} else if (((idx2 < TCL_INDEX_END) && (idx1 <= TCL_INDEX_END))
|
||||
|| ((idx2 >= TCL_INDEX_START) && (idx1 >= TCL_INDEX_START))) {
|
||||
suffixStart = (idx1 > idx2 + 1) ? idx1 : idx2 + 1;
|
||||
} else {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
if (idx2 != INDEX_END && idx2 >= 0 && idx2 < idx1) {
|
||||
idx2 = idx1 - 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Work out what this [lreplace] is actually doing.
|
||||
*/
|
||||
|
||||
tmpObj = NULL;
|
||||
/* All paths start with computing/pushing the original value. */
|
||||
CompileWord(envPtr, listTokenPtr, interp, 1);
|
||||
if (parsePtr->numWords == 4) {
|
||||
if (idx1 == 0) {
|
||||
if (idx2 == INDEX_END) {
|
||||
goto dropAll;
|
||||
}
|
||||
idx1 = idx2 + 1;
|
||||
idx2 = INDEX_END;
|
||||
goto dropEnd;
|
||||
} else if (idx2 == INDEX_END) {
|
||||
idx2 = idx1 - 1;
|
||||
idx1 = 0;
|
||||
goto dropEnd;
|
||||
} else {
|
||||
if (idx2 < idx1) {
|
||||
idx2 = idx1 - 1;
|
||||
}
|
||||
if (idx1 > 0) {
|
||||
tmpObj = Tcl_NewIntObj(idx1);
|
||||
Tcl_IncrRefCount(tmpObj);
|
||||
}
|
||||
goto dropRange;
|
||||
}
|
||||
}
|
||||
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
for (i=4 ; i<parsePtr->numWords ; i++) {
|
||||
CompileWord(envPtr, tokenPtr, interp, i);
|
||||
/*
|
||||
* Push all the replacement values next so any errors raised in
|
||||
* creating them get raised first.
|
||||
*/
|
||||
if (parsePtr->numWords > 4) {
|
||||
/* Push the replacement arguments */
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
for (i=4 ; i<parsePtr->numWords ; i++) {
|
||||
CompileWord(envPtr, tokenPtr, interp, i);
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
}
|
||||
|
||||
/* Make a list of them... */
|
||||
TclEmitInstInt4( INST_LIST, i - 4, envPtr);
|
||||
|
||||
emptyPrefix = 0;
|
||||
}
|
||||
TclEmitInstInt4( INST_LIST, i - 4, envPtr);
|
||||
TclEmitInstInt4( INST_REVERSE, 2, envPtr);
|
||||
if (idx1 == 0) {
|
||||
if (idx2 == INDEX_END) {
|
||||
goto replaceAll;
|
||||
|
||||
/*
|
||||
* [lreplace] raises an error when idx1 points after the list, but
|
||||
* only when the list is not empty. This is maximum stupidity.
|
||||
*
|
||||
* TODO: TIP this nonsense away!
|
||||
*/
|
||||
if (idx1 >= TCL_INDEX_START) {
|
||||
if (emptyPrefix) {
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
} else {
|
||||
TclEmitInstInt4( INST_OVER, 1, envPtr);
|
||||
}
|
||||
TclEmitOpcode( INST_LIST_LENGTH, envPtr);
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
offset = CurrentOffset(envPtr);
|
||||
TclEmitInstInt1( INST_JUMP_FALSE1, 0, envPtr);
|
||||
|
||||
/* List is not empty */
|
||||
TclEmitPush(TclAddLiteralObj(envPtr, Tcl_NewIntObj(idx1),
|
||||
NULL), envPtr);
|
||||
TclEmitOpcode( INST_GT, envPtr);
|
||||
offset2 = CurrentOffset(envPtr);
|
||||
TclEmitInstInt1( INST_JUMP_TRUE1, 0, envPtr);
|
||||
|
||||
/* Idx1 >= list length ===> raise an error */
|
||||
TclEmitPush(TclAddLiteralObj(envPtr, Tcl_ObjPrintf(
|
||||
"list doesn't contain element %d", idx1), NULL), envPtr);
|
||||
CompileReturnInternal(envPtr, INST_RETURN_IMM, TCL_ERROR, 0,
|
||||
Tcl_ObjPrintf("-errorcode {TCL OPERATION LREPLACE BADIDX}"));
|
||||
TclStoreInt1AtPtr(CurrentOffset(envPtr) - offset,
|
||||
envPtr->codeStart + offset + 1);
|
||||
TclEmitOpcode( INST_POP, envPtr);
|
||||
TclStoreInt1AtPtr(CurrentOffset(envPtr) - offset2,
|
||||
envPtr->codeStart + offset2 + 1);
|
||||
}
|
||||
|
||||
if ((idx1 == suffixStart) && (parsePtr->numWords == 4)) {
|
||||
/*
|
||||
* This is a "no-op". Example: [lreplace {a b c} 2 0]
|
||||
* We still do a list operation to get list-verification
|
||||
* and canonicalization side effects.
|
||||
*/
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, 0, envPtr);
|
||||
TclEmitInt4( TCL_INDEX_END, envPtr);
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
if (idx1 != TCL_INDEX_START) {
|
||||
/* Prefix may not be empty; generate bytecode to push it */
|
||||
if (emptyPrefix) {
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
} else {
|
||||
TclEmitInstInt4( INST_OVER, 1, envPtr);
|
||||
}
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, 0, envPtr);
|
||||
TclEmitInt4( idx1 - 1, envPtr);
|
||||
if (!emptyPrefix) {
|
||||
TclEmitInstInt4( INST_REVERSE, 2, envPtr);
|
||||
TclEmitOpcode( INST_LIST_CONCAT, envPtr);
|
||||
}
|
||||
emptyPrefix = 0;
|
||||
}
|
||||
|
||||
if (!emptyPrefix) {
|
||||
TclEmitInstInt4( INST_REVERSE, 2, envPtr);
|
||||
}
|
||||
|
||||
if (suffixStart == TCL_INDEX_AFTER) {
|
||||
TclEmitOpcode( INST_POP, envPtr);
|
||||
if (emptyPrefix) {
|
||||
PushStringLiteral(envPtr, "");
|
||||
}
|
||||
idx1 = idx2 + 1;
|
||||
idx2 = INDEX_END;
|
||||
goto replaceHead;
|
||||
} else if (idx2 == INDEX_END) {
|
||||
idx2 = idx1 - 1;
|
||||
idx1 = 0;
|
||||
goto replaceTail;
|
||||
} else {
|
||||
if (idx2 < idx1) {
|
||||
idx2 = idx1 - 1;
|
||||
/* Suffix may not be empty; generate bytecode to push it */
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, suffixStart, envPtr);
|
||||
TclEmitInt4( TCL_INDEX_END, envPtr);
|
||||
if (!emptyPrefix) {
|
||||
TclEmitOpcode( INST_LIST_CONCAT, envPtr);
|
||||
}
|
||||
if (idx1 > 0) {
|
||||
tmpObj = Tcl_NewIntObj(idx1);
|
||||
Tcl_IncrRefCount(tmpObj);
|
||||
}
|
||||
goto replaceRange;
|
||||
}
|
||||
|
||||
/*
|
||||
* Issue instructions to perform the operations relating to configurations
|
||||
* that just drop. The only argument pushed on the stack is the list to
|
||||
* operate on.
|
||||
*/
|
||||
|
||||
dropAll: /* This just ensures the arg is a list. */
|
||||
TclEmitOpcode( INST_LIST_LENGTH, envPtr);
|
||||
TclEmitOpcode( INST_POP, envPtr);
|
||||
PushStringLiteral(envPtr, "");
|
||||
goto done;
|
||||
|
||||
dropEnd:
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, idx1, envPtr);
|
||||
TclEmitInt4( idx2, envPtr);
|
||||
goto done;
|
||||
|
||||
dropRange:
|
||||
if (tmpObj != NULL) {
|
||||
/*
|
||||
* Emit bytecode to check the list length.
|
||||
*/
|
||||
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
TclEmitOpcode( INST_LIST_LENGTH, envPtr);
|
||||
TclEmitPush(TclAddLiteralObj(envPtr, tmpObj, NULL), envPtr);
|
||||
TclEmitOpcode( INST_GE, envPtr);
|
||||
offset = CurrentOffset(envPtr);
|
||||
TclEmitInstInt1( INST_JUMP_TRUE1, 0, envPtr);
|
||||
|
||||
/*
|
||||
* Emit an error if we've been given an empty list.
|
||||
*/
|
||||
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
TclEmitOpcode( INST_LIST_LENGTH, envPtr);
|
||||
offset2 = CurrentOffset(envPtr);
|
||||
TclEmitInstInt1( INST_JUMP_FALSE1, 0, envPtr);
|
||||
TclEmitPush(TclAddLiteralObj(envPtr, Tcl_ObjPrintf(
|
||||
"list doesn't contain element %d", idx1), NULL), envPtr);
|
||||
CompileReturnInternal(envPtr, INST_RETURN_IMM, TCL_ERROR, 0,
|
||||
Tcl_ObjPrintf("-errorcode {TCL OPERATION LREPLACE BADIDX}"));
|
||||
TclStoreInt1AtPtr(CurrentOffset(envPtr) - offset,
|
||||
envPtr->codeStart + offset + 1);
|
||||
TclStoreInt1AtPtr(CurrentOffset(envPtr) - offset2,
|
||||
envPtr->codeStart + offset2 + 1);
|
||||
TclAdjustStackDepth(-1, envPtr);
|
||||
}
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, 0, envPtr);
|
||||
TclEmitInt4( idx1 - 1, envPtr);
|
||||
TclEmitInstInt4( INST_REVERSE, 2, envPtr);
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, idx2 + 1, envPtr);
|
||||
TclEmitInt4( INDEX_END, envPtr);
|
||||
TclEmitOpcode( INST_LIST_CONCAT, envPtr);
|
||||
goto done;
|
||||
|
||||
/*
|
||||
* Issue instructions to perform the operations relating to configurations
|
||||
* that do real replacement. All arguments are pushed and assembled into a
|
||||
* pair: the list of values to replace with, and the list to do the
|
||||
* surgery on.
|
||||
*/
|
||||
|
||||
replaceAll:
|
||||
TclEmitOpcode( INST_LIST_LENGTH, envPtr);
|
||||
TclEmitOpcode( INST_POP, envPtr);
|
||||
goto done;
|
||||
|
||||
replaceHead:
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, idx1, envPtr);
|
||||
TclEmitInt4( idx2, envPtr);
|
||||
TclEmitOpcode( INST_LIST_CONCAT, envPtr);
|
||||
goto done;
|
||||
|
||||
replaceTail:
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, idx1, envPtr);
|
||||
TclEmitInt4( idx2, envPtr);
|
||||
TclEmitInstInt4( INST_REVERSE, 2, envPtr);
|
||||
TclEmitOpcode( INST_LIST_CONCAT, envPtr);
|
||||
goto done;
|
||||
|
||||
replaceRange:
|
||||
if (tmpObj != NULL) {
|
||||
/*
|
||||
* Emit bytecode to check the list length.
|
||||
*/
|
||||
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
TclEmitOpcode( INST_LIST_LENGTH, envPtr);
|
||||
|
||||
/*
|
||||
* Check the list length vs idx1.
|
||||
*/
|
||||
|
||||
TclEmitPush(TclAddLiteralObj(envPtr, tmpObj, NULL), envPtr);
|
||||
TclEmitOpcode( INST_GE, envPtr);
|
||||
offset = CurrentOffset(envPtr);
|
||||
TclEmitInstInt1( INST_JUMP_TRUE1, 0, envPtr);
|
||||
|
||||
/*
|
||||
* Emit an error if we've been given an empty list.
|
||||
*/
|
||||
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
TclEmitOpcode( INST_LIST_LENGTH, envPtr);
|
||||
offset2 = CurrentOffset(envPtr);
|
||||
TclEmitInstInt1( INST_JUMP_FALSE1, 0, envPtr);
|
||||
TclEmitPush(TclAddLiteralObj(envPtr, Tcl_ObjPrintf(
|
||||
"list doesn't contain element %d", idx1), NULL), envPtr);
|
||||
CompileReturnInternal(envPtr, INST_RETURN_IMM, TCL_ERROR, 0,
|
||||
Tcl_ObjPrintf("-errorcode {TCL OPERATION LREPLACE BADIDX}"));
|
||||
TclStoreInt1AtPtr(CurrentOffset(envPtr) - offset,
|
||||
envPtr->codeStart + offset + 1);
|
||||
TclStoreInt1AtPtr(CurrentOffset(envPtr) - offset2,
|
||||
envPtr->codeStart + offset2 + 1);
|
||||
TclAdjustStackDepth(-1, envPtr);
|
||||
}
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, 0, envPtr);
|
||||
TclEmitInt4( idx1 - 1, envPtr);
|
||||
TclEmitInstInt4( INST_REVERSE, 2, envPtr);
|
||||
TclEmitInstInt4( INST_LIST_RANGE_IMM, idx2 + 1, envPtr);
|
||||
TclEmitInt4( INDEX_END, envPtr);
|
||||
TclEmitInstInt4( INST_REVERSE, 3, envPtr);
|
||||
TclEmitOpcode( INST_LIST_CONCAT, envPtr);
|
||||
TclEmitInstInt4( INST_REVERSE, 2, envPtr);
|
||||
TclEmitOpcode( INST_LIST_CONCAT, envPtr);
|
||||
goto done;
|
||||
|
||||
/*
|
||||
* Clean up the allocated memory.
|
||||
*/
|
||||
|
||||
done:
|
||||
if (tmpObj != NULL) {
|
||||
Tcl_DecrRefCount(tmpObj);
|
||||
}
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
@@ -2933,7 +2858,7 @@ TclCompileVariableCmd(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/* TODO: Consider what value can pass throug the
|
||||
/* TODO: Consider what value can pass through the
|
||||
* IndexTailVarIfKnown() screen. Full CompileWord()
|
||||
* likely does not apply here. Push known value instead. */
|
||||
CompileWord(envPtr, varTokenPtr, interp, i);
|
||||
|
||||
+183
-137
@@ -107,58 +107,6 @@ const AuxDataType tclJumptableInfoType = {
|
||||
#define INVOKE(name) \
|
||||
TclEmitInvoke(envPtr,INST_##name)
|
||||
|
||||
#define INDEX_END (-2)
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* GetIndexFromToken --
|
||||
*
|
||||
* Parse a token and get the encoded version of the index (as understood
|
||||
* by TEBC), assuming it is at all knowable at compile time. Only handles
|
||||
* indices that are integers or 'end' or 'end-integer'.
|
||||
*
|
||||
* Returns:
|
||||
* TCL_OK if parsing succeeded, and TCL_ERROR if it failed.
|
||||
*
|
||||
* Side effects:
|
||||
* Sets *index to the index value if successful.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static inline int
|
||||
GetIndexFromToken(
|
||||
Tcl_Token *tokenPtr,
|
||||
int *index)
|
||||
{
|
||||
Tcl_Obj *tmpObj = Tcl_NewObj();
|
||||
int result, idx;
|
||||
|
||||
if (!TclWordKnownAtCompileTime(tokenPtr, tmpObj)) {
|
||||
Tcl_DecrRefCount(tmpObj);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
result = TclGetIntFromObj(NULL, tmpObj, &idx);
|
||||
if (result == TCL_OK) {
|
||||
if (idx < 0) {
|
||||
result = TCL_ERROR;
|
||||
}
|
||||
} else {
|
||||
result = TclGetIntForIndexM(NULL, tmpObj, INDEX_END, &idx);
|
||||
if (result == TCL_OK && idx > INDEX_END) {
|
||||
result = TCL_ERROR;
|
||||
}
|
||||
}
|
||||
Tcl_DecrRefCount(tmpObj);
|
||||
|
||||
if (result == TCL_OK) {
|
||||
*index = idx;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
@@ -982,22 +930,48 @@ TclCompileStringRangeCmd(
|
||||
fromTokenPtr = TokenAfter(stringTokenPtr);
|
||||
toTokenPtr = TokenAfter(fromTokenPtr);
|
||||
|
||||
/* Every path must push the string argument */
|
||||
CompileWord(envPtr, stringTokenPtr, interp, 1);
|
||||
|
||||
/*
|
||||
* Parse the two indices.
|
||||
*/
|
||||
|
||||
if (GetIndexFromToken(fromTokenPtr, &idx1) != TCL_OK) {
|
||||
if (TclGetIndexFromToken(fromTokenPtr, TCL_INDEX_START, TCL_INDEX_AFTER,
|
||||
&idx1) != TCL_OK) {
|
||||
goto nonConstantIndices;
|
||||
}
|
||||
if (GetIndexFromToken(toTokenPtr, &idx2) != TCL_OK) {
|
||||
/*
|
||||
* Token parsed as an index expression. We treat all indices before
|
||||
* the string the same as the start of the string.
|
||||
*/
|
||||
|
||||
if (idx1 == TCL_INDEX_AFTER) {
|
||||
/* [string range $s end+1 $last] must be empty string */
|
||||
OP( POP);
|
||||
PUSH( "");
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
if (TclGetIndexFromToken(toTokenPtr, TCL_INDEX_BEFORE, TCL_INDEX_END,
|
||||
&idx2) != TCL_OK) {
|
||||
goto nonConstantIndices;
|
||||
}
|
||||
/*
|
||||
* Token parsed as an index expression. We treat all indices after
|
||||
* the string the same as the end of the string.
|
||||
*/
|
||||
if (idx2 == TCL_INDEX_BEFORE) {
|
||||
/* [string range $s $first -1] must be empty string */
|
||||
OP( POP);
|
||||
PUSH( "");
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Push the operand onto the stack and then the substring operation.
|
||||
*/
|
||||
|
||||
CompileWord(envPtr, stringTokenPtr, interp, 1);
|
||||
OP44( STR_RANGE_IMM, idx1, idx2);
|
||||
return TCL_OK;
|
||||
|
||||
@@ -1006,7 +980,6 @@ TclCompileStringRangeCmd(
|
||||
*/
|
||||
|
||||
nonConstantIndices:
|
||||
CompileWord(envPtr, stringTokenPtr, interp, 1);
|
||||
CompileWord(envPtr, fromTokenPtr, interp, 2);
|
||||
CompileWord(envPtr, toTokenPtr, interp, 3);
|
||||
OP( STR_RANGE);
|
||||
@@ -1022,124 +995,197 @@ TclCompileStringReplaceCmd(
|
||||
* compiled. */
|
||||
CompileEnv *envPtr) /* Holds the resulting instructions. */
|
||||
{
|
||||
Tcl_Token *tokenPtr, *valueTokenPtr, *replacementTokenPtr = NULL;
|
||||
Tcl_Token *tokenPtr, *valueTokenPtr;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
int idx1, idx2;
|
||||
int first, last;
|
||||
|
||||
if (parsePtr->numWords < 4 || parsePtr->numWords > 5) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/* Bytecode to compute/push string argument being replaced */
|
||||
valueTokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
if (parsePtr->numWords == 5) {
|
||||
tokenPtr = TokenAfter(valueTokenPtr);
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
replacementTokenPtr = TokenAfter(tokenPtr);
|
||||
}
|
||||
CompileWord(envPtr, valueTokenPtr, interp, 1);
|
||||
|
||||
/*
|
||||
* Parse the indices. Will only compile special cases if both are
|
||||
* constants and not an _integer_ less than zero (since we reserve
|
||||
* negative indices here for end-relative indexing) or an end-based index
|
||||
* greater than 'end' itself.
|
||||
* Check for first index known and useful at compile time.
|
||||
*/
|
||||
|
||||
tokenPtr = TokenAfter(valueTokenPtr);
|
||||
if (GetIndexFromToken(tokenPtr, &idx1) != TCL_OK) {
|
||||
goto genericReplace;
|
||||
}
|
||||
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
if (GetIndexFromToken(tokenPtr, &idx2) != TCL_OK) {
|
||||
if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_BEFORE, TCL_INDEX_AFTER,
|
||||
&first) != TCL_OK) {
|
||||
goto genericReplace;
|
||||
}
|
||||
|
||||
/*
|
||||
* We handle these replacements specially: first character (where
|
||||
* idx1=idx2=0) and last character (where idx1=idx2=INDEX_END). Anything
|
||||
* else and the semantics get rather screwy.
|
||||
* Check for last index known and useful at compile time.
|
||||
*/
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_BEFORE, TCL_INDEX_AFTER,
|
||||
&last) != TCL_OK) {
|
||||
goto genericReplace;
|
||||
}
|
||||
|
||||
/*
|
||||
* [string replace] is an odd bird. For many arguments it is
|
||||
* a conventional substring replacer. However it also goes out
|
||||
* of its way to become a no-op for many cases where it would be
|
||||
* replacing an empty substring. Precisely, it is a no-op when
|
||||
*
|
||||
* (last < first) OR
|
||||
* (last < 0) OR
|
||||
* (end < first)
|
||||
*
|
||||
* For some compile-time values we can detect these cases, and
|
||||
* compile direct to bytecode implementing the no-op.
|
||||
*/
|
||||
|
||||
if (idx1 == 0 && idx2 == 0) {
|
||||
int notEq, end;
|
||||
if ((last == TCL_INDEX_BEFORE) /* Know (last < 0) */
|
||||
|| (first == TCL_INDEX_AFTER) /* Know (first > end) */
|
||||
|
||||
/*
|
||||
* Just working with the first character.
|
||||
* Tricky to determine when runtime (last < first) can be
|
||||
* certainly known based on the encoded values. Consider the
|
||||
* cases...
|
||||
*
|
||||
* (first <= TCL_INDEX_END) &&
|
||||
* (last == TCL_INDEX_AFTER) => cannot tell REJECT
|
||||
* (last <= TCL_INDEX END) && (last < first) => ACCEPT
|
||||
* else => cannot tell REJECT
|
||||
*/
|
||||
|
||||
CompileWord(envPtr, valueTokenPtr, interp, 1);
|
||||
if (replacementTokenPtr == NULL) {
|
||||
/* Drop first */
|
||||
OP44( STR_RANGE_IMM, 1, INDEX_END);
|
||||
return TCL_OK;
|
||||
}
|
||||
/* Replace first */
|
||||
CompileWord(envPtr, replacementTokenPtr, interp, 4);
|
||||
OP4( OVER, 1);
|
||||
PUSH( "");
|
||||
OP( STR_EQ);
|
||||
JUMP1( JUMP_FALSE, notEq);
|
||||
OP( POP);
|
||||
JUMP1( JUMP, end);
|
||||
FIXJUMP1(notEq);
|
||||
TclAdjustStackDepth(1, envPtr);
|
||||
OP4( REVERSE, 2);
|
||||
OP44( STR_RANGE_IMM, 1, INDEX_END);
|
||||
OP1( STR_CONCAT1, 2);
|
||||
FIXJUMP1(end);
|
||||
return TCL_OK;
|
||||
|
||||
} else if (idx1 == INDEX_END && idx2 == INDEX_END) {
|
||||
int notEq, end;
|
||||
|
||||
|| ((first <= TCL_INDEX_END) && (last <= TCL_INDEX_END)
|
||||
&& (last < first)) /* Know (last < first) */
|
||||
/*
|
||||
* Just working with the last character.
|
||||
* (first == TCL_INDEX_BEFORE) &&
|
||||
* (last == TCL_INDEX_AFTER) => (first < last) REJECT
|
||||
* (last <= TCL_INDEX_END) => cannot tell REJECT
|
||||
* else => (first < last) REJECT
|
||||
*
|
||||
* else [[first >= TCL_INDEX_START]] &&
|
||||
* (last == TCL_INDEX_AFTER) => cannot tell REJECT
|
||||
* (last <= TCL_INDEX_END) => cannot tell REJECT
|
||||
* else [[last >= TCL_INDEX START]] && (last < first) => ACCEPT
|
||||
*/
|
||||
|
||||
CompileWord(envPtr, valueTokenPtr, interp, 1);
|
||||
if (replacementTokenPtr == NULL) {
|
||||
/* Drop last */
|
||||
OP44( STR_RANGE_IMM, 0, INDEX_END-1);
|
||||
return TCL_OK;
|
||||
|| ((first >= TCL_INDEX_START) && (last >= TCL_INDEX_START)
|
||||
&& (last < first))) { /* Know (last < first) */
|
||||
if (parsePtr->numWords == 5) {
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
CompileWord(envPtr, tokenPtr, interp, 4);
|
||||
OP( POP); /* Pop newString */
|
||||
}
|
||||
/* Replace last */
|
||||
CompileWord(envPtr, replacementTokenPtr, interp, 4);
|
||||
OP4( OVER, 1);
|
||||
PUSH( "");
|
||||
OP( STR_EQ);
|
||||
JUMP1( JUMP_FALSE, notEq);
|
||||
OP( POP);
|
||||
JUMP1( JUMP, end);
|
||||
FIXJUMP1(notEq);
|
||||
TclAdjustStackDepth(1, envPtr);
|
||||
OP4( REVERSE, 2);
|
||||
OP44( STR_RANGE_IMM, 0, INDEX_END-1);
|
||||
OP4( REVERSE, 2);
|
||||
OP1( STR_CONCAT1, 2);
|
||||
FIXJUMP1(end);
|
||||
/* Original string argument now on TOS as result */
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
if (parsePtr->numWords == 5) {
|
||||
/*
|
||||
* When we have a string replacement, we have to take care about
|
||||
* not replacing empty substrings that [string replace] promises
|
||||
* not to replace
|
||||
*
|
||||
* The remaining index values might be suitable for conventional
|
||||
* string replacement, but only if they cannot possibly meet the
|
||||
* conditions described above at runtime. If there's a chance they
|
||||
* might, we would have to emit bytecode to check and at that point
|
||||
* we're paying more in bytecode execution time than would make
|
||||
* things worthwhile. Trouble is we are very limited in
|
||||
* how much we can detect that at compile time. After decoding,
|
||||
* we need, first:
|
||||
*
|
||||
* (first <= end)
|
||||
*
|
||||
* The encoded indices (first <= TCL_INDEX END) and
|
||||
* (first == TCL_INDEX_BEFORE) always meets this condition, but
|
||||
* any other encoded first index has some list for which it fails.
|
||||
*
|
||||
* We also need, second:
|
||||
*
|
||||
* (last >= 0)
|
||||
*
|
||||
* The encoded indices (last >= TCL_INDEX_START) and
|
||||
* (last == TCL_INDEX_AFTER) always meet this condition but any
|
||||
* other encoded last index has some list for which it fails.
|
||||
*
|
||||
* Finally we need, third:
|
||||
*
|
||||
* (first <= last)
|
||||
*
|
||||
* Considered in combination with the constraints we already have,
|
||||
* we see that we can proceed when (first == TCL_INDEX_BEFORE)
|
||||
* or (last == TCL_INDEX_AFTER). These also permit simplification
|
||||
* of the prefix|replace|suffix construction. The other constraints,
|
||||
* though, interfere with getting a guarantee that first <= last.
|
||||
*/
|
||||
|
||||
if ((first == TCL_INDEX_BEFORE) && (last >= TCL_INDEX_START)) {
|
||||
/* empty prefix */
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
CompileWord(envPtr, tokenPtr, interp, 4);
|
||||
OP4( REVERSE, 2);
|
||||
if (last == TCL_INDEX_AFTER) {
|
||||
OP( POP); /* Pop original */
|
||||
} else {
|
||||
OP44( STR_RANGE_IMM, last + 1, TCL_INDEX_END);
|
||||
OP1( STR_CONCAT1, 2);
|
||||
}
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
if ((last == TCL_INDEX_AFTER) && (first <= TCL_INDEX_END)) {
|
||||
OP44( STR_RANGE_IMM, 0, first-1);
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
CompileWord(envPtr, tokenPtr, interp, 4);
|
||||
OP1( STR_CONCAT1, 2);
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/* FLOW THROUGH TO genericReplace */
|
||||
|
||||
} else {
|
||||
/*
|
||||
* Need to process indices at runtime. This could be because the
|
||||
* indices are not constants, or because we need to resolve them to
|
||||
* absolute indices to work out if a replacement is going to happen.
|
||||
* In any case, to runtime it is.
|
||||
/*
|
||||
* When we have no replacement string to worry about, we may
|
||||
* have more luck, because the forbidden empty string replacements
|
||||
* are harmless when they are replaced by another empty string.
|
||||
*/
|
||||
|
||||
if ((first == TCL_INDEX_BEFORE) || (first == TCL_INDEX_START)) {
|
||||
/* empty prefix - build suffix only */
|
||||
|
||||
if ((last == TCL_INDEX_END) || (last == TCL_INDEX_AFTER)) {
|
||||
/* empty suffix too => empty result */
|
||||
OP( POP); /* Pop original */
|
||||
PUSH ( "");
|
||||
return TCL_OK;
|
||||
}
|
||||
OP44( STR_RANGE_IMM, last + 1, TCL_INDEX_END);
|
||||
return TCL_OK;
|
||||
} else {
|
||||
if ((last == TCL_INDEX_END) || (last == TCL_INDEX_AFTER)) {
|
||||
/* empty suffix - build prefix only */
|
||||
OP44( STR_RANGE_IMM, 0, first-1);
|
||||
return TCL_OK;
|
||||
}
|
||||
OP( DUP);
|
||||
OP44( STR_RANGE_IMM, 0, first-1);
|
||||
OP4( REVERSE, 2);
|
||||
OP44( STR_RANGE_IMM, last + 1, TCL_INDEX_END);
|
||||
OP1( STR_CONCAT1, 2);
|
||||
return TCL_OK;
|
||||
}
|
||||
}
|
||||
|
||||
genericReplace:
|
||||
CompileWord(envPtr, valueTokenPtr, interp, 1);
|
||||
tokenPtr = TokenAfter(valueTokenPtr);
|
||||
CompileWord(envPtr, tokenPtr, interp, 2);
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
CompileWord(envPtr, tokenPtr, interp, 3);
|
||||
if (replacementTokenPtr != NULL) {
|
||||
CompileWord(envPtr, replacementTokenPtr, interp, 4);
|
||||
if (parsePtr->numWords == 5) {
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
CompileWord(envPtr, tokenPtr, interp, 4);
|
||||
} else {
|
||||
PUSH( "");
|
||||
}
|
||||
OP( STR_REPLACE);
|
||||
return TCL_OK;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -1120,6 +1120,8 @@ MODULE_SCOPE int TclFixupForwardJump(CompileEnv *envPtr,
|
||||
int distThreshold);
|
||||
MODULE_SCOPE void TclFreeCompileEnv(CompileEnv *envPtr);
|
||||
MODULE_SCOPE void TclFreeJumpFixupArray(JumpFixupArray *fixupArrayPtr);
|
||||
MODULE_SCOPE int TclGetIndexFromToken(Tcl_Token *tokenPtr,
|
||||
int before, int after, int *indexPtr);
|
||||
MODULE_SCOPE ByteCode * TclInitByteCode(CompileEnv *envPtr);
|
||||
MODULE_SCOPE ByteCode * TclInitByteCodeObj(Tcl_Obj *objPtr,
|
||||
const Tcl_ObjType *typePtr, CompileEnv *envPtr);
|
||||
|
||||
+127
-187
@@ -4015,17 +4015,12 @@ TEBCresume(
|
||||
varPtr = TclObjLookupVarEx(interp, part1Ptr, NULL, 0, NULL,
|
||||
/*createPart1*/0, /*createPart2*/0, &arrayPtr);
|
||||
doArrayExists:
|
||||
if (varPtr && (varPtr->flags & VAR_TRACED_ARRAY)
|
||||
&& (TclIsVarArray(varPtr) || TclIsVarUndefined(varPtr))) {
|
||||
DECACHE_STACK_INFO();
|
||||
result = TclObjCallVarTraces(iPtr, arrayPtr, varPtr, part1Ptr,
|
||||
NULL, (TCL_LEAVE_ERR_MSG|TCL_NAMESPACE_ONLY|
|
||||
TCL_GLOBAL_ONLY|TCL_TRACE_ARRAY), 1, opnd);
|
||||
CACHE_STACK_INFO();
|
||||
if (result == TCL_ERROR) {
|
||||
TRACE_ERROR(interp);
|
||||
goto gotError;
|
||||
}
|
||||
DECACHE_STACK_INFO();
|
||||
result = TclCheckArrayTraces(interp, varPtr, arrayPtr, part1Ptr, opnd);
|
||||
CACHE_STACK_INFO();
|
||||
if (result == TCL_ERROR) {
|
||||
TRACE_ERROR(interp);
|
||||
goto gotError;
|
||||
}
|
||||
if (varPtr && TclIsVarArray(varPtr) && !TclIsVarUndefined(varPtr)) {
|
||||
objResultPtr = TCONST(1);
|
||||
@@ -4810,16 +4805,9 @@ TEBCresume(
|
||||
goto gotError;
|
||||
}
|
||||
|
||||
/*
|
||||
* Select the list item based on the index. Negative operand means
|
||||
* end-based indexing.
|
||||
*/
|
||||
/* Decode end-offset index values. */
|
||||
|
||||
if (opnd < -1) {
|
||||
index = opnd+1 + objc;
|
||||
} else {
|
||||
index = opnd;
|
||||
}
|
||||
index = TclIndexDecode(opnd, objc - 1);
|
||||
pcAdjustment = 5;
|
||||
|
||||
lindexFastPath:
|
||||
@@ -4947,11 +4935,11 @@ TEBCresume(
|
||||
TclGetInt4AtPtr(pc+5)));
|
||||
|
||||
/*
|
||||
* Get the contents of the list, making sure that it really is a list
|
||||
* Get the length of the list, making sure that it really is a list
|
||||
* in the process.
|
||||
*/
|
||||
|
||||
if (TclListObjGetElements(interp, valuePtr, &objc, &objv) != TCL_OK) {
|
||||
if (TclListObjLength(interp, valuePtr, &objc) != TCL_OK) {
|
||||
TRACE_ERROR(interp);
|
||||
goto gotError;
|
||||
}
|
||||
@@ -4967,50 +4955,50 @@ TEBCresume(
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Adjust the indices for end-based handling.
|
||||
/* Every range of an empty list is an empty list */
|
||||
if (objc == 0) {
|
||||
TRACE_APPEND(("\n"));
|
||||
NEXT_INST_F(9, 0, 0);
|
||||
}
|
||||
|
||||
/* Decode index value operands. */
|
||||
|
||||
/*
|
||||
assert ( toIdx != TCL_INDEX_AFTER);
|
||||
*
|
||||
* Extra safety for legacy bytecodes:
|
||||
*/
|
||||
|
||||
if (fromIdx < -1) {
|
||||
fromIdx += 1+objc;
|
||||
if (fromIdx < -1) {
|
||||
fromIdx = -1;
|
||||
}
|
||||
} else if (fromIdx > objc) {
|
||||
fromIdx = objc;
|
||||
}
|
||||
if (toIdx < -1) {
|
||||
toIdx += 1 + objc;
|
||||
if (toIdx < -1) {
|
||||
toIdx = -1;
|
||||
}
|
||||
} else if (toIdx > objc) {
|
||||
toIdx = objc;
|
||||
if (toIdx == TCL_INDEX_AFTER) {
|
||||
toIdx = TCL_INDEX_END;
|
||||
}
|
||||
|
||||
if ((toIdx == TCL_INDEX_BEFORE) || (fromIdx == TCL_INDEX_AFTER)) {
|
||||
emptyList:
|
||||
objResultPtr = Tcl_NewObj();
|
||||
TRACE_APPEND(("\"%.30s\"", O2S(objResultPtr)));
|
||||
NEXT_INST_F(9, 1, 1);
|
||||
}
|
||||
toIdx = TclIndexDecode(toIdx, objc - 1);
|
||||
if (toIdx < 0) {
|
||||
goto emptyList;
|
||||
} else if (toIdx >= objc) {
|
||||
toIdx = objc - 1;
|
||||
}
|
||||
|
||||
assert ( toIdx >= 0 && toIdx < objc);
|
||||
/*
|
||||
* Check if we are referring to a valid, non-empty list range, and if
|
||||
* so, build the list of elements in that range.
|
||||
assert ( fromIdx != TCL_INDEX_BEFORE );
|
||||
*
|
||||
* Extra safety for legacy bytecodes:
|
||||
*/
|
||||
|
||||
if (fromIdx<=toIdx && fromIdx<objc && toIdx>=0) {
|
||||
if (fromIdx < 0) {
|
||||
fromIdx = 0;
|
||||
}
|
||||
if (toIdx >= objc) {
|
||||
toIdx = objc-1;
|
||||
}
|
||||
if (fromIdx == 0 && toIdx != objc-1 && !Tcl_IsShared(valuePtr)) {
|
||||
Tcl_ListObjReplace(interp, valuePtr,
|
||||
toIdx + 1, LIST_MAX, 0, NULL);
|
||||
TRACE_APPEND(("%.30s\n", O2S(valuePtr)));
|
||||
NEXT_INST_F(9, 0, 0);
|
||||
}
|
||||
objResultPtr = Tcl_NewListObj(toIdx-fromIdx+1, objv+fromIdx);
|
||||
} else {
|
||||
TclNewObj(objResultPtr);
|
||||
if (fromIdx == TCL_INDEX_BEFORE) {
|
||||
fromIdx = TCL_INDEX_START;
|
||||
}
|
||||
|
||||
fromIdx = TclIndexDecode(fromIdx, objc - 1);
|
||||
|
||||
objResultPtr = TclListObjRange(valuePtr, fromIdx, toIdx);
|
||||
|
||||
TRACE_APPEND(("\"%.30s\"", O2S(objResultPtr)));
|
||||
NEXT_INST_F(9, 1, 1);
|
||||
|
||||
@@ -5353,31 +5341,58 @@ TEBCresume(
|
||||
length = Tcl_GetCharLength(valuePtr);
|
||||
TRACE(("\"%.20s\" %d %d => ", O2S(valuePtr), fromIdx, toIdx));
|
||||
|
||||
/*
|
||||
* Adjust indices for end-based indexing.
|
||||
*/
|
||||
|
||||
if (fromIdx < -1) {
|
||||
fromIdx += 1 + length;
|
||||
if (fromIdx < 0) {
|
||||
fromIdx = 0;
|
||||
}
|
||||
} else if (fromIdx >= length) {
|
||||
fromIdx = length;
|
||||
/* Every range of an empty value is an empty value */
|
||||
if (length == 0) {
|
||||
TRACE_APPEND(("\n"));
|
||||
NEXT_INST_F(9, 0, 0);
|
||||
}
|
||||
if (toIdx < -1) {
|
||||
toIdx += 1 + length;
|
||||
|
||||
/* Decode index operands. */
|
||||
|
||||
/*
|
||||
assert ( toIdx != TCL_INDEX_BEFORE );
|
||||
assert ( toIdx != TCL_INDEX_AFTER);
|
||||
*
|
||||
* Extra safety for legacy bytecodes:
|
||||
*/
|
||||
if (toIdx == TCL_INDEX_BEFORE) {
|
||||
goto emptyRange;
|
||||
}
|
||||
if (toIdx == TCL_INDEX_AFTER) {
|
||||
toIdx = TCL_INDEX_END;
|
||||
}
|
||||
|
||||
toIdx = TclIndexDecode(toIdx, length - 1);
|
||||
if (toIdx < 0) {
|
||||
goto emptyRange;
|
||||
} else if (toIdx >= length) {
|
||||
toIdx = length - 1;
|
||||
}
|
||||
|
||||
assert ( toIdx >= 0 && toIdx < length );
|
||||
|
||||
/*
|
||||
* Check if we can do a sane substring.
|
||||
assert ( fromIdx != TCL_INDEX_BEFORE );
|
||||
assert ( fromIdx != TCL_INDEX_AFTER);
|
||||
*
|
||||
* Extra safety for legacy bytecodes:
|
||||
*/
|
||||
if (fromIdx == TCL_INDEX_BEFORE) {
|
||||
fromIdx = TCL_INDEX_START;
|
||||
}
|
||||
if (fromIdx == TCL_INDEX_AFTER) {
|
||||
goto emptyRange;
|
||||
}
|
||||
|
||||
fromIdx = TclIndexDecode(fromIdx, length - 1);
|
||||
if (fromIdx < 0) {
|
||||
fromIdx = 0;
|
||||
}
|
||||
|
||||
if (fromIdx <= toIdx) {
|
||||
objResultPtr = Tcl_GetRange(valuePtr, fromIdx, toIdx);
|
||||
} else {
|
||||
emptyRange:
|
||||
TclNewObj(objResultPtr);
|
||||
}
|
||||
TRACE_APPEND(("%.30s\n", O2S(objResultPtr)));
|
||||
@@ -5385,18 +5400,18 @@ TEBCresume(
|
||||
|
||||
{
|
||||
Tcl_UniChar *ustring1, *ustring2, *ustring3, *end, *p;
|
||||
int length3;
|
||||
int length3, endIdx;
|
||||
Tcl_Obj *value3Ptr;
|
||||
|
||||
case INST_STR_REPLACE:
|
||||
value3Ptr = POP_OBJECT();
|
||||
valuePtr = OBJ_AT_DEPTH(2);
|
||||
length = Tcl_GetCharLength(valuePtr) - 1;
|
||||
endIdx = Tcl_GetCharLength(valuePtr) - 1;
|
||||
TRACE(("\"%.20s\" %s %s \"%.20s\" => ", O2S(valuePtr),
|
||||
O2S(OBJ_UNDER_TOS), O2S(OBJ_AT_TOS), O2S(value3Ptr)));
|
||||
if (TclGetIntForIndexM(interp, OBJ_UNDER_TOS, length,
|
||||
if (TclGetIntForIndexM(interp, OBJ_UNDER_TOS, endIdx,
|
||||
&fromIdx) != TCL_OK
|
||||
|| TclGetIntForIndexM(interp, OBJ_AT_TOS, length,
|
||||
|| TclGetIntForIndexM(interp, OBJ_AT_TOS, endIdx,
|
||||
&toIdx) != TCL_OK) {
|
||||
TclDecrRefCount(value3Ptr);
|
||||
TRACE_ERROR(interp);
|
||||
@@ -5406,103 +5421,33 @@ TEBCresume(
|
||||
(void) POP_OBJECT();
|
||||
TclDecrRefCount(OBJ_AT_TOS);
|
||||
(void) POP_OBJECT();
|
||||
if (fromIdx < 0) {
|
||||
fromIdx = 0;
|
||||
}
|
||||
|
||||
if (fromIdx > toIdx || fromIdx > length) {
|
||||
if ((toIdx < 0) ||
|
||||
(fromIdx > endIdx) ||
|
||||
(toIdx < fromIdx)) {
|
||||
TRACE_APPEND(("\"%.30s\"\n", O2S(valuePtr)));
|
||||
TclDecrRefCount(value3Ptr);
|
||||
NEXT_INST_F(1, 0, 0);
|
||||
}
|
||||
|
||||
if (toIdx > length) {
|
||||
toIdx = length;
|
||||
if (fromIdx < 0) {
|
||||
fromIdx = 0;
|
||||
}
|
||||
|
||||
if (fromIdx == 0 && toIdx == length) {
|
||||
if (toIdx > endIdx) {
|
||||
toIdx = endIdx;
|
||||
}
|
||||
|
||||
if (fromIdx == 0 && toIdx == endIdx) {
|
||||
TclDecrRefCount(OBJ_AT_TOS);
|
||||
OBJ_AT_TOS = value3Ptr;
|
||||
TRACE_APPEND(("\"%.30s\"\n", O2S(value3Ptr)));
|
||||
NEXT_INST_F(1, 0, 0);
|
||||
}
|
||||
|
||||
length3 = Tcl_GetCharLength(value3Ptr);
|
||||
objResultPtr = TclStringReplace(interp, valuePtr, fromIdx,
|
||||
toIdx - fromIdx + 1, value3Ptr, TCL_STRING_IN_PLACE);
|
||||
|
||||
/*
|
||||
* See if we can splice in place. This happens when the number of
|
||||
* characters being replaced is the same as the number of characters
|
||||
* in the string to be inserted.
|
||||
*/
|
||||
|
||||
if (length3 - 1 == toIdx - fromIdx) {
|
||||
unsigned char *bytes1, *bytes2;
|
||||
|
||||
if (Tcl_IsShared(valuePtr)) {
|
||||
objResultPtr = Tcl_DuplicateObj(valuePtr);
|
||||
} else {
|
||||
objResultPtr = valuePtr;
|
||||
}
|
||||
if (TclIsPureByteArray(objResultPtr)
|
||||
&& TclIsPureByteArray(value3Ptr)) {
|
||||
bytes1 = Tcl_GetByteArrayFromObj(objResultPtr, NULL);
|
||||
bytes2 = Tcl_GetByteArrayFromObj(value3Ptr, NULL);
|
||||
memcpy(bytes1 + fromIdx, bytes2, length3);
|
||||
} else {
|
||||
ustring1 = Tcl_GetUnicodeFromObj(objResultPtr, NULL);
|
||||
ustring2 = Tcl_GetUnicodeFromObj(value3Ptr, NULL);
|
||||
memcpy(ustring1 + fromIdx, ustring2,
|
||||
length3 * sizeof(Tcl_UniChar));
|
||||
}
|
||||
Tcl_InvalidateStringRep(objResultPtr);
|
||||
TclDecrRefCount(value3Ptr);
|
||||
TRACE_APPEND(("\"%.30s\"\n", O2S(objResultPtr)));
|
||||
if (objResultPtr == valuePtr) {
|
||||
NEXT_INST_F(1, 0, 0);
|
||||
} else {
|
||||
NEXT_INST_F(1, 1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the unicode representation; this is where we guarantee to lose
|
||||
* bytearrays.
|
||||
*/
|
||||
|
||||
ustring1 = Tcl_GetUnicodeFromObj(valuePtr, &length);
|
||||
length--;
|
||||
|
||||
/*
|
||||
* Remove substring using copying.
|
||||
*/
|
||||
|
||||
objResultPtr = NULL;
|
||||
if (fromIdx > 0) {
|
||||
objResultPtr = Tcl_NewUnicodeObj(ustring1, fromIdx);
|
||||
}
|
||||
if (length3 > 0) {
|
||||
if (objResultPtr) {
|
||||
Tcl_AppendObjToObj(objResultPtr, value3Ptr);
|
||||
} else if (Tcl_IsShared(value3Ptr)) {
|
||||
objResultPtr = Tcl_DuplicateObj(value3Ptr);
|
||||
} else {
|
||||
objResultPtr = value3Ptr;
|
||||
}
|
||||
}
|
||||
if (toIdx < length) {
|
||||
if (objResultPtr) {
|
||||
Tcl_AppendUnicodeToObj(objResultPtr, ustring1 + toIdx + 1,
|
||||
length - toIdx);
|
||||
} else {
|
||||
objResultPtr = Tcl_NewUnicodeObj(ustring1 + toIdx + 1,
|
||||
length - toIdx);
|
||||
}
|
||||
}
|
||||
if (objResultPtr == NULL) {
|
||||
/* This has to be the case [string replace $s 0 end {}] */
|
||||
/* which has result {} which is same as value3Ptr. */
|
||||
objResultPtr = value3Ptr;
|
||||
}
|
||||
if (objResultPtr == value3Ptr) {
|
||||
/* See [Bug 82e7f67325] */
|
||||
TclDecrRefCount(OBJ_AT_TOS);
|
||||
@@ -5677,12 +5622,7 @@ TEBCresume(
|
||||
value2Ptr = OBJ_AT_TOS; /* TrimSet */
|
||||
string2 = TclGetStringFromObj(value2Ptr, &length2);
|
||||
string1 = TclGetStringFromObj(valuePtr, &length);
|
||||
trim1 = TclTrimLeft(string1, length, string2, length2);
|
||||
if (trim1 < length) {
|
||||
trim2 = TclTrimRight(string1, length, string2, length2);
|
||||
} else {
|
||||
trim2 = 0;
|
||||
}
|
||||
trim1 = TclTrim(string1, length, string2, length2, &trim2);
|
||||
createTrimmedString:
|
||||
/*
|
||||
* Careful here; trim set often contains non-ASCII characters so we
|
||||
@@ -5766,17 +5706,17 @@ TEBCresume(
|
||||
if (GetNumberFromObj(NULL, OBJ_AT_TOS, &ptr1, &type1) != TCL_OK) {
|
||||
type1 = 0;
|
||||
} else if (type1 == TCL_NUMBER_WIDE) {
|
||||
/* value is between WIDE_MIN and WIDE_MAX */
|
||||
/* value is between LLONG_MIN and LLONG_MAX */
|
||||
/* [string is integer] is -UINT_MAX to UINT_MAX range */
|
||||
/* [string is wideinteger] is -UWIDE_MAX to UWIDE_MAX range */
|
||||
/* [string is wideinteger] is -ULLONG_MAX to ULLONG_MAX range */
|
||||
int i;
|
||||
|
||||
if (Tcl_GetIntFromObj(NULL, OBJ_AT_TOS, &i) == TCL_OK) {
|
||||
type1 = TCL_NUMBER_LONG;
|
||||
}
|
||||
} else if (type1 == TCL_NUMBER_BIG) {
|
||||
/* value is an integer outside the WIDE_MIN to WIDE_MAX range */
|
||||
/* [string is wideinteger] is -UWIDE_MAX to UWIDE_MAX range */
|
||||
/* value is an integer outside the LLONG_MIN to LLONG_MAX range */
|
||||
/* [string is wideinteger] is -ULLONG_MAX to ULLONG_MAX range */
|
||||
Tcl_WideInt w;
|
||||
|
||||
if (Tcl_GetWideIntFromObj(NULL, OBJ_AT_TOS, &w) == TCL_OK) {
|
||||
@@ -6007,7 +5947,7 @@ TEBCresume(
|
||||
objResultPtr = TCONST(0);
|
||||
TRACE(("%s\n", O2S(objResultPtr)));
|
||||
NEXT_INST_F(1, 2, 1);
|
||||
} else if (w2 > (Tcl_WideInt) INT_MAX) {
|
||||
} else if (w2 > INT_MAX) {
|
||||
/*
|
||||
* Technically, we could hold the value (1 << (INT_MAX+1))
|
||||
* in an mp_int, but since we're using mp_mul_2d() to do
|
||||
@@ -6186,7 +6126,7 @@ TEBCresume(
|
||||
goto divideByZero;
|
||||
} else if ((w1 == LLONG_MIN) && (w2 == -1)) {
|
||||
/*
|
||||
* Can't represent (-LLONG_MIN) as a long.
|
||||
* Can't represent (-LLONG_MIN) as a Tcl_WideInt.
|
||||
*/
|
||||
|
||||
goto overflow;
|
||||
@@ -6206,10 +6146,10 @@ TEBCresume(
|
||||
goto wideResultOfArithmetic;
|
||||
|
||||
case INST_MULT:
|
||||
if (((sizeof(long) >= 2*sizeof(int))
|
||||
if (((sizeof(Tcl_WideInt) >= 2*sizeof(int))
|
||||
&& (w1 <= INT_MAX) && (w1 >= INT_MIN)
|
||||
&& (w2 <= INT_MAX) && (w2 >= INT_MIN))
|
||||
|| ((sizeof(long) >= 2*sizeof(short))
|
||||
|| ((sizeof(Tcl_WideInt) >= 2*sizeof(short))
|
||||
&& (w1 <= SHRT_MAX) && (w1 >= SHRT_MIN)
|
||||
&& (w2 <= SHRT_MAX) && (w2 >= SHRT_MIN))) {
|
||||
wResult = w1 * w2;
|
||||
@@ -8092,7 +8032,7 @@ ExecuteExtendedBinaryMathOp(
|
||||
break;
|
||||
case TCL_NUMBER_BIG:
|
||||
Tcl_TakeBignumFromObj(NULL, value2Ptr, &big2);
|
||||
invalid = (mp_cmp_d(&big2, 0) == MP_LT);
|
||||
invalid = mp_isneg(&big2);
|
||||
mp_clear(&big2);
|
||||
break;
|
||||
default:
|
||||
@@ -8123,7 +8063,7 @@ ExecuteExtendedBinaryMathOp(
|
||||
*/
|
||||
|
||||
if ((type2 != TCL_NUMBER_WIDE)
|
||||
|| (*((const Tcl_WideInt *)ptr2) > (long) INT_MAX)) {
|
||||
|| (*((const Tcl_WideInt *)ptr2) > INT_MAX)) {
|
||||
/*
|
||||
* Technically, we could hold the value (1 << (INT_MAX+1)) in
|
||||
* an mp_int, but since we're using mp_mul_2d() to do the
|
||||
@@ -8171,7 +8111,7 @@ ExecuteExtendedBinaryMathOp(
|
||||
break;
|
||||
case TCL_NUMBER_BIG:
|
||||
Tcl_TakeBignumFromObj(NULL, valuePtr, &big1);
|
||||
zero = (mp_cmp_d(&big1, 0) == MP_GT);
|
||||
zero = (!mp_isneg(&big1));
|
||||
mp_clear(&big1);
|
||||
break;
|
||||
default:
|
||||
@@ -8209,7 +8149,7 @@ ExecuteExtendedBinaryMathOp(
|
||||
} else {
|
||||
mp_init(&bigRemainder);
|
||||
mp_div_2d(&big1, shift, &bigResult, &bigRemainder);
|
||||
if (mp_cmp_d(&bigRemainder, 0) == MP_LT) {
|
||||
if (mp_isneg(&bigRemainder)) {
|
||||
/*
|
||||
* Convert to Tcl's integer division rules.
|
||||
*/
|
||||
@@ -8236,14 +8176,14 @@ ExecuteExtendedBinaryMathOp(
|
||||
* arguments is negative, store it in 'Second'.
|
||||
*/
|
||||
|
||||
if (mp_cmp_d(&big1, 0) != MP_LT) {
|
||||
numPos = 1 + (mp_cmp_d(&big2, 0) != MP_LT);
|
||||
if (!mp_isneg(&big1)) {
|
||||
numPos = 1 + !mp_isneg(&big2);
|
||||
First = &big1;
|
||||
Second = &big2;
|
||||
} else {
|
||||
First = &big2;
|
||||
Second = &big1;
|
||||
numPos = (mp_cmp_d(First, 0) != MP_LT);
|
||||
numPos = (!mp_isneg(First));
|
||||
}
|
||||
mp_init(&bigResult);
|
||||
|
||||
@@ -8445,7 +8385,7 @@ ExecuteExtendedBinaryMathOp(
|
||||
break;
|
||||
case TCL_NUMBER_BIG:
|
||||
Tcl_TakeBignumFromObj(NULL, value2Ptr, &big2);
|
||||
negativeExponent = (mp_cmp_d(&big2, 0) == MP_LT);
|
||||
negativeExponent = mp_isneg(&big2);
|
||||
mp_mod_2d(&big2, 1, &big2);
|
||||
oddExponent = !mp_iszero(&big2);
|
||||
mp_clear(&big2);
|
||||
@@ -8985,17 +8925,17 @@ TclCompareTwoNumbers(
|
||||
* integer comparison can tell the difference.
|
||||
*/
|
||||
|
||||
if (d2 < (double)LONG_MIN) {
|
||||
if (d2 < (double)LLONG_MIN) {
|
||||
return MP_GT;
|
||||
}
|
||||
if (d2 > (double)LONG_MAX) {
|
||||
if (d2 > (double)LLONG_MAX) {
|
||||
return MP_LT;
|
||||
}
|
||||
w2 = (Tcl_WideInt) d2;
|
||||
goto wideCompare;
|
||||
case TCL_NUMBER_BIG:
|
||||
Tcl_TakeBignumFromObj(NULL, value2Ptr, &big2);
|
||||
if (mp_cmp_d(&big2, 0) == MP_LT) {
|
||||
if (mp_isneg(&big2)) {
|
||||
compare = MP_GT;
|
||||
} else {
|
||||
compare = MP_LT;
|
||||
@@ -9031,8 +8971,8 @@ TclCompareTwoNumbers(
|
||||
return (d1 > 0.0) ? MP_GT : MP_LT;
|
||||
}
|
||||
Tcl_TakeBignumFromObj(NULL, value2Ptr, &big2);
|
||||
if ((d1 < (double)LONG_MAX) && (d1 > (double)LONG_MIN)) {
|
||||
if (mp_cmp_d(&big2, 0) == MP_LT) {
|
||||
if ((d1 < (double)LLONG_MAX) && (d1 > (double)LLONG_MIN)) {
|
||||
if (mp_isneg(&big2)) {
|
||||
compare = MP_GT;
|
||||
} else {
|
||||
compare = MP_LT;
|
||||
@@ -9064,7 +9004,7 @@ TclCompareTwoNumbers(
|
||||
mp_clear(&big1);
|
||||
return compare;
|
||||
}
|
||||
if ((d2 < (double)LONG_MAX) && (d2 > (double)LONG_MIN)) {
|
||||
if ((d2 < (double)LLONG_MAX) && (d2 > (double)LLONG_MIN)) {
|
||||
compare = mp_cmp_d(&big1, 0);
|
||||
mp_clear(&big1);
|
||||
return compare;
|
||||
|
||||
+13
-9
@@ -721,17 +721,18 @@ Tcl_SetStdChannel(
|
||||
{
|
||||
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
|
||||
|
||||
int init = channel ? 1 : -1;
|
||||
switch (type) {
|
||||
case TCL_STDIN:
|
||||
tsdPtr->stdinInitialized = 1;
|
||||
tsdPtr->stdinInitialized = init;
|
||||
tsdPtr->stdinChannel = channel;
|
||||
break;
|
||||
case TCL_STDOUT:
|
||||
tsdPtr->stdoutInitialized = 1;
|
||||
tsdPtr->stdoutInitialized = init;
|
||||
tsdPtr->stdoutChannel = channel;
|
||||
break;
|
||||
case TCL_STDERR:
|
||||
tsdPtr->stderrInitialized = 1;
|
||||
tsdPtr->stderrInitialized = init;
|
||||
tsdPtr->stderrChannel = channel;
|
||||
break;
|
||||
}
|
||||
@@ -768,8 +769,8 @@ Tcl_GetStdChannel(
|
||||
switch (type) {
|
||||
case TCL_STDIN:
|
||||
if (!tsdPtr->stdinInitialized) {
|
||||
tsdPtr->stdinInitialized = -1;
|
||||
tsdPtr->stdinChannel = TclpGetDefaultStdChannel(TCL_STDIN);
|
||||
tsdPtr->stdinInitialized = 1;
|
||||
|
||||
/*
|
||||
* Artificially bump the refcount to ensure that the channel is
|
||||
@@ -781,6 +782,7 @@ Tcl_GetStdChannel(
|
||||
*/
|
||||
|
||||
if (tsdPtr->stdinChannel != NULL) {
|
||||
tsdPtr->stdinInitialized = 1;
|
||||
Tcl_RegisterChannel(NULL, tsdPtr->stdinChannel);
|
||||
}
|
||||
}
|
||||
@@ -788,9 +790,10 @@ Tcl_GetStdChannel(
|
||||
break;
|
||||
case TCL_STDOUT:
|
||||
if (!tsdPtr->stdoutInitialized) {
|
||||
tsdPtr->stdoutInitialized = -1;
|
||||
tsdPtr->stdoutChannel = TclpGetDefaultStdChannel(TCL_STDOUT);
|
||||
tsdPtr->stdoutInitialized = 1;
|
||||
if (tsdPtr->stdoutChannel != NULL) {
|
||||
tsdPtr->stdoutInitialized = 1;
|
||||
Tcl_RegisterChannel(NULL, tsdPtr->stdoutChannel);
|
||||
}
|
||||
}
|
||||
@@ -798,9 +801,10 @@ Tcl_GetStdChannel(
|
||||
break;
|
||||
case TCL_STDERR:
|
||||
if (!tsdPtr->stderrInitialized) {
|
||||
tsdPtr->stderrInitialized = -1;
|
||||
tsdPtr->stderrChannel = TclpGetDefaultStdChannel(TCL_STDERR);
|
||||
tsdPtr->stderrInitialized = 1;
|
||||
if (tsdPtr->stderrChannel != NULL) {
|
||||
tsdPtr->stderrInitialized = 1;
|
||||
Tcl_RegisterChannel(NULL, tsdPtr->stderrChannel);
|
||||
}
|
||||
}
|
||||
@@ -1068,7 +1072,7 @@ CheckForStdChannelsBeingClosed(
|
||||
ChannelState *statePtr = ((Channel *) chan)->state;
|
||||
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
|
||||
|
||||
if (tsdPtr->stdinInitialized
|
||||
if (tsdPtr->stdinInitialized == 1
|
||||
&& tsdPtr->stdinChannel != NULL
|
||||
&& statePtr == ((Channel *)tsdPtr->stdinChannel)->state) {
|
||||
if (statePtr->refCount < 2) {
|
||||
@@ -1076,7 +1080,7 @@ CheckForStdChannelsBeingClosed(
|
||||
tsdPtr->stdinChannel = NULL;
|
||||
return;
|
||||
}
|
||||
} else if (tsdPtr->stdoutInitialized
|
||||
} else if (tsdPtr->stdoutInitialized == 1
|
||||
&& tsdPtr->stdoutChannel != NULL
|
||||
&& statePtr == ((Channel *)tsdPtr->stdoutChannel)->state) {
|
||||
if (statePtr->refCount < 2) {
|
||||
@@ -1084,7 +1088,7 @@ CheckForStdChannelsBeingClosed(
|
||||
tsdPtr->stdoutChannel = NULL;
|
||||
return;
|
||||
}
|
||||
} else if (tsdPtr->stderrInitialized
|
||||
} else if (tsdPtr->stderrInitialized == 1
|
||||
&& tsdPtr->stderrChannel != NULL
|
||||
&& statePtr == ((Channel *)tsdPtr->stderrChannel)->state) {
|
||||
if (statePtr->refCount < 2) {
|
||||
|
||||
+48
-2
@@ -2889,8 +2889,6 @@ MODULE_SCOPE void TclArgumentBCRelease(Tcl_Interp *interp,
|
||||
CmdFrame *cfPtr);
|
||||
MODULE_SCOPE void TclArgumentGet(Tcl_Interp *interp, Tcl_Obj *obj,
|
||||
CmdFrame **cfPtrPtr, int *wordPtr);
|
||||
MODULE_SCOPE int TclArraySet(Tcl_Interp *interp,
|
||||
Tcl_Obj *arrayNameObj, Tcl_Obj *arrayElemObj);
|
||||
MODULE_SCOPE double TclBignumToDouble(const mp_int *bignum);
|
||||
MODULE_SCOPE int TclByteArrayMatch(const unsigned char *string,
|
||||
int strLen, const unsigned char *pattern,
|
||||
@@ -2898,6 +2896,8 @@ MODULE_SCOPE int TclByteArrayMatch(const unsigned char *string,
|
||||
MODULE_SCOPE double TclCeil(const mp_int *a);
|
||||
MODULE_SCOPE void TclChannelPreserve(Tcl_Channel chan);
|
||||
MODULE_SCOPE void TclChannelRelease(Tcl_Channel chan);
|
||||
MODULE_SCOPE int TclCheckArrayTraces(Tcl_Interp *interp, Var *varPtr,
|
||||
Var *arrayPtr, Tcl_Obj *name, int index);
|
||||
MODULE_SCOPE int TclCheckBadOctal(Tcl_Interp *interp,
|
||||
const char *value);
|
||||
MODULE_SCOPE int TclChanCaughtErrorBypass(Tcl_Interp *interp,
|
||||
@@ -3065,6 +3065,8 @@ MODULE_SCOPE Tcl_Obj * TclLindexFlat(Tcl_Interp *interp, Tcl_Obj *listPtr,
|
||||
MODULE_SCOPE void TclListLines(Tcl_Obj *listObj, int line, int n,
|
||||
int *lines, Tcl_Obj *const *elems);
|
||||
MODULE_SCOPE Tcl_Obj * TclListObjCopy(Tcl_Interp *interp, Tcl_Obj *listPtr);
|
||||
MODULE_SCOPE Tcl_Obj * TclListObjRange(Tcl_Obj *listPtr, int fromIdx,
|
||||
int toIdx);
|
||||
MODULE_SCOPE Tcl_Obj * TclLsetList(Tcl_Interp *interp, Tcl_Obj *listPtr,
|
||||
Tcl_Obj *indexPtr, Tcl_Obj *valuePtr);
|
||||
MODULE_SCOPE Tcl_Obj * TclLsetFlat(Tcl_Interp *interp, Tcl_Obj *listPtr,
|
||||
@@ -3198,6 +3200,8 @@ MODULE_SCOPE void TclSubstParse(Tcl_Interp *interp, const char *bytes,
|
||||
MODULE_SCOPE int TclSubstTokens(Tcl_Interp *interp, Tcl_Token *tokenPtr,
|
||||
int count, int *tokensLeftPtr, int line,
|
||||
int *clNextOuter, const char *outerScript);
|
||||
MODULE_SCOPE int TclTrim(const char *bytes, int numBytes,
|
||||
const char *trim, int numTrim, int *trimRight);
|
||||
MODULE_SCOPE int TclTrimLeft(const char *bytes, int numBytes,
|
||||
const char *trim, int numTrim);
|
||||
MODULE_SCOPE int TclTrimRight(const char *bytes, int numBytes,
|
||||
@@ -4004,6 +4008,9 @@ MODULE_SCOPE int TclStringLast(Tcl_Obj *needle, Tcl_Obj *haystack,
|
||||
int last);
|
||||
MODULE_SCOPE Tcl_Obj * TclStringRepeat(Tcl_Interp *interp, Tcl_Obj *objPtr,
|
||||
int count, int flags);
|
||||
MODULE_SCOPE Tcl_Obj * TclStringReplace(Tcl_Interp *interp, Tcl_Obj *objPtr,
|
||||
int first, int count, Tcl_Obj *insertPtr,
|
||||
int flags);
|
||||
MODULE_SCOPE Tcl_Obj * TclStringReverse(Tcl_Obj *objPtr, int flags);
|
||||
|
||||
/* Flag values for the [string] ensemble functions. */
|
||||
@@ -4066,6 +4073,45 @@ MODULE_SCOPE TCL_HASH_TYPE TclHashObjKey(Tcl_HashTable *tablePtr, void *keyPtr);
|
||||
|
||||
MODULE_SCOPE int TclFullFinalizationRequested(void);
|
||||
|
||||
/*
|
||||
* TIP #462.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The following enum values give the status of a spawned process.
|
||||
*/
|
||||
|
||||
typedef enum TclProcessWaitStatus {
|
||||
TCL_PROCESS_ERROR = -1, /* Error waiting for process to exit */
|
||||
TCL_PROCESS_UNCHANGED = 0, /* No change since the last call. */
|
||||
TCL_PROCESS_EXITED = 1, /* Process has exited. */
|
||||
TCL_PROCESS_SIGNALED = 2, /* Child killed because of a signal. */
|
||||
TCL_PROCESS_STOPPED = 3, /* Child suspended because of a signal. */
|
||||
TCL_PROCESS_UNKNOWN_STATUS = 4
|
||||
/* Child wait status didn't make sense. */
|
||||
} TclProcessWaitStatus;
|
||||
|
||||
MODULE_SCOPE Tcl_Command TclInitProcessCmd(Tcl_Interp *interp);
|
||||
MODULE_SCOPE void TclProcessCreated(Tcl_Pid pid);
|
||||
MODULE_SCOPE TclProcessWaitStatus TclProcessWait(Tcl_Pid pid, int options,
|
||||
int *codePtr, Tcl_Obj **msgObjPtr,
|
||||
Tcl_Obj **errorObjPtr);
|
||||
|
||||
/*
|
||||
* Utility routines for encoding index values as integers. Used by both
|
||||
* some of the command compilers and by [lsort] and [lsearch].
|
||||
*/
|
||||
|
||||
MODULE_SCOPE int TclIndexEncode(Tcl_Interp *interp, Tcl_Obj *objPtr,
|
||||
int before, int after, int *indexPtr);
|
||||
MODULE_SCOPE int TclIndexDecode(int encoded, int endValue);
|
||||
|
||||
/* Constants used in index value encoding routines. */
|
||||
#define TCL_INDEX_END (-2)
|
||||
#define TCL_INDEX_BEFORE (-1)
|
||||
#define TCL_INDEX_START (0)
|
||||
#define TCL_INDEX_AFTER (INT_MAX)
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------
|
||||
* Macros used by the Tcl core to create and release Tcl objects.
|
||||
|
||||
+85
-10
@@ -420,6 +420,87 @@ TclListObjCopy(
|
||||
return copyPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclListObjRange --
|
||||
*
|
||||
* Makes a slice of a list value.
|
||||
* *listPtr must be known to be a valid list.
|
||||
*
|
||||
* Results:
|
||||
* Returns a pointer to the sliced list.
|
||||
* This may be a new object or the same object if not shared.
|
||||
*
|
||||
* Side effects:
|
||||
* The possible conversion of the object referenced by listPtr
|
||||
* to a list object.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
Tcl_Obj *
|
||||
TclListObjRange(
|
||||
Tcl_Obj *listPtr, /* List object to take a range from. */
|
||||
int fromIdx, /* Index of first element to include. */
|
||||
int toIdx) /* Index of last element to include. */
|
||||
{
|
||||
Tcl_Obj **elemPtrs;
|
||||
int listLen, i, newLen;
|
||||
List *listRepPtr;
|
||||
|
||||
TclListObjGetElements(NULL, listPtr, &listLen, &elemPtrs);
|
||||
|
||||
if (fromIdx < 0) {
|
||||
fromIdx = 0;
|
||||
}
|
||||
if (toIdx >= listLen) {
|
||||
toIdx = listLen-1;
|
||||
}
|
||||
if (fromIdx > toIdx) {
|
||||
return Tcl_NewObj();
|
||||
}
|
||||
|
||||
newLen = toIdx - fromIdx + 1;
|
||||
|
||||
if (Tcl_IsShared(listPtr) ||
|
||||
((ListRepPtr(listPtr)->refCount > 1))) {
|
||||
return Tcl_NewListObj(newLen, &elemPtrs[fromIdx]);
|
||||
}
|
||||
|
||||
/*
|
||||
* In-place is possible.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Even if nothing below cause any changes, we still want the
|
||||
* string-canonizing effect of [lrange 0 end].
|
||||
*/
|
||||
|
||||
TclInvalidateStringRep(listPtr);
|
||||
|
||||
/*
|
||||
* Delete elements that should not be included.
|
||||
*/
|
||||
|
||||
for (i = 0; i < fromIdx; i++) {
|
||||
TclDecrRefCount(elemPtrs[i]);
|
||||
}
|
||||
for (i = toIdx + 1; i < listLen; i++) {
|
||||
TclDecrRefCount(elemPtrs[i]);
|
||||
}
|
||||
|
||||
if (fromIdx > 0) {
|
||||
memmove(elemPtrs, &elemPtrs[fromIdx],
|
||||
(size_t) newLen * sizeof(Tcl_Obj*));
|
||||
}
|
||||
|
||||
listRepPtr = ListRepPtr(listPtr);
|
||||
listRepPtr->elemCount = newLen;
|
||||
|
||||
return listPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -1165,17 +1246,11 @@ TclLindexList(
|
||||
return TclLindexFlat(interp, listPtr, 1, &argPtr);
|
||||
}
|
||||
|
||||
if (indexListCopy->typePtr == &tclListType) {
|
||||
List *listRepPtr = ListRepPtr(indexListCopy);
|
||||
{
|
||||
int indexCount = -1; /* Size of the array of list indices. */
|
||||
Tcl_Obj **indices = NULL; /* Array of list indices. */
|
||||
|
||||
listPtr = TclLindexFlat(interp, listPtr, listRepPtr->elemCount,
|
||||
&listRepPtr->elements);
|
||||
} else {
|
||||
int indexCount = -1; /* Size of the array of list indices. */
|
||||
Tcl_Obj **indices = NULL;
|
||||
/* Array of list indices. */
|
||||
|
||||
Tcl_ListObjGetElements(NULL, indexListCopy, &indexCount, &indices);
|
||||
TclListObjGetElements(NULL, indexListCopy, &indexCount, &indices);
|
||||
listPtr = TclLindexFlat(interp, listPtr, indexCount, indices);
|
||||
}
|
||||
Tcl_DecrRefCount(indexListCopy);
|
||||
|
||||
@@ -470,6 +470,19 @@ Tcl_LoadObjCmd(
|
||||
*/
|
||||
|
||||
if (code != TCL_OK) {
|
||||
#if defined(TCL_NO_DEPRECATED) || TCL_MAJOR_VERSION > 8
|
||||
Interp *iPtr = (Interp *) target;
|
||||
if (iPtr->result && *(iPtr->result) && !iPtr->freeProc) {
|
||||
/*
|
||||
* A call to Tcl_InitStubs() determined the caller extension and
|
||||
* this interp are incompatible in their stubs mechanisms, and
|
||||
* recorded the error in the oldest legacy place we have to do so.
|
||||
*/
|
||||
Tcl_SetObjResult(target, Tcl_NewStringObj(iPtr->result, -1));
|
||||
iPtr->result = &tclEmptyString;
|
||||
iPtr->freeProc = NULL;
|
||||
}
|
||||
#endif /* defined(TCL_NO_DEPRECATED) */
|
||||
Tcl_TransferResult(target, code, interp);
|
||||
goto done;
|
||||
}
|
||||
|
||||
+137
-97
@@ -511,61 +511,53 @@ InitClassSystemRoots(
|
||||
Class fakeCls;
|
||||
Object fakeObject;
|
||||
|
||||
/*
|
||||
* Stand up a phony class for bootstrapping.
|
||||
*/
|
||||
|
||||
/* Stand up a phony class for bootstrapping. */
|
||||
fPtr->objectCls = &fakeCls;
|
||||
|
||||
/*
|
||||
* Referenced in AllocClass to increment the refCount.
|
||||
*/
|
||||
|
||||
/* referenced in AllocClass to increment the refCount. */
|
||||
fakeCls.thisPtr = &fakeObject;
|
||||
|
||||
fPtr->objectCls = AllocClass(interp,
|
||||
AllocObject(interp, "object", (Namespace *)fPtr->ooNs, NULL));
|
||||
fPtr->classCls = AllocClass(interp,
|
||||
AllocObject(interp, "class", (Namespace *)fPtr->ooNs, NULL));
|
||||
|
||||
/*
|
||||
* Rewire bootstrapped objects.
|
||||
*/
|
||||
|
||||
fPtr->objectCls->thisPtr->selfCls = fPtr->classCls;
|
||||
fPtr->classCls->thisPtr->selfCls = fPtr->classCls;
|
||||
|
||||
/* Corresponding TclOODecrRefCount in KillFoudation */
|
||||
AddRef(fPtr->objectCls->thisPtr);
|
||||
AddRef(fPtr->classCls->thisPtr);
|
||||
AddRef(fPtr->classCls->thisPtr->selfCls->thisPtr);
|
||||
AddRef(fPtr->objectCls->thisPtr->selfCls->thisPtr);
|
||||
|
||||
/*
|
||||
* Special initialization for the primordial objects.
|
||||
*/
|
||||
|
||||
fPtr->objectCls->thisPtr->flags |= ROOT_OBJECT;
|
||||
fPtr->objectCls->flags |= ROOT_OBJECT;
|
||||
|
||||
/*
|
||||
* This is why it is unnecessary in this routine to make up for the
|
||||
* incremented reference count of fPtr->objectCls that was sallwed by
|
||||
* fakeObject.
|
||||
*/
|
||||
|
||||
/* This is why it is unnecessary in this routine to replace the
|
||||
* incremented reference count of fPtr->objectCls that was swallowed by
|
||||
* fakeObject. */
|
||||
fPtr->objectCls->superclasses.num = 0;
|
||||
ckfree(fPtr->objectCls->superclasses.list);
|
||||
fPtr->objectCls->superclasses.list = NULL;
|
||||
|
||||
/* special initialization for the primordial objects */
|
||||
fPtr->objectCls->thisPtr->flags |= ROOT_OBJECT;
|
||||
fPtr->objectCls->flags |= ROOT_OBJECT;
|
||||
|
||||
fPtr->classCls = AllocClass(interp,
|
||||
AllocObject(interp, "class", (Namespace *)fPtr->ooNs, NULL));
|
||||
/* Corresponding TclOODecrRefCount in KillFoudation */
|
||||
AddRef(fPtr->classCls->thisPtr);
|
||||
|
||||
/*
|
||||
* Increment reference counts for each reference because these
|
||||
* relationships can be dynamically changed.
|
||||
*
|
||||
* Corresponding TclOODecrRefCount for all incremented refcounts is in
|
||||
* KillFoundation.
|
||||
*/
|
||||
|
||||
/* Rewire bootstrapped objects. */
|
||||
fPtr->objectCls->thisPtr->selfCls = fPtr->classCls;
|
||||
AddRef(fPtr->classCls->thisPtr);
|
||||
TclOOAddToInstances(fPtr->objectCls->thisPtr, fPtr->classCls);
|
||||
|
||||
fPtr->classCls->thisPtr->selfCls = fPtr->classCls;
|
||||
AddRef(fPtr->classCls->thisPtr);
|
||||
TclOOAddToInstances(fPtr->classCls->thisPtr, fPtr->classCls);
|
||||
|
||||
fPtr->classCls->thisPtr->flags |= ROOT_CLASS;
|
||||
fPtr->classCls->flags |= ROOT_CLASS;
|
||||
|
||||
/*
|
||||
* Standard initialization for new Objects.
|
||||
*/
|
||||
|
||||
TclOOAddToInstances(fPtr->objectCls->thisPtr, fPtr->classCls);
|
||||
TclOOAddToInstances(fPtr->classCls->thisPtr, fPtr->classCls);
|
||||
/* Standard initialization for new Objects */
|
||||
TclOOAddToSubclasses(fPtr->classCls, fPtr->objectCls);
|
||||
|
||||
/*
|
||||
@@ -637,6 +629,9 @@ KillFoundation(
|
||||
TclDecrRefCount(fPtr->destructorName);
|
||||
TclDecrRefCount(fPtr->clonedName);
|
||||
TclDecrRefCount(fPtr->defineName);
|
||||
TclOODecrRefCount(fPtr->objectCls->thisPtr);
|
||||
TclOODecrRefCount(fPtr->classCls->thisPtr);
|
||||
|
||||
ckfree(fPtr);
|
||||
}
|
||||
|
||||
@@ -720,12 +715,16 @@ AllocObject(
|
||||
Tcl_ResetResult(interp);
|
||||
}
|
||||
|
||||
|
||||
configNamespace:
|
||||
|
||||
((Namespace *)oPtr->namespacePtr)->refCount++;
|
||||
|
||||
/*
|
||||
* Make the namespace know about the helper commands. This grants access
|
||||
* to the [self] and [next] commands.
|
||||
*/
|
||||
|
||||
configNamespace:
|
||||
if (fPtr->helpersNs != NULL) {
|
||||
TclSetNsPath((Namespace *) oPtr->namespacePtr, 1, &fPtr->helpersNs);
|
||||
}
|
||||
@@ -892,10 +891,9 @@ ObjectRenamedTrace(
|
||||
/*
|
||||
* ----------------------------------------------------------------------
|
||||
*
|
||||
* DeleteDescendants, ReleaseClassContents --
|
||||
* DeleteDescendants --
|
||||
*
|
||||
* Tear down the special class data structure, including deleting all
|
||||
* dependent classes and objects.
|
||||
* Delete all descendants of a particular class.
|
||||
*
|
||||
* ----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -907,44 +905,55 @@ DeleteDescendants(
|
||||
{
|
||||
Class *clsPtr = oPtr->classPtr, *subclassPtr, *mixinSubclassPtr;
|
||||
Object *instancePtr;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Squelch classes that this class has been mixed into.
|
||||
*/
|
||||
|
||||
FOREACH(mixinSubclassPtr, clsPtr->mixinSubs) {
|
||||
/*
|
||||
* This condition also covers the case where mixinSubclassPtr ==
|
||||
* clsPtr
|
||||
*/
|
||||
|
||||
if (!Deleted(mixinSubclassPtr->thisPtr)) {
|
||||
Tcl_DeleteCommandFromToken(interp,
|
||||
mixinSubclassPtr->thisPtr->command);
|
||||
if (clsPtr->mixinSubs.num > 0) {
|
||||
while (clsPtr->mixinSubs.num > 0) {
|
||||
mixinSubclassPtr = clsPtr->mixinSubs.list[clsPtr->mixinSubs.num-1];
|
||||
/* This condition also covers the case where mixinSubclassPtr ==
|
||||
* clsPtr
|
||||
*/
|
||||
if (!Deleted(mixinSubclassPtr->thisPtr)) {
|
||||
Tcl_DeleteCommandFromToken(interp,
|
||||
mixinSubclassPtr->thisPtr->command);
|
||||
}
|
||||
TclOORemoveFromMixinSubs(mixinSubclassPtr, clsPtr);
|
||||
}
|
||||
i -= TclOORemoveFromMixinSubs(mixinSubclassPtr, clsPtr);
|
||||
TclOODecrRefCount(mixinSubclassPtr->thisPtr);
|
||||
}
|
||||
if (clsPtr->mixinSubs.size > 0) {
|
||||
ckfree(clsPtr->mixinSubs.list);
|
||||
clsPtr->mixinSubs.size = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Squelch subclasses of this class.
|
||||
*/
|
||||
|
||||
FOREACH(subclassPtr, clsPtr->subclasses) {
|
||||
if (!Deleted(subclassPtr->thisPtr) && !IsRoot(subclassPtr)) {
|
||||
Tcl_DeleteCommandFromToken(interp, subclassPtr->thisPtr->command);
|
||||
if (clsPtr->subclasses.num > 0) {
|
||||
while (clsPtr->subclasses.num > 0) {
|
||||
subclassPtr = clsPtr->subclasses.list[clsPtr->subclasses.num-1];
|
||||
if (!Deleted(subclassPtr->thisPtr) && !IsRoot(subclassPtr)) {
|
||||
Tcl_DeleteCommandFromToken(interp, subclassPtr->thisPtr->command);
|
||||
}
|
||||
TclOORemoveFromSubclasses(subclassPtr, clsPtr);
|
||||
}
|
||||
i -= TclOORemoveFromSubclasses(subclassPtr, clsPtr);
|
||||
TclOODecrRefCount(subclassPtr->thisPtr);
|
||||
}
|
||||
if (clsPtr->subclasses.size > 0) {
|
||||
ckfree(clsPtr->subclasses.list);
|
||||
clsPtr->subclasses.list = NULL;
|
||||
clsPtr->subclasses.size = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Squelch instances of this class (includes objects we're mixed into).
|
||||
*/
|
||||
|
||||
if (!IsRootClass(oPtr)) {
|
||||
FOREACH(instancePtr, clsPtr->instances) {
|
||||
if (clsPtr->instances.num > 0) {
|
||||
while (clsPtr->instances.num > 0) {
|
||||
instancePtr = clsPtr->instances.list[clsPtr->instances.num-1];
|
||||
/*
|
||||
* This condition also covers the case where instancePtr == oPtr
|
||||
*/
|
||||
@@ -952,10 +961,26 @@ DeleteDescendants(
|
||||
if (!Deleted(instancePtr) && !IsRoot(instancePtr)) {
|
||||
Tcl_DeleteCommandFromToken(interp, instancePtr->command);
|
||||
}
|
||||
i -= TclOORemoveFromInstances(instancePtr, clsPtr);
|
||||
TclOORemoveFromInstances(instancePtr, clsPtr);
|
||||
}
|
||||
}
|
||||
if (clsPtr->instances.size > 0) {
|
||||
ckfree(clsPtr->instances.list);
|
||||
clsPtr->instances.list = NULL;
|
||||
clsPtr->instances.size = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------
|
||||
*
|
||||
* ReleaseClassContents --
|
||||
*
|
||||
* Tear down the special class data structure, including deleting all
|
||||
* dependent classes and objects.
|
||||
*
|
||||
* ----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static void
|
||||
ReleaseClassContents(
|
||||
@@ -1020,6 +1045,7 @@ ReleaseClassContents(
|
||||
TclDecrRefCount(filterObj);
|
||||
}
|
||||
ckfree(clsPtr->filters.list);
|
||||
clsPtr->filters.list = NULL;
|
||||
clsPtr->filters.num = 0;
|
||||
}
|
||||
|
||||
@@ -1039,11 +1065,24 @@ ReleaseClassContents(
|
||||
clsPtr->metadataPtr = NULL;
|
||||
}
|
||||
|
||||
FOREACH(tmpClsPtr, clsPtr->mixins) {
|
||||
TclOORemoveFromMixinSubs(clsPtr, tmpClsPtr);
|
||||
if (clsPtr->mixins.num) {
|
||||
FOREACH(tmpClsPtr, clsPtr->mixins) {
|
||||
TclOORemoveFromMixinSubs(clsPtr, tmpClsPtr);
|
||||
TclOODecrRefCount(tmpClsPtr->thisPtr);
|
||||
}
|
||||
ckfree(clsPtr->mixins.list);
|
||||
clsPtr->mixins.list = NULL;
|
||||
clsPtr->mixins.num = 0;
|
||||
}
|
||||
FOREACH(tmpClsPtr, clsPtr->superclasses) {
|
||||
TclOORemoveFromSubclasses(clsPtr, tmpClsPtr);
|
||||
|
||||
if (clsPtr->superclasses.num > 0) {
|
||||
FOREACH(tmpClsPtr, clsPtr->superclasses) {
|
||||
TclOORemoveFromSubclasses(clsPtr, tmpClsPtr);
|
||||
TclOODecrRefCount(tmpClsPtr->thisPtr);
|
||||
}
|
||||
ckfree(clsPtr->superclasses.list);
|
||||
clsPtr->superclasses.num = 0;
|
||||
clsPtr->superclasses.list = NULL;
|
||||
}
|
||||
|
||||
FOREACH_HASH_VALUE(mPtr, &clsPtr->classMethods) {
|
||||
@@ -1179,10 +1218,11 @@ ObjectNamespaceDeleted(
|
||||
|
||||
TclOORemoveFromInstances(oPtr, oPtr->selfCls);
|
||||
|
||||
FOREACH(mixinPtr, oPtr->mixins) {
|
||||
i -= TclOORemoveFromInstances(oPtr, mixinPtr);
|
||||
}
|
||||
if (i) {
|
||||
if (oPtr->mixins.num > 0) {
|
||||
FOREACH(mixinPtr, oPtr->mixins) {
|
||||
TclOORemoveFromInstances(oPtr, mixinPtr);
|
||||
TclOODecrRefCount(mixinPtr->thisPtr);
|
||||
}
|
||||
ckfree(oPtr->mixins.list);
|
||||
}
|
||||
|
||||
@@ -1251,7 +1291,9 @@ ObjectNamespaceDeleted(
|
||||
* Delete the object structure itself.
|
||||
*/
|
||||
|
||||
TclNsDecrRefCount((Namespace *)oPtr->namespacePtr);
|
||||
oPtr->namespacePtr = NULL;
|
||||
TclOODecrRefCount(oPtr->selfCls->thisPtr);
|
||||
oPtr->selfCls = NULL;
|
||||
TclOODecrRefCount(oPtr);
|
||||
return;
|
||||
@@ -1274,14 +1316,8 @@ TclOODecrRefCount(
|
||||
Object *oPtr)
|
||||
{
|
||||
if (oPtr->refCount-- <= 1) {
|
||||
Class *clsPtr = oPtr->classPtr;
|
||||
|
||||
if (oPtr->classPtr != NULL) {
|
||||
ckfree(clsPtr->superclasses.list);
|
||||
ckfree(clsPtr->subclasses.list);
|
||||
ckfree(clsPtr->instances.list);
|
||||
ckfree(clsPtr->mixinSubs.list);
|
||||
ckfree(clsPtr->mixins.list);
|
||||
ckfree(oPtr->classPtr);
|
||||
}
|
||||
ckfree(oPtr);
|
||||
@@ -1310,10 +1346,6 @@ TclOORemoveFromInstances(
|
||||
int i, res = 0;
|
||||
Object *instPtr;
|
||||
|
||||
if (Deleted(clsPtr->thisPtr)) {
|
||||
return res;
|
||||
}
|
||||
|
||||
FOREACH(instPtr, clsPtr->instances) {
|
||||
if (oPtr == instPtr) {
|
||||
RemoveItem(Object, clsPtr->instances, i);
|
||||
@@ -1376,10 +1408,6 @@ TclOORemoveFromSubclasses(
|
||||
int i, res = 0;
|
||||
Class *subclsPtr;
|
||||
|
||||
if (Deleted(superPtr->thisPtr)) {
|
||||
return res;
|
||||
}
|
||||
|
||||
FOREACH(subclsPtr, superPtr->subclasses) {
|
||||
if (subPtr == subclsPtr) {
|
||||
RemoveItem(Class, superPtr->subclasses, i);
|
||||
@@ -1444,10 +1472,6 @@ TclOORemoveFromMixinSubs(
|
||||
int i, res = 0;
|
||||
Class *subclsPtr;
|
||||
|
||||
if (Deleted(superPtr->thisPtr)) {
|
||||
return res;
|
||||
}
|
||||
|
||||
FOREACH(subclsPtr, superPtr->mixinSubs) {
|
||||
if (subPtr == subclsPtr) {
|
||||
RemoveItem(Class, superPtr->mixinSubs, i);
|
||||
@@ -1755,6 +1779,7 @@ TclNewObjectInstanceCommon(
|
||||
|
||||
oPtr = AllocObject(interp, simpleName, nsPtr, nsNameStr);
|
||||
oPtr->selfCls = classPtr;
|
||||
AddRef(classPtr->thisPtr);
|
||||
TclOOAddToInstances(oPtr, classPtr);
|
||||
|
||||
/*
|
||||
@@ -1900,16 +1925,22 @@ Tcl_CopyObjectInstance(
|
||||
* Copy the object's mixin references to the new object.
|
||||
*/
|
||||
|
||||
FOREACH(mixinPtr, o2Ptr->mixins) {
|
||||
if (mixinPtr && mixinPtr != o2Ptr->selfCls) {
|
||||
TclOORemoveFromInstances(o2Ptr, mixinPtr);
|
||||
if (o2Ptr->mixins.num != 0) {
|
||||
FOREACH(mixinPtr, o2Ptr->mixins) {
|
||||
if (mixinPtr && mixinPtr != o2Ptr->selfCls) {
|
||||
TclOORemoveFromInstances(o2Ptr, mixinPtr);
|
||||
}
|
||||
TclOODecrRefCount(mixinPtr->thisPtr);
|
||||
}
|
||||
ckfree(o2Ptr->mixins.list);
|
||||
}
|
||||
DUPLICATE(o2Ptr->mixins, oPtr->mixins, Class *);
|
||||
FOREACH(mixinPtr, o2Ptr->mixins) {
|
||||
if (mixinPtr && mixinPtr != o2Ptr->selfCls) {
|
||||
TclOOAddToInstances(o2Ptr, mixinPtr);
|
||||
}
|
||||
/* For the reference just created in DUPLICATE */
|
||||
AddRef(mixinPtr->thisPtr);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1987,6 +2018,7 @@ Tcl_CopyObjectInstance(
|
||||
|
||||
FOREACH(superPtr, cls2Ptr->superclasses) {
|
||||
TclOORemoveFromSubclasses(cls2Ptr, superPtr);
|
||||
TclOODecrRefCount(superPtr->thisPtr);
|
||||
}
|
||||
if (cls2Ptr->superclasses.num) {
|
||||
cls2Ptr->superclasses.list = ckrealloc(cls2Ptr->superclasses.list,
|
||||
@@ -2000,6 +2032,11 @@ Tcl_CopyObjectInstance(
|
||||
cls2Ptr->superclasses.num = clsPtr->superclasses.num;
|
||||
FOREACH(superPtr, cls2Ptr->superclasses) {
|
||||
TclOOAddToSubclasses(cls2Ptr, superPtr);
|
||||
|
||||
/* For the new item in cls2Ptr->superclasses that memcpy just
|
||||
* created
|
||||
*/
|
||||
AddRef(superPtr->thisPtr);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2025,15 +2062,18 @@ Tcl_CopyObjectInstance(
|
||||
* references to the duplicate).
|
||||
*/
|
||||
|
||||
FOREACH(mixinPtr, cls2Ptr->mixins) {
|
||||
TclOORemoveFromMixinSubs(cls2Ptr, mixinPtr);
|
||||
}
|
||||
if (cls2Ptr->mixins.num != 0) {
|
||||
FOREACH(mixinPtr, cls2Ptr->mixins) {
|
||||
TclOORemoveFromMixinSubs(cls2Ptr, mixinPtr);
|
||||
TclOODecrRefCount(mixinPtr->thisPtr);
|
||||
}
|
||||
ckfree(clsPtr->mixins.list);
|
||||
}
|
||||
DUPLICATE(cls2Ptr->mixins, clsPtr->mixins, Class *);
|
||||
FOREACH(mixinPtr, cls2Ptr->mixins) {
|
||||
TclOOAddToMixinSubs(cls2Ptr, mixinPtr);
|
||||
/* For the copy just created in DUPLICATE */
|
||||
AddRef(mixinPtr->thisPtr);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+12
-61
@@ -332,6 +332,7 @@ TclOOObjectSetMixins(
|
||||
if (oPtr->mixins.num != 0) {
|
||||
FOREACH(mixinPtr, oPtr->mixins) {
|
||||
TclOORemoveFromInstances(oPtr, mixinPtr);
|
||||
TclOODecrRefCount(mixinPtr->thisPtr);
|
||||
}
|
||||
ckfree(oPtr->mixins.list);
|
||||
oPtr->mixins.num = 0;
|
||||
@@ -343,6 +344,7 @@ TclOOObjectSetMixins(
|
||||
if (mixinPtr && mixinPtr != oPtr->selfCls) {
|
||||
TclOORemoveFromInstances(oPtr, mixinPtr);
|
||||
}
|
||||
TclOODecrRefCount(mixinPtr->thisPtr);
|
||||
}
|
||||
oPtr->mixins.list = ckrealloc(oPtr->mixins.list,
|
||||
sizeof(Class *) * numMixins);
|
||||
@@ -355,13 +357,8 @@ TclOOObjectSetMixins(
|
||||
FOREACH(mixinPtr, oPtr->mixins) {
|
||||
if (mixinPtr != oPtr->selfCls) {
|
||||
TclOOAddToInstances(oPtr, mixinPtr);
|
||||
|
||||
/*
|
||||
* Corresponding TclOODecrRefCount() is in the caller of this
|
||||
* function.
|
||||
*/
|
||||
|
||||
TclOODecrRefCount(mixinPtr->thisPtr);
|
||||
/* For the new copy created by memcpy */
|
||||
AddRef(mixinPtr->thisPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -392,6 +389,7 @@ TclOOClassSetMixins(
|
||||
if (classPtr->mixins.num != 0) {
|
||||
FOREACH(mixinPtr, classPtr->mixins) {
|
||||
TclOORemoveFromMixinSubs(classPtr, mixinPtr);
|
||||
TclOODecrRefCount(mixinPtr->thisPtr);
|
||||
}
|
||||
ckfree(classPtr->mixins.list);
|
||||
classPtr->mixins.num = 0;
|
||||
@@ -400,6 +398,7 @@ TclOOClassSetMixins(
|
||||
if (classPtr->mixins.num != 0) {
|
||||
FOREACH(mixinPtr, classPtr->mixins) {
|
||||
TclOORemoveFromMixinSubs(classPtr, mixinPtr);
|
||||
TclOODecrRefCount(mixinPtr->thisPtr);
|
||||
}
|
||||
classPtr->mixins.list = ckrealloc(classPtr->mixins.list,
|
||||
sizeof(Class *) * numMixins);
|
||||
@@ -410,13 +409,8 @@ TclOOClassSetMixins(
|
||||
memcpy(classPtr->mixins.list, mixins, sizeof(Class *) * numMixins);
|
||||
FOREACH(mixinPtr, classPtr->mixins) {
|
||||
TclOOAddToMixinSubs(classPtr, mixinPtr);
|
||||
|
||||
/*
|
||||
* Corresponding TclOODecrRefCount() is in the caller of this
|
||||
* function.
|
||||
*/
|
||||
|
||||
TclOODecrRefCount(mixinPtr->thisPtr);
|
||||
/* For the new copy created by memcpy */
|
||||
AddRef(mixinPtr->thisPtr);
|
||||
}
|
||||
}
|
||||
BumpGlobalEpoch(interp, classPtr);
|
||||
@@ -1186,14 +1180,11 @@ TclOODefineClassObjCmd(
|
||||
|
||||
if (oPtr->selfCls != clsPtr) {
|
||||
TclOORemoveFromInstances(oPtr, oPtr->selfCls);
|
||||
|
||||
/*
|
||||
* Reference count already incremented a few lines up.
|
||||
*/
|
||||
|
||||
TclOODecrRefCount(oPtr->selfCls->thisPtr);
|
||||
oPtr->selfCls = clsPtr;
|
||||
|
||||
AddRef(oPtr->selfCls->thisPtr);
|
||||
TclOOAddToInstances(oPtr, oPtr->selfCls);
|
||||
|
||||
if (oPtr->classPtr != NULL) {
|
||||
BumpGlobalEpoch(interp, oPtr->classPtr);
|
||||
} else {
|
||||
@@ -1656,13 +1647,6 @@ TclOODefineMixinObjCmd(
|
||||
goto freeAndError;
|
||||
}
|
||||
mixins[i-1] = clsPtr;
|
||||
|
||||
/*
|
||||
* Corresponding TclOODecrRefCount() is in TclOOObjectSetMixins,
|
||||
* TclOOClassSetMixinsk, or just below if this function fails.
|
||||
*/
|
||||
|
||||
AddRef(mixins[i-1]->thisPtr);
|
||||
}
|
||||
|
||||
if (isInstanceMixin) {
|
||||
@@ -1675,9 +1659,6 @@ TclOODefineMixinObjCmd(
|
||||
return TCL_OK;
|
||||
|
||||
freeAndError:
|
||||
while (--i > 0) {
|
||||
TclOODecrRefCount(mixins[i]->thisPtr);
|
||||
}
|
||||
TclStackFree(interp, mixins);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
@@ -2108,13 +2089,6 @@ ClassMixinSet(
|
||||
Tcl_SetErrorCode(interp, "TCL", "OO", "SELF_MIXIN", NULL);
|
||||
goto freeAndError;
|
||||
}
|
||||
|
||||
/*
|
||||
* Corresponding TclOODecrRefCount() is in TclOOClassSetMixins, or
|
||||
* just below if this function fails.
|
||||
*/
|
||||
|
||||
AddRef(mixins[i]->thisPtr);
|
||||
}
|
||||
|
||||
TclOOClassSetMixins(interp, oPtr->classPtr, mixinc, mixins);
|
||||
@@ -2122,9 +2096,6 @@ ClassMixinSet(
|
||||
return TCL_OK;
|
||||
|
||||
freeAndError:
|
||||
while (i-- > 0) {
|
||||
TclOODecrRefCount(mixins[i]->thisPtr);
|
||||
}
|
||||
TclStackFree(interp, mixins);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
@@ -2234,11 +2205,6 @@ ClassSuperSet(
|
||||
superclasses[0] = oPtr->fPtr->objectCls;
|
||||
}
|
||||
superc = 1;
|
||||
|
||||
/*
|
||||
* Corresponding TclOODecrRefCount is near the end of this function.
|
||||
*/
|
||||
|
||||
AddRef(superclasses[0]->thisPtr);
|
||||
} else {
|
||||
for (i=0 ; i<superc ; i++) {
|
||||
@@ -2288,6 +2254,7 @@ ClassSuperSet(
|
||||
if (oPtr->classPtr->superclasses.num != 0) {
|
||||
FOREACH(superPtr, oPtr->classPtr->superclasses) {
|
||||
TclOORemoveFromSubclasses(oPtr->classPtr, superPtr);
|
||||
TclOODecrRefCount(superPtr->thisPtr);
|
||||
}
|
||||
ckfree(oPtr->classPtr->superclasses.list);
|
||||
}
|
||||
@@ -2295,12 +2262,6 @@ ClassSuperSet(
|
||||
oPtr->classPtr->superclasses.num = superc;
|
||||
FOREACH(superPtr, oPtr->classPtr->superclasses) {
|
||||
TclOOAddToSubclasses(oPtr->classPtr, superPtr);
|
||||
|
||||
/*
|
||||
* To account for the AddRef() earlier in this function.
|
||||
*/
|
||||
|
||||
TclOODecrRefCount(superPtr->thisPtr);
|
||||
}
|
||||
BumpGlobalEpoch(interp, oPtr->classPtr);
|
||||
|
||||
@@ -2594,19 +2555,9 @@ ObjMixinSet(
|
||||
mixins[i] = GetClassInOuterContext(interp, mixinv[i],
|
||||
"may only mix in classes");
|
||||
if (mixins[i] == NULL) {
|
||||
while (i-- > 0) {
|
||||
TclOODecrRefCount(mixins[i]->thisPtr);
|
||||
}
|
||||
TclStackFree(interp, mixins);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Corresponding TclOODecrRefCount() is in TclOOObjectSetMixins() or
|
||||
* just above if this function fails.
|
||||
*/
|
||||
|
||||
AddRef(mixins[i]->thisPtr);
|
||||
}
|
||||
|
||||
TclOOObjectSetMixins(oPtr, mixinc, mixins);
|
||||
|
||||
+21
-57
@@ -221,13 +221,13 @@ Tcl_ReapDetachedProcs(void)
|
||||
{
|
||||
register Detached *detPtr;
|
||||
Detached *nextPtr, *prevPtr;
|
||||
int status;
|
||||
Tcl_Pid pid;
|
||||
int status, code;
|
||||
|
||||
Tcl_MutexLock(&pipeMutex);
|
||||
for (detPtr = detList, prevPtr = NULL; detPtr != NULL; ) {
|
||||
pid = Tcl_WaitPid(detPtr->pid, &status, WNOHANG);
|
||||
if ((pid == 0) || ((pid == (Tcl_Pid) -1) && (errno != ECHILD))) {
|
||||
status = TclProcessWait(detPtr->pid, WNOHANG, &code, NULL, NULL);
|
||||
if (status == TCL_PROCESS_UNCHANGED || (status == TCL_PROCESS_ERROR
|
||||
&& code != ECHILD)) {
|
||||
prevPtr = detPtr;
|
||||
detPtr = detPtr->nextPtr;
|
||||
continue;
|
||||
@@ -277,38 +277,21 @@ TclCleanupChildren(
|
||||
{
|
||||
int result = TCL_OK;
|
||||
int i, abnormalExit, anyErrorInfo;
|
||||
Tcl_Pid pid;
|
||||
int waitStatus;
|
||||
const char *msg;
|
||||
unsigned long resolvedPid;
|
||||
TclProcessWaitStatus waitStatus;
|
||||
int code;
|
||||
Tcl_Obj *msg, *error;
|
||||
|
||||
abnormalExit = 0;
|
||||
for (i = 0; i < numPids; i++) {
|
||||
/*
|
||||
* We need to get the resolved pid before we wait on it as the windows
|
||||
* implementation of Tcl_WaitPid deletes the information such that any
|
||||
* following calls to TclpGetPid fail.
|
||||
*/
|
||||
|
||||
resolvedPid = TclpGetPid(pidPtr[i]);
|
||||
pid = Tcl_WaitPid(pidPtr[i], &waitStatus, 0);
|
||||
if (pid == (Tcl_Pid) -1) {
|
||||
waitStatus = TclProcessWait(pidPtr[i], 0, &code, &msg, &error);
|
||||
if (waitStatus == TCL_PROCESS_ERROR) {
|
||||
result = TCL_ERROR;
|
||||
if (interp != NULL) {
|
||||
msg = Tcl_PosixError(interp);
|
||||
if (errno == ECHILD) {
|
||||
/*
|
||||
* This changeup in message suggested by Mark Diekhans to
|
||||
* remind people that ECHILD errors can occur on some
|
||||
* systems if SIGCHLD isn't in its default state.
|
||||
*/
|
||||
|
||||
msg =
|
||||
"child process lost (is SIGCHLD ignored or trapped?)";
|
||||
}
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"error waiting for process to exit: %s", msg));
|
||||
Tcl_SetObjErrorCode(interp, error);
|
||||
Tcl_SetObjResult(interp, msg);
|
||||
}
|
||||
Tcl_DecrRefCount(error);
|
||||
Tcl_DecrRefCount(msg);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -319,39 +302,19 @@ TclCleanupChildren(
|
||||
* removed).
|
||||
*/
|
||||
|
||||
if (!WIFEXITED(waitStatus) || (WEXITSTATUS(waitStatus) != 0)) {
|
||||
char msg1[TCL_INTEGER_SPACE], msg2[TCL_INTEGER_SPACE];
|
||||
|
||||
if (waitStatus != TCL_PROCESS_EXITED || code != 0) {
|
||||
result = TCL_ERROR;
|
||||
sprintf(msg1, "%lu", resolvedPid);
|
||||
if (WIFEXITED(waitStatus)) {
|
||||
if (waitStatus == TCL_PROCESS_EXITED) {
|
||||
if (interp != NULL) {
|
||||
sprintf(msg2, "%u", WEXITSTATUS(waitStatus));
|
||||
Tcl_SetErrorCode(interp, "CHILDSTATUS", msg1, msg2, NULL);
|
||||
Tcl_SetObjErrorCode(interp, error);
|
||||
}
|
||||
abnormalExit = 1;
|
||||
} else if (interp != NULL) {
|
||||
const char *p;
|
||||
|
||||
if (WIFSIGNALED(waitStatus)) {
|
||||
p = Tcl_SignalMsg(WTERMSIG(waitStatus));
|
||||
Tcl_SetErrorCode(interp, "CHILDKILLED", msg1,
|
||||
Tcl_SignalId(WTERMSIG(waitStatus)), p, NULL);
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"child killed: %s\n", p));
|
||||
} else if (WIFSTOPPED(waitStatus)) {
|
||||
p = Tcl_SignalMsg(WSTOPSIG(waitStatus));
|
||||
Tcl_SetErrorCode(interp, "CHILDSUSP", msg1,
|
||||
Tcl_SignalId(WSTOPSIG(waitStatus)), p, NULL);
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"child suspended: %s\n", p));
|
||||
} else {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"child wait status didn't make sense\n", -1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "EXEC",
|
||||
"ODDWAITRESULT", msg1, NULL);
|
||||
}
|
||||
Tcl_SetObjErrorCode(interp, error);
|
||||
Tcl_SetObjResult(interp, msg);
|
||||
}
|
||||
Tcl_DecrRefCount(error);
|
||||
Tcl_DecrRefCount(msg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -936,6 +899,7 @@ TclCreatePipeline(
|
||||
|
||||
pidPtr[numPids] = pid;
|
||||
numPids++;
|
||||
TclProcessCreated(pid);
|
||||
|
||||
/*
|
||||
* Close off our copies of file descriptors that were set up for this
|
||||
|
||||
+12
-11
@@ -728,8 +728,18 @@ SelectPackage(ClientData data[], Tcl_Interp *interp, int result) {
|
||||
*/
|
||||
|
||||
char *versionToProvide = bestPtr->version;
|
||||
PkgFiles *pkgFiles;
|
||||
PkgName *pkgName;
|
||||
|
||||
Tcl_Preserve(versionToProvide);
|
||||
pkgPtr->clientData = versionToProvide;
|
||||
|
||||
pkgFiles = TclInitPkgFiles(interp);
|
||||
/* Push "ifneeded" package name in "tclPkgFiles" assocdata. */
|
||||
pkgName = ckalloc(sizeof(PkgName) + strlen(name));
|
||||
pkgName->nextPtr = pkgFiles->names;
|
||||
strcpy(pkgName->name, name);
|
||||
pkgFiles->names = pkgName;
|
||||
if (bestPtr->pkgIndex) {
|
||||
TclPkgFileSeen(interp, bestPtr->pkgIndex);
|
||||
}
|
||||
@@ -748,17 +758,9 @@ SelectPackageFinal(ClientData data[], Tcl_Interp *interp, int result) {
|
||||
const char *name = reqPtr->name;
|
||||
char *versionToProvide = reqPtr->versionToProvide;
|
||||
|
||||
PkgFiles *pkgFiles;
|
||||
PkgName *pkgName;
|
||||
|
||||
pkgFiles = TclInitPkgFiles(interp);
|
||||
/* Push "ifneeded" package name in "tclPkgFiles" assocdata. */
|
||||
pkgName = ckalloc(sizeof(PkgName) + strlen(name));
|
||||
pkgName->nextPtr = pkgFiles->names;
|
||||
strcpy(pkgName->name, name);
|
||||
pkgFiles->names = pkgName;
|
||||
|
||||
/* Pop the "ifneeded" package name from "tclPkgFiles" assocdata*/
|
||||
PkgFiles *pkgFiles = Tcl_GetAssocData(interp, "tclPkgFiles", NULL);
|
||||
PkgName *pkgName = pkgFiles->names;
|
||||
pkgFiles->names = pkgName->nextPtr;
|
||||
ckfree(pkgName);
|
||||
|
||||
@@ -1246,7 +1248,6 @@ TclNRPackageObjCmd(
|
||||
*/
|
||||
|
||||
ov = Tcl_NewStringObj(version, -1);
|
||||
Tcl_IncrRefCount(ov);
|
||||
Tcl_AppendStringsToObj(ov, "-", version, NULL);
|
||||
version = NULL;
|
||||
argv3 = TclGetString(objv[3]);
|
||||
|
||||
@@ -0,0 +1,957 @@
|
||||
/*
|
||||
* tclProcess.c --
|
||||
*
|
||||
* This file implements the "tcl::process" ensemble for subprocess
|
||||
* management as defined by TIP #462.
|
||||
*
|
||||
* Copyright (c) 2017 Frederic Bonnet.
|
||||
*
|
||||
* See the file "license.terms" for information on usage and redistribution of
|
||||
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
*/
|
||||
|
||||
#include "tclInt.h"
|
||||
|
||||
/*
|
||||
* Autopurge flag. Process-global because of the way Tcl manages child
|
||||
* processes (see tclPipe.c).
|
||||
*/
|
||||
|
||||
static int autopurge = 1; /* Autopurge flag. */
|
||||
|
||||
/*
|
||||
* Hash tables that keeps track of all child process statuses. Keys are the
|
||||
* child process ids and resolved pids, values are (ProcessInfo *).
|
||||
*/
|
||||
|
||||
typedef struct ProcessInfo {
|
||||
Tcl_Pid pid; /* Process id. */
|
||||
int resolvedPid; /* Resolved process id. */
|
||||
int purge; /* Purge eventualy. */
|
||||
TclProcessWaitStatus status;/* Process status. */
|
||||
int code; /* Error code, exit status or signal
|
||||
number. */
|
||||
Tcl_Obj *msg; /* Error message. */
|
||||
Tcl_Obj *error; /* Error code. */
|
||||
} ProcessInfo;
|
||||
static Tcl_HashTable infoTablePerPid;
|
||||
static Tcl_HashTable infoTablePerResolvedPid;
|
||||
static int infoTablesInitialized = 0; /* 0 means not yet initialized. */
|
||||
TCL_DECLARE_MUTEX(infoTablesMutex)
|
||||
|
||||
/*
|
||||
* Prototypes for functions defined later in this file:
|
||||
*/
|
||||
|
||||
static void InitProcessInfo(ProcessInfo *info, Tcl_Pid pid,
|
||||
int resolvedPid);
|
||||
static void FreeProcessInfo(ProcessInfo *info);
|
||||
static int RefreshProcessInfo(ProcessInfo *info, int options);
|
||||
static TclProcessWaitStatus WaitProcessStatus(Tcl_Pid pid, int resolvedPid,
|
||||
int options, int *codePtr, Tcl_Obj **msgPtr,
|
||||
Tcl_Obj **errorObjPtr);
|
||||
static Tcl_Obj * BuildProcessStatusObj(ProcessInfo *info);
|
||||
static int ProcessListObjCmd(ClientData clientData,
|
||||
Tcl_Interp *interp, int objc,
|
||||
Tcl_Obj *const objv[]);
|
||||
static int ProcessStatusObjCmd(ClientData clientData,
|
||||
Tcl_Interp *interp, int objc,
|
||||
Tcl_Obj *const objv[]);
|
||||
static int ProcessPurgeObjCmd(ClientData clientData,
|
||||
Tcl_Interp *interp, int objc,
|
||||
Tcl_Obj *const objv[]);
|
||||
static int ProcessAutopurgeObjCmd(ClientData clientData,
|
||||
Tcl_Interp *interp, int objc,
|
||||
Tcl_Obj *const objv[]);
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* InitProcessInfo --
|
||||
*
|
||||
* Initializes the ProcessInfo structure.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* Memory written.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
InitProcessInfo(
|
||||
ProcessInfo *info, /* Structure to initialize. */
|
||||
Tcl_Pid pid, /* Process id. */
|
||||
int resolvedPid) /* Resolved process id. */
|
||||
{
|
||||
info->pid = pid;
|
||||
info->resolvedPid = resolvedPid;
|
||||
info->purge = 0;
|
||||
info->status = TCL_PROCESS_UNCHANGED;
|
||||
info->code = 0;
|
||||
info->msg = NULL;
|
||||
info->error = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* FreeProcessInfo --
|
||||
*
|
||||
* Free the ProcessInfo structure.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* Memory deallocated, Tcl_Obj refcount decreased.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
FreeProcessInfo(
|
||||
ProcessInfo *info) /* Structure to free. */
|
||||
{
|
||||
/*
|
||||
* Free stored Tcl_Objs.
|
||||
*/
|
||||
|
||||
if (info->msg) {
|
||||
Tcl_DecrRefCount(info->msg);
|
||||
}
|
||||
if (info->error) {
|
||||
Tcl_DecrRefCount(info->error);
|
||||
}
|
||||
|
||||
/*
|
||||
* Free allocated structure.
|
||||
*/
|
||||
|
||||
ckfree(info);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* RefreshProcessInfo --
|
||||
*
|
||||
* Refresh process info.
|
||||
*
|
||||
* Results:
|
||||
* Nonzero if state changed, else zero.
|
||||
*
|
||||
* Side effects:
|
||||
* May call WaitProcessStatus, which can block if WNOHANG option is set.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int
|
||||
RefreshProcessInfo(
|
||||
ProcessInfo *info, /* Structure to refresh. */
|
||||
int options /* Options passed to WaitProcessStatus. */
|
||||
)
|
||||
{
|
||||
if (info->status == TCL_PROCESS_UNCHANGED) {
|
||||
/*
|
||||
* Refresh & store status.
|
||||
*/
|
||||
|
||||
info->status = WaitProcessStatus(info->pid, info->resolvedPid,
|
||||
options, &info->code, &info->msg, &info->error);
|
||||
if (info->msg) Tcl_IncrRefCount(info->msg);
|
||||
if (info->error) Tcl_IncrRefCount(info->error);
|
||||
return (info->status != TCL_PROCESS_UNCHANGED);
|
||||
} else {
|
||||
/*
|
||||
* No change.
|
||||
*/
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* WaitProcessStatus --
|
||||
*
|
||||
* Wait for process status to change.
|
||||
*
|
||||
* Results:
|
||||
* TclProcessWaitStatus enum value.
|
||||
*
|
||||
* Side effects:
|
||||
* May call WaitProcessStatus, which can block if WNOHANG option is set.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
TclProcessWaitStatus
|
||||
WaitProcessStatus(
|
||||
Tcl_Pid pid, /* Process id. */
|
||||
int resolvedPid, /* Resolved process id. */
|
||||
int options, /* Options passed to Tcl_WaitPid. */
|
||||
int *codePtr, /* If non-NULL, will receive either:
|
||||
* - 0 for normal exit.
|
||||
* - errno in case of error.
|
||||
* - non-zero exit code for abormal exit.
|
||||
* - signal number if killed or suspended.
|
||||
* - Tcl_WaitPid status in all other cases.
|
||||
*/
|
||||
Tcl_Obj **msgObjPtr, /* If non-NULL, will receive error message. */
|
||||
Tcl_Obj **errorObjPtr) /* If non-NULL, will receive error code. */
|
||||
{
|
||||
int waitStatus;
|
||||
Tcl_Obj *errorStrings[5];
|
||||
const char *msg;
|
||||
|
||||
pid = Tcl_WaitPid(pid, &waitStatus, options);
|
||||
if (pid == 0) {
|
||||
/*
|
||||
* No change.
|
||||
*/
|
||||
|
||||
return TCL_PROCESS_UNCHANGED;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get process status.
|
||||
*/
|
||||
|
||||
if (pid == (Tcl_Pid) -1) {
|
||||
/*
|
||||
* POSIX errName msg
|
||||
*/
|
||||
|
||||
msg = Tcl_ErrnoMsg(errno);
|
||||
if (errno == ECHILD) {
|
||||
/*
|
||||
* This changeup in message suggested by Mark Diekhans to
|
||||
* remind people that ECHILD errors can occur on some
|
||||
* systems if SIGCHLD isn't in its default state.
|
||||
*/
|
||||
|
||||
msg = "child process lost (is SIGCHLD ignored or trapped?)";
|
||||
}
|
||||
if (codePtr) *codePtr = errno;
|
||||
if (msgObjPtr) *msgObjPtr = Tcl_ObjPrintf(
|
||||
"error waiting for process to exit: %s", msg);
|
||||
if (errorObjPtr) {
|
||||
errorStrings[0] = Tcl_NewStringObj("POSIX", -1);
|
||||
errorStrings[1] = Tcl_NewStringObj(Tcl_ErrnoId(), -1);
|
||||
errorStrings[2] = Tcl_NewStringObj(msg, -1);
|
||||
*errorObjPtr = Tcl_NewListObj(3, errorStrings);
|
||||
}
|
||||
return TCL_PROCESS_ERROR;
|
||||
} else if (WIFEXITED(waitStatus)) {
|
||||
if (codePtr) *codePtr = WEXITSTATUS(waitStatus);
|
||||
if (!WEXITSTATUS(waitStatus)) {
|
||||
/*
|
||||
* Normal exit.
|
||||
*/
|
||||
|
||||
if (msgObjPtr) *msgObjPtr = NULL;
|
||||
if (errorObjPtr) *errorObjPtr = NULL;
|
||||
} else {
|
||||
/*
|
||||
* CHILDSTATUS pid code
|
||||
*
|
||||
* Child exited with a non-zero exit status.
|
||||
*/
|
||||
|
||||
if (msgObjPtr) *msgObjPtr = Tcl_NewStringObj(
|
||||
"child process exited abnormally", -1);
|
||||
if (errorObjPtr) {
|
||||
errorStrings[0] = Tcl_NewStringObj("CHILDSTATUS", -1);
|
||||
errorStrings[1] = Tcl_NewIntObj(resolvedPid);
|
||||
errorStrings[2] = Tcl_NewIntObj(WEXITSTATUS(waitStatus));
|
||||
*errorObjPtr = Tcl_NewListObj(3, errorStrings);
|
||||
}
|
||||
}
|
||||
return TCL_PROCESS_EXITED;
|
||||
} else if (WIFSIGNALED(waitStatus)) {
|
||||
/*
|
||||
* CHILDKILLED pid sigName msg
|
||||
*
|
||||
* Child killed because of a signal.
|
||||
*/
|
||||
|
||||
msg = Tcl_SignalMsg(WTERMSIG(waitStatus));
|
||||
if (codePtr) *codePtr = WTERMSIG(waitStatus);
|
||||
if (msgObjPtr) *msgObjPtr = Tcl_ObjPrintf(
|
||||
"child killed: %s", msg);
|
||||
if (errorObjPtr) {
|
||||
errorStrings[0] = Tcl_NewStringObj("CHILDKILLED", -1);
|
||||
errorStrings[1] = Tcl_NewIntObj(resolvedPid);
|
||||
errorStrings[2] = Tcl_NewStringObj(Tcl_SignalId(WTERMSIG(waitStatus)), -1);
|
||||
errorStrings[3] = Tcl_NewStringObj(msg, -1);
|
||||
*errorObjPtr = Tcl_NewListObj(4, errorStrings);
|
||||
}
|
||||
return TCL_PROCESS_SIGNALED;
|
||||
} else if (WIFSTOPPED(waitStatus)) {
|
||||
/*
|
||||
* CHILDSUSP pid sigName msg
|
||||
*
|
||||
* Child suspended because of a signal.
|
||||
*/
|
||||
|
||||
msg = Tcl_SignalMsg(WSTOPSIG(waitStatus));
|
||||
if (codePtr) *codePtr = WSTOPSIG(waitStatus);
|
||||
if (msgObjPtr) *msgObjPtr = Tcl_ObjPrintf(
|
||||
"child suspended: %s", msg);
|
||||
if (errorObjPtr) {
|
||||
errorStrings[0] = Tcl_NewStringObj("CHILDSUSP", -1);
|
||||
errorStrings[1] = Tcl_NewIntObj(resolvedPid);
|
||||
errorStrings[2] = Tcl_NewStringObj(Tcl_SignalId(WSTOPSIG(waitStatus)), -1);
|
||||
errorStrings[3] = Tcl_NewStringObj(msg, -1);
|
||||
*errorObjPtr = Tcl_NewListObj(4, errorStrings);
|
||||
}
|
||||
return TCL_PROCESS_STOPPED;
|
||||
} else {
|
||||
/*
|
||||
* TCL OPERATION EXEC ODDWAITRESULT
|
||||
*
|
||||
* Child wait status didn't make sense.
|
||||
*/
|
||||
|
||||
if (codePtr) *codePtr = waitStatus;
|
||||
if (msgObjPtr) *msgObjPtr = Tcl_NewStringObj(
|
||||
"child wait status didn't make sense\n", -1);
|
||||
if (errorObjPtr) {
|
||||
errorStrings[0] = Tcl_NewStringObj("TCL", -1);
|
||||
errorStrings[1] = Tcl_NewStringObj("OPERATION", -1);
|
||||
errorStrings[2] = Tcl_NewStringObj("EXEC", -1);
|
||||
errorStrings[3] = Tcl_NewStringObj("ODDWAITRESULT", -1);
|
||||
errorStrings[4] = Tcl_NewIntObj(resolvedPid);
|
||||
*errorObjPtr = Tcl_NewListObj(5, errorStrings);
|
||||
}
|
||||
return TCL_PROCESS_UNKNOWN_STATUS;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* BuildProcessStatusObj --
|
||||
*
|
||||
* Build a list object with process status. The first element is always
|
||||
* a standard Tcl return value, which can be either TCL_OK or TCL_ERROR.
|
||||
* In the latter case, the second element is the error message and the
|
||||
* third element is a Tcl error code (see tclvars).
|
||||
*
|
||||
* Results:
|
||||
* A list object.
|
||||
*
|
||||
* Side effects:
|
||||
* Tcl_Objs are created.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
Tcl_Obj *
|
||||
BuildProcessStatusObj(
|
||||
ProcessInfo *info)
|
||||
{
|
||||
Tcl_Obj *resultObjs[3];
|
||||
|
||||
if (info->status == TCL_PROCESS_UNCHANGED) {
|
||||
/*
|
||||
* Process still running, return empty obj.
|
||||
*/
|
||||
|
||||
return Tcl_NewObj();
|
||||
}
|
||||
if (info->status == TCL_PROCESS_EXITED && info->code == 0) {
|
||||
/*
|
||||
* Normal exit, return TCL_OK.
|
||||
*/
|
||||
|
||||
return Tcl_NewIntObj(TCL_OK);
|
||||
}
|
||||
|
||||
/*
|
||||
* Abnormal exit, return {TCL_ERROR msg error}
|
||||
*/
|
||||
|
||||
resultObjs[0] = Tcl_NewIntObj(TCL_ERROR);
|
||||
resultObjs[1] = info->msg;
|
||||
resultObjs[2] = info->error;
|
||||
return Tcl_NewListObj(3, resultObjs);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
*
|
||||
* ProcessListObjCmd --
|
||||
*
|
||||
* This function implements the 'tcl::process list' Tcl command.
|
||||
* Refer to the user documentation for details on what it does.
|
||||
*
|
||||
* Results:
|
||||
* Returns a standard Tcl result.
|
||||
*
|
||||
* Side effects:
|
||||
* Access to the internal structures is protected by infoTablesMutex.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static int
|
||||
ProcessListObjCmd(
|
||||
ClientData clientData, /* Not used. */
|
||||
Tcl_Interp *interp, /* Current interpreter. */
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
Tcl_Obj *list;
|
||||
Tcl_HashEntry *entry;
|
||||
Tcl_HashSearch search;
|
||||
ProcessInfo *info;
|
||||
|
||||
if (objc != 1) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the list of all chid process ids.
|
||||
*/
|
||||
|
||||
list = Tcl_NewListObj(0, NULL);
|
||||
Tcl_MutexLock(&infoTablesMutex);
|
||||
for (entry = Tcl_FirstHashEntry(&infoTablePerResolvedPid, &search);
|
||||
entry != NULL; entry = Tcl_NextHashEntry(&search)) {
|
||||
info = (ProcessInfo *) Tcl_GetHashValue(entry);
|
||||
Tcl_ListObjAppendElement(interp, list,
|
||||
Tcl_NewIntObj(info->resolvedPid));
|
||||
}
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
Tcl_SetObjResult(interp, list);
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
*
|
||||
* ProcessStatusObjCmd --
|
||||
*
|
||||
* This function implements the 'tcl::process status' Tcl command.
|
||||
* Refer to the user documentation for details on what it does.
|
||||
*
|
||||
* Results:
|
||||
* Returns a standard Tcl result.
|
||||
*
|
||||
* Side effects:
|
||||
* Access to the internal structures is protected by infoTablesMutex.
|
||||
* Calls RefreshProcessInfo, which can block if -wait switch is given.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static int
|
||||
ProcessStatusObjCmd(
|
||||
ClientData clientData, /* Not used. */
|
||||
Tcl_Interp *interp, /* Current interpreter. */
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
Tcl_Obj *dict;
|
||||
int index, options = WNOHANG;
|
||||
Tcl_HashEntry *entry;
|
||||
Tcl_HashSearch search;
|
||||
ProcessInfo *info;
|
||||
int numPids;
|
||||
Tcl_Obj **pidObjs;
|
||||
int result;
|
||||
int i;
|
||||
int pid;
|
||||
Tcl_Obj *const *savedobjv = objv;
|
||||
static const char *const switches[] = {
|
||||
"-wait", "--", NULL
|
||||
};
|
||||
enum switches {
|
||||
STATUS_WAIT, STATUS_LAST
|
||||
};
|
||||
|
||||
while (objc > 1) {
|
||||
if (TclGetString(objv[1])[0] != '-') {
|
||||
break;
|
||||
}
|
||||
if (Tcl_GetIndexFromObj(interp, objv[1], switches, "switches", 0,
|
||||
&index) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
++objv; --objc;
|
||||
if (STATUS_WAIT == (enum switches) index) {
|
||||
options = 0;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (objc != 1 && objc != 2) {
|
||||
Tcl_WrongNumArgs(interp, 1, savedobjv, "?switches? ?pids?");
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
if (objc == 1) {
|
||||
/*
|
||||
* Return a dict with all child process statuses.
|
||||
*/
|
||||
|
||||
dict = Tcl_NewDictObj();
|
||||
Tcl_MutexLock(&infoTablesMutex);
|
||||
for (entry = Tcl_FirstHashEntry(&infoTablePerResolvedPid, &search);
|
||||
entry != NULL; entry = Tcl_NextHashEntry(&search)) {
|
||||
info = (ProcessInfo *) Tcl_GetHashValue(entry);
|
||||
RefreshProcessInfo(info, options);
|
||||
|
||||
if (info->purge && autopurge) {
|
||||
/*
|
||||
* Purge entry.
|
||||
*/
|
||||
|
||||
Tcl_DeleteHashEntry(entry);
|
||||
entry = Tcl_FindHashEntry(&infoTablePerPid, info->pid);
|
||||
Tcl_DeleteHashEntry(entry);
|
||||
FreeProcessInfo(info);
|
||||
} else {
|
||||
/*
|
||||
* Add to result.
|
||||
*/
|
||||
|
||||
Tcl_DictObjPut(interp, dict, Tcl_NewIntObj(info->resolvedPid),
|
||||
BuildProcessStatusObj(info));
|
||||
}
|
||||
}
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
} else {
|
||||
/*
|
||||
* Only return statuses of provided processes.
|
||||
*/
|
||||
|
||||
result = Tcl_ListObjGetElements(interp, objv[1], &numPids, &pidObjs);
|
||||
if (result != TCL_OK) {
|
||||
return result;
|
||||
}
|
||||
dict = Tcl_NewDictObj();
|
||||
Tcl_MutexLock(&infoTablesMutex);
|
||||
for (i = 0; i < numPids; i++) {
|
||||
result = Tcl_GetIntFromObj(interp, pidObjs[i], (int *) &pid);
|
||||
if (result != TCL_OK) {
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
Tcl_DecrRefCount(dict);
|
||||
return result;
|
||||
}
|
||||
|
||||
entry = Tcl_FindHashEntry(&infoTablePerResolvedPid, INT2PTR(pid));
|
||||
if (!entry) {
|
||||
/*
|
||||
* Skip unknown process.
|
||||
*/
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
info = (ProcessInfo *) Tcl_GetHashValue(entry);
|
||||
RefreshProcessInfo(info, options);
|
||||
|
||||
if (info->purge && autopurge) {
|
||||
/*
|
||||
* Purge entry.
|
||||
*/
|
||||
|
||||
Tcl_DeleteHashEntry(entry);
|
||||
entry = Tcl_FindHashEntry(&infoTablePerPid, info->pid);
|
||||
Tcl_DeleteHashEntry(entry);
|
||||
FreeProcessInfo(info);
|
||||
} else {
|
||||
/*
|
||||
* Add to result.
|
||||
*/
|
||||
|
||||
Tcl_DictObjPut(interp, dict, Tcl_NewIntObj(info->resolvedPid),
|
||||
BuildProcessStatusObj(info));
|
||||
}
|
||||
}
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
}
|
||||
Tcl_SetObjResult(interp, dict);
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
*
|
||||
* ProcessPurgeObjCmd --
|
||||
*
|
||||
* This function implements the 'tcl::process purge' Tcl command.
|
||||
* Refer to the user documentation for details on what it does.
|
||||
*
|
||||
* Results:
|
||||
* Returns a standard Tcl result.
|
||||
*
|
||||
* Side effects:
|
||||
* Frees all ProcessInfo structures with their purge flag set.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static int
|
||||
ProcessPurgeObjCmd(
|
||||
ClientData clientData, /* Not used. */
|
||||
Tcl_Interp *interp, /* Current interpreter. */
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
Tcl_HashEntry *entry;
|
||||
Tcl_HashSearch search;
|
||||
ProcessInfo *info;
|
||||
int numPids;
|
||||
Tcl_Obj **pidObjs;
|
||||
int result;
|
||||
int i;
|
||||
int pid;
|
||||
|
||||
if (objc != 1 && objc != 2) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "?pids?");
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* First reap detached procs so that their purge flag is up-to-date.
|
||||
*/
|
||||
|
||||
Tcl_ReapDetachedProcs();
|
||||
|
||||
if (objc == 1) {
|
||||
/*
|
||||
* Purge all terminated processes.
|
||||
*/
|
||||
|
||||
Tcl_MutexLock(&infoTablesMutex);
|
||||
for (entry = Tcl_FirstHashEntry(&infoTablePerResolvedPid, &search);
|
||||
entry != NULL; entry = Tcl_NextHashEntry(&search)) {
|
||||
info = (ProcessInfo *) Tcl_GetHashValue(entry);
|
||||
if (info->purge) {
|
||||
Tcl_DeleteHashEntry(entry);
|
||||
entry = Tcl_FindHashEntry(&infoTablePerPid, info->pid);
|
||||
Tcl_DeleteHashEntry(entry);
|
||||
FreeProcessInfo(info);
|
||||
}
|
||||
}
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
} else {
|
||||
/*
|
||||
* Purge only provided processes.
|
||||
*/
|
||||
|
||||
result = Tcl_ListObjGetElements(interp, objv[1], &numPids, &pidObjs);
|
||||
if (result != TCL_OK) {
|
||||
return result;
|
||||
}
|
||||
Tcl_MutexLock(&infoTablesMutex);
|
||||
for (i = 0; i < numPids; i++) {
|
||||
result = Tcl_GetIntFromObj(interp, pidObjs[i], (int *) &pid);
|
||||
if (result != TCL_OK) {
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
return result;
|
||||
}
|
||||
|
||||
entry = Tcl_FindHashEntry(&infoTablePerResolvedPid, INT2PTR(pid));
|
||||
if (!entry) {
|
||||
/*
|
||||
* Skip unknown process.
|
||||
*/
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
info = (ProcessInfo *) Tcl_GetHashValue(entry);
|
||||
if (info->purge) {
|
||||
Tcl_DeleteHashEntry(entry);
|
||||
entry = Tcl_FindHashEntry(&infoTablePerPid, info->pid);
|
||||
Tcl_DeleteHashEntry(entry);
|
||||
FreeProcessInfo(info);
|
||||
}
|
||||
}
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
}
|
||||
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
*
|
||||
* ProcessAutopurgeObjCmd --
|
||||
*
|
||||
* This function implements the 'tcl::process autopurge' Tcl command.
|
||||
* Refer to the user documentation for details on what it does.
|
||||
*
|
||||
* Results:
|
||||
* Returns a standard Tcl result.
|
||||
*
|
||||
* Side effects:
|
||||
* Alters detached process handling by Tcl_ReapDetachedProcs().
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static int
|
||||
ProcessAutopurgeObjCmd(
|
||||
ClientData clientData, /* Not used. */
|
||||
Tcl_Interp *interp, /* Current interpreter. */
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
if (objc != 1 && objc != 2) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "?flag?");
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
if (objc == 2) {
|
||||
/*
|
||||
* Set given value.
|
||||
*/
|
||||
|
||||
int flag;
|
||||
int result = Tcl_GetBooleanFromObj(interp, objv[1], &flag);
|
||||
if (result != TCL_OK) {
|
||||
return result;
|
||||
}
|
||||
|
||||
autopurge = !!flag;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return current value.
|
||||
*/
|
||||
|
||||
Tcl_SetObjResult(interp, Tcl_NewBooleanObj(autopurge));
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclInitProcessCmd --
|
||||
*
|
||||
* This procedure creates the "tcl::process" Tcl command. See the user
|
||||
* documentation for details on what it does.
|
||||
*
|
||||
* Results:
|
||||
* A standard Tcl result.
|
||||
*
|
||||
* Side effects:
|
||||
* See the user documentation.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
Tcl_Command
|
||||
TclInitProcessCmd(
|
||||
Tcl_Interp *interp) /* Current interpreter. */
|
||||
{
|
||||
static const EnsembleImplMap processImplMap[] = {
|
||||
{"list", ProcessListObjCmd, TclCompileBasic0ArgCmd, NULL, NULL, 1},
|
||||
{"status", ProcessStatusObjCmd, TclCompileBasicMin0ArgCmd, NULL, NULL, 1},
|
||||
{"purge", ProcessPurgeObjCmd, TclCompileBasic0Or1ArgCmd, NULL, NULL, 1},
|
||||
{"autopurge", ProcessAutopurgeObjCmd, TclCompileBasic0Or1ArgCmd, NULL, NULL, 1},
|
||||
{NULL, NULL, NULL, NULL, NULL, 0}
|
||||
};
|
||||
Tcl_Command processCmd;
|
||||
|
||||
if (infoTablesInitialized == 0) {
|
||||
Tcl_MutexLock(&infoTablesMutex);
|
||||
if (infoTablesInitialized == 0) {
|
||||
Tcl_InitHashTable(&infoTablePerPid, TCL_ONE_WORD_KEYS);
|
||||
Tcl_InitHashTable(&infoTablePerResolvedPid, TCL_ONE_WORD_KEYS);
|
||||
infoTablesInitialized = 1;
|
||||
}
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
}
|
||||
|
||||
processCmd = TclMakeEnsemble(interp, "::tcl::process", processImplMap);
|
||||
Tcl_Export(interp, Tcl_FindNamespace(interp, "::tcl", NULL, 0),
|
||||
"process", 0);
|
||||
return processCmd;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclProcessCreated --
|
||||
*
|
||||
* Called when a child process has been created by Tcl.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* Internal structures are updated with a new ProcessInfo.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
TclProcessCreated(
|
||||
Tcl_Pid pid) /* Process id. */
|
||||
{
|
||||
int resolvedPid;
|
||||
Tcl_HashEntry *entry, *entry2;
|
||||
int isNew;
|
||||
ProcessInfo *info;
|
||||
|
||||
/*
|
||||
* Get resolved pid first.
|
||||
*/
|
||||
|
||||
resolvedPid = TclpGetPid(pid);
|
||||
|
||||
Tcl_MutexLock(&infoTablesMutex);
|
||||
|
||||
/*
|
||||
* Create entry in pid table.
|
||||
*/
|
||||
|
||||
entry = Tcl_CreateHashEntry(&infoTablePerPid, pid, &isNew);
|
||||
if (!isNew) {
|
||||
/*
|
||||
* Pid was reused, free old info and reuse structure.
|
||||
*/
|
||||
|
||||
info = (ProcessInfo *) Tcl_GetHashValue(entry);
|
||||
entry2 = Tcl_FindHashEntry(&infoTablePerResolvedPid,
|
||||
INT2PTR(resolvedPid));
|
||||
if (entry2) Tcl_DeleteHashEntry(entry2);
|
||||
FreeProcessInfo(info);
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate and initialize info structure.
|
||||
*/
|
||||
|
||||
info = (ProcessInfo *) ckalloc(sizeof(ProcessInfo));
|
||||
InitProcessInfo(info, pid, resolvedPid);
|
||||
|
||||
/*
|
||||
* Add entry to tables.
|
||||
*/
|
||||
|
||||
Tcl_SetHashValue(entry, info);
|
||||
entry = Tcl_CreateHashEntry(&infoTablePerResolvedPid, INT2PTR(resolvedPid),
|
||||
&isNew);
|
||||
Tcl_SetHashValue(entry, info);
|
||||
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclProcessWait --
|
||||
*
|
||||
* Wait for process status to change.
|
||||
*
|
||||
* Results:
|
||||
* TclProcessWaitStatus enum value.
|
||||
*
|
||||
* Side effects:
|
||||
* Completed process info structures are purged immediately (autopurge on)
|
||||
* or eventually (autopurge off).
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
TclProcessWaitStatus
|
||||
TclProcessWait(
|
||||
Tcl_Pid pid, /* Process id. */
|
||||
int options, /* Options passed to WaitProcessStatus. */
|
||||
int *codePtr, /* If non-NULL, will receive either:
|
||||
* - 0 for normal exit.
|
||||
* - errno in case of error.
|
||||
* - non-zero exit code for abormal exit.
|
||||
* - signal number if killed or suspended.
|
||||
* - Tcl_WaitPid status in all other cases.
|
||||
*/
|
||||
Tcl_Obj **msgObjPtr, /* If non-NULL, will receive error message. */
|
||||
Tcl_Obj **errorObjPtr) /* If non-NULL, will receive error code. */
|
||||
{
|
||||
Tcl_HashEntry *entry;
|
||||
ProcessInfo *info;
|
||||
TclProcessWaitStatus result;
|
||||
|
||||
/*
|
||||
* First search for pid in table.
|
||||
*/
|
||||
|
||||
Tcl_MutexLock(&infoTablesMutex);
|
||||
entry = Tcl_FindHashEntry(&infoTablePerPid, pid);
|
||||
if (!entry) {
|
||||
/*
|
||||
* Unknown process, just call WaitProcessStatus and return.
|
||||
*/
|
||||
|
||||
result = WaitProcessStatus(pid, TclpGetPid(pid), options, codePtr,
|
||||
msgObjPtr, errorObjPtr);
|
||||
if (msgObjPtr && *msgObjPtr) Tcl_IncrRefCount(*msgObjPtr);
|
||||
if (errorObjPtr && *errorObjPtr) Tcl_IncrRefCount(*errorObjPtr);
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
return result;
|
||||
}
|
||||
|
||||
info = (ProcessInfo *) Tcl_GetHashValue(entry);
|
||||
if (info->purge) {
|
||||
/*
|
||||
* Process has completed but TclProcessWait has already been called,
|
||||
* so report no change.
|
||||
*/
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
|
||||
return TCL_PROCESS_UNCHANGED;
|
||||
}
|
||||
|
||||
RefreshProcessInfo(info, options);
|
||||
if (info->status == TCL_PROCESS_UNCHANGED) {
|
||||
/*
|
||||
* No change, stop there.
|
||||
*/
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
|
||||
return TCL_PROCESS_UNCHANGED;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set return values.
|
||||
*/
|
||||
|
||||
result = info->status;
|
||||
if (codePtr) *codePtr = info->code;
|
||||
if (msgObjPtr) *msgObjPtr = info->msg;
|
||||
if (errorObjPtr) *errorObjPtr = info->error;
|
||||
if (msgObjPtr && *msgObjPtr) Tcl_IncrRefCount(*msgObjPtr);
|
||||
if (errorObjPtr && *errorObjPtr) Tcl_IncrRefCount(*errorObjPtr);
|
||||
|
||||
if (autopurge) {
|
||||
/*
|
||||
* Purge now.
|
||||
*/
|
||||
|
||||
Tcl_DeleteHashEntry(entry);
|
||||
entry = Tcl_FindHashEntry(&infoTablePerResolvedPid,
|
||||
INT2PTR(info->resolvedPid));
|
||||
Tcl_DeleteHashEntry(entry);
|
||||
FreeProcessInfo(info);
|
||||
} else {
|
||||
/*
|
||||
* Eventually purge. Subsequent calls will return
|
||||
* TCL_PROCESS_UNCHANGED.
|
||||
*/
|
||||
|
||||
info->purge = 1;
|
||||
}
|
||||
Tcl_MutexUnlock(&infoTablesMutex);
|
||||
return result;
|
||||
}
|
||||
@@ -651,23 +651,6 @@ Tcl_AppendResultVA(
|
||||
}
|
||||
Tcl_AppendStringsToObjVA(objPtr, argList);
|
||||
Tcl_SetObjResult(interp, objPtr);
|
||||
|
||||
/*
|
||||
* Strictly we should call Tcl_GetStringResult(interp) here to make sure
|
||||
* that interp->result is correct according to the old contract, but that
|
||||
* makes the performance of much code (e.g. in Tk) absolutely awful. So we
|
||||
* leave it out; code that really wants interp->result can just insert the
|
||||
* calls to Tcl_GetStringResult() itself. [Patch 1041072 discussion]
|
||||
*/
|
||||
|
||||
#ifdef USE_INTERP_RESULT
|
||||
/*
|
||||
* Ensure that the interp->result is legal so old Tcl 7.* code still
|
||||
* works. There's still embarrasingly much of it about...
|
||||
*/
|
||||
|
||||
(void) Tcl_GetStringResult(interp);
|
||||
#endif /* USE_INTERP_RESULT */
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+18
-5
@@ -926,9 +926,9 @@ Tcl_ScanObjCmd(
|
||||
}
|
||||
if (flags & SCAN_LONGER) {
|
||||
if (Tcl_GetWideIntFromObj(NULL, objPtr, &wideValue) != TCL_OK) {
|
||||
wideValue = ~(Tcl_WideUInt)0 >> 1; /* WIDE_MAX */
|
||||
wideValue = LLONG_MAX;
|
||||
if (TclGetString(objPtr)[0] == '-') {
|
||||
wideValue++; /* WIDE_MAX + 1 = WIDE_MIN */
|
||||
wideValue = LLONG_MIN;
|
||||
}
|
||||
}
|
||||
if ((flags & SCAN_UNSIGNED) && (wideValue < 0)) {
|
||||
@@ -941,11 +941,24 @@ Tcl_ScanObjCmd(
|
||||
} else if (flags & SCAN_BIG) {
|
||||
if (flags & SCAN_UNSIGNED) {
|
||||
mp_int big;
|
||||
if ((Tcl_GetBignumFromObj(interp, objPtr, &big) != TCL_OK)
|
||||
|| (mp_cmp_d(&big, 0) == MP_LT)) {
|
||||
int code = Tcl_GetBignumFromObj(interp, objPtr, &big);
|
||||
|
||||
if (code == TCL_OK) {
|
||||
if (mp_isneg(&big)) {
|
||||
code = TCL_ERROR;
|
||||
}
|
||||
mp_clear(&big);
|
||||
}
|
||||
|
||||
if (code == TCL_ERROR) {
|
||||
if (objs != NULL) {
|
||||
ckfree(objs);
|
||||
}
|
||||
Tcl_DecrRefCount(objPtr);
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"unsigned bignum scans are invalid", -1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "FORMAT", "BADUNSIGNED",NULL);
|
||||
Tcl_SetErrorCode(interp, "TCL", "FORMAT",
|
||||
"BADUNSIGNED",NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -4697,7 +4697,7 @@ TclCeil(
|
||||
mp_int b;
|
||||
|
||||
mp_init(&b);
|
||||
if (mp_cmp_d(a, 0) == MP_LT) {
|
||||
if (mp_isneg(a)) {
|
||||
mp_neg(a, &b);
|
||||
r = -TclFloor(&b);
|
||||
} else {
|
||||
@@ -4754,7 +4754,7 @@ TclFloor(
|
||||
mp_int b;
|
||||
|
||||
mp_init(&b);
|
||||
if (mp_cmp_d(a, 0) == MP_LT) {
|
||||
if (mp_isneg(a)) {
|
||||
mp_neg(a, &b);
|
||||
r = -TclCeil(&b);
|
||||
} else {
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "tommath.h"
|
||||
#include "tclStringRep.h"
|
||||
|
||||
#include "assert.h"
|
||||
/*
|
||||
* Prototypes for functions defined later in this file:
|
||||
*/
|
||||
@@ -1971,6 +1972,7 @@ Tcl_AppendFormatToObj(
|
||||
if (cmpResult == MP_EQ) gotHash = 0;
|
||||
if (ch == 'u') {
|
||||
if (isNegative) {
|
||||
mp_clear(&big);
|
||||
msg = "unsigned bignum format is invalid";
|
||||
errCode = "BADUNSIGNED";
|
||||
goto errorMsg;
|
||||
@@ -3204,6 +3206,8 @@ TclStringCat(
|
||||
dst += more;
|
||||
}
|
||||
}
|
||||
/* Must NUL-terminate! */
|
||||
*dst = '\0';
|
||||
}
|
||||
return objResultPtr;
|
||||
|
||||
@@ -3528,6 +3532,151 @@ TclStringReverse(
|
||||
return objPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
*---------------------------------------------------------------------------
|
||||
*
|
||||
* TclStringReplace --
|
||||
*
|
||||
* Implements the inner engine of the [string replace] command.
|
||||
*
|
||||
* The result is a concatenation of a prefix from objPtr, characters
|
||||
* 0 through first-1, the insertPtr string value, and a suffix from
|
||||
* objPtr, characters from first + count to the end. The effect is
|
||||
* as if the inner substring of characters first through first+count-1
|
||||
* are removed and replaced with insertPtr.
|
||||
* If insertPtr is NULL, it is treated as an empty string.
|
||||
* When passed the flag TCL_STRING_IN_PLACE, this routine will try
|
||||
* to do the work within objPtr, so long as no sharing forbids it.
|
||||
* Without that request, or as needed, a new Tcl value will be allocated
|
||||
* to be the result.
|
||||
*
|
||||
* Results:
|
||||
* A Tcl value that is the result of the substring replacement.
|
||||
* May return NULL in case of an error. When NULL is returned and
|
||||
* interp is non-NULL, error information is left in interp
|
||||
*
|
||||
*---------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
Tcl_Obj *
|
||||
TclStringReplace(
|
||||
Tcl_Interp *interp, /* For error reporting, may be NULL */
|
||||
Tcl_Obj *objPtr, /* String to act upon */
|
||||
int first, /* First index to replace */
|
||||
int count, /* How many chars to replace */
|
||||
Tcl_Obj *insertPtr, /* Replacement string, may be NULL */
|
||||
int flags) /* TCL_STRING_IN_PLACE => attempt in-place */
|
||||
{
|
||||
int inPlace = flags & TCL_STRING_IN_PLACE;
|
||||
Tcl_Obj *result;
|
||||
|
||||
/* Caller is expected to pass sensible arguments */
|
||||
assert ( count >= 0 ) ;
|
||||
assert ( first >= 0 ) ;
|
||||
|
||||
/* Replace nothing with nothing */
|
||||
if ((insertPtr == NULL) && (count == 0)) {
|
||||
if (inPlace) {
|
||||
return objPtr;
|
||||
} else {
|
||||
return Tcl_DuplicateObj(objPtr);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The caller very likely had to call Tcl_GetCharLength() or similar
|
||||
* to be able to process index values. This means it is like that
|
||||
* objPtr is either a proper "bytearray" or a "string" or else it has
|
||||
* a known and short string rep.
|
||||
*/
|
||||
|
||||
if (TclIsPureByteArray(objPtr)) {
|
||||
int numBytes;
|
||||
unsigned char *bytes = Tcl_GetByteArrayFromObj(objPtr, &numBytes);
|
||||
|
||||
if (insertPtr == NULL) {
|
||||
/* Replace something with nothing. */
|
||||
|
||||
assert ( first <= numBytes ) ;
|
||||
assert ( count <= numBytes ) ;
|
||||
assert ( first + count <= numBytes ) ;
|
||||
|
||||
result = Tcl_NewByteArrayObj(NULL, numBytes - count);/* PANIC? */
|
||||
TclAppendBytesToByteArray(result, bytes, first);
|
||||
TclAppendBytesToByteArray(result, bytes + first + count,
|
||||
numBytes - count - first);
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Replace everything */
|
||||
if ((first == 0) && (count == numBytes)) {
|
||||
return insertPtr;
|
||||
}
|
||||
|
||||
if (TclIsPureByteArray(insertPtr)) {
|
||||
int newBytes;
|
||||
unsigned char *iBytes
|
||||
= Tcl_GetByteArrayFromObj(insertPtr, &newBytes);
|
||||
|
||||
if (count == newBytes && inPlace && !Tcl_IsShared(objPtr)) {
|
||||
/*
|
||||
* Removal count and replacement count are equal.
|
||||
* Other conditions permit. Do in-place splice.
|
||||
*/
|
||||
|
||||
memcpy(bytes + first, iBytes, count);
|
||||
Tcl_InvalidateStringRep(objPtr);
|
||||
return objPtr;
|
||||
}
|
||||
|
||||
if (newBytes > INT_MAX - (numBytes - count)) {
|
||||
if (interp) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"max size for a Tcl value (%d bytes) exceeded",
|
||||
INT_MAX));
|
||||
Tcl_SetErrorCode(interp, "TCL", "MEMORY", NULL);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
result = Tcl_NewByteArrayObj(NULL, numBytes - count + newBytes);
|
||||
/* PANIC? */
|
||||
Tcl_SetByteArrayLength(result, 0);
|
||||
TclAppendBytesToByteArray(result, bytes, first);
|
||||
TclAppendBytesToByteArray(result, iBytes, newBytes);
|
||||
TclAppendBytesToByteArray(result, bytes + first + count,
|
||||
numBytes - count - first);
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Flow through to try other approaches below */
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO: Figure out how not to generate a Tcl_UniChar array rep
|
||||
* when it can be determined objPtr->bytes points to a string of
|
||||
* all single-byte characters so we can index it directly.
|
||||
*/
|
||||
|
||||
/* The traditional implementation... */
|
||||
{
|
||||
int numChars;
|
||||
Tcl_UniChar *ustring = Tcl_GetUnicodeFromObj(objPtr, &numChars);
|
||||
|
||||
/* TODO: Is there an in-place option worth pursuing here? */
|
||||
|
||||
result = Tcl_NewUnicodeObj(ustring, first);
|
||||
if (insertPtr) {
|
||||
Tcl_AppendObjToObj(result, insertPtr);
|
||||
}
|
||||
if (first + count < numChars) {
|
||||
Tcl_AppendUnicodeToObj(result, ustring + first + count,
|
||||
numChars - first - count);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*---------------------------------------------------------------------------
|
||||
*
|
||||
|
||||
@@ -86,6 +86,7 @@ typedef struct {
|
||||
#define GET_STRING(objPtr) \
|
||||
((String *) (objPtr)->internalRep.twoPtrValue.ptr1)
|
||||
#define SET_STRING(objPtr, stringPtr) \
|
||||
((objPtr)->internalRep.twoPtrValue.ptr2 = NULL), \
|
||||
((objPtr)->internalRep.twoPtrValue.ptr1 = (void *) (stringPtr))
|
||||
|
||||
/*
|
||||
|
||||
@@ -265,28 +265,6 @@ Tcl_WinTCharToUtf(
|
||||
* signature. Tcl 9 must find a better solution, but that cannot be done
|
||||
* without introducing a binary incompatibility.
|
||||
*/
|
||||
#define Tcl_DbNewLongObj ((Tcl_Obj*(*)(long,const char*,int))dbNewLongObj)
|
||||
static Tcl_Obj *dbNewLongObj(
|
||||
int intValue,
|
||||
const char *file,
|
||||
int line
|
||||
) {
|
||||
#ifdef TCL_MEM_DEBUG
|
||||
register Tcl_Obj *objPtr;
|
||||
|
||||
TclDbNewObj(objPtr, file, line);
|
||||
objPtr->bytes = NULL;
|
||||
|
||||
objPtr->internalRep.wideValue = (long) intValue;
|
||||
objPtr->typePtr = &tclIntType;
|
||||
return objPtr;
|
||||
#else
|
||||
return Tcl_NewIntObj(intValue);
|
||||
#endif
|
||||
}
|
||||
#define Tcl_GetLongFromObj (int(*)(Tcl_Interp*,Tcl_Obj*,long*))Tcl_GetIntFromObj
|
||||
#define Tcl_NewLongObj (Tcl_Obj*(*)(long))Tcl_NewIntObj
|
||||
#define Tcl_SetLongObj (void(*)(Tcl_Obj*,long))Tcl_SetIntObj
|
||||
static int exprInt(Tcl_Interp *interp, const char *expr, int *ptr){
|
||||
long longValue;
|
||||
int result = Tcl_ExprLong(interp, expr, &longValue);
|
||||
@@ -335,10 +313,6 @@ static int uniCharNcasecmp(const Tcl_UniChar *ucs, const Tcl_UniChar *uct, unsig
|
||||
return Tcl_UniCharNcasecmp(ucs, uct, (unsigned long)n);
|
||||
}
|
||||
#define Tcl_UniCharNcasecmp (int(*)(const Tcl_UniChar*,const Tcl_UniChar*,unsigned long))uniCharNcasecmp
|
||||
static int formatInt(char *buffer, int n){
|
||||
return TclFormatInt(buffer, (long)n);
|
||||
}
|
||||
#define TclFormatInt (int(*)(char *, long))formatInt
|
||||
|
||||
#endif /* TCL_WIDE_INT_IS_LONG */
|
||||
|
||||
|
||||
+24
-24
@@ -26,9 +26,14 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* MS Visual C++ doesn't have a 128bit type for words, so fall back to 32bit MPI's (where words are 64bit) */
|
||||
#if defined(_MSC_VER) || defined(__LLP64__)
|
||||
# define MP_32BIT
|
||||
#endif
|
||||
|
||||
/* detect 64-bit mode if possible */
|
||||
#if defined(NEVER) /* 128-bit ints fail in too many places */
|
||||
# if !(defined(MP_32BIT) || defined(MP_16BIT) || defined(MP_8BIT))
|
||||
#if defined(NEVER)
|
||||
# if !(defined(MP_32BIT) || defined(MP_16BIT) || defined(MP_8BIT) || defined(_MSC_VER))
|
||||
# define MP_64BIT
|
||||
# endif
|
||||
#endif
|
||||
@@ -73,12 +78,7 @@ typedef uint32_t mp_word;
|
||||
typedef uint64_t mp_digit;
|
||||
#define MP_DIGIT_DECLARED
|
||||
#endif
|
||||
# if defined(_WIN32)
|
||||
#ifndef MP_WORD_DECLARED
|
||||
typedef unsigned __int128 mp_word;
|
||||
#define MP_WORD_DECLARED
|
||||
#endif
|
||||
# elif defined(__GNUC__)
|
||||
# if defined(__GNUC__)
|
||||
typedef unsigned long mp_word __attribute__((mode(TI)));
|
||||
# else
|
||||
/* it seems you have a problem
|
||||
@@ -124,7 +124,7 @@ typedef mp_digit mp_min_u32;
|
||||
/* use arc4random on platforms that support it */
|
||||
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
|
||||
# define MP_GEN_RANDOM() arc4random()
|
||||
# define MP_GEN_RANDOM_MAX 0xffffffff
|
||||
# define MP_GEN_RANDOM_MAX 0xffffffffu
|
||||
#endif
|
||||
|
||||
/* use rand() as fall-back if there's no better rand function */
|
||||
@@ -181,7 +181,7 @@ MODULE_SCOPE int KARATSUBA_MUL_CUTOFF,
|
||||
#endif
|
||||
|
||||
/* size of comba arrays, should be at least 2 * 2**(BITS_PER_WORD - BITS_PER_DIGIT*2) */
|
||||
#define MP_WARRAY (1 << (((sizeof(mp_word) * CHAR_BIT) - (2 * DIGIT_BIT)) + 1))
|
||||
#define MP_WARRAY (1u << (((sizeof(mp_word) * CHAR_BIT) - (2 * DIGIT_BIT)) + 1))
|
||||
|
||||
/* the infamous mp_int structure */
|
||||
#ifndef MP_INT_DECLARED
|
||||
@@ -271,9 +271,9 @@ int mp_set_int(mp_int *a, unsigned long b);
|
||||
int mp_set_long(mp_int *a, unsigned long b);
|
||||
*/
|
||||
|
||||
/* set a platform dependent unsigned long long value */
|
||||
/* set a platform dependent Tcl_WideUInt value */
|
||||
/*
|
||||
int mp_set_long_long(mp_int *a, unsigned long long b);
|
||||
int mp_set_long_long(mp_int *a, Tcl_WideUInt b);
|
||||
*/
|
||||
|
||||
/* get a 32-bit value */
|
||||
@@ -286,9 +286,9 @@ unsigned long mp_get_int(const mp_int *a);
|
||||
unsigned long mp_get_long(const mp_int *a);
|
||||
*/
|
||||
|
||||
/* get a platform dependent unsigned long long value */
|
||||
/* get a platform dependent Tcl_WideUInt value */
|
||||
/*
|
||||
unsigned long long mp_get_long_long(const mp_int *a);
|
||||
Tcl_WideUInt mp_get_long_long(const mp_int *a);
|
||||
*/
|
||||
|
||||
/* initialize and set a digit */
|
||||
@@ -553,7 +553,7 @@ int mp_sqrt(const mp_int *arg, mp_int *ret);
|
||||
|
||||
/* special sqrt (mod prime) */
|
||||
/*
|
||||
int mp_sqrtmod_prime(const mp_int *arg, const mp_int *prime, mp_int *ret);
|
||||
int mp_sqrtmod_prime(const mp_int *n, const mp_int *prime, mp_int *ret);
|
||||
*/
|
||||
|
||||
/* is number a square? */
|
||||
@@ -573,16 +573,16 @@ int mp_reduce_setup(mp_int *a, const mp_int *b);
|
||||
|
||||
/* Barrett Reduction, computes a (mod b) with a precomputed value c
|
||||
*
|
||||
* Assumes that 0 < a <= b*b, note if 0 > a > -(b*b) then you can merely
|
||||
* compute the reduction as -1 * mp_reduce(mp_abs(a)) [pseudo code].
|
||||
* Assumes that 0 < x <= m*m, note if 0 > x > -(m*m) then you can merely
|
||||
* compute the reduction as -1 * mp_reduce(mp_abs(x)) [pseudo code].
|
||||
*/
|
||||
/*
|
||||
int mp_reduce(mp_int *a, const mp_int *b, const mp_int *c);
|
||||
int mp_reduce(mp_int *x, const mp_int *m, const mp_int *mu);
|
||||
*/
|
||||
|
||||
/* setups the montgomery reduction */
|
||||
/*
|
||||
int mp_montgomery_setup(const mp_int *a, mp_digit *mp);
|
||||
int mp_montgomery_setup(const mp_int *n, mp_digit *rho);
|
||||
*/
|
||||
|
||||
/* computes a = B**n mod b without division or multiplication useful for
|
||||
@@ -594,7 +594,7 @@ int mp_montgomery_calc_normalization(mp_int *a, const mp_int *b);
|
||||
|
||||
/* computes x/R == x (mod N) via Montgomery Reduction */
|
||||
/*
|
||||
int mp_montgomery_reduce(mp_int *a, const mp_int *m, mp_digit mp);
|
||||
int mp_montgomery_reduce(mp_int *x, const mp_int *n, mp_digit rho);
|
||||
*/
|
||||
|
||||
/* returns 1 if a is a valid DR modulus */
|
||||
@@ -607,9 +607,9 @@ int mp_dr_is_modulus(const mp_int *a);
|
||||
void mp_dr_setup(const mp_int *a, mp_digit *d);
|
||||
*/
|
||||
|
||||
/* reduces a modulo b using the Diminished Radix method */
|
||||
/* reduces a modulo n using the Diminished Radix method */
|
||||
/*
|
||||
int mp_dr_reduce(mp_int *a, const mp_int *b, mp_digit mp);
|
||||
int mp_dr_reduce(mp_int *x, const mp_int *n, mp_digit k);
|
||||
*/
|
||||
|
||||
/* returns true if a can be reduced with mp_reduce_2k */
|
||||
@@ -642,9 +642,9 @@ int mp_reduce_2k_setup_l(const mp_int *a, mp_int *d);
|
||||
int mp_reduce_2k_l(mp_int *a, const mp_int *n, const mp_int *d);
|
||||
*/
|
||||
|
||||
/* d = a**b (mod c) */
|
||||
/* Y = G**X (mod P) */
|
||||
/*
|
||||
int mp_exptmod(const mp_int *a, const mp_int *b, const mp_int *c, mp_int *d);
|
||||
int mp_exptmod(const mp_int *G, const mp_int *X, const mp_int *P, mp_int *Y);
|
||||
*/
|
||||
|
||||
/* ---> Primes <--- */
|
||||
|
||||
+52
-1
@@ -191,8 +191,10 @@ Tcl_TraceObjCmd(
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
int optionIndex;
|
||||
#ifndef TCL_REMOVE_OBSOLETE_TRACES
|
||||
const char *name;
|
||||
const char *flagOps, *p;
|
||||
#endif
|
||||
/* Main sub commands to 'trace' */
|
||||
static const char *const traceOptions[] = {
|
||||
"add", "info", "remove",
|
||||
@@ -365,12 +367,14 @@ Tcl_TraceObjCmd(
|
||||
}
|
||||
return TCL_OK;
|
||||
|
||||
#ifndef TCL_REMOVE_OBSOLETE_TRACES
|
||||
badVarOps:
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"bad operations \"%s\": should be one or more of rwua",
|
||||
flagOps));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "TRACE", "BADOPS", NULL);
|
||||
return TCL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -912,9 +916,11 @@ TraceVariableObjCmd(
|
||||
+ 1 + length);
|
||||
|
||||
ctvarPtr->traceCmdInfo.flags = flags;
|
||||
#ifndef TCL_REMOVE_OBSOLETE_TRACES
|
||||
if (objv[0] == NULL) {
|
||||
ctvarPtr->traceCmdInfo.flags |= TCL_TRACE_OLD_STYLE;
|
||||
}
|
||||
#endif
|
||||
ctvarPtr->traceCmdInfo.length = length;
|
||||
flags |= TCL_TRACE_UNSETS | TCL_TRACE_RESULT_OBJECT;
|
||||
memcpy(ctvarPtr->traceCmdInfo.command, command, length+1);
|
||||
@@ -939,7 +945,11 @@ TraceVariableObjCmd(
|
||||
TraceVarInfo *tvarPtr = clientData;
|
||||
|
||||
if ((tvarPtr->length == length)
|
||||
&& ((tvarPtr->flags & ~TCL_TRACE_OLD_STYLE)==flags)
|
||||
&& ((tvarPtr->flags
|
||||
#ifndef TCL_REMOVE_OBSOLETE_TRACES
|
||||
& ~TCL_TRACE_OLD_STYLE
|
||||
#endif
|
||||
)==flags)
|
||||
&& (strncmp(command, tvarPtr->command,
|
||||
(size_t) length) == 0)) {
|
||||
Tcl_UntraceVar2(interp, name, NULL,
|
||||
@@ -2465,6 +2475,47 @@ TclVarTraceExists(
|
||||
return varPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclCheckArrayTraces --
|
||||
*
|
||||
* This function is invoked to when we operate on an array variable,
|
||||
* to allow any array traces to fire.
|
||||
*
|
||||
* Results:
|
||||
* Returns TCL_OK to indicate normal operation. Returns TCL_ERROR if
|
||||
* invocation of a trace function indicated an error. When TCL_ERROR is
|
||||
* returned, then error information is left in interp.
|
||||
*
|
||||
* Side effects:
|
||||
* Almost anything can happen, depending on trace; this function itself
|
||||
* doesn't have any side effects.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int
|
||||
TclCheckArrayTraces(
|
||||
Tcl_Interp *interp,
|
||||
Var *varPtr,
|
||||
Var *arrayPtr,
|
||||
Tcl_Obj *name,
|
||||
int index)
|
||||
{
|
||||
int code = TCL_OK;
|
||||
|
||||
if (varPtr && (varPtr->flags & VAR_TRACED_ARRAY)
|
||||
&& (TclIsVarArray(varPtr) || TclIsVarUndefined(varPtr))) {
|
||||
Interp *iPtr = (Interp *)interp;
|
||||
|
||||
code = TclObjCallVarTraces(iPtr, arrayPtr, varPtr, name, NULL,
|
||||
(TCL_NAMESPACE_ONLY|TCL_GLOBAL_ONLY| TCL_TRACE_ARRAY),
|
||||
/* leaveErrMsg */ 1, index);
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
|
||||
+360
-79
@@ -107,6 +107,8 @@ static Tcl_ThreadDataKey precisionKey;
|
||||
static void ClearHash(Tcl_HashTable *tablePtr);
|
||||
static void FreeProcessGlobalValue(ClientData clientData);
|
||||
static void FreeThreadHash(ClientData clientData);
|
||||
static int GetEndOffsetFromObj(Tcl_Obj *objPtr, int endValue,
|
||||
int *indexPtr);
|
||||
static Tcl_HashTable * GetThreadHash(Tcl_ThreadDataKey *keyPtr);
|
||||
static int SetEndOffsetFromAny(Tcl_Interp *interp,
|
||||
Tcl_Obj *objPtr);
|
||||
@@ -1645,11 +1647,46 @@ Tcl_Backslash(
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclTrimRight --
|
||||
* UtfWellFormedEnd --
|
||||
* Checks the end of utf string is malformed, if yes - wraps bytes
|
||||
* to the given buffer (as well-formed NTS string). The buffer
|
||||
* argument should be initialized by the caller and ready to use.
|
||||
*
|
||||
* Takes two counted strings in the Tcl encoding which must both be null
|
||||
* terminated. Conceptually trims from the right side of the first string
|
||||
* all characters found in the second string.
|
||||
* Results:
|
||||
* The bytes with well-formed end of the string.
|
||||
*
|
||||
* Side effects:
|
||||
* Buffer (DString) may be allocated, so must be released.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static inline const char*
|
||||
UtfWellFormedEnd(
|
||||
Tcl_DString *buffer, /* Buffer used to hold well-formed string. */
|
||||
const char *bytes, /* Pointer to the beginning of the string. */
|
||||
int length) /* Length of the string. */
|
||||
{
|
||||
const char *l = bytes + length;
|
||||
const char *p = Tcl_UtfPrev(l, bytes);
|
||||
|
||||
if (Tcl_UtfCharComplete(p, l - p)) {
|
||||
return bytes;
|
||||
}
|
||||
/*
|
||||
* Malformed utf-8 end, be sure we've NTS to safe compare of end-character,
|
||||
* avoid segfault by access violation out of range.
|
||||
*/
|
||||
Tcl_DStringAppend(buffer, bytes, length);
|
||||
return Tcl_DStringValue(buffer);
|
||||
}
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclTrimRight --
|
||||
* Takes two counted strings in the Tcl encoding. Conceptually
|
||||
* finds the sub string (offset) to trim from the right side of the
|
||||
* first string all characters found in the second string.
|
||||
*
|
||||
* Results:
|
||||
* The number of bytes to be removed from the end of the string.
|
||||
@@ -1660,8 +1697,8 @@ Tcl_Backslash(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int
|
||||
TclTrimRight(
|
||||
static inline int
|
||||
TrimRight(
|
||||
const char *bytes, /* String to be trimmed... */
|
||||
int numBytes, /* ...and its length in bytes */
|
||||
const char *trim, /* String of trim characters... */
|
||||
@@ -1671,18 +1708,6 @@ TclTrimRight(
|
||||
int pInc;
|
||||
Tcl_UniChar ch1 = 0, ch2 = 0;
|
||||
|
||||
if ((bytes[numBytes] != '\0') || (trim[numTrim] != '\0')) {
|
||||
Tcl_Panic("TclTrimRight works only on null-terminated strings");
|
||||
}
|
||||
|
||||
/*
|
||||
* Empty strings -> nothing to do.
|
||||
*/
|
||||
|
||||
if ((numBytes == 0) || (numTrim == 0)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Outer loop: iterate over string to be trimmed.
|
||||
*/
|
||||
@@ -1721,15 +1746,46 @@ TclTrimRight(
|
||||
|
||||
return numBytes - (p - bytes);
|
||||
}
|
||||
|
||||
int
|
||||
TclTrimRight(
|
||||
const char *bytes, /* String to be trimmed... */
|
||||
int numBytes, /* ...and its length in bytes */
|
||||
const char *trim, /* String of trim characters... */
|
||||
int numTrim) /* ...and its length in bytes */
|
||||
{
|
||||
int res;
|
||||
Tcl_DString bytesBuf, trimBuf;
|
||||
|
||||
/* Empty strings -> nothing to do */
|
||||
if ((numBytes == 0) || (numTrim == 0)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Tcl_DStringInit(&bytesBuf);
|
||||
Tcl_DStringInit(&trimBuf);
|
||||
bytes = UtfWellFormedEnd(&bytesBuf, bytes, numBytes);
|
||||
trim = UtfWellFormedEnd(&trimBuf, trim, numTrim);
|
||||
|
||||
res = TrimRight(bytes, numBytes, trim, numTrim);
|
||||
if (res > numBytes) {
|
||||
res = numBytes;
|
||||
}
|
||||
|
||||
Tcl_DStringFree(&bytesBuf);
|
||||
Tcl_DStringFree(&trimBuf);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclTrimLeft --
|
||||
*
|
||||
* Takes two counted strings in the Tcl encoding which must both be null
|
||||
* terminated. Conceptually trims from the left side of the first string
|
||||
* all characters found in the second string.
|
||||
* Takes two counted strings in the Tcl encoding. Conceptually
|
||||
* finds the sub string (offset) to trim from the left side of the
|
||||
* first string all characters found in the second string.
|
||||
*
|
||||
* Results:
|
||||
* The number of bytes to be removed from the start of the string.
|
||||
@@ -1740,8 +1796,8 @@ TclTrimRight(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int
|
||||
TclTrimLeft(
|
||||
static inline int
|
||||
TrimLeft(
|
||||
const char *bytes, /* String to be trimmed... */
|
||||
int numBytes, /* ...and its length in bytes */
|
||||
const char *trim, /* String of trim characters... */
|
||||
@@ -1750,18 +1806,6 @@ TclTrimLeft(
|
||||
const char *p = bytes;
|
||||
Tcl_UniChar ch1 = 0, ch2 = 0;
|
||||
|
||||
if ((bytes[numBytes] != '\0') || (trim[numTrim] != '\0')) {
|
||||
Tcl_Panic("TclTrimLeft works only on null-terminated strings");
|
||||
}
|
||||
|
||||
/*
|
||||
* Empty strings -> nothing to do.
|
||||
*/
|
||||
|
||||
if ((numBytes == 0) || (numTrim == 0)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Outer loop: iterate over string to be trimmed.
|
||||
*/
|
||||
@@ -1796,10 +1840,99 @@ TclTrimLeft(
|
||||
|
||||
p += pInc;
|
||||
numBytes -= pInc;
|
||||
} while (numBytes);
|
||||
} while (numBytes > 0);
|
||||
|
||||
return p - bytes;
|
||||
}
|
||||
|
||||
int
|
||||
TclTrimLeft(
|
||||
const char *bytes, /* String to be trimmed... */
|
||||
int numBytes, /* ...and its length in bytes */
|
||||
const char *trim, /* String of trim characters... */
|
||||
int numTrim) /* ...and its length in bytes */
|
||||
{
|
||||
int res;
|
||||
Tcl_DString bytesBuf, trimBuf;
|
||||
|
||||
/* Empty strings -> nothing to do */
|
||||
if ((numBytes == 0) || (numTrim == 0)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Tcl_DStringInit(&bytesBuf);
|
||||
Tcl_DStringInit(&trimBuf);
|
||||
bytes = UtfWellFormedEnd(&bytesBuf, bytes, numBytes);
|
||||
trim = UtfWellFormedEnd(&trimBuf, trim, numTrim);
|
||||
|
||||
res = TrimLeft(bytes, numBytes, trim, numTrim);
|
||||
if (res > numBytes) {
|
||||
res = numBytes;
|
||||
}
|
||||
|
||||
Tcl_DStringFree(&bytesBuf);
|
||||
Tcl_DStringFree(&trimBuf);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclTrim --
|
||||
* Finds the sub string (offset) to trim from both sides of the
|
||||
* first string all characters found in the second string.
|
||||
*
|
||||
* Results:
|
||||
* The number of bytes to be removed from the start of the string
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int
|
||||
TclTrim(
|
||||
const char *bytes, /* String to be trimmed... */
|
||||
int numBytes, /* ...and its length in bytes */
|
||||
const char *trim, /* String of trim characters... */
|
||||
int numTrim, /* ...and its length in bytes */
|
||||
int *trimRight) /* Offset from the end of the string. */
|
||||
{
|
||||
int trimLeft;
|
||||
Tcl_DString bytesBuf, trimBuf;
|
||||
|
||||
*trimRight = 0;
|
||||
/* Empty strings -> nothing to do */
|
||||
if ((numBytes == 0) || (numTrim == 0)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Tcl_DStringInit(&bytesBuf);
|
||||
Tcl_DStringInit(&trimBuf);
|
||||
bytes = UtfWellFormedEnd(&bytesBuf, bytes, numBytes);
|
||||
trim = UtfWellFormedEnd(&trimBuf, trim, numTrim);
|
||||
|
||||
trimLeft = TrimLeft(bytes, numBytes, trim, numTrim);
|
||||
if (trimLeft > numBytes) {
|
||||
trimLeft = numBytes;
|
||||
}
|
||||
numBytes -= trimLeft;
|
||||
/* have to trim yet (first char was already verified within TrimLeft) */
|
||||
if (numBytes > 1) {
|
||||
bytes += trimLeft;
|
||||
*trimRight = TrimRight(bytes, numBytes, trim, numTrim);
|
||||
if (*trimRight > numBytes) {
|
||||
*trimRight = numBytes;
|
||||
}
|
||||
}
|
||||
|
||||
Tcl_DStringFree(&bytesBuf);
|
||||
Tcl_DStringFree(&trimBuf);
|
||||
|
||||
return trimLeft;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
@@ -1867,30 +2000,20 @@ Tcl_Concat(
|
||||
result = ckalloc((unsigned) (bytesNeeded + argc));
|
||||
|
||||
for (p = result, i = 0; i < argc; i++) {
|
||||
int trim, elemLength;
|
||||
int triml, trimr, elemLength;
|
||||
const char *element;
|
||||
|
||||
element = argv[i];
|
||||
elemLength = strlen(argv[i]);
|
||||
|
||||
/*
|
||||
* Trim away the leading whitespace.
|
||||
*/
|
||||
/* Trim away the leading/trailing whitespace. */
|
||||
triml = TclTrim(element, elemLength, CONCAT_TRIM_SET,
|
||||
CONCAT_WS_SIZE, &trimr);
|
||||
element += triml;
|
||||
elemLength -= triml + trimr;
|
||||
|
||||
trim = TclTrimLeft(element, elemLength, CONCAT_TRIM_SET,
|
||||
CONCAT_WS_SIZE);
|
||||
element += trim;
|
||||
elemLength -= trim;
|
||||
|
||||
/*
|
||||
* Trim away the trailing whitespace. Do not permit trimming to expose
|
||||
* a final backslash character.
|
||||
*/
|
||||
|
||||
trim = TclTrimRight(element, elemLength, CONCAT_TRIM_SET,
|
||||
CONCAT_WS_SIZE);
|
||||
trim -= trim && (element[elemLength - trim - 1] == '\\');
|
||||
elemLength -= trim;
|
||||
/* Do not permit trimming to expose a final backslash character. */
|
||||
elemLength += trimr && (element[elemLength - 1] == '\\');
|
||||
|
||||
/*
|
||||
* If we're left with empty element after trimming, do nothing.
|
||||
@@ -2010,28 +2133,18 @@ Tcl_ConcatObj(
|
||||
Tcl_SetObjLength(resPtr, 0);
|
||||
|
||||
for (i = 0; i < objc; i++) {
|
||||
int trim;
|
||||
int triml, trimr;
|
||||
|
||||
element = TclGetStringFromObj(objv[i], &elemLength);
|
||||
|
||||
/*
|
||||
* Trim away the leading whitespace.
|
||||
*/
|
||||
/* Trim away the leading/trailing whitespace. */
|
||||
triml = TclTrim(element, elemLength, CONCAT_TRIM_SET,
|
||||
CONCAT_WS_SIZE, &trimr);
|
||||
element += triml;
|
||||
elemLength -= triml + trimr;
|
||||
|
||||
trim = TclTrimLeft(element, elemLength, CONCAT_TRIM_SET,
|
||||
CONCAT_WS_SIZE);
|
||||
element += trim;
|
||||
elemLength -= trim;
|
||||
|
||||
/*
|
||||
* Trim away the trailing whitespace. Do not permit trimming to expose
|
||||
* a final backslash character.
|
||||
*/
|
||||
|
||||
trim = TclTrimRight(element, elemLength, CONCAT_TRIM_SET,
|
||||
CONCAT_WS_SIZE);
|
||||
trim -= trim && (element[elemLength - trim - 1] == '\\');
|
||||
elemLength -= trim;
|
||||
/* Do not permit trimming to expose a final backslash character. */
|
||||
elemLength += trimr && (element[elemLength - 1] == '\\');
|
||||
|
||||
/*
|
||||
* If we're left with empty element after trimming, do nothing.
|
||||
@@ -3582,13 +3695,7 @@ TclGetIntForIndex(
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
if (SetEndOffsetFromAny(NULL, objPtr) == TCL_OK) {
|
||||
/*
|
||||
* If the object is already an offset from the end of the list, or can
|
||||
* be converted to one, use it.
|
||||
*/
|
||||
|
||||
*indexPtr = endValue + (int)objPtr->internalRep.wideValue;
|
||||
if (GetEndOffsetFromObj(objPtr, endValue, indexPtr) == TCL_OK) {
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
@@ -3652,6 +3759,41 @@ TclGetIntForIndex(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* GetEndOffsetFromObj --
|
||||
*
|
||||
* Look for a string of the form "end[+-]offset" and convert it to an
|
||||
* internal representation holding the offset.
|
||||
*
|
||||
* Results:
|
||||
* Tcl return code.
|
||||
*
|
||||
* Side effects:
|
||||
* May store a Tcl_ObjType.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static int
|
||||
GetEndOffsetFromObj(
|
||||
Tcl_Obj *objPtr, /* Pointer to the object to parse */
|
||||
int endValue, /* The value to be stored at "indexPtr" if
|
||||
* "objPtr" holds "end". */
|
||||
int *indexPtr) /* Location filled in with an integer
|
||||
* representing an index. */
|
||||
{
|
||||
if (SetEndOffsetFromAny(NULL, objPtr) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/* TODO: Handle overflow cases sensibly */
|
||||
*indexPtr = endValue + (int)objPtr->internalRep.wideValue;
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -3726,6 +3868,8 @@ SetEndOffsetFromAny(
|
||||
}
|
||||
offset = objPtr->internalRep.wideValue;
|
||||
if (bytes[3] == '-') {
|
||||
|
||||
/* TODO: Review overflow concerns here! */
|
||||
offset = -offset;
|
||||
}
|
||||
} else {
|
||||
@@ -3754,6 +3898,143 @@ SetEndOffsetFromAny(
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclIndexEncode --
|
||||
*
|
||||
* Parse objPtr to determine if it is an index value. Two cases
|
||||
* are possible. The value objPtr might be parsed as an absolute
|
||||
* index value in the C signed int range. Note that this includes
|
||||
* index values that are integers as presented and it includes index
|
||||
* arithmetic expressions. The absolute index values that can be
|
||||
* directly meaningful as an index into either a list or a string are
|
||||
* those integer values >= TCL_INDEX_START (0)
|
||||
* and < TCL_INDEX_AFTER (INT_MAX).
|
||||
* The largest string supported in Tcl 8 has bytelength INT_MAX.
|
||||
* This means the largest supported character length is also INT_MAX,
|
||||
* and the index of the last character in a string of length INT_MAX
|
||||
* is INT_MAX-1.
|
||||
*
|
||||
* Any absolute index value parsed outside that range is encoded
|
||||
* using the before and after values passed in by the
|
||||
* caller as the encoding to use for indices that are either
|
||||
* less than or greater than the usable index range. TCL_INDEX_AFTER
|
||||
* is available as a good choice for most callers to use for
|
||||
* after. Likewise, the value TCL_INDEX_BEFORE is good for
|
||||
* most callers to use for before. Other values are possible
|
||||
* when the caller knows it is helpful in producing its own behavior
|
||||
* for indices before and after the indexed item.
|
||||
*
|
||||
* A token can also be parsed as an end-relative index expression.
|
||||
* All end-relative expressions that indicate an index larger
|
||||
* than end (end+2, end--5) point beyond the end of the indexed
|
||||
* collection, and can be encoded as after. The end-relative
|
||||
* expressions that indicate an index less than or equal to end
|
||||
* are encoded relative to the value TCL_INDEX_END (-2). The
|
||||
* index "end" is encoded as -2, down to the index "end-0x7ffffffe"
|
||||
* which is encoded as INT_MIN. Since the largest index into a
|
||||
* string possible in Tcl 8 is 0x7ffffffe, the interpretation of
|
||||
* "end-0x7ffffffe" for that largest string would be 0. Thus,
|
||||
* if the tokens "end-0x7fffffff" or "end+-0x80000000" are parsed,
|
||||
* they can be encoded with the before value.
|
||||
*
|
||||
* These details will require re-examination whenever string and
|
||||
* list length limits are increased, but that will likely also
|
||||
* mean a revised routine capable of returning Tcl_WideInt values.
|
||||
*
|
||||
* Returns:
|
||||
* TCL_OK if parsing succeeded, and TCL_ERROR if it failed.
|
||||
*
|
||||
* Side effects:
|
||||
* When TCL_OK is returned, the encoded index value is written
|
||||
* to *indexPtr.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int
|
||||
TclIndexEncode(
|
||||
Tcl_Interp *interp, /* For error reporting, may be NULL */
|
||||
Tcl_Obj *objPtr, /* Index value to parse */
|
||||
int before, /* Value to return for index before beginning */
|
||||
int after, /* Value to return for index after end */
|
||||
int *indexPtr) /* Where to write the encoded answer, not NULL */
|
||||
{
|
||||
int idx;
|
||||
|
||||
if (TCL_OK == TclGetIntFromObj(NULL, objPtr, &idx)) {
|
||||
/* We parsed a value in the range INT_MIN...INT_MAX */
|
||||
integerEncode:
|
||||
if (idx < TCL_INDEX_START) {
|
||||
/* All negative absolute indices are "before the beginning" */
|
||||
idx = before;
|
||||
} else if (idx == INT_MAX) {
|
||||
/* This index value is always "after the end" */
|
||||
idx = after;
|
||||
}
|
||||
/* usual case, the absolute index value encodes itself */
|
||||
} else if (TCL_OK == GetEndOffsetFromObj(objPtr, 0, &idx)) {
|
||||
/*
|
||||
* We parsed an end+offset index value.
|
||||
* idx holds the offset value in the range INT_MIN...INT_MAX.
|
||||
*/
|
||||
if (idx > 0) {
|
||||
/*
|
||||
* All end+postive or end-negative expressions
|
||||
* always indicate "after the end".
|
||||
*/
|
||||
idx = after;
|
||||
} else if (idx < INT_MIN - TCL_INDEX_END) {
|
||||
/* These indices always indicate "before the beginning */
|
||||
idx = before;
|
||||
} else {
|
||||
/* Encoded end-positive (or end+negative) are offset */
|
||||
idx += TCL_INDEX_END;
|
||||
}
|
||||
|
||||
/* TODO: Consider flag to suppress repeated end-offset parse. */
|
||||
} else if (TCL_OK == TclGetIntForIndexM(interp, objPtr, 0, &idx)) {
|
||||
/*
|
||||
* Only reach this case when the index value is a
|
||||
* constant index arithmetic expression, and idx
|
||||
* holds the result. Treat it the same as if it were
|
||||
* parsed as an absolute integer value.
|
||||
*/
|
||||
goto integerEncode;
|
||||
} else {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
*indexPtr = idx;
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclIndexDecode --
|
||||
*
|
||||
* Decodes a value previously encoded by TclIndexEncode. The argument
|
||||
* endValue indicates what value of "end" should be used in the
|
||||
* decoding.
|
||||
*
|
||||
* Results:
|
||||
* The decoded index value.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int
|
||||
TclIndexDecode(
|
||||
int encoded, /* Value to decode */
|
||||
int endValue) /* Meaning of "end" to use, > TCL_INDEX_END */
|
||||
{
|
||||
if (encoded <= TCL_INDEX_END) {
|
||||
return (encoded - TCL_INDEX_END) + endValue;
|
||||
}
|
||||
return encoded;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
|
||||
+557
-419
File diff suppressed because it is too large
Load Diff
@@ -11,7 +11,7 @@
|
||||
package require Tcl 8.6-
|
||||
# Keep this in sync with pkgIndex.tcl and with the install directories in
|
||||
# Makefiles
|
||||
package provide http 2.8.12
|
||||
package provide http 2.8.13
|
||||
|
||||
namespace eval http {
|
||||
# Allow resourcing to not clobber existing data
|
||||
@@ -602,7 +602,7 @@ proc http::geturl {url args} {
|
||||
if {[info exists state(-myaddr)]} {
|
||||
lappend sockopts -myaddr $state(-myaddr)
|
||||
}
|
||||
if {[catch {eval $defcmd $sockopts $targetAddr} sock]} {
|
||||
if {[catch {eval $defcmd $sockopts $targetAddr} sock errdict]} {
|
||||
# something went wrong while trying to establish the connection.
|
||||
# Clean up after events and such, but DON'T call the command
|
||||
# callback (if available) because we're going to throw an
|
||||
@@ -611,7 +611,8 @@ proc http::geturl {url args} {
|
||||
set state(sock) $sock
|
||||
Finish $token "" 1
|
||||
cleanup $token
|
||||
return -code error $sock
|
||||
dict unset errdict -level
|
||||
return -options $errdict $sock
|
||||
}
|
||||
}
|
||||
set state(sock) $sock
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
if {![package vsatisfies [package provide Tcl] 8.6-]} {return}
|
||||
package ifneeded http 2.8.12 [list tclPkgSetup $dir http 2.8.12 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister ::http::mapReply}}}]
|
||||
package ifneeded http 2.8.13 [list tclPkgSetup $dir http 2.8.13 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister ::http::mapReply}}}]
|
||||
|
||||
+215
-85
@@ -4,22 +4,24 @@
|
||||
# message catalog facility for Tcl programs. It should be
|
||||
# loaded with the command "package require msgcat".
|
||||
#
|
||||
# Copyright (c) 2010-2015 by Harald Oehlmann.
|
||||
# Copyright (c) 2010-2018 by Harald Oehlmann.
|
||||
# Copyright (c) 1998-2000 by Ajuba Solutions.
|
||||
# Copyright (c) 1998 by Mark Harrison.
|
||||
#
|
||||
# See the file "license.terms" for information on usage and redistribution
|
||||
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
|
||||
package require Tcl 8.5-
|
||||
# We use oo::define::self, which is new in Tcl 8.7
|
||||
package require Tcl 8.7-
|
||||
# When the version number changes, be sure to update the pkgIndex.tcl file,
|
||||
# and the installation directory in the Makefiles.
|
||||
package provide msgcat 1.6.1
|
||||
package provide msgcat 1.7.0
|
||||
|
||||
namespace eval msgcat {
|
||||
namespace export mc mcexists mcload mclocale mcmax mcmset mcpreferences mcset\
|
||||
namespace export mc mcn mcexists mcload mclocale mcmax\
|
||||
mcmset mcpreferences mcset\
|
||||
mcunknown mcflset mcflmset mcloadedlocales mcforgetpackage\
|
||||
mcpackageconfig mcpackagelocale
|
||||
mcpackagenamespaceget mcpackageconfig mcpackagelocale mcutil
|
||||
|
||||
# Records the list of locales to search
|
||||
variable Loclist {}
|
||||
@@ -41,7 +43,13 @@ namespace eval msgcat {
|
||||
# namespace should be themselves dict values and the value is
|
||||
# the translated string.
|
||||
variable Msgs [dict create]
|
||||
}
|
||||
|
||||
# create ensemble namespace for mcutil command
|
||||
namespace eval msgcat::mcutil {
|
||||
namespace export getsystemlocale getpreferences
|
||||
namespace ensemble create -prefix 0
|
||||
|
||||
# Map of language codes used in Windows registry to those of ISO-639
|
||||
if {[info sharedlibextension] eq ".dll"} {
|
||||
variable WinRegToISO639 [dict create {*}{
|
||||
@@ -192,10 +200,30 @@ namespace eval msgcat {
|
||||
# Returns the translated string. Propagates errors thrown by the
|
||||
# format command.
|
||||
|
||||
proc msgcat::mc {src args} {
|
||||
# this may be replaced by:
|
||||
# return [mcget -namespace [uplevel 1 [list ::namespace current]] --\
|
||||
# $src {*}$args]
|
||||
proc msgcat::mc {args} {
|
||||
tailcall mcn [PackageNamespaceGet] {*}$args
|
||||
}
|
||||
|
||||
# msgcat::mcn --
|
||||
#
|
||||
# Find the translation for the given string based on the current
|
||||
# locale setting. Check the passed namespace first, then look in each
|
||||
# parent namespace until the source is found. If additional args are
|
||||
# specified, use the format command to work them into the traslated
|
||||
# string.
|
||||
# If no catalog item is found, mcunknown is called in the caller frame
|
||||
# and its result is returned.
|
||||
#
|
||||
# Arguments:
|
||||
# ns Package namespace of the translation
|
||||
# src The string to translate.
|
||||
# args Args to pass to the format command
|
||||
#
|
||||
# Results:
|
||||
# Returns the translated string. Propagates errors thrown by the
|
||||
# format command.
|
||||
|
||||
proc msgcat::mcn {ns src args} {
|
||||
|
||||
# Check for the src in each namespace starting from the local and
|
||||
# ending in the global.
|
||||
@@ -203,7 +231,6 @@ proc msgcat::mc {src args} {
|
||||
variable Msgs
|
||||
variable Loclist
|
||||
|
||||
set ns [uplevel 1 [list ::namespace current]]
|
||||
set loclist [PackagePreferences $ns]
|
||||
|
||||
set nscur $ns
|
||||
@@ -219,7 +246,7 @@ proc msgcat::mc {src args} {
|
||||
# call package local or default unknown command
|
||||
set args [linsert $args 0 [lindex $loclist 0] $src]
|
||||
switch -exact -- [Invoke unknowncmd $args $ns result 1] {
|
||||
0 { return [uplevel 1 [linsert $args 0 [namespace origin mcunknown]]] }
|
||||
0 { tailcall mcunknown {*}$args }
|
||||
1 { return [DefaultUnknown {*}$args] }
|
||||
default { return $result }
|
||||
}
|
||||
@@ -245,23 +272,31 @@ proc msgcat::mcexists {args} {
|
||||
variable Loclist
|
||||
variable PackageConfig
|
||||
|
||||
set ns [uplevel 1 [list ::namespace current]]
|
||||
set loclist [PackagePreferences $ns]
|
||||
|
||||
while {[llength $args] != 1} {
|
||||
set args [lassign $args option]
|
||||
switch -glob -- $option {
|
||||
-exactnamespace { set exactnamespace 1 }
|
||||
-exactlocale { set loclist [lrange $loclist 0 0] }
|
||||
-exactnamespace - -exactlocale { set $option 1 }
|
||||
-namespace {
|
||||
if {[llength $args] < 2} {
|
||||
return -code error\
|
||||
"Argument missing for switch \"-namespace\""
|
||||
}
|
||||
set args [lassign $args ns]
|
||||
}
|
||||
-* { return -code error "unknown option \"$option\"" }
|
||||
default {
|
||||
return -code error "wrong # args: should be\
|
||||
\"[lindex [info level 0] 0] ?-exactnamespace?\
|
||||
?-exactlocale? src\""
|
||||
?-exactlocale? ?-namespace ns? src\""
|
||||
}
|
||||
}
|
||||
}
|
||||
set src [lindex $args 0]
|
||||
|
||||
if {![info exists ns]} { set ns [PackageNamespaceGet] }
|
||||
|
||||
set loclist [PackagePreferences $ns]
|
||||
if {[info exists -exactlocale]} { set loclist [lrange $loclist 0 0] }
|
||||
|
||||
while {$ns ne ""} {
|
||||
foreach loc $loclist {
|
||||
@@ -269,7 +304,7 @@ proc msgcat::mcexists {args} {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
if {[info exists exactnamespace]} {return 0}
|
||||
if {[info exists -exactnamespace]} {return 0}
|
||||
set ns [namespace parent $ns]
|
||||
}
|
||||
return 0
|
||||
@@ -303,32 +338,27 @@ proc msgcat::mclocale {args} {
|
||||
return -code error "invalid newLocale value \"$newLocale\":\
|
||||
could be path to unsafe code."
|
||||
}
|
||||
if {[lindex $Loclist 0] ne $newLocale} {
|
||||
set Loclist [GetPreferences $newLocale]
|
||||
|
||||
# locale not loaded jet
|
||||
LoadAll $Loclist
|
||||
# Invoke callback
|
||||
Invoke changecmd $Loclist
|
||||
}
|
||||
mcpreferences {*}[mcutil getpreferences $newLocale]
|
||||
}
|
||||
return [lindex $Loclist 0]
|
||||
}
|
||||
|
||||
# msgcat::GetPreferences --
|
||||
# msgcat::mcutil::getpreferences --
|
||||
#
|
||||
# Get list of locales from a locale.
|
||||
# The first element is always the lowercase locale.
|
||||
# Other elements have one component separated by "_" less.
|
||||
# Multiple "_" are seen as one separator: de__ch_spec de__ch de {}
|
||||
#
|
||||
# This method is part of the ensemble mcutil
|
||||
#
|
||||
# Arguments:
|
||||
# Locale.
|
||||
#
|
||||
# Results:
|
||||
# Locale list
|
||||
|
||||
proc msgcat::GetPreferences {locale} {
|
||||
proc msgcat::mcutil::getpreferences {locale} {
|
||||
set locale [string tolower $locale]
|
||||
set loclist [list $locale]
|
||||
while {-1 !=[set pos [string last "_" $locale]]} {
|
||||
@@ -349,16 +379,51 @@ proc msgcat::GetPreferences {locale} {
|
||||
# most preferred to least preferred.
|
||||
#
|
||||
# Arguments:
|
||||
# None.
|
||||
# New location list
|
||||
#
|
||||
# Results:
|
||||
# Returns an ordered list of the locales preferred by the user.
|
||||
|
||||
proc msgcat::mcpreferences {} {
|
||||
proc msgcat::mcpreferences {args} {
|
||||
variable Loclist
|
||||
|
||||
if {[llength $args] > 0} {
|
||||
# args is the new loclist
|
||||
if {![ListEqualString $args $Loclist]} {
|
||||
set Loclist $args
|
||||
|
||||
# locale not loaded jet
|
||||
LoadAll $Loclist
|
||||
# Invoke callback
|
||||
Invoke changecmd $Loclist
|
||||
}
|
||||
}
|
||||
return $Loclist
|
||||
}
|
||||
|
||||
# msgcat::ListStringEqual --
|
||||
#
|
||||
# Compare two strings for equal string contents
|
||||
#
|
||||
# Arguments:
|
||||
# list1 first list
|
||||
# list2 second list
|
||||
#
|
||||
# Results:
|
||||
# 1 if lists of strings are identical, 0 otherwise
|
||||
|
||||
proc msgcat::ListEqualString {list1 list2} {
|
||||
if {[llength $list1] != [llength $list2]} {
|
||||
return 0
|
||||
}
|
||||
foreach item1 $list1 item2 $list2 {
|
||||
if {$item1 ne $item2} {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
# msgcat::mcloadedlocales --
|
||||
#
|
||||
# Get or change the list of currently loaded default locales
|
||||
@@ -442,7 +507,7 @@ proc msgcat::mcloadedlocales {subcommand} {
|
||||
# Results:
|
||||
# Empty string, if not stated differently for the subcommand
|
||||
|
||||
proc msgcat::mcpackagelocale {subcommand {locale ""}} {
|
||||
proc msgcat::mcpackagelocale {subcommand args} {
|
||||
# todo: implement using an ensemble
|
||||
variable Loclist
|
||||
variable LoadedLocales
|
||||
@@ -450,27 +515,39 @@ proc msgcat::mcpackagelocale {subcommand {locale ""}} {
|
||||
variable PackageConfig
|
||||
# Check option
|
||||
# check if required item is exactly provided
|
||||
if {[llength [info level 0]] == 2} {
|
||||
# locale not given
|
||||
unset locale
|
||||
} else {
|
||||
# locale given
|
||||
if {$subcommand in
|
||||
{"get" "isset" "unset" "preferences" "loaded" "clear"} } {
|
||||
return -code error "wrong # args: should be\
|
||||
\"[lrange [info level 0] 0 1]\""
|
||||
}
|
||||
set locale [string tolower $locale]
|
||||
if { [llength $args] > 0
|
||||
&& $subcommand in {"get" "isset" "unset" "loaded" "clear"} } {
|
||||
return -code error "wrong # args: should be\
|
||||
\"[lrange [info level 0] 0 1]\""
|
||||
}
|
||||
set ns [uplevel 1 {::namespace current}]
|
||||
set ns [PackageNamespaceGet]
|
||||
|
||||
switch -exact -- $subcommand {
|
||||
get { return [lindex [PackagePreferences $ns] 0] }
|
||||
preferences { return [PackagePreferences $ns] }
|
||||
loaded { return [PackageLocales $ns] }
|
||||
present { return [expr {$locale in [PackageLocales $ns]} ]}
|
||||
present {
|
||||
if {[llength $args] != 1} {
|
||||
return -code error "wrong # args: should be\
|
||||
\"[lrange [info level 0] 0 1] locale\""
|
||||
}
|
||||
return [expr {[string tolower [lindex $args 0]]
|
||||
in [PackageLocales $ns]} ]
|
||||
}
|
||||
isset { return [dict exists $PackageConfig loclist $ns] }
|
||||
set { # set a package locale or add a package locale
|
||||
set - preferences {
|
||||
# set a package locale or add a package locale
|
||||
set fSet [expr {$subcommand eq "set"}]
|
||||
|
||||
# Check parameter
|
||||
if {$fSet && 1 < [llength $args] } {
|
||||
return -code error "wrong # args: should be\
|
||||
\"[lrange [info level 0] 0 1] ?locale?\""
|
||||
}
|
||||
|
||||
# > Return preferences if no parameter
|
||||
if {!$fSet && 0 == [llength $args] } {
|
||||
return [PackagePreferences $ns]
|
||||
}
|
||||
|
||||
# Copy the default locale if no package locale set so far
|
||||
if {![dict exists $PackageConfig loclist $ns]} {
|
||||
@@ -478,25 +555,43 @@ proc msgcat::mcpackagelocale {subcommand {locale ""}} {
|
||||
dict set PackageConfig loadedlocales $ns $LoadedLocales
|
||||
}
|
||||
|
||||
# Check if changed
|
||||
set loclist [dict get $PackageConfig loclist $ns]
|
||||
if {! [info exists locale] || $locale eq [lindex $loclist 0] } {
|
||||
return [lindex $loclist 0]
|
||||
# No argument for set: return current package locale
|
||||
# The difference to no argument and subcommand "preferences" is,
|
||||
# that "preferences" does not set the package locale property.
|
||||
# This case is processed above, so no check for fSet here
|
||||
if { 0 == [llength $args] } {
|
||||
return [lindex [dict get $PackageConfig loclist $ns] 0]
|
||||
}
|
||||
|
||||
# Get new loclist
|
||||
if {$fSet} {
|
||||
set loclist [mcutil getpreferences [lindex $args 0]]
|
||||
} else {
|
||||
set loclist $args
|
||||
}
|
||||
|
||||
# Check if not changed to return imediately
|
||||
if { [ListEqualString $loclist\
|
||||
[dict get $PackageConfig loclist $ns]] } {
|
||||
if {$fSet} {
|
||||
return [lindex $loclist 0]
|
||||
}
|
||||
return $loclist
|
||||
}
|
||||
|
||||
# Change loclist
|
||||
set loclist [GetPreferences $locale]
|
||||
set locale [lindex $loclist 0]
|
||||
dict set PackageConfig loclist $ns $loclist
|
||||
|
||||
# load eventual missing locales
|
||||
set loadedLocales [dict get $PackageConfig loadedlocales $ns]
|
||||
if {$locale in $loadedLocales} { return $locale }
|
||||
set loadLocales [ListComplement $loadedLocales $loclist]
|
||||
dict set PackageConfig loadedlocales $ns\
|
||||
[concat $loadedLocales $loadLocales]
|
||||
Load $ns $loadLocales
|
||||
return $locale
|
||||
if {$fSet} {
|
||||
return [lindex $loclist 0]
|
||||
}
|
||||
return $loclist
|
||||
}
|
||||
clear { # Remove all locales not contained in Loclist
|
||||
if {![dict exists $PackageConfig loclist $ns]} {
|
||||
@@ -551,7 +646,7 @@ proc msgcat::mcforgetpackage {} {
|
||||
# todo: this may be implemented using an ensemble
|
||||
variable PackageConfig
|
||||
variable Msgs
|
||||
set ns [uplevel 1 {::namespace current}]
|
||||
set ns [PackageNamespaceGet]
|
||||
# Remove MC items
|
||||
dict unset Msgs $ns
|
||||
# Remove config items
|
||||
@@ -561,6 +656,15 @@ proc msgcat::mcforgetpackage {} {
|
||||
return
|
||||
}
|
||||
|
||||
# msgcat::mcgetmynamespace --
|
||||
#
|
||||
# Return the package namespace of the caller
|
||||
# This consideres to be called from a class or object.
|
||||
|
||||
proc msgcat::mcpackagenamespaceget {} {
|
||||
return [PackageNamespaceGet]
|
||||
}
|
||||
|
||||
# msgcat::mcpackageconfig --
|
||||
#
|
||||
# Get or modify the per caller namespace (e.g. packages) config options.
|
||||
@@ -616,7 +720,7 @@ proc msgcat::mcforgetpackage {} {
|
||||
proc msgcat::mcpackageconfig {subcommand option {value ""}} {
|
||||
variable PackageConfig
|
||||
# get namespace
|
||||
set ns [uplevel 1 {::namespace current}]
|
||||
set ns [PackageNamespaceGet]
|
||||
|
||||
if {$option ni {"mcfolder" "loadcmd" "changecmd" "unknowncmd"}} {
|
||||
return -code error "bad option \"$option\": must be mcfolder, loadcmd,\
|
||||
@@ -756,8 +860,7 @@ proc msgcat::ListComplement {list1 list2 {inlistname ""}} {
|
||||
# Returns the number of message catalogs that were loaded.
|
||||
|
||||
proc msgcat::mcload {langdir} {
|
||||
return [uplevel 1 [list\
|
||||
[namespace origin mcpackageconfig] set mcfolder $langdir]]
|
||||
tailcall mcpackageconfig set mcfolder $langdir
|
||||
}
|
||||
|
||||
# msgcat::LoadAll --
|
||||
@@ -923,7 +1026,7 @@ proc msgcat::mcset {locale src {dest ""}} {
|
||||
set dest $src
|
||||
}
|
||||
|
||||
set ns [uplevel 1 [list ::namespace current]]
|
||||
set ns [PackageNamespaceGet]
|
||||
|
||||
set locale [string tolower $locale]
|
||||
|
||||
@@ -951,7 +1054,7 @@ proc msgcat::mcflset {src {dest ""}} {
|
||||
return -code error "must only be used inside a message catalog loaded\
|
||||
with ::msgcat::mcload"
|
||||
}
|
||||
return [uplevel 1 [list [namespace origin mcset] $FileLocale $src $dest]]
|
||||
tailcall mcset $FileLocale $src $dest
|
||||
}
|
||||
|
||||
# msgcat::mcmset --
|
||||
@@ -975,7 +1078,7 @@ proc msgcat::mcmset {locale pairs} {
|
||||
}
|
||||
|
||||
set locale [string tolower $locale]
|
||||
set ns [uplevel 1 [list ::namespace current]]
|
||||
set ns [PackageNamespaceGet]
|
||||
|
||||
foreach {src dest} $pairs {
|
||||
dict set Msgs $ns $locale $src $dest
|
||||
@@ -1002,7 +1105,7 @@ proc msgcat::mcflmset {pairs} {
|
||||
return -code error "must only be used inside a message catalog loaded\
|
||||
with ::msgcat::mcload"
|
||||
}
|
||||
return [uplevel 1 [list [namespace origin mcmset] $FileLocale $pairs]]
|
||||
tailcal mcmset $FileLocale $pairs
|
||||
}
|
||||
|
||||
# msgcat::mcunknown --
|
||||
@@ -1024,7 +1127,7 @@ proc msgcat::mcflmset {pairs} {
|
||||
# Returns the translated value.
|
||||
|
||||
proc msgcat::mcunknown {args} {
|
||||
return [uplevel 1 [list [namespace origin DefaultUnknown] {*}$args]]
|
||||
tailcall DefaultUnknown {*}$args
|
||||
}
|
||||
|
||||
# msgcat::DefaultUnknown --
|
||||
@@ -1067,8 +1170,9 @@ proc msgcat::DefaultUnknown {locale src args} {
|
||||
|
||||
proc msgcat::mcmax {args} {
|
||||
set max 0
|
||||
set ns [PackageNamespaceGet]
|
||||
foreach string $args {
|
||||
set translated [uplevel 1 [list [namespace origin mc] $string]]
|
||||
set translated [uplevel 1 [list [namespace origin mcn] $ns $string]]
|
||||
set len [string length $translated]
|
||||
if {$len>$max} {
|
||||
set max $len
|
||||
@@ -1079,7 +1183,7 @@ proc msgcat::mcmax {args} {
|
||||
|
||||
# Convert the locale values stored in environment variables to a form
|
||||
# suitable for passing to [mclocale]
|
||||
proc msgcat::ConvertLocale {value} {
|
||||
proc msgcat::mcutil::ConvertLocale {value} {
|
||||
# Assume $value is of form: $language[_$territory][.$codeset][@modifier]
|
||||
# Convert to form: $language[_$territory][_$modifier]
|
||||
#
|
||||
@@ -1106,8 +1210,40 @@ proc msgcat::ConvertLocale {value} {
|
||||
return $ret
|
||||
}
|
||||
|
||||
# helper function to find package namespace of stack-frame -2
|
||||
# There are 4 possibilities:
|
||||
# - called from a proc
|
||||
# - called within a class definition script
|
||||
# - called from an class defined oo object
|
||||
# - called from a classless oo object
|
||||
proc ::msgcat::PackageNamespaceGet {} {
|
||||
uplevel 2 {
|
||||
# Check self namespace to determine environment
|
||||
switch -exact -- [namespace which self] {
|
||||
{::oo::define::self} {
|
||||
# We are within a class definition
|
||||
return [namespace qualifiers [self]]
|
||||
}
|
||||
{::oo::Helpers::self} {
|
||||
# We are within an object
|
||||
set Class [info object class [self]]
|
||||
# Check for classless defined object
|
||||
if {$Class eq {::oo::object}} {
|
||||
return [namespace qualifiers [self]]
|
||||
}
|
||||
# Class defined object
|
||||
return [namespace qualifiers $Class]
|
||||
}
|
||||
default {
|
||||
# Not in object environment
|
||||
return [namespace current]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Initialize the default locale
|
||||
proc msgcat::Init {} {
|
||||
proc msgcat::mcutil::getsystemlocale {} {
|
||||
global env
|
||||
|
||||
#
|
||||
@@ -1115,10 +1251,8 @@ proc msgcat::Init {} {
|
||||
#
|
||||
foreach varName {LC_ALL LC_MESSAGES LANG} {
|
||||
if {[info exists env($varName)] && ("" ne $env($varName))} {
|
||||
if {![catch {
|
||||
mclocale [ConvertLocale $env($varName)]
|
||||
}]} {
|
||||
return
|
||||
if {![catch { ConvertLocale $env($varName) } locale]} {
|
||||
return $locale
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1126,10 +1260,8 @@ proc msgcat::Init {} {
|
||||
# On Darwin, fallback to current CFLocale identifier if available.
|
||||
#
|
||||
if {[info exists ::tcl::mac::locale] && $::tcl::mac::locale ne ""} {
|
||||
if {![catch {
|
||||
mclocale [ConvertLocale $::tcl::mac::locale]
|
||||
}]} {
|
||||
return
|
||||
if {![catch { ConvertLocale $::tcl::mac::locale } locale]} {
|
||||
return $locale
|
||||
}
|
||||
}
|
||||
#
|
||||
@@ -1138,8 +1270,7 @@ proc msgcat::Init {} {
|
||||
#
|
||||
if {([info sharedlibextension] ne ".dll")
|
||||
|| [catch {package require registry}]} {
|
||||
mclocale C
|
||||
return
|
||||
return C
|
||||
}
|
||||
#
|
||||
# On Windows or Cygwin, try to set locale depending on registry
|
||||
@@ -1170,8 +1301,8 @@ proc msgcat::Init {} {
|
||||
if {[dict exists $modifierDict $script]} {
|
||||
append locale @ [dict get $modifierDict $script]
|
||||
}
|
||||
if {![catch {mclocale [ConvertLocale $locale]}]} {
|
||||
return
|
||||
if {![catch {ConvertLocale $locale} locale]} {
|
||||
return $locale
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1180,8 +1311,7 @@ proc msgcat::Init {} {
|
||||
if {[catch {
|
||||
set locale [registry get $key "locale"]
|
||||
}]} {
|
||||
mclocale C
|
||||
return
|
||||
return C
|
||||
}
|
||||
#
|
||||
# Keep trying to match against smaller and smaller suffixes
|
||||
@@ -1196,15 +1326,15 @@ proc msgcat::Init {} {
|
||||
set locale [string tolower $locale]
|
||||
while {[string length $locale]} {
|
||||
if {![catch {
|
||||
mclocale [ConvertLocale [dict get $WinRegToISO639 $locale]]
|
||||
}]} {
|
||||
return
|
||||
ConvertLocale [dict get $WinRegToISO639 $locale]
|
||||
} localeOut]} {
|
||||
return $localeOut
|
||||
}
|
||||
set locale [string range $locale 1 end]
|
||||
}
|
||||
#
|
||||
# No translation known. Fall back on "C" locale
|
||||
#
|
||||
mclocale C
|
||||
return C
|
||||
}
|
||||
msgcat::Init
|
||||
msgcat::mclocale [msgcat::mcutil getsystemlocale]
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
if {![package vsatisfies [package provide Tcl] 8.5-]} {return}
|
||||
package ifneeded msgcat 1.6.1 [list source [file join $dir msgcat.tcl]]
|
||||
if {![package vsatisfies [package provide Tcl] 8.7-]} {return}
|
||||
package ifneeded msgcat 1.7.0 [list source [file join $dir msgcat.tcl]]
|
||||
|
||||
+47
-47
@@ -2,51 +2,51 @@
|
||||
|
||||
set TZData(:Africa/Accra) {
|
||||
{-9223372036854775808 -52 0 LMT}
|
||||
{-1640995148 0 0 +0020}
|
||||
{-1556841600 1200 1 +0020}
|
||||
{-1546388400 0 0 +0020}
|
||||
{-1525305600 1200 1 +0020}
|
||||
{-1514852400 0 0 +0020}
|
||||
{-1493769600 1200 1 +0020}
|
||||
{-1483316400 0 0 +0020}
|
||||
{-1462233600 1200 1 +0020}
|
||||
{-1451780400 0 0 +0020}
|
||||
{-1430611200 1200 1 +0020}
|
||||
{-1420158000 0 0 +0020}
|
||||
{-1399075200 1200 1 +0020}
|
||||
{-1388622000 0 0 +0020}
|
||||
{-1367539200 1200 1 +0020}
|
||||
{-1357086000 0 0 +0020}
|
||||
{-1336003200 1200 1 +0020}
|
||||
{-1325550000 0 0 +0020}
|
||||
{-1304380800 1200 1 +0020}
|
||||
{-1293927600 0 0 +0020}
|
||||
{-1272844800 1200 1 +0020}
|
||||
{-1262391600 0 0 +0020}
|
||||
{-1241308800 1200 1 +0020}
|
||||
{-1230855600 0 0 +0020}
|
||||
{-1209772800 1200 1 +0020}
|
||||
{-1199319600 0 0 +0020}
|
||||
{-1178150400 1200 1 +0020}
|
||||
{-1167697200 0 0 +0020}
|
||||
{-1146614400 1200 1 +0020}
|
||||
{-1136161200 0 0 +0020}
|
||||
{-1115078400 1200 1 +0020}
|
||||
{-1104625200 0 0 +0020}
|
||||
{-1083542400 1200 1 +0020}
|
||||
{-1073089200 0 0 +0020}
|
||||
{-1051920000 1200 1 +0020}
|
||||
{-1041466800 0 0 +0020}
|
||||
{-1020384000 1200 1 +0020}
|
||||
{-1009930800 0 0 +0020}
|
||||
{-988848000 1200 1 +0020}
|
||||
{-978394800 0 0 +0020}
|
||||
{-957312000 1200 1 +0020}
|
||||
{-946858800 0 0 +0020}
|
||||
{-925689600 1200 1 +0020}
|
||||
{-915236400 0 0 +0020}
|
||||
{-894153600 1200 1 +0020}
|
||||
{-883700400 0 0 +0020}
|
||||
{-862617600 1200 1 +0020}
|
||||
{-852164400 0 0 +0020}
|
||||
{-1640995148 0 0 GMT}
|
||||
{-1556841600 1200 1 GMT}
|
||||
{-1546388400 0 0 GMT}
|
||||
{-1525305600 1200 1 GMT}
|
||||
{-1514852400 0 0 GMT}
|
||||
{-1493769600 1200 1 GMT}
|
||||
{-1483316400 0 0 GMT}
|
||||
{-1462233600 1200 1 GMT}
|
||||
{-1451780400 0 0 GMT}
|
||||
{-1430611200 1200 1 GMT}
|
||||
{-1420158000 0 0 GMT}
|
||||
{-1399075200 1200 1 GMT}
|
||||
{-1388622000 0 0 GMT}
|
||||
{-1367539200 1200 1 GMT}
|
||||
{-1357086000 0 0 GMT}
|
||||
{-1336003200 1200 1 GMT}
|
||||
{-1325550000 0 0 GMT}
|
||||
{-1304380800 1200 1 GMT}
|
||||
{-1293927600 0 0 GMT}
|
||||
{-1272844800 1200 1 GMT}
|
||||
{-1262391600 0 0 GMT}
|
||||
{-1241308800 1200 1 GMT}
|
||||
{-1230855600 0 0 GMT}
|
||||
{-1209772800 1200 1 GMT}
|
||||
{-1199319600 0 0 GMT}
|
||||
{-1178150400 1200 1 GMT}
|
||||
{-1167697200 0 0 GMT}
|
||||
{-1146614400 1200 1 GMT}
|
||||
{-1136161200 0 0 GMT}
|
||||
{-1115078400 1200 1 GMT}
|
||||
{-1104625200 0 0 GMT}
|
||||
{-1083542400 1200 1 GMT}
|
||||
{-1073089200 0 0 GMT}
|
||||
{-1051920000 1200 1 GMT}
|
||||
{-1041466800 0 0 GMT}
|
||||
{-1020384000 1200 1 GMT}
|
||||
{-1009930800 0 0 GMT}
|
||||
{-988848000 1200 1 GMT}
|
||||
{-978394800 0 0 GMT}
|
||||
{-957312000 1200 1 GMT}
|
||||
{-946858800 0 0 GMT}
|
||||
{-925689600 1200 1 GMT}
|
||||
{-915236400 0 0 GMT}
|
||||
{-894153600 1200 1 GMT}
|
||||
{-883700400 0 0 GMT}
|
||||
{-862617600 1200 1 GMT}
|
||||
{-852164400 0 0 GMT}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
|
||||
set TZData(:Africa/Bissau) {
|
||||
{-9223372036854775808 -3740 0 LMT}
|
||||
{-1830380260 -3600 0 -01}
|
||||
{-1830380400 -3600 0 -01}
|
||||
{157770000 0 0 GMT}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
set TZData(:Africa/Sao_Tome) {
|
||||
{-9223372036854775808 1616 0 LMT}
|
||||
{-2713912016 -2205 0 LMT}
|
||||
{-1830381795 0 0 GMT}
|
||||
{-1830384000 0 0 GMT}
|
||||
{1514768400 3600 0 WAT}
|
||||
}
|
||||
|
||||
@@ -3,58 +3,58 @@
|
||||
set TZData(:America/Araguaina) {
|
||||
{-9223372036854775808 -11568 0 LMT}
|
||||
{-1767214032 -10800 0 -03}
|
||||
{-1206957600 -7200 1 -02}
|
||||
{-1206957600 -7200 1 -03}
|
||||
{-1191362400 -10800 0 -03}
|
||||
{-1175374800 -7200 1 -02}
|
||||
{-1175374800 -7200 1 -03}
|
||||
{-1159826400 -10800 0 -03}
|
||||
{-633819600 -7200 1 -02}
|
||||
{-633819600 -7200 1 -03}
|
||||
{-622069200 -10800 0 -03}
|
||||
{-602283600 -7200 1 -02}
|
||||
{-602283600 -7200 1 -03}
|
||||
{-591832800 -10800 0 -03}
|
||||
{-570747600 -7200 1 -02}
|
||||
{-570747600 -7200 1 -03}
|
||||
{-560210400 -10800 0 -03}
|
||||
{-539125200 -7200 1 -02}
|
||||
{-539125200 -7200 1 -03}
|
||||
{-531352800 -10800 0 -03}
|
||||
{-191365200 -7200 1 -02}
|
||||
{-191365200 -7200 1 -03}
|
||||
{-184197600 -10800 0 -03}
|
||||
{-155163600 -7200 1 -02}
|
||||
{-155163600 -7200 1 -03}
|
||||
{-150069600 -10800 0 -03}
|
||||
{-128898000 -7200 1 -02}
|
||||
{-128898000 -7200 1 -03}
|
||||
{-121125600 -10800 0 -03}
|
||||
{-99954000 -7200 1 -02}
|
||||
{-99954000 -7200 1 -03}
|
||||
{-89589600 -10800 0 -03}
|
||||
{-68418000 -7200 1 -02}
|
||||
{-68418000 -7200 1 -03}
|
||||
{-57967200 -10800 0 -03}
|
||||
{499748400 -7200 1 -02}
|
||||
{499748400 -7200 1 -03}
|
||||
{511236000 -10800 0 -03}
|
||||
{530593200 -7200 1 -02}
|
||||
{530593200 -7200 1 -03}
|
||||
{540266400 -10800 0 -03}
|
||||
{562129200 -7200 1 -02}
|
||||
{562129200 -7200 1 -03}
|
||||
{571197600 -10800 0 -03}
|
||||
{592974000 -7200 1 -02}
|
||||
{592974000 -7200 1 -03}
|
||||
{602042400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{634701600 -10800 0 -03}
|
||||
{653536800 -10800 0 -03}
|
||||
{811047600 -10800 0 -03}
|
||||
{813726000 -7200 1 -02}
|
||||
{813726000 -7200 1 -03}
|
||||
{824004000 -10800 0 -03}
|
||||
{844570800 -7200 1 -02}
|
||||
{844570800 -7200 1 -03}
|
||||
{856058400 -10800 0 -03}
|
||||
{876106800 -7200 1 -02}
|
||||
{876106800 -7200 1 -03}
|
||||
{888717600 -10800 0 -03}
|
||||
{908074800 -7200 1 -02}
|
||||
{908074800 -7200 1 -03}
|
||||
{919562400 -10800 0 -03}
|
||||
{938919600 -7200 1 -02}
|
||||
{938919600 -7200 1 -03}
|
||||
{951616800 -10800 0 -03}
|
||||
{970974000 -7200 1 -02}
|
||||
{970974000 -7200 1 -03}
|
||||
{982461600 -10800 0 -03}
|
||||
{1003028400 -7200 1 -02}
|
||||
{1003028400 -7200 1 -03}
|
||||
{1013911200 -10800 0 -03}
|
||||
{1036292400 -7200 1 -02}
|
||||
{1036292400 -7200 1 -03}
|
||||
{1045360800 -10800 0 -03}
|
||||
{1064368800 -10800 0 -03}
|
||||
{1350788400 -7200 0 -02}
|
||||
{1350788400 -7200 0 -03}
|
||||
{1361066400 -10800 0 -03}
|
||||
{1378000800 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -4,64 +4,64 @@ set TZData(:America/Argentina/Buenos_Aires) {
|
||||
{-9223372036854775808 -14028 0 LMT}
|
||||
{-2372097972 -15408 0 CMT}
|
||||
{-1567453392 -14400 0 -04}
|
||||
{-1233432000 -10800 0 -03}
|
||||
{-1233432000 -10800 0 -04}
|
||||
{-1222981200 -14400 0 -04}
|
||||
{-1205956800 -10800 1 -03}
|
||||
{-1205956800 -10800 1 -04}
|
||||
{-1194037200 -14400 0 -04}
|
||||
{-1172865600 -10800 1 -03}
|
||||
{-1172865600 -10800 1 -04}
|
||||
{-1162501200 -14400 0 -04}
|
||||
{-1141329600 -10800 1 -03}
|
||||
{-1141329600 -10800 1 -04}
|
||||
{-1130965200 -14400 0 -04}
|
||||
{-1109793600 -10800 1 -03}
|
||||
{-1109793600 -10800 1 -04}
|
||||
{-1099429200 -14400 0 -04}
|
||||
{-1078257600 -10800 1 -03}
|
||||
{-1078257600 -10800 1 -04}
|
||||
{-1067806800 -14400 0 -04}
|
||||
{-1046635200 -10800 1 -03}
|
||||
{-1046635200 -10800 1 -04}
|
||||
{-1036270800 -14400 0 -04}
|
||||
{-1015099200 -10800 1 -03}
|
||||
{-1015099200 -10800 1 -04}
|
||||
{-1004734800 -14400 0 -04}
|
||||
{-983563200 -10800 1 -03}
|
||||
{-983563200 -10800 1 -04}
|
||||
{-973198800 -14400 0 -04}
|
||||
{-952027200 -10800 1 -03}
|
||||
{-952027200 -10800 1 -04}
|
||||
{-941576400 -14400 0 -04}
|
||||
{-931032000 -10800 1 -03}
|
||||
{-931032000 -10800 1 -04}
|
||||
{-900882000 -14400 0 -04}
|
||||
{-890337600 -10800 1 -03}
|
||||
{-890337600 -10800 1 -04}
|
||||
{-833749200 -14400 0 -04}
|
||||
{-827265600 -10800 1 -03}
|
||||
{-827265600 -10800 1 -04}
|
||||
{-752274000 -14400 0 -04}
|
||||
{-733780800 -10800 1 -03}
|
||||
{-733780800 -10800 1 -04}
|
||||
{-197326800 -14400 0 -04}
|
||||
{-190843200 -10800 1 -03}
|
||||
{-190843200 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-164491200 -10800 1 -03}
|
||||
{-164491200 -10800 1 -04}
|
||||
{-152658000 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{596948400 -7200 1 -02}
|
||||
{596948400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{636516000 -10800 0 -03}
|
||||
{656478000 -7200 1 -02}
|
||||
{656478000 -7200 1 -03}
|
||||
{667965600 -10800 0 -03}
|
||||
{687927600 -7200 1 -02}
|
||||
{687927600 -7200 1 -03}
|
||||
{699415200 -10800 0 -03}
|
||||
{719377200 -7200 1 -02}
|
||||
{719377200 -7200 1 -03}
|
||||
{731469600 -10800 0 -03}
|
||||
{938916000 -10800 0 -04}
|
||||
{938919600 -10800 1 -03}
|
||||
{938919600 -10800 1 -04}
|
||||
{952056000 -10800 0 -03}
|
||||
{1198983600 -7200 1 -02}
|
||||
{1198983600 -7200 1 -03}
|
||||
{1205632800 -10800 0 -03}
|
||||
{1224385200 -7200 1 -02}
|
||||
{1224385200 -7200 1 -03}
|
||||
{1237082400 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -4,65 +4,65 @@ set TZData(:America/Argentina/Catamarca) {
|
||||
{-9223372036854775808 -15788 0 LMT}
|
||||
{-2372096212 -15408 0 CMT}
|
||||
{-1567453392 -14400 0 -04}
|
||||
{-1233432000 -10800 0 -03}
|
||||
{-1233432000 -10800 0 -04}
|
||||
{-1222981200 -14400 0 -04}
|
||||
{-1205956800 -10800 1 -03}
|
||||
{-1205956800 -10800 1 -04}
|
||||
{-1194037200 -14400 0 -04}
|
||||
{-1172865600 -10800 1 -03}
|
||||
{-1172865600 -10800 1 -04}
|
||||
{-1162501200 -14400 0 -04}
|
||||
{-1141329600 -10800 1 -03}
|
||||
{-1141329600 -10800 1 -04}
|
||||
{-1130965200 -14400 0 -04}
|
||||
{-1109793600 -10800 1 -03}
|
||||
{-1109793600 -10800 1 -04}
|
||||
{-1099429200 -14400 0 -04}
|
||||
{-1078257600 -10800 1 -03}
|
||||
{-1078257600 -10800 1 -04}
|
||||
{-1067806800 -14400 0 -04}
|
||||
{-1046635200 -10800 1 -03}
|
||||
{-1046635200 -10800 1 -04}
|
||||
{-1036270800 -14400 0 -04}
|
||||
{-1015099200 -10800 1 -03}
|
||||
{-1015099200 -10800 1 -04}
|
||||
{-1004734800 -14400 0 -04}
|
||||
{-983563200 -10800 1 -03}
|
||||
{-983563200 -10800 1 -04}
|
||||
{-973198800 -14400 0 -04}
|
||||
{-952027200 -10800 1 -03}
|
||||
{-952027200 -10800 1 -04}
|
||||
{-941576400 -14400 0 -04}
|
||||
{-931032000 -10800 1 -03}
|
||||
{-931032000 -10800 1 -04}
|
||||
{-900882000 -14400 0 -04}
|
||||
{-890337600 -10800 1 -03}
|
||||
{-890337600 -10800 1 -04}
|
||||
{-833749200 -14400 0 -04}
|
||||
{-827265600 -10800 1 -03}
|
||||
{-827265600 -10800 1 -04}
|
||||
{-752274000 -14400 0 -04}
|
||||
{-733780800 -10800 1 -03}
|
||||
{-733780800 -10800 1 -04}
|
||||
{-197326800 -14400 0 -04}
|
||||
{-190843200 -10800 1 -03}
|
||||
{-190843200 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-164491200 -10800 1 -03}
|
||||
{-164491200 -10800 1 -04}
|
||||
{-152658000 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{596948400 -7200 1 -02}
|
||||
{596948400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{636516000 -10800 0 -03}
|
||||
{656478000 -7200 1 -02}
|
||||
{656478000 -7200 1 -03}
|
||||
{667965600 -14400 0 -04}
|
||||
{687931200 -7200 0 -02}
|
||||
{687931200 -7200 0 -03}
|
||||
{699415200 -10800 0 -03}
|
||||
{719377200 -7200 1 -02}
|
||||
{719377200 -7200 1 -03}
|
||||
{731469600 -10800 0 -03}
|
||||
{938916000 -10800 0 -04}
|
||||
{938919600 -10800 1 -03}
|
||||
{938919600 -10800 1 -04}
|
||||
{952056000 -10800 0 -03}
|
||||
{1086058800 -14400 0 -04}
|
||||
{1087704000 -10800 0 -03}
|
||||
{1198983600 -7200 1 -02}
|
||||
{1198983600 -7200 1 -03}
|
||||
{1205632800 -10800 0 -03}
|
||||
{1224295200 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -4,64 +4,64 @@ set TZData(:America/Argentina/Cordoba) {
|
||||
{-9223372036854775808 -15408 0 LMT}
|
||||
{-2372096592 -15408 0 CMT}
|
||||
{-1567453392 -14400 0 -04}
|
||||
{-1233432000 -10800 0 -03}
|
||||
{-1233432000 -10800 0 -04}
|
||||
{-1222981200 -14400 0 -04}
|
||||
{-1205956800 -10800 1 -03}
|
||||
{-1205956800 -10800 1 -04}
|
||||
{-1194037200 -14400 0 -04}
|
||||
{-1172865600 -10800 1 -03}
|
||||
{-1172865600 -10800 1 -04}
|
||||
{-1162501200 -14400 0 -04}
|
||||
{-1141329600 -10800 1 -03}
|
||||
{-1141329600 -10800 1 -04}
|
||||
{-1130965200 -14400 0 -04}
|
||||
{-1109793600 -10800 1 -03}
|
||||
{-1109793600 -10800 1 -04}
|
||||
{-1099429200 -14400 0 -04}
|
||||
{-1078257600 -10800 1 -03}
|
||||
{-1078257600 -10800 1 -04}
|
||||
{-1067806800 -14400 0 -04}
|
||||
{-1046635200 -10800 1 -03}
|
||||
{-1046635200 -10800 1 -04}
|
||||
{-1036270800 -14400 0 -04}
|
||||
{-1015099200 -10800 1 -03}
|
||||
{-1015099200 -10800 1 -04}
|
||||
{-1004734800 -14400 0 -04}
|
||||
{-983563200 -10800 1 -03}
|
||||
{-983563200 -10800 1 -04}
|
||||
{-973198800 -14400 0 -04}
|
||||
{-952027200 -10800 1 -03}
|
||||
{-952027200 -10800 1 -04}
|
||||
{-941576400 -14400 0 -04}
|
||||
{-931032000 -10800 1 -03}
|
||||
{-931032000 -10800 1 -04}
|
||||
{-900882000 -14400 0 -04}
|
||||
{-890337600 -10800 1 -03}
|
||||
{-890337600 -10800 1 -04}
|
||||
{-833749200 -14400 0 -04}
|
||||
{-827265600 -10800 1 -03}
|
||||
{-827265600 -10800 1 -04}
|
||||
{-752274000 -14400 0 -04}
|
||||
{-733780800 -10800 1 -03}
|
||||
{-733780800 -10800 1 -04}
|
||||
{-197326800 -14400 0 -04}
|
||||
{-190843200 -10800 1 -03}
|
||||
{-190843200 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-164491200 -10800 1 -03}
|
||||
{-164491200 -10800 1 -04}
|
||||
{-152658000 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{596948400 -7200 1 -02}
|
||||
{596948400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{636516000 -10800 0 -03}
|
||||
{656478000 -7200 1 -02}
|
||||
{656478000 -7200 1 -03}
|
||||
{667965600 -14400 0 -04}
|
||||
{687931200 -7200 0 -02}
|
||||
{687931200 -7200 0 -03}
|
||||
{699415200 -10800 0 -03}
|
||||
{719377200 -7200 1 -02}
|
||||
{719377200 -7200 1 -03}
|
||||
{731469600 -10800 0 -03}
|
||||
{938916000 -10800 0 -04}
|
||||
{938919600 -10800 1 -03}
|
||||
{938919600 -10800 1 -04}
|
||||
{952056000 -10800 0 -03}
|
||||
{1198983600 -7200 1 -02}
|
||||
{1198983600 -7200 1 -03}
|
||||
{1205632800 -10800 0 -03}
|
||||
{1224385200 -7200 1 -02}
|
||||
{1224385200 -7200 1 -03}
|
||||
{1237082400 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -4,64 +4,64 @@ set TZData(:America/Argentina/Jujuy) {
|
||||
{-9223372036854775808 -15672 0 LMT}
|
||||
{-2372096328 -15408 0 CMT}
|
||||
{-1567453392 -14400 0 -04}
|
||||
{-1233432000 -10800 0 -03}
|
||||
{-1233432000 -10800 0 -04}
|
||||
{-1222981200 -14400 0 -04}
|
||||
{-1205956800 -10800 1 -03}
|
||||
{-1205956800 -10800 1 -04}
|
||||
{-1194037200 -14400 0 -04}
|
||||
{-1172865600 -10800 1 -03}
|
||||
{-1172865600 -10800 1 -04}
|
||||
{-1162501200 -14400 0 -04}
|
||||
{-1141329600 -10800 1 -03}
|
||||
{-1141329600 -10800 1 -04}
|
||||
{-1130965200 -14400 0 -04}
|
||||
{-1109793600 -10800 1 -03}
|
||||
{-1109793600 -10800 1 -04}
|
||||
{-1099429200 -14400 0 -04}
|
||||
{-1078257600 -10800 1 -03}
|
||||
{-1078257600 -10800 1 -04}
|
||||
{-1067806800 -14400 0 -04}
|
||||
{-1046635200 -10800 1 -03}
|
||||
{-1046635200 -10800 1 -04}
|
||||
{-1036270800 -14400 0 -04}
|
||||
{-1015099200 -10800 1 -03}
|
||||
{-1015099200 -10800 1 -04}
|
||||
{-1004734800 -14400 0 -04}
|
||||
{-983563200 -10800 1 -03}
|
||||
{-983563200 -10800 1 -04}
|
||||
{-973198800 -14400 0 -04}
|
||||
{-952027200 -10800 1 -03}
|
||||
{-952027200 -10800 1 -04}
|
||||
{-941576400 -14400 0 -04}
|
||||
{-931032000 -10800 1 -03}
|
||||
{-931032000 -10800 1 -04}
|
||||
{-900882000 -14400 0 -04}
|
||||
{-890337600 -10800 1 -03}
|
||||
{-890337600 -10800 1 -04}
|
||||
{-833749200 -14400 0 -04}
|
||||
{-827265600 -10800 1 -03}
|
||||
{-827265600 -10800 1 -04}
|
||||
{-752274000 -14400 0 -04}
|
||||
{-733780800 -10800 1 -03}
|
||||
{-733780800 -10800 1 -04}
|
||||
{-197326800 -14400 0 -04}
|
||||
{-190843200 -10800 1 -03}
|
||||
{-190843200 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-164491200 -10800 1 -03}
|
||||
{-164491200 -10800 1 -04}
|
||||
{-152658000 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{596948400 -7200 1 -02}
|
||||
{596948400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{636516000 -14400 0 -04}
|
||||
{657086400 -10800 1 -03}
|
||||
{669178800 -14400 0 -04}
|
||||
{686721600 -7200 1 -02}
|
||||
{694231200 -7200 0 -03}
|
||||
{699415200 -10800 0 -03}
|
||||
{719377200 -7200 1 -02}
|
||||
{719377200 -7200 1 -03}
|
||||
{731469600 -10800 0 -03}
|
||||
{938916000 -10800 0 -04}
|
||||
{938919600 -10800 1 -03}
|
||||
{938919600 -10800 1 -04}
|
||||
{952056000 -10800 0 -03}
|
||||
{1198983600 -7200 1 -02}
|
||||
{1198983600 -7200 1 -03}
|
||||
{1205632800 -10800 0 -03}
|
||||
{1224295200 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -4,66 +4,66 @@ set TZData(:America/Argentina/La_Rioja) {
|
||||
{-9223372036854775808 -16044 0 LMT}
|
||||
{-2372095956 -15408 0 CMT}
|
||||
{-1567453392 -14400 0 -04}
|
||||
{-1233432000 -10800 0 -03}
|
||||
{-1233432000 -10800 0 -04}
|
||||
{-1222981200 -14400 0 -04}
|
||||
{-1205956800 -10800 1 -03}
|
||||
{-1205956800 -10800 1 -04}
|
||||
{-1194037200 -14400 0 -04}
|
||||
{-1172865600 -10800 1 -03}
|
||||
{-1172865600 -10800 1 -04}
|
||||
{-1162501200 -14400 0 -04}
|
||||
{-1141329600 -10800 1 -03}
|
||||
{-1141329600 -10800 1 -04}
|
||||
{-1130965200 -14400 0 -04}
|
||||
{-1109793600 -10800 1 -03}
|
||||
{-1109793600 -10800 1 -04}
|
||||
{-1099429200 -14400 0 -04}
|
||||
{-1078257600 -10800 1 -03}
|
||||
{-1078257600 -10800 1 -04}
|
||||
{-1067806800 -14400 0 -04}
|
||||
{-1046635200 -10800 1 -03}
|
||||
{-1046635200 -10800 1 -04}
|
||||
{-1036270800 -14400 0 -04}
|
||||
{-1015099200 -10800 1 -03}
|
||||
{-1015099200 -10800 1 -04}
|
||||
{-1004734800 -14400 0 -04}
|
||||
{-983563200 -10800 1 -03}
|
||||
{-983563200 -10800 1 -04}
|
||||
{-973198800 -14400 0 -04}
|
||||
{-952027200 -10800 1 -03}
|
||||
{-952027200 -10800 1 -04}
|
||||
{-941576400 -14400 0 -04}
|
||||
{-931032000 -10800 1 -03}
|
||||
{-931032000 -10800 1 -04}
|
||||
{-900882000 -14400 0 -04}
|
||||
{-890337600 -10800 1 -03}
|
||||
{-890337600 -10800 1 -04}
|
||||
{-833749200 -14400 0 -04}
|
||||
{-827265600 -10800 1 -03}
|
||||
{-827265600 -10800 1 -04}
|
||||
{-752274000 -14400 0 -04}
|
||||
{-733780800 -10800 1 -03}
|
||||
{-733780800 -10800 1 -04}
|
||||
{-197326800 -14400 0 -04}
|
||||
{-190843200 -10800 1 -03}
|
||||
{-190843200 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-164491200 -10800 1 -03}
|
||||
{-164491200 -10800 1 -04}
|
||||
{-152658000 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{596948400 -7200 1 -02}
|
||||
{596948400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{636516000 -10800 0 -03}
|
||||
{656478000 -7200 1 -02}
|
||||
{656478000 -7200 1 -03}
|
||||
{667792800 -14400 0 -04}
|
||||
{673588800 -10800 0 -03}
|
||||
{687927600 -7200 1 -02}
|
||||
{687927600 -7200 1 -03}
|
||||
{699415200 -10800 0 -03}
|
||||
{719377200 -7200 1 -02}
|
||||
{719377200 -7200 1 -03}
|
||||
{731469600 -10800 0 -03}
|
||||
{938916000 -10800 0 -04}
|
||||
{938919600 -10800 1 -03}
|
||||
{938919600 -10800 1 -04}
|
||||
{952056000 -10800 0 -03}
|
||||
{1086058800 -14400 0 -04}
|
||||
{1087704000 -10800 0 -03}
|
||||
{1198983600 -7200 1 -02}
|
||||
{1198983600 -7200 1 -03}
|
||||
{1205632800 -10800 0 -03}
|
||||
{1224295200 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -4,65 +4,65 @@ set TZData(:America/Argentina/Mendoza) {
|
||||
{-9223372036854775808 -16516 0 LMT}
|
||||
{-2372095484 -15408 0 CMT}
|
||||
{-1567453392 -14400 0 -04}
|
||||
{-1233432000 -10800 0 -03}
|
||||
{-1233432000 -10800 0 -04}
|
||||
{-1222981200 -14400 0 -04}
|
||||
{-1205956800 -10800 1 -03}
|
||||
{-1205956800 -10800 1 -04}
|
||||
{-1194037200 -14400 0 -04}
|
||||
{-1172865600 -10800 1 -03}
|
||||
{-1172865600 -10800 1 -04}
|
||||
{-1162501200 -14400 0 -04}
|
||||
{-1141329600 -10800 1 -03}
|
||||
{-1141329600 -10800 1 -04}
|
||||
{-1130965200 -14400 0 -04}
|
||||
{-1109793600 -10800 1 -03}
|
||||
{-1109793600 -10800 1 -04}
|
||||
{-1099429200 -14400 0 -04}
|
||||
{-1078257600 -10800 1 -03}
|
||||
{-1078257600 -10800 1 -04}
|
||||
{-1067806800 -14400 0 -04}
|
||||
{-1046635200 -10800 1 -03}
|
||||
{-1046635200 -10800 1 -04}
|
||||
{-1036270800 -14400 0 -04}
|
||||
{-1015099200 -10800 1 -03}
|
||||
{-1015099200 -10800 1 -04}
|
||||
{-1004734800 -14400 0 -04}
|
||||
{-983563200 -10800 1 -03}
|
||||
{-983563200 -10800 1 -04}
|
||||
{-973198800 -14400 0 -04}
|
||||
{-952027200 -10800 1 -03}
|
||||
{-952027200 -10800 1 -04}
|
||||
{-941576400 -14400 0 -04}
|
||||
{-931032000 -10800 1 -03}
|
||||
{-931032000 -10800 1 -04}
|
||||
{-900882000 -14400 0 -04}
|
||||
{-890337600 -10800 1 -03}
|
||||
{-890337600 -10800 1 -04}
|
||||
{-833749200 -14400 0 -04}
|
||||
{-827265600 -10800 1 -03}
|
||||
{-827265600 -10800 1 -04}
|
||||
{-752274000 -14400 0 -04}
|
||||
{-733780800 -10800 1 -03}
|
||||
{-733780800 -10800 1 -04}
|
||||
{-197326800 -14400 0 -04}
|
||||
{-190843200 -10800 1 -03}
|
||||
{-190843200 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-164491200 -10800 1 -03}
|
||||
{-164491200 -10800 1 -04}
|
||||
{-152658000 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{596948400 -7200 1 -02}
|
||||
{596948400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{636516000 -14400 0 -04}
|
||||
{655963200 -10800 1 -03}
|
||||
{667796400 -14400 0 -04}
|
||||
{687499200 -10800 1 -03}
|
||||
{699418800 -14400 0 -04}
|
||||
{719380800 -7200 0 -02}
|
||||
{719380800 -7200 0 -03}
|
||||
{731469600 -10800 0 -03}
|
||||
{938916000 -10800 0 -04}
|
||||
{938919600 -10800 1 -03}
|
||||
{938919600 -10800 1 -04}
|
||||
{952056000 -10800 0 -03}
|
||||
{1085281200 -14400 0 -04}
|
||||
{1096171200 -10800 0 -03}
|
||||
{1198983600 -7200 1 -02}
|
||||
{1198983600 -7200 1 -03}
|
||||
{1205632800 -10800 0 -03}
|
||||
{1224295200 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -4,65 +4,65 @@ set TZData(:America/Argentina/Rio_Gallegos) {
|
||||
{-9223372036854775808 -16612 0 LMT}
|
||||
{-2372095388 -15408 0 CMT}
|
||||
{-1567453392 -14400 0 -04}
|
||||
{-1233432000 -10800 0 -03}
|
||||
{-1233432000 -10800 0 -04}
|
||||
{-1222981200 -14400 0 -04}
|
||||
{-1205956800 -10800 1 -03}
|
||||
{-1205956800 -10800 1 -04}
|
||||
{-1194037200 -14400 0 -04}
|
||||
{-1172865600 -10800 1 -03}
|
||||
{-1172865600 -10800 1 -04}
|
||||
{-1162501200 -14400 0 -04}
|
||||
{-1141329600 -10800 1 -03}
|
||||
{-1141329600 -10800 1 -04}
|
||||
{-1130965200 -14400 0 -04}
|
||||
{-1109793600 -10800 1 -03}
|
||||
{-1109793600 -10800 1 -04}
|
||||
{-1099429200 -14400 0 -04}
|
||||
{-1078257600 -10800 1 -03}
|
||||
{-1078257600 -10800 1 -04}
|
||||
{-1067806800 -14400 0 -04}
|
||||
{-1046635200 -10800 1 -03}
|
||||
{-1046635200 -10800 1 -04}
|
||||
{-1036270800 -14400 0 -04}
|
||||
{-1015099200 -10800 1 -03}
|
||||
{-1015099200 -10800 1 -04}
|
||||
{-1004734800 -14400 0 -04}
|
||||
{-983563200 -10800 1 -03}
|
||||
{-983563200 -10800 1 -04}
|
||||
{-973198800 -14400 0 -04}
|
||||
{-952027200 -10800 1 -03}
|
||||
{-952027200 -10800 1 -04}
|
||||
{-941576400 -14400 0 -04}
|
||||
{-931032000 -10800 1 -03}
|
||||
{-931032000 -10800 1 -04}
|
||||
{-900882000 -14400 0 -04}
|
||||
{-890337600 -10800 1 -03}
|
||||
{-890337600 -10800 1 -04}
|
||||
{-833749200 -14400 0 -04}
|
||||
{-827265600 -10800 1 -03}
|
||||
{-827265600 -10800 1 -04}
|
||||
{-752274000 -14400 0 -04}
|
||||
{-733780800 -10800 1 -03}
|
||||
{-733780800 -10800 1 -04}
|
||||
{-197326800 -14400 0 -04}
|
||||
{-190843200 -10800 1 -03}
|
||||
{-190843200 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-164491200 -10800 1 -03}
|
||||
{-164491200 -10800 1 -04}
|
||||
{-152658000 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{596948400 -7200 1 -02}
|
||||
{596948400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{636516000 -10800 0 -03}
|
||||
{656478000 -7200 1 -02}
|
||||
{656478000 -7200 1 -03}
|
||||
{667965600 -10800 0 -03}
|
||||
{687927600 -7200 1 -02}
|
||||
{687927600 -7200 1 -03}
|
||||
{699415200 -10800 0 -03}
|
||||
{719377200 -7200 1 -02}
|
||||
{719377200 -7200 1 -03}
|
||||
{731469600 -10800 0 -03}
|
||||
{938916000 -10800 0 -04}
|
||||
{938919600 -10800 1 -03}
|
||||
{938919600 -10800 1 -04}
|
||||
{952056000 -10800 0 -03}
|
||||
{1086058800 -14400 0 -04}
|
||||
{1087704000 -10800 0 -03}
|
||||
{1198983600 -7200 1 -02}
|
||||
{1198983600 -7200 1 -03}
|
||||
{1205632800 -10800 0 -03}
|
||||
{1224295200 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -4,63 +4,63 @@ set TZData(:America/Argentina/Salta) {
|
||||
{-9223372036854775808 -15700 0 LMT}
|
||||
{-2372096300 -15408 0 CMT}
|
||||
{-1567453392 -14400 0 -04}
|
||||
{-1233432000 -10800 0 -03}
|
||||
{-1233432000 -10800 0 -04}
|
||||
{-1222981200 -14400 0 -04}
|
||||
{-1205956800 -10800 1 -03}
|
||||
{-1205956800 -10800 1 -04}
|
||||
{-1194037200 -14400 0 -04}
|
||||
{-1172865600 -10800 1 -03}
|
||||
{-1172865600 -10800 1 -04}
|
||||
{-1162501200 -14400 0 -04}
|
||||
{-1141329600 -10800 1 -03}
|
||||
{-1141329600 -10800 1 -04}
|
||||
{-1130965200 -14400 0 -04}
|
||||
{-1109793600 -10800 1 -03}
|
||||
{-1109793600 -10800 1 -04}
|
||||
{-1099429200 -14400 0 -04}
|
||||
{-1078257600 -10800 1 -03}
|
||||
{-1078257600 -10800 1 -04}
|
||||
{-1067806800 -14400 0 -04}
|
||||
{-1046635200 -10800 1 -03}
|
||||
{-1046635200 -10800 1 -04}
|
||||
{-1036270800 -14400 0 -04}
|
||||
{-1015099200 -10800 1 -03}
|
||||
{-1015099200 -10800 1 -04}
|
||||
{-1004734800 -14400 0 -04}
|
||||
{-983563200 -10800 1 -03}
|
||||
{-983563200 -10800 1 -04}
|
||||
{-973198800 -14400 0 -04}
|
||||
{-952027200 -10800 1 -03}
|
||||
{-952027200 -10800 1 -04}
|
||||
{-941576400 -14400 0 -04}
|
||||
{-931032000 -10800 1 -03}
|
||||
{-931032000 -10800 1 -04}
|
||||
{-900882000 -14400 0 -04}
|
||||
{-890337600 -10800 1 -03}
|
||||
{-890337600 -10800 1 -04}
|
||||
{-833749200 -14400 0 -04}
|
||||
{-827265600 -10800 1 -03}
|
||||
{-827265600 -10800 1 -04}
|
||||
{-752274000 -14400 0 -04}
|
||||
{-733780800 -10800 1 -03}
|
||||
{-733780800 -10800 1 -04}
|
||||
{-197326800 -14400 0 -04}
|
||||
{-190843200 -10800 1 -03}
|
||||
{-190843200 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-164491200 -10800 1 -03}
|
||||
{-164491200 -10800 1 -04}
|
||||
{-152658000 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{596948400 -7200 1 -02}
|
||||
{596948400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{636516000 -10800 0 -03}
|
||||
{656478000 -7200 1 -02}
|
||||
{656478000 -7200 1 -03}
|
||||
{667965600 -14400 0 -04}
|
||||
{687931200 -7200 0 -02}
|
||||
{687931200 -7200 0 -03}
|
||||
{699415200 -10800 0 -03}
|
||||
{719377200 -7200 1 -02}
|
||||
{719377200 -7200 1 -03}
|
||||
{731469600 -10800 0 -03}
|
||||
{938916000 -10800 0 -04}
|
||||
{938919600 -10800 1 -03}
|
||||
{938919600 -10800 1 -04}
|
||||
{952056000 -10800 0 -03}
|
||||
{1198983600 -7200 1 -02}
|
||||
{1198983600 -7200 1 -03}
|
||||
{1205632800 -10800 0 -03}
|
||||
{1224295200 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -4,66 +4,66 @@ set TZData(:America/Argentina/San_Juan) {
|
||||
{-9223372036854775808 -16444 0 LMT}
|
||||
{-2372095556 -15408 0 CMT}
|
||||
{-1567453392 -14400 0 -04}
|
||||
{-1233432000 -10800 0 -03}
|
||||
{-1233432000 -10800 0 -04}
|
||||
{-1222981200 -14400 0 -04}
|
||||
{-1205956800 -10800 1 -03}
|
||||
{-1205956800 -10800 1 -04}
|
||||
{-1194037200 -14400 0 -04}
|
||||
{-1172865600 -10800 1 -03}
|
||||
{-1172865600 -10800 1 -04}
|
||||
{-1162501200 -14400 0 -04}
|
||||
{-1141329600 -10800 1 -03}
|
||||
{-1141329600 -10800 1 -04}
|
||||
{-1130965200 -14400 0 -04}
|
||||
{-1109793600 -10800 1 -03}
|
||||
{-1109793600 -10800 1 -04}
|
||||
{-1099429200 -14400 0 -04}
|
||||
{-1078257600 -10800 1 -03}
|
||||
{-1078257600 -10800 1 -04}
|
||||
{-1067806800 -14400 0 -04}
|
||||
{-1046635200 -10800 1 -03}
|
||||
{-1046635200 -10800 1 -04}
|
||||
{-1036270800 -14400 0 -04}
|
||||
{-1015099200 -10800 1 -03}
|
||||
{-1015099200 -10800 1 -04}
|
||||
{-1004734800 -14400 0 -04}
|
||||
{-983563200 -10800 1 -03}
|
||||
{-983563200 -10800 1 -04}
|
||||
{-973198800 -14400 0 -04}
|
||||
{-952027200 -10800 1 -03}
|
||||
{-952027200 -10800 1 -04}
|
||||
{-941576400 -14400 0 -04}
|
||||
{-931032000 -10800 1 -03}
|
||||
{-931032000 -10800 1 -04}
|
||||
{-900882000 -14400 0 -04}
|
||||
{-890337600 -10800 1 -03}
|
||||
{-890337600 -10800 1 -04}
|
||||
{-833749200 -14400 0 -04}
|
||||
{-827265600 -10800 1 -03}
|
||||
{-827265600 -10800 1 -04}
|
||||
{-752274000 -14400 0 -04}
|
||||
{-733780800 -10800 1 -03}
|
||||
{-733780800 -10800 1 -04}
|
||||
{-197326800 -14400 0 -04}
|
||||
{-190843200 -10800 1 -03}
|
||||
{-190843200 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-164491200 -10800 1 -03}
|
||||
{-164491200 -10800 1 -04}
|
||||
{-152658000 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{596948400 -7200 1 -02}
|
||||
{596948400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{636516000 -10800 0 -03}
|
||||
{656478000 -7200 1 -02}
|
||||
{656478000 -7200 1 -03}
|
||||
{667792800 -14400 0 -04}
|
||||
{673588800 -10800 0 -03}
|
||||
{687927600 -7200 1 -02}
|
||||
{687927600 -7200 1 -03}
|
||||
{699415200 -10800 0 -03}
|
||||
{719377200 -7200 1 -02}
|
||||
{719377200 -7200 1 -03}
|
||||
{731469600 -10800 0 -03}
|
||||
{938916000 -10800 0 -04}
|
||||
{938919600 -10800 1 -03}
|
||||
{938919600 -10800 1 -04}
|
||||
{952056000 -10800 0 -03}
|
||||
{1085972400 -14400 0 -04}
|
||||
{1090728000 -10800 0 -03}
|
||||
{1198983600 -7200 1 -02}
|
||||
{1198983600 -7200 1 -03}
|
||||
{1205632800 -10800 0 -03}
|
||||
{1224295200 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -4,52 +4,52 @@ set TZData(:America/Argentina/San_Luis) {
|
||||
{-9223372036854775808 -15924 0 LMT}
|
||||
{-2372096076 -15408 0 CMT}
|
||||
{-1567453392 -14400 0 -04}
|
||||
{-1233432000 -10800 0 -03}
|
||||
{-1233432000 -10800 0 -04}
|
||||
{-1222981200 -14400 0 -04}
|
||||
{-1205956800 -10800 1 -03}
|
||||
{-1205956800 -10800 1 -04}
|
||||
{-1194037200 -14400 0 -04}
|
||||
{-1172865600 -10800 1 -03}
|
||||
{-1172865600 -10800 1 -04}
|
||||
{-1162501200 -14400 0 -04}
|
||||
{-1141329600 -10800 1 -03}
|
||||
{-1141329600 -10800 1 -04}
|
||||
{-1130965200 -14400 0 -04}
|
||||
{-1109793600 -10800 1 -03}
|
||||
{-1109793600 -10800 1 -04}
|
||||
{-1099429200 -14400 0 -04}
|
||||
{-1078257600 -10800 1 -03}
|
||||
{-1078257600 -10800 1 -04}
|
||||
{-1067806800 -14400 0 -04}
|
||||
{-1046635200 -10800 1 -03}
|
||||
{-1046635200 -10800 1 -04}
|
||||
{-1036270800 -14400 0 -04}
|
||||
{-1015099200 -10800 1 -03}
|
||||
{-1015099200 -10800 1 -04}
|
||||
{-1004734800 -14400 0 -04}
|
||||
{-983563200 -10800 1 -03}
|
||||
{-983563200 -10800 1 -04}
|
||||
{-973198800 -14400 0 -04}
|
||||
{-952027200 -10800 1 -03}
|
||||
{-952027200 -10800 1 -04}
|
||||
{-941576400 -14400 0 -04}
|
||||
{-931032000 -10800 1 -03}
|
||||
{-931032000 -10800 1 -04}
|
||||
{-900882000 -14400 0 -04}
|
||||
{-890337600 -10800 1 -03}
|
||||
{-890337600 -10800 1 -04}
|
||||
{-833749200 -14400 0 -04}
|
||||
{-827265600 -10800 1 -03}
|
||||
{-827265600 -10800 1 -04}
|
||||
{-752274000 -14400 0 -04}
|
||||
{-733780800 -10800 1 -03}
|
||||
{-733780800 -10800 1 -04}
|
||||
{-197326800 -14400 0 -04}
|
||||
{-190843200 -10800 1 -03}
|
||||
{-190843200 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-164491200 -10800 1 -03}
|
||||
{-164491200 -10800 1 -04}
|
||||
{-152658000 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{596948400 -7200 1 -02}
|
||||
{596948400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{631159200 -7200 1 -02}
|
||||
{637380000 -14400 0 -04}
|
||||
{655963200 -10800 1 -03}
|
||||
@@ -59,10 +59,10 @@ set TZData(:America/Argentina/San_Luis) {
|
||||
{952052400 -10800 0 -03}
|
||||
{1085972400 -14400 0 -04}
|
||||
{1090728000 -10800 0 -03}
|
||||
{1198983600 -7200 1 -02}
|
||||
{1198983600 -7200 1 -03}
|
||||
{1200880800 -10800 0 -04}
|
||||
{1205031600 -14400 0 -04}
|
||||
{1223784000 -10800 1 -03}
|
||||
{1223784000 -10800 1 -04}
|
||||
{1236481200 -14400 0 -04}
|
||||
{1255233600 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -4,66 +4,66 @@ set TZData(:America/Argentina/Tucuman) {
|
||||
{-9223372036854775808 -15652 0 LMT}
|
||||
{-2372096348 -15408 0 CMT}
|
||||
{-1567453392 -14400 0 -04}
|
||||
{-1233432000 -10800 0 -03}
|
||||
{-1233432000 -10800 0 -04}
|
||||
{-1222981200 -14400 0 -04}
|
||||
{-1205956800 -10800 1 -03}
|
||||
{-1205956800 -10800 1 -04}
|
||||
{-1194037200 -14400 0 -04}
|
||||
{-1172865600 -10800 1 -03}
|
||||
{-1172865600 -10800 1 -04}
|
||||
{-1162501200 -14400 0 -04}
|
||||
{-1141329600 -10800 1 -03}
|
||||
{-1141329600 -10800 1 -04}
|
||||
{-1130965200 -14400 0 -04}
|
||||
{-1109793600 -10800 1 -03}
|
||||
{-1109793600 -10800 1 -04}
|
||||
{-1099429200 -14400 0 -04}
|
||||
{-1078257600 -10800 1 -03}
|
||||
{-1078257600 -10800 1 -04}
|
||||
{-1067806800 -14400 0 -04}
|
||||
{-1046635200 -10800 1 -03}
|
||||
{-1046635200 -10800 1 -04}
|
||||
{-1036270800 -14400 0 -04}
|
||||
{-1015099200 -10800 1 -03}
|
||||
{-1015099200 -10800 1 -04}
|
||||
{-1004734800 -14400 0 -04}
|
||||
{-983563200 -10800 1 -03}
|
||||
{-983563200 -10800 1 -04}
|
||||
{-973198800 -14400 0 -04}
|
||||
{-952027200 -10800 1 -03}
|
||||
{-952027200 -10800 1 -04}
|
||||
{-941576400 -14400 0 -04}
|
||||
{-931032000 -10800 1 -03}
|
||||
{-931032000 -10800 1 -04}
|
||||
{-900882000 -14400 0 -04}
|
||||
{-890337600 -10800 1 -03}
|
||||
{-890337600 -10800 1 -04}
|
||||
{-833749200 -14400 0 -04}
|
||||
{-827265600 -10800 1 -03}
|
||||
{-827265600 -10800 1 -04}
|
||||
{-752274000 -14400 0 -04}
|
||||
{-733780800 -10800 1 -03}
|
||||
{-733780800 -10800 1 -04}
|
||||
{-197326800 -14400 0 -04}
|
||||
{-190843200 -10800 1 -03}
|
||||
{-190843200 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-164491200 -10800 1 -03}
|
||||
{-164491200 -10800 1 -04}
|
||||
{-152658000 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{596948400 -7200 1 -02}
|
||||
{596948400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{636516000 -10800 0 -03}
|
||||
{656478000 -7200 1 -02}
|
||||
{656478000 -7200 1 -03}
|
||||
{667965600 -14400 0 -04}
|
||||
{687931200 -7200 0 -02}
|
||||
{687931200 -7200 0 -03}
|
||||
{699415200 -10800 0 -03}
|
||||
{719377200 -7200 1 -02}
|
||||
{719377200 -7200 1 -03}
|
||||
{731469600 -10800 0 -03}
|
||||
{938916000 -10800 0 -04}
|
||||
{938919600 -10800 1 -03}
|
||||
{938919600 -10800 1 -04}
|
||||
{952056000 -10800 0 -03}
|
||||
{1086058800 -14400 0 -04}
|
||||
{1087099200 -10800 0 -03}
|
||||
{1198983600 -7200 1 -02}
|
||||
{1198983600 -7200 1 -03}
|
||||
{1205632800 -10800 0 -03}
|
||||
{1224385200 -7200 1 -02}
|
||||
{1224385200 -7200 1 -03}
|
||||
{1237082400 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -4,65 +4,65 @@ set TZData(:America/Argentina/Ushuaia) {
|
||||
{-9223372036854775808 -16392 0 LMT}
|
||||
{-2372095608 -15408 0 CMT}
|
||||
{-1567453392 -14400 0 -04}
|
||||
{-1233432000 -10800 0 -03}
|
||||
{-1233432000 -10800 0 -04}
|
||||
{-1222981200 -14400 0 -04}
|
||||
{-1205956800 -10800 1 -03}
|
||||
{-1205956800 -10800 1 -04}
|
||||
{-1194037200 -14400 0 -04}
|
||||
{-1172865600 -10800 1 -03}
|
||||
{-1172865600 -10800 1 -04}
|
||||
{-1162501200 -14400 0 -04}
|
||||
{-1141329600 -10800 1 -03}
|
||||
{-1141329600 -10800 1 -04}
|
||||
{-1130965200 -14400 0 -04}
|
||||
{-1109793600 -10800 1 -03}
|
||||
{-1109793600 -10800 1 -04}
|
||||
{-1099429200 -14400 0 -04}
|
||||
{-1078257600 -10800 1 -03}
|
||||
{-1078257600 -10800 1 -04}
|
||||
{-1067806800 -14400 0 -04}
|
||||
{-1046635200 -10800 1 -03}
|
||||
{-1046635200 -10800 1 -04}
|
||||
{-1036270800 -14400 0 -04}
|
||||
{-1015099200 -10800 1 -03}
|
||||
{-1015099200 -10800 1 -04}
|
||||
{-1004734800 -14400 0 -04}
|
||||
{-983563200 -10800 1 -03}
|
||||
{-983563200 -10800 1 -04}
|
||||
{-973198800 -14400 0 -04}
|
||||
{-952027200 -10800 1 -03}
|
||||
{-952027200 -10800 1 -04}
|
||||
{-941576400 -14400 0 -04}
|
||||
{-931032000 -10800 1 -03}
|
||||
{-931032000 -10800 1 -04}
|
||||
{-900882000 -14400 0 -04}
|
||||
{-890337600 -10800 1 -03}
|
||||
{-890337600 -10800 1 -04}
|
||||
{-833749200 -14400 0 -04}
|
||||
{-827265600 -10800 1 -03}
|
||||
{-827265600 -10800 1 -04}
|
||||
{-752274000 -14400 0 -04}
|
||||
{-733780800 -10800 1 -03}
|
||||
{-733780800 -10800 1 -04}
|
||||
{-197326800 -14400 0 -04}
|
||||
{-190843200 -10800 1 -03}
|
||||
{-190843200 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-164491200 -10800 1 -03}
|
||||
{-164491200 -10800 1 -04}
|
||||
{-152658000 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{596948400 -7200 1 -02}
|
||||
{596948400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{636516000 -10800 0 -03}
|
||||
{656478000 -7200 1 -02}
|
||||
{656478000 -7200 1 -03}
|
||||
{667965600 -10800 0 -03}
|
||||
{687927600 -7200 1 -02}
|
||||
{687927600 -7200 1 -03}
|
||||
{699415200 -10800 0 -03}
|
||||
{719377200 -7200 1 -02}
|
||||
{719377200 -7200 1 -03}
|
||||
{731469600 -10800 0 -03}
|
||||
{938916000 -10800 0 -04}
|
||||
{938919600 -10800 1 -03}
|
||||
{938919600 -10800 1 -04}
|
||||
{952056000 -10800 0 -03}
|
||||
{1085886000 -14400 0 -04}
|
||||
{1087704000 -10800 0 -03}
|
||||
{1198983600 -7200 1 -02}
|
||||
{1198983600 -7200 1 -03}
|
||||
{1205632800 -10800 0 -03}
|
||||
{1224295200 -10800 0 -03}
|
||||
}
|
||||
|
||||
+125
-125
@@ -7,253 +7,253 @@ set TZData(:America/Asuncion) {
|
||||
{86760000 -10800 0 -03}
|
||||
{134017200 -14400 0 -04}
|
||||
{162878400 -14400 0 -04}
|
||||
{181368000 -10800 1 -03}
|
||||
{181368000 -10800 1 -04}
|
||||
{194497200 -14400 0 -04}
|
||||
{212990400 -10800 1 -03}
|
||||
{212990400 -10800 1 -04}
|
||||
{226033200 -14400 0 -04}
|
||||
{244526400 -10800 1 -03}
|
||||
{244526400 -10800 1 -04}
|
||||
{257569200 -14400 0 -04}
|
||||
{276062400 -10800 1 -03}
|
||||
{276062400 -10800 1 -04}
|
||||
{291783600 -14400 0 -04}
|
||||
{307598400 -10800 1 -03}
|
||||
{307598400 -10800 1 -04}
|
||||
{323406000 -14400 0 -04}
|
||||
{339220800 -10800 1 -03}
|
||||
{339220800 -10800 1 -04}
|
||||
{354942000 -14400 0 -04}
|
||||
{370756800 -10800 1 -03}
|
||||
{370756800 -10800 1 -04}
|
||||
{386478000 -14400 0 -04}
|
||||
{402292800 -10800 1 -03}
|
||||
{402292800 -10800 1 -04}
|
||||
{418014000 -14400 0 -04}
|
||||
{433828800 -10800 1 -03}
|
||||
{433828800 -10800 1 -04}
|
||||
{449636400 -14400 0 -04}
|
||||
{465451200 -10800 1 -03}
|
||||
{465451200 -10800 1 -04}
|
||||
{481172400 -14400 0 -04}
|
||||
{496987200 -10800 1 -03}
|
||||
{496987200 -10800 1 -04}
|
||||
{512708400 -14400 0 -04}
|
||||
{528523200 -10800 1 -03}
|
||||
{528523200 -10800 1 -04}
|
||||
{544244400 -14400 0 -04}
|
||||
{560059200 -10800 1 -03}
|
||||
{560059200 -10800 1 -04}
|
||||
{575866800 -14400 0 -04}
|
||||
{591681600 -10800 1 -03}
|
||||
{591681600 -10800 1 -04}
|
||||
{607402800 -14400 0 -04}
|
||||
{625032000 -10800 1 -03}
|
||||
{625032000 -10800 1 -04}
|
||||
{638938800 -14400 0 -04}
|
||||
{654753600 -10800 1 -03}
|
||||
{654753600 -10800 1 -04}
|
||||
{670474800 -14400 0 -04}
|
||||
{686721600 -10800 1 -03}
|
||||
{686721600 -10800 1 -04}
|
||||
{699418800 -14400 0 -04}
|
||||
{718257600 -10800 1 -03}
|
||||
{718257600 -10800 1 -04}
|
||||
{733546800 -14400 0 -04}
|
||||
{749448000 -10800 1 -03}
|
||||
{749448000 -10800 1 -04}
|
||||
{762318000 -14400 0 -04}
|
||||
{780984000 -10800 1 -03}
|
||||
{780984000 -10800 1 -04}
|
||||
{793767600 -14400 0 -04}
|
||||
{812520000 -10800 1 -03}
|
||||
{812520000 -10800 1 -04}
|
||||
{825649200 -14400 0 -04}
|
||||
{844574400 -10800 1 -03}
|
||||
{844574400 -10800 1 -04}
|
||||
{856666800 -14400 0 -04}
|
||||
{876024000 -10800 1 -03}
|
||||
{876024000 -10800 1 -04}
|
||||
{888721200 -14400 0 -04}
|
||||
{907473600 -10800 1 -03}
|
||||
{907473600 -10800 1 -04}
|
||||
{920775600 -14400 0 -04}
|
||||
{938923200 -10800 1 -03}
|
||||
{938923200 -10800 1 -04}
|
||||
{952225200 -14400 0 -04}
|
||||
{970372800 -10800 1 -03}
|
||||
{970372800 -10800 1 -04}
|
||||
{983674800 -14400 0 -04}
|
||||
{1002427200 -10800 1 -03}
|
||||
{1002427200 -10800 1 -04}
|
||||
{1018148400 -14400 0 -04}
|
||||
{1030852800 -10800 1 -03}
|
||||
{1030852800 -10800 1 -04}
|
||||
{1049598000 -14400 0 -04}
|
||||
{1062907200 -10800 1 -03}
|
||||
{1062907200 -10800 1 -04}
|
||||
{1081047600 -14400 0 -04}
|
||||
{1097985600 -10800 1 -03}
|
||||
{1097985600 -10800 1 -04}
|
||||
{1110682800 -14400 0 -04}
|
||||
{1129435200 -10800 1 -03}
|
||||
{1129435200 -10800 1 -04}
|
||||
{1142132400 -14400 0 -04}
|
||||
{1160884800 -10800 1 -03}
|
||||
{1160884800 -10800 1 -04}
|
||||
{1173582000 -14400 0 -04}
|
||||
{1192939200 -10800 1 -03}
|
||||
{1192939200 -10800 1 -04}
|
||||
{1205031600 -14400 0 -04}
|
||||
{1224388800 -10800 1 -03}
|
||||
{1224388800 -10800 1 -04}
|
||||
{1236481200 -14400 0 -04}
|
||||
{1255838400 -10800 1 -03}
|
||||
{1255838400 -10800 1 -04}
|
||||
{1270954800 -14400 0 -04}
|
||||
{1286078400 -10800 1 -03}
|
||||
{1286078400 -10800 1 -04}
|
||||
{1302404400 -14400 0 -04}
|
||||
{1317528000 -10800 1 -03}
|
||||
{1317528000 -10800 1 -04}
|
||||
{1333854000 -14400 0 -04}
|
||||
{1349582400 -10800 1 -03}
|
||||
{1349582400 -10800 1 -04}
|
||||
{1364094000 -14400 0 -04}
|
||||
{1381032000 -10800 1 -03}
|
||||
{1381032000 -10800 1 -04}
|
||||
{1395543600 -14400 0 -04}
|
||||
{1412481600 -10800 1 -03}
|
||||
{1412481600 -10800 1 -04}
|
||||
{1426993200 -14400 0 -04}
|
||||
{1443931200 -10800 1 -03}
|
||||
{1443931200 -10800 1 -04}
|
||||
{1459047600 -14400 0 -04}
|
||||
{1475380800 -10800 1 -03}
|
||||
{1475380800 -10800 1 -04}
|
||||
{1490497200 -14400 0 -04}
|
||||
{1506830400 -10800 1 -03}
|
||||
{1506830400 -10800 1 -04}
|
||||
{1521946800 -14400 0 -04}
|
||||
{1538884800 -10800 1 -03}
|
||||
{1538884800 -10800 1 -04}
|
||||
{1553396400 -14400 0 -04}
|
||||
{1570334400 -10800 1 -03}
|
||||
{1570334400 -10800 1 -04}
|
||||
{1584846000 -14400 0 -04}
|
||||
{1601784000 -10800 1 -03}
|
||||
{1601784000 -10800 1 -04}
|
||||
{1616900400 -14400 0 -04}
|
||||
{1633233600 -10800 1 -03}
|
||||
{1633233600 -10800 1 -04}
|
||||
{1648350000 -14400 0 -04}
|
||||
{1664683200 -10800 1 -03}
|
||||
{1664683200 -10800 1 -04}
|
||||
{1679799600 -14400 0 -04}
|
||||
{1696132800 -10800 1 -03}
|
||||
{1696132800 -10800 1 -04}
|
||||
{1711249200 -14400 0 -04}
|
||||
{1728187200 -10800 1 -03}
|
||||
{1728187200 -10800 1 -04}
|
||||
{1742698800 -14400 0 -04}
|
||||
{1759636800 -10800 1 -03}
|
||||
{1759636800 -10800 1 -04}
|
||||
{1774148400 -14400 0 -04}
|
||||
{1791086400 -10800 1 -03}
|
||||
{1791086400 -10800 1 -04}
|
||||
{1806202800 -14400 0 -04}
|
||||
{1822536000 -10800 1 -03}
|
||||
{1822536000 -10800 1 -04}
|
||||
{1837652400 -14400 0 -04}
|
||||
{1853985600 -10800 1 -03}
|
||||
{1853985600 -10800 1 -04}
|
||||
{1869102000 -14400 0 -04}
|
||||
{1886040000 -10800 1 -03}
|
||||
{1886040000 -10800 1 -04}
|
||||
{1900551600 -14400 0 -04}
|
||||
{1917489600 -10800 1 -03}
|
||||
{1917489600 -10800 1 -04}
|
||||
{1932001200 -14400 0 -04}
|
||||
{1948939200 -10800 1 -03}
|
||||
{1948939200 -10800 1 -04}
|
||||
{1964055600 -14400 0 -04}
|
||||
{1980388800 -10800 1 -03}
|
||||
{1980388800 -10800 1 -04}
|
||||
{1995505200 -14400 0 -04}
|
||||
{2011838400 -10800 1 -03}
|
||||
{2011838400 -10800 1 -04}
|
||||
{2026954800 -14400 0 -04}
|
||||
{2043288000 -10800 1 -03}
|
||||
{2043288000 -10800 1 -04}
|
||||
{2058404400 -14400 0 -04}
|
||||
{2075342400 -10800 1 -03}
|
||||
{2075342400 -10800 1 -04}
|
||||
{2089854000 -14400 0 -04}
|
||||
{2106792000 -10800 1 -03}
|
||||
{2106792000 -10800 1 -04}
|
||||
{2121303600 -14400 0 -04}
|
||||
{2138241600 -10800 1 -03}
|
||||
{2138241600 -10800 1 -04}
|
||||
{2153358000 -14400 0 -04}
|
||||
{2169691200 -10800 1 -03}
|
||||
{2169691200 -10800 1 -04}
|
||||
{2184807600 -14400 0 -04}
|
||||
{2201140800 -10800 1 -03}
|
||||
{2201140800 -10800 1 -04}
|
||||
{2216257200 -14400 0 -04}
|
||||
{2233195200 -10800 1 -03}
|
||||
{2233195200 -10800 1 -04}
|
||||
{2247706800 -14400 0 -04}
|
||||
{2264644800 -10800 1 -03}
|
||||
{2264644800 -10800 1 -04}
|
||||
{2279156400 -14400 0 -04}
|
||||
{2296094400 -10800 1 -03}
|
||||
{2296094400 -10800 1 -04}
|
||||
{2310606000 -14400 0 -04}
|
||||
{2327544000 -10800 1 -03}
|
||||
{2327544000 -10800 1 -04}
|
||||
{2342660400 -14400 0 -04}
|
||||
{2358993600 -10800 1 -03}
|
||||
{2358993600 -10800 1 -04}
|
||||
{2374110000 -14400 0 -04}
|
||||
{2390443200 -10800 1 -03}
|
||||
{2390443200 -10800 1 -04}
|
||||
{2405559600 -14400 0 -04}
|
||||
{2422497600 -10800 1 -03}
|
||||
{2422497600 -10800 1 -04}
|
||||
{2437009200 -14400 0 -04}
|
||||
{2453947200 -10800 1 -03}
|
||||
{2453947200 -10800 1 -04}
|
||||
{2468458800 -14400 0 -04}
|
||||
{2485396800 -10800 1 -03}
|
||||
{2485396800 -10800 1 -04}
|
||||
{2500513200 -14400 0 -04}
|
||||
{2516846400 -10800 1 -03}
|
||||
{2516846400 -10800 1 -04}
|
||||
{2531962800 -14400 0 -04}
|
||||
{2548296000 -10800 1 -03}
|
||||
{2548296000 -10800 1 -04}
|
||||
{2563412400 -14400 0 -04}
|
||||
{2579745600 -10800 1 -03}
|
||||
{2579745600 -10800 1 -04}
|
||||
{2594862000 -14400 0 -04}
|
||||
{2611800000 -10800 1 -03}
|
||||
{2611800000 -10800 1 -04}
|
||||
{2626311600 -14400 0 -04}
|
||||
{2643249600 -10800 1 -03}
|
||||
{2643249600 -10800 1 -04}
|
||||
{2657761200 -14400 0 -04}
|
||||
{2674699200 -10800 1 -03}
|
||||
{2674699200 -10800 1 -04}
|
||||
{2689815600 -14400 0 -04}
|
||||
{2706148800 -10800 1 -03}
|
||||
{2706148800 -10800 1 -04}
|
||||
{2721265200 -14400 0 -04}
|
||||
{2737598400 -10800 1 -03}
|
||||
{2737598400 -10800 1 -04}
|
||||
{2752714800 -14400 0 -04}
|
||||
{2769652800 -10800 1 -03}
|
||||
{2769652800 -10800 1 -04}
|
||||
{2784164400 -14400 0 -04}
|
||||
{2801102400 -10800 1 -03}
|
||||
{2801102400 -10800 1 -04}
|
||||
{2815614000 -14400 0 -04}
|
||||
{2832552000 -10800 1 -03}
|
||||
{2832552000 -10800 1 -04}
|
||||
{2847668400 -14400 0 -04}
|
||||
{2864001600 -10800 1 -03}
|
||||
{2864001600 -10800 1 -04}
|
||||
{2879118000 -14400 0 -04}
|
||||
{2895451200 -10800 1 -03}
|
||||
{2895451200 -10800 1 -04}
|
||||
{2910567600 -14400 0 -04}
|
||||
{2926900800 -10800 1 -03}
|
||||
{2926900800 -10800 1 -04}
|
||||
{2942017200 -14400 0 -04}
|
||||
{2958955200 -10800 1 -03}
|
||||
{2958955200 -10800 1 -04}
|
||||
{2973466800 -14400 0 -04}
|
||||
{2990404800 -10800 1 -03}
|
||||
{2990404800 -10800 1 -04}
|
||||
{3004916400 -14400 0 -04}
|
||||
{3021854400 -10800 1 -03}
|
||||
{3021854400 -10800 1 -04}
|
||||
{3036970800 -14400 0 -04}
|
||||
{3053304000 -10800 1 -03}
|
||||
{3053304000 -10800 1 -04}
|
||||
{3068420400 -14400 0 -04}
|
||||
{3084753600 -10800 1 -03}
|
||||
{3084753600 -10800 1 -04}
|
||||
{3099870000 -14400 0 -04}
|
||||
{3116808000 -10800 1 -03}
|
||||
{3116808000 -10800 1 -04}
|
||||
{3131319600 -14400 0 -04}
|
||||
{3148257600 -10800 1 -03}
|
||||
{3148257600 -10800 1 -04}
|
||||
{3162769200 -14400 0 -04}
|
||||
{3179707200 -10800 1 -03}
|
||||
{3179707200 -10800 1 -04}
|
||||
{3194218800 -14400 0 -04}
|
||||
{3211156800 -10800 1 -03}
|
||||
{3211156800 -10800 1 -04}
|
||||
{3226273200 -14400 0 -04}
|
||||
{3242606400 -10800 1 -03}
|
||||
{3242606400 -10800 1 -04}
|
||||
{3257722800 -14400 0 -04}
|
||||
{3274056000 -10800 1 -03}
|
||||
{3274056000 -10800 1 -04}
|
||||
{3289172400 -14400 0 -04}
|
||||
{3306110400 -10800 1 -03}
|
||||
{3306110400 -10800 1 -04}
|
||||
{3320622000 -14400 0 -04}
|
||||
{3337560000 -10800 1 -03}
|
||||
{3337560000 -10800 1 -04}
|
||||
{3352071600 -14400 0 -04}
|
||||
{3369009600 -10800 1 -03}
|
||||
{3369009600 -10800 1 -04}
|
||||
{3384126000 -14400 0 -04}
|
||||
{3400459200 -10800 1 -03}
|
||||
{3400459200 -10800 1 -04}
|
||||
{3415575600 -14400 0 -04}
|
||||
{3431908800 -10800 1 -03}
|
||||
{3431908800 -10800 1 -04}
|
||||
{3447025200 -14400 0 -04}
|
||||
{3463358400 -10800 1 -03}
|
||||
{3463358400 -10800 1 -04}
|
||||
{3478474800 -14400 0 -04}
|
||||
{3495412800 -10800 1 -03}
|
||||
{3495412800 -10800 1 -04}
|
||||
{3509924400 -14400 0 -04}
|
||||
{3526862400 -10800 1 -03}
|
||||
{3526862400 -10800 1 -04}
|
||||
{3541374000 -14400 0 -04}
|
||||
{3558312000 -10800 1 -03}
|
||||
{3558312000 -10800 1 -04}
|
||||
{3573428400 -14400 0 -04}
|
||||
{3589761600 -10800 1 -03}
|
||||
{3589761600 -10800 1 -04}
|
||||
{3604878000 -14400 0 -04}
|
||||
{3621211200 -10800 1 -03}
|
||||
{3621211200 -10800 1 -04}
|
||||
{3636327600 -14400 0 -04}
|
||||
{3653265600 -10800 1 -03}
|
||||
{3653265600 -10800 1 -04}
|
||||
{3667777200 -14400 0 -04}
|
||||
{3684715200 -10800 1 -03}
|
||||
{3684715200 -10800 1 -04}
|
||||
{3699226800 -14400 0 -04}
|
||||
{3716164800 -10800 1 -03}
|
||||
{3716164800 -10800 1 -04}
|
||||
{3731281200 -14400 0 -04}
|
||||
{3747614400 -10800 1 -03}
|
||||
{3747614400 -10800 1 -04}
|
||||
{3762730800 -14400 0 -04}
|
||||
{3779064000 -10800 1 -03}
|
||||
{3779064000 -10800 1 -04}
|
||||
{3794180400 -14400 0 -04}
|
||||
{3810513600 -10800 1 -03}
|
||||
{3810513600 -10800 1 -04}
|
||||
{3825630000 -14400 0 -04}
|
||||
{3842568000 -10800 1 -03}
|
||||
{3842568000 -10800 1 -04}
|
||||
{3857079600 -14400 0 -04}
|
||||
{3874017600 -10800 1 -03}
|
||||
{3874017600 -10800 1 -04}
|
||||
{3888529200 -14400 0 -04}
|
||||
{3905467200 -10800 1 -03}
|
||||
{3905467200 -10800 1 -04}
|
||||
{3920583600 -14400 0 -04}
|
||||
{3936916800 -10800 1 -03}
|
||||
{3936916800 -10800 1 -04}
|
||||
{3952033200 -14400 0 -04}
|
||||
{3968366400 -10800 1 -03}
|
||||
{3968366400 -10800 1 -04}
|
||||
{3983482800 -14400 0 -04}
|
||||
{4000420800 -10800 1 -03}
|
||||
{4000420800 -10800 1 -04}
|
||||
{4014932400 -14400 0 -04}
|
||||
{4031870400 -10800 1 -03}
|
||||
{4031870400 -10800 1 -04}
|
||||
{4046382000 -14400 0 -04}
|
||||
{4063320000 -10800 1 -03}
|
||||
{4063320000 -10800 1 -04}
|
||||
{4077831600 -14400 0 -04}
|
||||
{4094769600 -10800 1 -03}
|
||||
{4094769600 -10800 1 -04}
|
||||
}
|
||||
|
||||
@@ -3,66 +3,66 @@
|
||||
set TZData(:America/Bahia) {
|
||||
{-9223372036854775808 -9244 0 LMT}
|
||||
{-1767216356 -10800 0 -03}
|
||||
{-1206957600 -7200 1 -02}
|
||||
{-1206957600 -7200 1 -03}
|
||||
{-1191362400 -10800 0 -03}
|
||||
{-1175374800 -7200 1 -02}
|
||||
{-1175374800 -7200 1 -03}
|
||||
{-1159826400 -10800 0 -03}
|
||||
{-633819600 -7200 1 -02}
|
||||
{-633819600 -7200 1 -03}
|
||||
{-622069200 -10800 0 -03}
|
||||
{-602283600 -7200 1 -02}
|
||||
{-602283600 -7200 1 -03}
|
||||
{-591832800 -10800 0 -03}
|
||||
{-570747600 -7200 1 -02}
|
||||
{-570747600 -7200 1 -03}
|
||||
{-560210400 -10800 0 -03}
|
||||
{-539125200 -7200 1 -02}
|
||||
{-539125200 -7200 1 -03}
|
||||
{-531352800 -10800 0 -03}
|
||||
{-191365200 -7200 1 -02}
|
||||
{-191365200 -7200 1 -03}
|
||||
{-184197600 -10800 0 -03}
|
||||
{-155163600 -7200 1 -02}
|
||||
{-155163600 -7200 1 -03}
|
||||
{-150069600 -10800 0 -03}
|
||||
{-128898000 -7200 1 -02}
|
||||
{-128898000 -7200 1 -03}
|
||||
{-121125600 -10800 0 -03}
|
||||
{-99954000 -7200 1 -02}
|
||||
{-99954000 -7200 1 -03}
|
||||
{-89589600 -10800 0 -03}
|
||||
{-68418000 -7200 1 -02}
|
||||
{-68418000 -7200 1 -03}
|
||||
{-57967200 -10800 0 -03}
|
||||
{499748400 -7200 1 -02}
|
||||
{499748400 -7200 1 -03}
|
||||
{511236000 -10800 0 -03}
|
||||
{530593200 -7200 1 -02}
|
||||
{530593200 -7200 1 -03}
|
||||
{540266400 -10800 0 -03}
|
||||
{562129200 -7200 1 -02}
|
||||
{562129200 -7200 1 -03}
|
||||
{571197600 -10800 0 -03}
|
||||
{592974000 -7200 1 -02}
|
||||
{592974000 -7200 1 -03}
|
||||
{602042400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{634701600 -10800 0 -03}
|
||||
{656478000 -7200 1 -02}
|
||||
{656478000 -7200 1 -03}
|
||||
{666756000 -10800 0 -03}
|
||||
{687927600 -7200 1 -02}
|
||||
{687927600 -7200 1 -03}
|
||||
{697600800 -10800 0 -03}
|
||||
{719982000 -7200 1 -02}
|
||||
{719982000 -7200 1 -03}
|
||||
{728445600 -10800 0 -03}
|
||||
{750826800 -7200 1 -02}
|
||||
{750826800 -7200 1 -03}
|
||||
{761709600 -10800 0 -03}
|
||||
{782276400 -7200 1 -02}
|
||||
{782276400 -7200 1 -03}
|
||||
{793159200 -10800 0 -03}
|
||||
{813726000 -7200 1 -02}
|
||||
{813726000 -7200 1 -03}
|
||||
{824004000 -10800 0 -03}
|
||||
{844570800 -7200 1 -02}
|
||||
{844570800 -7200 1 -03}
|
||||
{856058400 -10800 0 -03}
|
||||
{876106800 -7200 1 -02}
|
||||
{876106800 -7200 1 -03}
|
||||
{888717600 -10800 0 -03}
|
||||
{908074800 -7200 1 -02}
|
||||
{908074800 -7200 1 -03}
|
||||
{919562400 -10800 0 -03}
|
||||
{938919600 -7200 1 -02}
|
||||
{938919600 -7200 1 -03}
|
||||
{951616800 -10800 0 -03}
|
||||
{970974000 -7200 1 -02}
|
||||
{970974000 -7200 1 -03}
|
||||
{982461600 -10800 0 -03}
|
||||
{1003028400 -7200 1 -02}
|
||||
{1003028400 -7200 1 -03}
|
||||
{1013911200 -10800 0 -03}
|
||||
{1036292400 -7200 1 -02}
|
||||
{1036292400 -7200 1 -03}
|
||||
{1045360800 -10800 0 -03}
|
||||
{1064368800 -10800 0 -03}
|
||||
{1318734000 -7200 0 -02}
|
||||
{1318734000 -7200 0 -03}
|
||||
{1330221600 -10800 0 -03}
|
||||
{1350784800 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -3,33 +3,33 @@
|
||||
set TZData(:America/Belem) {
|
||||
{-9223372036854775808 -11636 0 LMT}
|
||||
{-1767213964 -10800 0 -03}
|
||||
{-1206957600 -7200 1 -02}
|
||||
{-1206957600 -7200 1 -03}
|
||||
{-1191362400 -10800 0 -03}
|
||||
{-1175374800 -7200 1 -02}
|
||||
{-1175374800 -7200 1 -03}
|
||||
{-1159826400 -10800 0 -03}
|
||||
{-633819600 -7200 1 -02}
|
||||
{-633819600 -7200 1 -03}
|
||||
{-622069200 -10800 0 -03}
|
||||
{-602283600 -7200 1 -02}
|
||||
{-602283600 -7200 1 -03}
|
||||
{-591832800 -10800 0 -03}
|
||||
{-570747600 -7200 1 -02}
|
||||
{-570747600 -7200 1 -03}
|
||||
{-560210400 -10800 0 -03}
|
||||
{-539125200 -7200 1 -02}
|
||||
{-539125200 -7200 1 -03}
|
||||
{-531352800 -10800 0 -03}
|
||||
{-191365200 -7200 1 -02}
|
||||
{-191365200 -7200 1 -03}
|
||||
{-184197600 -10800 0 -03}
|
||||
{-155163600 -7200 1 -02}
|
||||
{-155163600 -7200 1 -03}
|
||||
{-150069600 -10800 0 -03}
|
||||
{-128898000 -7200 1 -02}
|
||||
{-128898000 -7200 1 -03}
|
||||
{-121125600 -10800 0 -03}
|
||||
{-99954000 -7200 1 -02}
|
||||
{-99954000 -7200 1 -03}
|
||||
{-89589600 -10800 0 -03}
|
||||
{-68418000 -7200 1 -02}
|
||||
{-68418000 -7200 1 -03}
|
||||
{-57967200 -10800 0 -03}
|
||||
{499748400 -7200 1 -02}
|
||||
{499748400 -7200 1 -03}
|
||||
{511236000 -10800 0 -03}
|
||||
{530593200 -7200 1 -02}
|
||||
{530593200 -7200 1 -03}
|
||||
{540266400 -10800 0 -03}
|
||||
{562129200 -7200 1 -02}
|
||||
{562129200 -7200 1 -03}
|
||||
{571197600 -10800 0 -03}
|
||||
{590032800 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -3,38 +3,38 @@
|
||||
set TZData(:America/Boa_Vista) {
|
||||
{-9223372036854775808 -14560 0 LMT}
|
||||
{-1767211040 -14400 0 -04}
|
||||
{-1206954000 -10800 1 -03}
|
||||
{-1206954000 -10800 1 -04}
|
||||
{-1191358800 -14400 0 -04}
|
||||
{-1175371200 -10800 1 -03}
|
||||
{-1175371200 -10800 1 -04}
|
||||
{-1159822800 -14400 0 -04}
|
||||
{-633816000 -10800 1 -03}
|
||||
{-633816000 -10800 1 -04}
|
||||
{-622065600 -14400 0 -04}
|
||||
{-602280000 -10800 1 -03}
|
||||
{-602280000 -10800 1 -04}
|
||||
{-591829200 -14400 0 -04}
|
||||
{-570744000 -10800 1 -03}
|
||||
{-570744000 -10800 1 -04}
|
||||
{-560206800 -14400 0 -04}
|
||||
{-539121600 -10800 1 -03}
|
||||
{-539121600 -10800 1 -04}
|
||||
{-531349200 -14400 0 -04}
|
||||
{-191361600 -10800 1 -03}
|
||||
{-191361600 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-155160000 -10800 1 -03}
|
||||
{-155160000 -10800 1 -04}
|
||||
{-150066000 -14400 0 -04}
|
||||
{-128894400 -10800 1 -03}
|
||||
{-128894400 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-99950400 -10800 1 -03}
|
||||
{-99950400 -10800 1 -04}
|
||||
{-89586000 -14400 0 -04}
|
||||
{-68414400 -10800 1 -03}
|
||||
{-68414400 -10800 1 -04}
|
||||
{-57963600 -14400 0 -04}
|
||||
{499752000 -10800 1 -03}
|
||||
{499752000 -10800 1 -04}
|
||||
{511239600 -14400 0 -04}
|
||||
{530596800 -10800 1 -03}
|
||||
{530596800 -10800 1 -04}
|
||||
{540270000 -14400 0 -04}
|
||||
{562132800 -10800 1 -03}
|
||||
{562132800 -10800 1 -04}
|
||||
{571201200 -14400 0 -04}
|
||||
{590036400 -14400 0 -04}
|
||||
{938664000 -14400 0 -04}
|
||||
{938923200 -10800 1 -03}
|
||||
{938923200 -10800 1 -04}
|
||||
{951620400 -14400 0 -04}
|
||||
{970977600 -10800 1 -03}
|
||||
{970977600 -10800 1 -04}
|
||||
{971578800 -14400 0 -04}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,6 @@ set TZData(:America/Bogota) {
|
||||
{-9223372036854775808 -17776 0 LMT}
|
||||
{-2707671824 -17776 0 BMT}
|
||||
{-1739041424 -18000 0 -05}
|
||||
{704869200 -14400 1 -04}
|
||||
{704869200 -14400 1 -05}
|
||||
{733896000 -18000 0 -05}
|
||||
}
|
||||
|
||||
+126
-126
@@ -3,255 +3,255 @@
|
||||
set TZData(:America/Campo_Grande) {
|
||||
{-9223372036854775808 -13108 0 LMT}
|
||||
{-1767212492 -14400 0 -04}
|
||||
{-1206954000 -10800 1 -03}
|
||||
{-1206954000 -10800 1 -04}
|
||||
{-1191358800 -14400 0 -04}
|
||||
{-1175371200 -10800 1 -03}
|
||||
{-1175371200 -10800 1 -04}
|
||||
{-1159822800 -14400 0 -04}
|
||||
{-633816000 -10800 1 -03}
|
||||
{-633816000 -10800 1 -04}
|
||||
{-622065600 -14400 0 -04}
|
||||
{-602280000 -10800 1 -03}
|
||||
{-602280000 -10800 1 -04}
|
||||
{-591829200 -14400 0 -04}
|
||||
{-570744000 -10800 1 -03}
|
||||
{-570744000 -10800 1 -04}
|
||||
{-560206800 -14400 0 -04}
|
||||
{-539121600 -10800 1 -03}
|
||||
{-539121600 -10800 1 -04}
|
||||
{-531349200 -14400 0 -04}
|
||||
{-191361600 -10800 1 -03}
|
||||
{-191361600 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-155160000 -10800 1 -03}
|
||||
{-155160000 -10800 1 -04}
|
||||
{-150066000 -14400 0 -04}
|
||||
{-128894400 -10800 1 -03}
|
||||
{-128894400 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-99950400 -10800 1 -03}
|
||||
{-99950400 -10800 1 -04}
|
||||
{-89586000 -14400 0 -04}
|
||||
{-68414400 -10800 1 -03}
|
||||
{-68414400 -10800 1 -04}
|
||||
{-57963600 -14400 0 -04}
|
||||
{499752000 -10800 1 -03}
|
||||
{499752000 -10800 1 -04}
|
||||
{511239600 -14400 0 -04}
|
||||
{530596800 -10800 1 -03}
|
||||
{530596800 -10800 1 -04}
|
||||
{540270000 -14400 0 -04}
|
||||
{562132800 -10800 1 -03}
|
||||
{562132800 -10800 1 -04}
|
||||
{571201200 -14400 0 -04}
|
||||
{592977600 -10800 1 -03}
|
||||
{592977600 -10800 1 -04}
|
||||
{602046000 -14400 0 -04}
|
||||
{624427200 -10800 1 -03}
|
||||
{624427200 -10800 1 -04}
|
||||
{634705200 -14400 0 -04}
|
||||
{656481600 -10800 1 -03}
|
||||
{656481600 -10800 1 -04}
|
||||
{666759600 -14400 0 -04}
|
||||
{687931200 -10800 1 -03}
|
||||
{687931200 -10800 1 -04}
|
||||
{697604400 -14400 0 -04}
|
||||
{719985600 -10800 1 -03}
|
||||
{719985600 -10800 1 -04}
|
||||
{728449200 -14400 0 -04}
|
||||
{750830400 -10800 1 -03}
|
||||
{750830400 -10800 1 -04}
|
||||
{761713200 -14400 0 -04}
|
||||
{782280000 -10800 1 -03}
|
||||
{782280000 -10800 1 -04}
|
||||
{793162800 -14400 0 -04}
|
||||
{813729600 -10800 1 -03}
|
||||
{813729600 -10800 1 -04}
|
||||
{824007600 -14400 0 -04}
|
||||
{844574400 -10800 1 -03}
|
||||
{844574400 -10800 1 -04}
|
||||
{856062000 -14400 0 -04}
|
||||
{876110400 -10800 1 -03}
|
||||
{876110400 -10800 1 -04}
|
||||
{888721200 -14400 0 -04}
|
||||
{908078400 -10800 1 -03}
|
||||
{908078400 -10800 1 -04}
|
||||
{919566000 -14400 0 -04}
|
||||
{938923200 -10800 1 -03}
|
||||
{938923200 -10800 1 -04}
|
||||
{951620400 -14400 0 -04}
|
||||
{970977600 -10800 1 -03}
|
||||
{970977600 -10800 1 -04}
|
||||
{982465200 -14400 0 -04}
|
||||
{1003032000 -10800 1 -03}
|
||||
{1003032000 -10800 1 -04}
|
||||
{1013914800 -14400 0 -04}
|
||||
{1036296000 -10800 1 -03}
|
||||
{1036296000 -10800 1 -04}
|
||||
{1045364400 -14400 0 -04}
|
||||
{1066536000 -10800 1 -03}
|
||||
{1066536000 -10800 1 -04}
|
||||
{1076814000 -14400 0 -04}
|
||||
{1099368000 -10800 1 -03}
|
||||
{1099368000 -10800 1 -04}
|
||||
{1108868400 -14400 0 -04}
|
||||
{1129435200 -10800 1 -03}
|
||||
{1129435200 -10800 1 -04}
|
||||
{1140318000 -14400 0 -04}
|
||||
{1162699200 -10800 1 -03}
|
||||
{1162699200 -10800 1 -04}
|
||||
{1172372400 -14400 0 -04}
|
||||
{1192334400 -10800 1 -03}
|
||||
{1192334400 -10800 1 -04}
|
||||
{1203217200 -14400 0 -04}
|
||||
{1224388800 -10800 1 -03}
|
||||
{1224388800 -10800 1 -04}
|
||||
{1234666800 -14400 0 -04}
|
||||
{1255838400 -10800 1 -03}
|
||||
{1255838400 -10800 1 -04}
|
||||
{1266721200 -14400 0 -04}
|
||||
{1287288000 -10800 1 -03}
|
||||
{1287288000 -10800 1 -04}
|
||||
{1298170800 -14400 0 -04}
|
||||
{1318737600 -10800 1 -03}
|
||||
{1318737600 -10800 1 -04}
|
||||
{1330225200 -14400 0 -04}
|
||||
{1350792000 -10800 1 -03}
|
||||
{1350792000 -10800 1 -04}
|
||||
{1361070000 -14400 0 -04}
|
||||
{1382241600 -10800 1 -03}
|
||||
{1382241600 -10800 1 -04}
|
||||
{1392519600 -14400 0 -04}
|
||||
{1413691200 -10800 1 -03}
|
||||
{1413691200 -10800 1 -04}
|
||||
{1424574000 -14400 0 -04}
|
||||
{1445140800 -10800 1 -03}
|
||||
{1445140800 -10800 1 -04}
|
||||
{1456023600 -14400 0 -04}
|
||||
{1476590400 -10800 1 -03}
|
||||
{1476590400 -10800 1 -04}
|
||||
{1487473200 -14400 0 -04}
|
||||
{1508040000 -10800 1 -03}
|
||||
{1508040000 -10800 1 -04}
|
||||
{1518922800 -14400 0 -04}
|
||||
{1541304000 -10800 1 -03}
|
||||
{1541304000 -10800 1 -04}
|
||||
{1550372400 -14400 0 -04}
|
||||
{1572753600 -10800 1 -03}
|
||||
{1572753600 -10800 1 -04}
|
||||
{1581822000 -14400 0 -04}
|
||||
{1604203200 -10800 1 -03}
|
||||
{1604203200 -10800 1 -04}
|
||||
{1613876400 -14400 0 -04}
|
||||
{1636257600 -10800 1 -03}
|
||||
{1636257600 -10800 1 -04}
|
||||
{1645326000 -14400 0 -04}
|
||||
{1667707200 -10800 1 -03}
|
||||
{1667707200 -10800 1 -04}
|
||||
{1677380400 -14400 0 -04}
|
||||
{1699156800 -10800 1 -03}
|
||||
{1699156800 -10800 1 -04}
|
||||
{1708225200 -14400 0 -04}
|
||||
{1730606400 -10800 1 -03}
|
||||
{1730606400 -10800 1 -04}
|
||||
{1739674800 -14400 0 -04}
|
||||
{1762056000 -10800 1 -03}
|
||||
{1762056000 -10800 1 -04}
|
||||
{1771729200 -14400 0 -04}
|
||||
{1793505600 -10800 1 -03}
|
||||
{1793505600 -10800 1 -04}
|
||||
{1803178800 -14400 0 -04}
|
||||
{1825560000 -10800 1 -03}
|
||||
{1825560000 -10800 1 -04}
|
||||
{1834628400 -14400 0 -04}
|
||||
{1857009600 -10800 1 -03}
|
||||
{1857009600 -10800 1 -04}
|
||||
{1866078000 -14400 0 -04}
|
||||
{1888459200 -10800 1 -03}
|
||||
{1888459200 -10800 1 -04}
|
||||
{1897527600 -14400 0 -04}
|
||||
{1919908800 -10800 1 -03}
|
||||
{1919908800 -10800 1 -04}
|
||||
{1928977200 -14400 0 -04}
|
||||
{1951358400 -10800 1 -03}
|
||||
{1951358400 -10800 1 -04}
|
||||
{1960426800 -14400 0 -04}
|
||||
{1983412800 -10800 1 -03}
|
||||
{1983412800 -10800 1 -04}
|
||||
{1992481200 -14400 0 -04}
|
||||
{2014862400 -10800 1 -03}
|
||||
{2014862400 -10800 1 -04}
|
||||
{2024535600 -14400 0 -04}
|
||||
{2046312000 -10800 1 -03}
|
||||
{2046312000 -10800 1 -04}
|
||||
{2055380400 -14400 0 -04}
|
||||
{2077761600 -10800 1 -03}
|
||||
{2077761600 -10800 1 -04}
|
||||
{2086830000 -14400 0 -04}
|
||||
{2109211200 -10800 1 -03}
|
||||
{2109211200 -10800 1 -04}
|
||||
{2118884400 -14400 0 -04}
|
||||
{2140660800 -10800 1 -03}
|
||||
{2140660800 -10800 1 -04}
|
||||
{2150334000 -14400 0 -04}
|
||||
{2172715200 -10800 1 -03}
|
||||
{2172715200 -10800 1 -04}
|
||||
{2181783600 -14400 0 -04}
|
||||
{2204164800 -10800 1 -03}
|
||||
{2204164800 -10800 1 -04}
|
||||
{2213233200 -14400 0 -04}
|
||||
{2235614400 -10800 1 -03}
|
||||
{2235614400 -10800 1 -04}
|
||||
{2244682800 -14400 0 -04}
|
||||
{2267064000 -10800 1 -03}
|
||||
{2267064000 -10800 1 -04}
|
||||
{2276132400 -14400 0 -04}
|
||||
{2298513600 -10800 1 -03}
|
||||
{2298513600 -10800 1 -04}
|
||||
{2307582000 -14400 0 -04}
|
||||
{2329963200 -10800 1 -03}
|
||||
{2329963200 -10800 1 -04}
|
||||
{2339636400 -14400 0 -04}
|
||||
{2362017600 -10800 1 -03}
|
||||
{2362017600 -10800 1 -04}
|
||||
{2371086000 -14400 0 -04}
|
||||
{2393467200 -10800 1 -03}
|
||||
{2393467200 -10800 1 -04}
|
||||
{2402535600 -14400 0 -04}
|
||||
{2424916800 -10800 1 -03}
|
||||
{2424916800 -10800 1 -04}
|
||||
{2433985200 -14400 0 -04}
|
||||
{2456366400 -10800 1 -03}
|
||||
{2456366400 -10800 1 -04}
|
||||
{2465434800 -14400 0 -04}
|
||||
{2487816000 -10800 1 -03}
|
||||
{2487816000 -10800 1 -04}
|
||||
{2497489200 -14400 0 -04}
|
||||
{2519870400 -10800 1 -03}
|
||||
{2519870400 -10800 1 -04}
|
||||
{2528938800 -14400 0 -04}
|
||||
{2551320000 -10800 1 -03}
|
||||
{2551320000 -10800 1 -04}
|
||||
{2560388400 -14400 0 -04}
|
||||
{2582769600 -10800 1 -03}
|
||||
{2582769600 -10800 1 -04}
|
||||
{2591838000 -14400 0 -04}
|
||||
{2614219200 -10800 1 -03}
|
||||
{2614219200 -10800 1 -04}
|
||||
{2623287600 -14400 0 -04}
|
||||
{2645668800 -10800 1 -03}
|
||||
{2645668800 -10800 1 -04}
|
||||
{2654737200 -14400 0 -04}
|
||||
{2677118400 -10800 1 -03}
|
||||
{2677118400 -10800 1 -04}
|
||||
{2686791600 -14400 0 -04}
|
||||
{2709172800 -10800 1 -03}
|
||||
{2709172800 -10800 1 -04}
|
||||
{2718241200 -14400 0 -04}
|
||||
{2740622400 -10800 1 -03}
|
||||
{2740622400 -10800 1 -04}
|
||||
{2749690800 -14400 0 -04}
|
||||
{2772072000 -10800 1 -03}
|
||||
{2772072000 -10800 1 -04}
|
||||
{2781140400 -14400 0 -04}
|
||||
{2803521600 -10800 1 -03}
|
||||
{2803521600 -10800 1 -04}
|
||||
{2812590000 -14400 0 -04}
|
||||
{2834971200 -10800 1 -03}
|
||||
{2834971200 -10800 1 -04}
|
||||
{2844039600 -14400 0 -04}
|
||||
{2867025600 -10800 1 -03}
|
||||
{2867025600 -10800 1 -04}
|
||||
{2876094000 -14400 0 -04}
|
||||
{2898475200 -10800 1 -03}
|
||||
{2898475200 -10800 1 -04}
|
||||
{2907543600 -14400 0 -04}
|
||||
{2929924800 -10800 1 -03}
|
||||
{2929924800 -10800 1 -04}
|
||||
{2938993200 -14400 0 -04}
|
||||
{2961374400 -10800 1 -03}
|
||||
{2961374400 -10800 1 -04}
|
||||
{2970442800 -14400 0 -04}
|
||||
{2992824000 -10800 1 -03}
|
||||
{2992824000 -10800 1 -04}
|
||||
{3001892400 -14400 0 -04}
|
||||
{3024273600 -10800 1 -03}
|
||||
{3024273600 -10800 1 -04}
|
||||
{3033946800 -14400 0 -04}
|
||||
{3056328000 -10800 1 -03}
|
||||
{3056328000 -10800 1 -04}
|
||||
{3065396400 -14400 0 -04}
|
||||
{3087777600 -10800 1 -03}
|
||||
{3087777600 -10800 1 -04}
|
||||
{3096846000 -14400 0 -04}
|
||||
{3119227200 -10800 1 -03}
|
||||
{3119227200 -10800 1 -04}
|
||||
{3128295600 -14400 0 -04}
|
||||
{3150676800 -10800 1 -03}
|
||||
{3150676800 -10800 1 -04}
|
||||
{3159745200 -14400 0 -04}
|
||||
{3182126400 -10800 1 -03}
|
||||
{3182126400 -10800 1 -04}
|
||||
{3191194800 -14400 0 -04}
|
||||
{3213576000 -10800 1 -03}
|
||||
{3213576000 -10800 1 -04}
|
||||
{3223249200 -14400 0 -04}
|
||||
{3245630400 -10800 1 -03}
|
||||
{3245630400 -10800 1 -04}
|
||||
{3254698800 -14400 0 -04}
|
||||
{3277080000 -10800 1 -03}
|
||||
{3277080000 -10800 1 -04}
|
||||
{3286148400 -14400 0 -04}
|
||||
{3308529600 -10800 1 -03}
|
||||
{3308529600 -10800 1 -04}
|
||||
{3317598000 -14400 0 -04}
|
||||
{3339979200 -10800 1 -03}
|
||||
{3339979200 -10800 1 -04}
|
||||
{3349047600 -14400 0 -04}
|
||||
{3371428800 -10800 1 -03}
|
||||
{3371428800 -10800 1 -04}
|
||||
{3381102000 -14400 0 -04}
|
||||
{3403483200 -10800 1 -03}
|
||||
{3403483200 -10800 1 -04}
|
||||
{3412551600 -14400 0 -04}
|
||||
{3434932800 -10800 1 -03}
|
||||
{3434932800 -10800 1 -04}
|
||||
{3444001200 -14400 0 -04}
|
||||
{3466382400 -10800 1 -03}
|
||||
{3466382400 -10800 1 -04}
|
||||
{3475450800 -14400 0 -04}
|
||||
{3497832000 -10800 1 -03}
|
||||
{3497832000 -10800 1 -04}
|
||||
{3506900400 -14400 0 -04}
|
||||
{3529281600 -10800 1 -03}
|
||||
{3529281600 -10800 1 -04}
|
||||
{3538350000 -14400 0 -04}
|
||||
{3560731200 -10800 1 -03}
|
||||
{3560731200 -10800 1 -04}
|
||||
{3570404400 -14400 0 -04}
|
||||
{3592785600 -10800 1 -03}
|
||||
{3592785600 -10800 1 -04}
|
||||
{3601854000 -14400 0 -04}
|
||||
{3624235200 -10800 1 -03}
|
||||
{3624235200 -10800 1 -04}
|
||||
{3633303600 -14400 0 -04}
|
||||
{3655684800 -10800 1 -03}
|
||||
{3655684800 -10800 1 -04}
|
||||
{3664753200 -14400 0 -04}
|
||||
{3687134400 -10800 1 -03}
|
||||
{3687134400 -10800 1 -04}
|
||||
{3696202800 -14400 0 -04}
|
||||
{3718584000 -10800 1 -03}
|
||||
{3718584000 -10800 1 -04}
|
||||
{3727652400 -14400 0 -04}
|
||||
{3750638400 -10800 1 -03}
|
||||
{3750638400 -10800 1 -04}
|
||||
{3759706800 -14400 0 -04}
|
||||
{3782088000 -10800 1 -03}
|
||||
{3782088000 -10800 1 -04}
|
||||
{3791156400 -14400 0 -04}
|
||||
{3813537600 -10800 1 -03}
|
||||
{3813537600 -10800 1 -04}
|
||||
{3822606000 -14400 0 -04}
|
||||
{3844987200 -10800 1 -03}
|
||||
{3844987200 -10800 1 -04}
|
||||
{3854055600 -14400 0 -04}
|
||||
{3876436800 -10800 1 -03}
|
||||
{3876436800 -10800 1 -04}
|
||||
{3885505200 -14400 0 -04}
|
||||
{3907886400 -10800 1 -03}
|
||||
{3907886400 -10800 1 -04}
|
||||
{3917559600 -14400 0 -04}
|
||||
{3939940800 -10800 1 -03}
|
||||
{3939940800 -10800 1 -04}
|
||||
{3949009200 -14400 0 -04}
|
||||
{3971390400 -10800 1 -03}
|
||||
{3971390400 -10800 1 -04}
|
||||
{3980458800 -14400 0 -04}
|
||||
{4002840000 -10800 1 -03}
|
||||
{4002840000 -10800 1 -04}
|
||||
{4011908400 -14400 0 -04}
|
||||
{4034289600 -10800 1 -03}
|
||||
{4034289600 -10800 1 -04}
|
||||
{4043358000 -14400 0 -04}
|
||||
{4065739200 -10800 1 -03}
|
||||
{4065739200 -10800 1 -04}
|
||||
{4074807600 -14400 0 -04}
|
||||
{4097188800 -10800 1 -03}
|
||||
{4097188800 -10800 1 -04}
|
||||
}
|
||||
|
||||
+125
-125
@@ -3,255 +3,255 @@
|
||||
set TZData(:America/Cuiaba) {
|
||||
{-9223372036854775808 -13460 0 LMT}
|
||||
{-1767212140 -14400 0 -04}
|
||||
{-1206954000 -10800 1 -03}
|
||||
{-1206954000 -10800 1 -04}
|
||||
{-1191358800 -14400 0 -04}
|
||||
{-1175371200 -10800 1 -03}
|
||||
{-1175371200 -10800 1 -04}
|
||||
{-1159822800 -14400 0 -04}
|
||||
{-633816000 -10800 1 -03}
|
||||
{-633816000 -10800 1 -04}
|
||||
{-622065600 -14400 0 -04}
|
||||
{-602280000 -10800 1 -03}
|
||||
{-602280000 -10800 1 -04}
|
||||
{-591829200 -14400 0 -04}
|
||||
{-570744000 -10800 1 -03}
|
||||
{-570744000 -10800 1 -04}
|
||||
{-560206800 -14400 0 -04}
|
||||
{-539121600 -10800 1 -03}
|
||||
{-539121600 -10800 1 -04}
|
||||
{-531349200 -14400 0 -04}
|
||||
{-191361600 -10800 1 -03}
|
||||
{-191361600 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-155160000 -10800 1 -03}
|
||||
{-155160000 -10800 1 -04}
|
||||
{-150066000 -14400 0 -04}
|
||||
{-128894400 -10800 1 -03}
|
||||
{-128894400 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-99950400 -10800 1 -03}
|
||||
{-99950400 -10800 1 -04}
|
||||
{-89586000 -14400 0 -04}
|
||||
{-68414400 -10800 1 -03}
|
||||
{-68414400 -10800 1 -04}
|
||||
{-57963600 -14400 0 -04}
|
||||
{499752000 -10800 1 -03}
|
||||
{499752000 -10800 1 -04}
|
||||
{511239600 -14400 0 -04}
|
||||
{530596800 -10800 1 -03}
|
||||
{530596800 -10800 1 -04}
|
||||
{540270000 -14400 0 -04}
|
||||
{562132800 -10800 1 -03}
|
||||
{562132800 -10800 1 -04}
|
||||
{571201200 -14400 0 -04}
|
||||
{592977600 -10800 1 -03}
|
||||
{592977600 -10800 1 -04}
|
||||
{602046000 -14400 0 -04}
|
||||
{624427200 -10800 1 -03}
|
||||
{624427200 -10800 1 -04}
|
||||
{634705200 -14400 0 -04}
|
||||
{656481600 -10800 1 -03}
|
||||
{656481600 -10800 1 -04}
|
||||
{666759600 -14400 0 -04}
|
||||
{687931200 -10800 1 -03}
|
||||
{687931200 -10800 1 -04}
|
||||
{697604400 -14400 0 -04}
|
||||
{719985600 -10800 1 -03}
|
||||
{719985600 -10800 1 -04}
|
||||
{728449200 -14400 0 -04}
|
||||
{750830400 -10800 1 -03}
|
||||
{750830400 -10800 1 -04}
|
||||
{761713200 -14400 0 -04}
|
||||
{782280000 -10800 1 -03}
|
||||
{782280000 -10800 1 -04}
|
||||
{793162800 -14400 0 -04}
|
||||
{813729600 -10800 1 -03}
|
||||
{813729600 -10800 1 -04}
|
||||
{824007600 -14400 0 -04}
|
||||
{844574400 -10800 1 -03}
|
||||
{844574400 -10800 1 -04}
|
||||
{856062000 -14400 0 -04}
|
||||
{876110400 -10800 1 -03}
|
||||
{876110400 -10800 1 -04}
|
||||
{888721200 -14400 0 -04}
|
||||
{908078400 -10800 1 -03}
|
||||
{908078400 -10800 1 -04}
|
||||
{919566000 -14400 0 -04}
|
||||
{938923200 -10800 1 -03}
|
||||
{938923200 -10800 1 -04}
|
||||
{951620400 -14400 0 -04}
|
||||
{970977600 -10800 1 -03}
|
||||
{970977600 -10800 1 -04}
|
||||
{982465200 -14400 0 -04}
|
||||
{1003032000 -10800 1 -03}
|
||||
{1003032000 -10800 1 -04}
|
||||
{1013914800 -14400 0 -04}
|
||||
{1036296000 -10800 1 -03}
|
||||
{1036296000 -10800 1 -04}
|
||||
{1045364400 -14400 0 -04}
|
||||
{1064372400 -14400 0 -04}
|
||||
{1096603200 -14400 0 -04}
|
||||
{1099368000 -10800 1 -03}
|
||||
{1099368000 -10800 1 -04}
|
||||
{1108868400 -14400 0 -04}
|
||||
{1129435200 -10800 1 -03}
|
||||
{1129435200 -10800 1 -04}
|
||||
{1140318000 -14400 0 -04}
|
||||
{1162699200 -10800 1 -03}
|
||||
{1162699200 -10800 1 -04}
|
||||
{1172372400 -14400 0 -04}
|
||||
{1192334400 -10800 1 -03}
|
||||
{1192334400 -10800 1 -04}
|
||||
{1203217200 -14400 0 -04}
|
||||
{1224388800 -10800 1 -03}
|
||||
{1224388800 -10800 1 -04}
|
||||
{1234666800 -14400 0 -04}
|
||||
{1255838400 -10800 1 -03}
|
||||
{1255838400 -10800 1 -04}
|
||||
{1266721200 -14400 0 -04}
|
||||
{1287288000 -10800 1 -03}
|
||||
{1287288000 -10800 1 -04}
|
||||
{1298170800 -14400 0 -04}
|
||||
{1318737600 -10800 1 -03}
|
||||
{1318737600 -10800 1 -04}
|
||||
{1330225200 -14400 0 -04}
|
||||
{1350792000 -10800 1 -03}
|
||||
{1350792000 -10800 1 -04}
|
||||
{1361070000 -14400 0 -04}
|
||||
{1382241600 -10800 1 -03}
|
||||
{1382241600 -10800 1 -04}
|
||||
{1392519600 -14400 0 -04}
|
||||
{1413691200 -10800 1 -03}
|
||||
{1413691200 -10800 1 -04}
|
||||
{1424574000 -14400 0 -04}
|
||||
{1445140800 -10800 1 -03}
|
||||
{1445140800 -10800 1 -04}
|
||||
{1456023600 -14400 0 -04}
|
||||
{1476590400 -10800 1 -03}
|
||||
{1476590400 -10800 1 -04}
|
||||
{1487473200 -14400 0 -04}
|
||||
{1508040000 -10800 1 -03}
|
||||
{1508040000 -10800 1 -04}
|
||||
{1518922800 -14400 0 -04}
|
||||
{1541304000 -10800 1 -03}
|
||||
{1541304000 -10800 1 -04}
|
||||
{1550372400 -14400 0 -04}
|
||||
{1572753600 -10800 1 -03}
|
||||
{1572753600 -10800 1 -04}
|
||||
{1581822000 -14400 0 -04}
|
||||
{1604203200 -10800 1 -03}
|
||||
{1604203200 -10800 1 -04}
|
||||
{1613876400 -14400 0 -04}
|
||||
{1636257600 -10800 1 -03}
|
||||
{1636257600 -10800 1 -04}
|
||||
{1645326000 -14400 0 -04}
|
||||
{1667707200 -10800 1 -03}
|
||||
{1667707200 -10800 1 -04}
|
||||
{1677380400 -14400 0 -04}
|
||||
{1699156800 -10800 1 -03}
|
||||
{1699156800 -10800 1 -04}
|
||||
{1708225200 -14400 0 -04}
|
||||
{1730606400 -10800 1 -03}
|
||||
{1730606400 -10800 1 -04}
|
||||
{1739674800 -14400 0 -04}
|
||||
{1762056000 -10800 1 -03}
|
||||
{1762056000 -10800 1 -04}
|
||||
{1771729200 -14400 0 -04}
|
||||
{1793505600 -10800 1 -03}
|
||||
{1793505600 -10800 1 -04}
|
||||
{1803178800 -14400 0 -04}
|
||||
{1825560000 -10800 1 -03}
|
||||
{1825560000 -10800 1 -04}
|
||||
{1834628400 -14400 0 -04}
|
||||
{1857009600 -10800 1 -03}
|
||||
{1857009600 -10800 1 -04}
|
||||
{1866078000 -14400 0 -04}
|
||||
{1888459200 -10800 1 -03}
|
||||
{1888459200 -10800 1 -04}
|
||||
{1897527600 -14400 0 -04}
|
||||
{1919908800 -10800 1 -03}
|
||||
{1919908800 -10800 1 -04}
|
||||
{1928977200 -14400 0 -04}
|
||||
{1951358400 -10800 1 -03}
|
||||
{1951358400 -10800 1 -04}
|
||||
{1960426800 -14400 0 -04}
|
||||
{1983412800 -10800 1 -03}
|
||||
{1983412800 -10800 1 -04}
|
||||
{1992481200 -14400 0 -04}
|
||||
{2014862400 -10800 1 -03}
|
||||
{2014862400 -10800 1 -04}
|
||||
{2024535600 -14400 0 -04}
|
||||
{2046312000 -10800 1 -03}
|
||||
{2046312000 -10800 1 -04}
|
||||
{2055380400 -14400 0 -04}
|
||||
{2077761600 -10800 1 -03}
|
||||
{2077761600 -10800 1 -04}
|
||||
{2086830000 -14400 0 -04}
|
||||
{2109211200 -10800 1 -03}
|
||||
{2109211200 -10800 1 -04}
|
||||
{2118884400 -14400 0 -04}
|
||||
{2140660800 -10800 1 -03}
|
||||
{2140660800 -10800 1 -04}
|
||||
{2150334000 -14400 0 -04}
|
||||
{2172715200 -10800 1 -03}
|
||||
{2172715200 -10800 1 -04}
|
||||
{2181783600 -14400 0 -04}
|
||||
{2204164800 -10800 1 -03}
|
||||
{2204164800 -10800 1 -04}
|
||||
{2213233200 -14400 0 -04}
|
||||
{2235614400 -10800 1 -03}
|
||||
{2235614400 -10800 1 -04}
|
||||
{2244682800 -14400 0 -04}
|
||||
{2267064000 -10800 1 -03}
|
||||
{2267064000 -10800 1 -04}
|
||||
{2276132400 -14400 0 -04}
|
||||
{2298513600 -10800 1 -03}
|
||||
{2298513600 -10800 1 -04}
|
||||
{2307582000 -14400 0 -04}
|
||||
{2329963200 -10800 1 -03}
|
||||
{2329963200 -10800 1 -04}
|
||||
{2339636400 -14400 0 -04}
|
||||
{2362017600 -10800 1 -03}
|
||||
{2362017600 -10800 1 -04}
|
||||
{2371086000 -14400 0 -04}
|
||||
{2393467200 -10800 1 -03}
|
||||
{2393467200 -10800 1 -04}
|
||||
{2402535600 -14400 0 -04}
|
||||
{2424916800 -10800 1 -03}
|
||||
{2424916800 -10800 1 -04}
|
||||
{2433985200 -14400 0 -04}
|
||||
{2456366400 -10800 1 -03}
|
||||
{2456366400 -10800 1 -04}
|
||||
{2465434800 -14400 0 -04}
|
||||
{2487816000 -10800 1 -03}
|
||||
{2487816000 -10800 1 -04}
|
||||
{2497489200 -14400 0 -04}
|
||||
{2519870400 -10800 1 -03}
|
||||
{2519870400 -10800 1 -04}
|
||||
{2528938800 -14400 0 -04}
|
||||
{2551320000 -10800 1 -03}
|
||||
{2551320000 -10800 1 -04}
|
||||
{2560388400 -14400 0 -04}
|
||||
{2582769600 -10800 1 -03}
|
||||
{2582769600 -10800 1 -04}
|
||||
{2591838000 -14400 0 -04}
|
||||
{2614219200 -10800 1 -03}
|
||||
{2614219200 -10800 1 -04}
|
||||
{2623287600 -14400 0 -04}
|
||||
{2645668800 -10800 1 -03}
|
||||
{2645668800 -10800 1 -04}
|
||||
{2654737200 -14400 0 -04}
|
||||
{2677118400 -10800 1 -03}
|
||||
{2677118400 -10800 1 -04}
|
||||
{2686791600 -14400 0 -04}
|
||||
{2709172800 -10800 1 -03}
|
||||
{2709172800 -10800 1 -04}
|
||||
{2718241200 -14400 0 -04}
|
||||
{2740622400 -10800 1 -03}
|
||||
{2740622400 -10800 1 -04}
|
||||
{2749690800 -14400 0 -04}
|
||||
{2772072000 -10800 1 -03}
|
||||
{2772072000 -10800 1 -04}
|
||||
{2781140400 -14400 0 -04}
|
||||
{2803521600 -10800 1 -03}
|
||||
{2803521600 -10800 1 -04}
|
||||
{2812590000 -14400 0 -04}
|
||||
{2834971200 -10800 1 -03}
|
||||
{2834971200 -10800 1 -04}
|
||||
{2844039600 -14400 0 -04}
|
||||
{2867025600 -10800 1 -03}
|
||||
{2867025600 -10800 1 -04}
|
||||
{2876094000 -14400 0 -04}
|
||||
{2898475200 -10800 1 -03}
|
||||
{2898475200 -10800 1 -04}
|
||||
{2907543600 -14400 0 -04}
|
||||
{2929924800 -10800 1 -03}
|
||||
{2929924800 -10800 1 -04}
|
||||
{2938993200 -14400 0 -04}
|
||||
{2961374400 -10800 1 -03}
|
||||
{2961374400 -10800 1 -04}
|
||||
{2970442800 -14400 0 -04}
|
||||
{2992824000 -10800 1 -03}
|
||||
{2992824000 -10800 1 -04}
|
||||
{3001892400 -14400 0 -04}
|
||||
{3024273600 -10800 1 -03}
|
||||
{3024273600 -10800 1 -04}
|
||||
{3033946800 -14400 0 -04}
|
||||
{3056328000 -10800 1 -03}
|
||||
{3056328000 -10800 1 -04}
|
||||
{3065396400 -14400 0 -04}
|
||||
{3087777600 -10800 1 -03}
|
||||
{3087777600 -10800 1 -04}
|
||||
{3096846000 -14400 0 -04}
|
||||
{3119227200 -10800 1 -03}
|
||||
{3119227200 -10800 1 -04}
|
||||
{3128295600 -14400 0 -04}
|
||||
{3150676800 -10800 1 -03}
|
||||
{3150676800 -10800 1 -04}
|
||||
{3159745200 -14400 0 -04}
|
||||
{3182126400 -10800 1 -03}
|
||||
{3182126400 -10800 1 -04}
|
||||
{3191194800 -14400 0 -04}
|
||||
{3213576000 -10800 1 -03}
|
||||
{3213576000 -10800 1 -04}
|
||||
{3223249200 -14400 0 -04}
|
||||
{3245630400 -10800 1 -03}
|
||||
{3245630400 -10800 1 -04}
|
||||
{3254698800 -14400 0 -04}
|
||||
{3277080000 -10800 1 -03}
|
||||
{3277080000 -10800 1 -04}
|
||||
{3286148400 -14400 0 -04}
|
||||
{3308529600 -10800 1 -03}
|
||||
{3308529600 -10800 1 -04}
|
||||
{3317598000 -14400 0 -04}
|
||||
{3339979200 -10800 1 -03}
|
||||
{3339979200 -10800 1 -04}
|
||||
{3349047600 -14400 0 -04}
|
||||
{3371428800 -10800 1 -03}
|
||||
{3371428800 -10800 1 -04}
|
||||
{3381102000 -14400 0 -04}
|
||||
{3403483200 -10800 1 -03}
|
||||
{3403483200 -10800 1 -04}
|
||||
{3412551600 -14400 0 -04}
|
||||
{3434932800 -10800 1 -03}
|
||||
{3434932800 -10800 1 -04}
|
||||
{3444001200 -14400 0 -04}
|
||||
{3466382400 -10800 1 -03}
|
||||
{3466382400 -10800 1 -04}
|
||||
{3475450800 -14400 0 -04}
|
||||
{3497832000 -10800 1 -03}
|
||||
{3497832000 -10800 1 -04}
|
||||
{3506900400 -14400 0 -04}
|
||||
{3529281600 -10800 1 -03}
|
||||
{3529281600 -10800 1 -04}
|
||||
{3538350000 -14400 0 -04}
|
||||
{3560731200 -10800 1 -03}
|
||||
{3560731200 -10800 1 -04}
|
||||
{3570404400 -14400 0 -04}
|
||||
{3592785600 -10800 1 -03}
|
||||
{3592785600 -10800 1 -04}
|
||||
{3601854000 -14400 0 -04}
|
||||
{3624235200 -10800 1 -03}
|
||||
{3624235200 -10800 1 -04}
|
||||
{3633303600 -14400 0 -04}
|
||||
{3655684800 -10800 1 -03}
|
||||
{3655684800 -10800 1 -04}
|
||||
{3664753200 -14400 0 -04}
|
||||
{3687134400 -10800 1 -03}
|
||||
{3687134400 -10800 1 -04}
|
||||
{3696202800 -14400 0 -04}
|
||||
{3718584000 -10800 1 -03}
|
||||
{3718584000 -10800 1 -04}
|
||||
{3727652400 -14400 0 -04}
|
||||
{3750638400 -10800 1 -03}
|
||||
{3750638400 -10800 1 -04}
|
||||
{3759706800 -14400 0 -04}
|
||||
{3782088000 -10800 1 -03}
|
||||
{3782088000 -10800 1 -04}
|
||||
{3791156400 -14400 0 -04}
|
||||
{3813537600 -10800 1 -03}
|
||||
{3813537600 -10800 1 -04}
|
||||
{3822606000 -14400 0 -04}
|
||||
{3844987200 -10800 1 -03}
|
||||
{3844987200 -10800 1 -04}
|
||||
{3854055600 -14400 0 -04}
|
||||
{3876436800 -10800 1 -03}
|
||||
{3876436800 -10800 1 -04}
|
||||
{3885505200 -14400 0 -04}
|
||||
{3907886400 -10800 1 -03}
|
||||
{3907886400 -10800 1 -04}
|
||||
{3917559600 -14400 0 -04}
|
||||
{3939940800 -10800 1 -03}
|
||||
{3939940800 -10800 1 -04}
|
||||
{3949009200 -14400 0 -04}
|
||||
{3971390400 -10800 1 -03}
|
||||
{3971390400 -10800 1 -04}
|
||||
{3980458800 -14400 0 -04}
|
||||
{4002840000 -10800 1 -03}
|
||||
{4002840000 -10800 1 -04}
|
||||
{4011908400 -14400 0 -04}
|
||||
{4034289600 -10800 1 -03}
|
||||
{4034289600 -10800 1 -04}
|
||||
{4043358000 -14400 0 -04}
|
||||
{4065739200 -10800 1 -03}
|
||||
{4065739200 -10800 1 -04}
|
||||
{4074807600 -14400 0 -04}
|
||||
{4097188800 -10800 1 -03}
|
||||
{4097188800 -10800 1 -04}
|
||||
}
|
||||
|
||||
@@ -3,37 +3,37 @@
|
||||
set TZData(:America/Eirunepe) {
|
||||
{-9223372036854775808 -16768 0 LMT}
|
||||
{-1767208832 -18000 0 -05}
|
||||
{-1206950400 -14400 1 -04}
|
||||
{-1206950400 -14400 1 -05}
|
||||
{-1191355200 -18000 0 -05}
|
||||
{-1175367600 -14400 1 -04}
|
||||
{-1175367600 -14400 1 -05}
|
||||
{-1159819200 -18000 0 -05}
|
||||
{-633812400 -14400 1 -04}
|
||||
{-633812400 -14400 1 -05}
|
||||
{-622062000 -18000 0 -05}
|
||||
{-602276400 -14400 1 -04}
|
||||
{-602276400 -14400 1 -05}
|
||||
{-591825600 -18000 0 -05}
|
||||
{-570740400 -14400 1 -04}
|
||||
{-570740400 -14400 1 -05}
|
||||
{-560203200 -18000 0 -05}
|
||||
{-539118000 -14400 1 -04}
|
||||
{-539118000 -14400 1 -05}
|
||||
{-531345600 -18000 0 -05}
|
||||
{-191358000 -14400 1 -04}
|
||||
{-191358000 -14400 1 -05}
|
||||
{-184190400 -18000 0 -05}
|
||||
{-155156400 -14400 1 -04}
|
||||
{-155156400 -14400 1 -05}
|
||||
{-150062400 -18000 0 -05}
|
||||
{-128890800 -14400 1 -04}
|
||||
{-128890800 -14400 1 -05}
|
||||
{-121118400 -18000 0 -05}
|
||||
{-99946800 -14400 1 -04}
|
||||
{-99946800 -14400 1 -05}
|
||||
{-89582400 -18000 0 -05}
|
||||
{-68410800 -14400 1 -04}
|
||||
{-68410800 -14400 1 -05}
|
||||
{-57960000 -18000 0 -05}
|
||||
{499755600 -14400 1 -04}
|
||||
{499755600 -14400 1 -05}
|
||||
{511243200 -18000 0 -05}
|
||||
{530600400 -14400 1 -04}
|
||||
{530600400 -14400 1 -05}
|
||||
{540273600 -18000 0 -05}
|
||||
{562136400 -14400 1 -04}
|
||||
{562136400 -14400 1 -05}
|
||||
{571204800 -18000 0 -05}
|
||||
{590040000 -18000 0 -05}
|
||||
{749192400 -18000 0 -05}
|
||||
{750834000 -14400 1 -04}
|
||||
{750834000 -14400 1 -05}
|
||||
{761716800 -18000 0 -05}
|
||||
{780206400 -18000 0 -05}
|
||||
{1214283600 -14400 0 -04}
|
||||
|
||||
@@ -3,46 +3,46 @@
|
||||
set TZData(:America/Fortaleza) {
|
||||
{-9223372036854775808 -9240 0 LMT}
|
||||
{-1767216360 -10800 0 -03}
|
||||
{-1206957600 -7200 1 -02}
|
||||
{-1206957600 -7200 1 -03}
|
||||
{-1191362400 -10800 0 -03}
|
||||
{-1175374800 -7200 1 -02}
|
||||
{-1175374800 -7200 1 -03}
|
||||
{-1159826400 -10800 0 -03}
|
||||
{-633819600 -7200 1 -02}
|
||||
{-633819600 -7200 1 -03}
|
||||
{-622069200 -10800 0 -03}
|
||||
{-602283600 -7200 1 -02}
|
||||
{-602283600 -7200 1 -03}
|
||||
{-591832800 -10800 0 -03}
|
||||
{-570747600 -7200 1 -02}
|
||||
{-570747600 -7200 1 -03}
|
||||
{-560210400 -10800 0 -03}
|
||||
{-539125200 -7200 1 -02}
|
||||
{-539125200 -7200 1 -03}
|
||||
{-531352800 -10800 0 -03}
|
||||
{-191365200 -7200 1 -02}
|
||||
{-191365200 -7200 1 -03}
|
||||
{-184197600 -10800 0 -03}
|
||||
{-155163600 -7200 1 -02}
|
||||
{-155163600 -7200 1 -03}
|
||||
{-150069600 -10800 0 -03}
|
||||
{-128898000 -7200 1 -02}
|
||||
{-128898000 -7200 1 -03}
|
||||
{-121125600 -10800 0 -03}
|
||||
{-99954000 -7200 1 -02}
|
||||
{-99954000 -7200 1 -03}
|
||||
{-89589600 -10800 0 -03}
|
||||
{-68418000 -7200 1 -02}
|
||||
{-68418000 -7200 1 -03}
|
||||
{-57967200 -10800 0 -03}
|
||||
{499748400 -7200 1 -02}
|
||||
{499748400 -7200 1 -03}
|
||||
{511236000 -10800 0 -03}
|
||||
{530593200 -7200 1 -02}
|
||||
{530593200 -7200 1 -03}
|
||||
{540266400 -10800 0 -03}
|
||||
{562129200 -7200 1 -02}
|
||||
{562129200 -7200 1 -03}
|
||||
{571197600 -10800 0 -03}
|
||||
{592974000 -7200 1 -02}
|
||||
{592974000 -7200 1 -03}
|
||||
{602042400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{634701600 -10800 0 -03}
|
||||
{653536800 -10800 0 -03}
|
||||
{938660400 -10800 0 -03}
|
||||
{938919600 -7200 1 -02}
|
||||
{938919600 -7200 1 -03}
|
||||
{951616800 -10800 0 -03}
|
||||
{970974000 -7200 1 -02}
|
||||
{970974000 -7200 1 -03}
|
||||
{972180000 -10800 0 -03}
|
||||
{1000350000 -10800 0 -03}
|
||||
{1003028400 -7200 1 -02}
|
||||
{1003028400 -7200 1 -03}
|
||||
{1013911200 -10800 0 -03}
|
||||
{1033437600 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
set TZData(:America/Grand_Turk) {
|
||||
{-9223372036854775808 -17072 0 LMT}
|
||||
{-2524504528 -18431 0 KMT}
|
||||
{-1827687169 -18000 0 EST}
|
||||
{-2524504528 -18430 0 KMT}
|
||||
{-1827687170 -18000 0 EST}
|
||||
{284014800 -18000 0 EST}
|
||||
{294217200 -14400 1 EDT}
|
||||
{309938400 -18000 0 EST}
|
||||
|
||||
@@ -4,6 +4,6 @@ set TZData(:America/Guayaquil) {
|
||||
{-9223372036854775808 -19160 0 LMT}
|
||||
{-2524502440 -18840 0 QMT}
|
||||
{-1230749160 -18000 0 -05}
|
||||
{722926800 -14400 1 -04}
|
||||
{722926800 -14400 1 -05}
|
||||
{728884800 -18000 0 -05}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Jamaica) {
|
||||
{-9223372036854775808 -18431 0 LMT}
|
||||
{-2524503169 -18431 0 KMT}
|
||||
{-1827687169 -18000 0 EST}
|
||||
{-9223372036854775808 -18430 0 LMT}
|
||||
{-2524503170 -18430 0 KMT}
|
||||
{-1827687170 -18000 0 EST}
|
||||
{126248400 -18000 0 EST}
|
||||
{126687600 -14400 1 EDT}
|
||||
{152085600 -18000 0 EST}
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
set TZData(:America/Lima) {
|
||||
{-9223372036854775808 -18492 0 LMT}
|
||||
{-2524503108 -18516 0 LMT}
|
||||
{-1938538284 -14400 0 -04}
|
||||
{-1938538284 -14400 0 -05}
|
||||
{-1002052800 -18000 0 -05}
|
||||
{-986756400 -14400 1 -04}
|
||||
{-986756400 -14400 1 -05}
|
||||
{-971035200 -18000 0 -05}
|
||||
{-955306800 -14400 1 -04}
|
||||
{-955306800 -14400 1 -05}
|
||||
{-939585600 -18000 0 -05}
|
||||
{512712000 -18000 0 -05}
|
||||
{544248000 -18000 0 -05}
|
||||
|
||||
@@ -3,50 +3,50 @@
|
||||
set TZData(:America/Maceio) {
|
||||
{-9223372036854775808 -8572 0 LMT}
|
||||
{-1767217028 -10800 0 -03}
|
||||
{-1206957600 -7200 1 -02}
|
||||
{-1206957600 -7200 1 -03}
|
||||
{-1191362400 -10800 0 -03}
|
||||
{-1175374800 -7200 1 -02}
|
||||
{-1175374800 -7200 1 -03}
|
||||
{-1159826400 -10800 0 -03}
|
||||
{-633819600 -7200 1 -02}
|
||||
{-633819600 -7200 1 -03}
|
||||
{-622069200 -10800 0 -03}
|
||||
{-602283600 -7200 1 -02}
|
||||
{-602283600 -7200 1 -03}
|
||||
{-591832800 -10800 0 -03}
|
||||
{-570747600 -7200 1 -02}
|
||||
{-570747600 -7200 1 -03}
|
||||
{-560210400 -10800 0 -03}
|
||||
{-539125200 -7200 1 -02}
|
||||
{-539125200 -7200 1 -03}
|
||||
{-531352800 -10800 0 -03}
|
||||
{-191365200 -7200 1 -02}
|
||||
{-191365200 -7200 1 -03}
|
||||
{-184197600 -10800 0 -03}
|
||||
{-155163600 -7200 1 -02}
|
||||
{-155163600 -7200 1 -03}
|
||||
{-150069600 -10800 0 -03}
|
||||
{-128898000 -7200 1 -02}
|
||||
{-128898000 -7200 1 -03}
|
||||
{-121125600 -10800 0 -03}
|
||||
{-99954000 -7200 1 -02}
|
||||
{-99954000 -7200 1 -03}
|
||||
{-89589600 -10800 0 -03}
|
||||
{-68418000 -7200 1 -02}
|
||||
{-68418000 -7200 1 -03}
|
||||
{-57967200 -10800 0 -03}
|
||||
{499748400 -7200 1 -02}
|
||||
{499748400 -7200 1 -03}
|
||||
{511236000 -10800 0 -03}
|
||||
{530593200 -7200 1 -02}
|
||||
{530593200 -7200 1 -03}
|
||||
{540266400 -10800 0 -03}
|
||||
{562129200 -7200 1 -02}
|
||||
{562129200 -7200 1 -03}
|
||||
{571197600 -10800 0 -03}
|
||||
{592974000 -7200 1 -02}
|
||||
{592974000 -7200 1 -03}
|
||||
{602042400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{634701600 -10800 0 -03}
|
||||
{653536800 -10800 0 -03}
|
||||
{813553200 -10800 0 -03}
|
||||
{813726000 -7200 1 -02}
|
||||
{813726000 -7200 1 -03}
|
||||
{824004000 -10800 0 -03}
|
||||
{841802400 -10800 0 -03}
|
||||
{938660400 -10800 0 -03}
|
||||
{938919600 -7200 1 -02}
|
||||
{938919600 -7200 1 -03}
|
||||
{951616800 -10800 0 -03}
|
||||
{970974000 -7200 1 -02}
|
||||
{970974000 -7200 1 -03}
|
||||
{972180000 -10800 0 -03}
|
||||
{1000350000 -10800 0 -03}
|
||||
{1003028400 -7200 1 -02}
|
||||
{1003028400 -7200 1 -03}
|
||||
{1013911200 -10800 0 -03}
|
||||
{1033437600 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -3,37 +3,37 @@
|
||||
set TZData(:America/Manaus) {
|
||||
{-9223372036854775808 -14404 0 LMT}
|
||||
{-1767211196 -14400 0 -04}
|
||||
{-1206954000 -10800 1 -03}
|
||||
{-1206954000 -10800 1 -04}
|
||||
{-1191358800 -14400 0 -04}
|
||||
{-1175371200 -10800 1 -03}
|
||||
{-1175371200 -10800 1 -04}
|
||||
{-1159822800 -14400 0 -04}
|
||||
{-633816000 -10800 1 -03}
|
||||
{-633816000 -10800 1 -04}
|
||||
{-622065600 -14400 0 -04}
|
||||
{-602280000 -10800 1 -03}
|
||||
{-602280000 -10800 1 -04}
|
||||
{-591829200 -14400 0 -04}
|
||||
{-570744000 -10800 1 -03}
|
||||
{-570744000 -10800 1 -04}
|
||||
{-560206800 -14400 0 -04}
|
||||
{-539121600 -10800 1 -03}
|
||||
{-539121600 -10800 1 -04}
|
||||
{-531349200 -14400 0 -04}
|
||||
{-191361600 -10800 1 -03}
|
||||
{-191361600 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-155160000 -10800 1 -03}
|
||||
{-155160000 -10800 1 -04}
|
||||
{-150066000 -14400 0 -04}
|
||||
{-128894400 -10800 1 -03}
|
||||
{-128894400 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-99950400 -10800 1 -03}
|
||||
{-99950400 -10800 1 -04}
|
||||
{-89586000 -14400 0 -04}
|
||||
{-68414400 -10800 1 -03}
|
||||
{-68414400 -10800 1 -04}
|
||||
{-57963600 -14400 0 -04}
|
||||
{499752000 -10800 1 -03}
|
||||
{499752000 -10800 1 -04}
|
||||
{511239600 -14400 0 -04}
|
||||
{530596800 -10800 1 -03}
|
||||
{530596800 -10800 1 -04}
|
||||
{540270000 -14400 0 -04}
|
||||
{562132800 -10800 1 -03}
|
||||
{562132800 -10800 1 -04}
|
||||
{571201200 -14400 0 -04}
|
||||
{590036400 -14400 0 -04}
|
||||
{749188800 -14400 0 -04}
|
||||
{750830400 -10800 1 -03}
|
||||
{750830400 -10800 1 -04}
|
||||
{761713200 -14400 0 -04}
|
||||
{780202800 -14400 0 -04}
|
||||
}
|
||||
|
||||
@@ -1,96 +1,96 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Montevideo) {
|
||||
{-9223372036854775808 -13484 0 LMT}
|
||||
{-2256668116 -13484 0 MMT}
|
||||
{-1567455316 -12600 0 -0330}
|
||||
{-1459542600 -10800 1 -03}
|
||||
{-9223372036854775808 -13491 0 LMT}
|
||||
{-1942690509 -13491 0 MMT}
|
||||
{-1567455309 -14400 0 -04}
|
||||
{-1459627200 -10800 0 -0330}
|
||||
{-1443819600 -12600 0 -0330}
|
||||
{-1428006600 -10800 1 -03}
|
||||
{-1428006600 -10800 1 -0330}
|
||||
{-1412283600 -12600 0 -0330}
|
||||
{-1396470600 -10800 1 -03}
|
||||
{-1396470600 -10800 1 -0330}
|
||||
{-1380747600 -12600 0 -0330}
|
||||
{-1141590600 -10800 1 -03}
|
||||
{-1141590600 -10800 1 -0330}
|
||||
{-1128286800 -12600 0 -0330}
|
||||
{-1110141000 -10800 1 -03}
|
||||
{-1110141000 -10800 1 -0330}
|
||||
{-1096837200 -12600 0 -0330}
|
||||
{-1078691400 -10800 1 -03}
|
||||
{-1078691400 -10800 1 -0330}
|
||||
{-1065387600 -12600 0 -0330}
|
||||
{-1046637000 -10800 1 -03}
|
||||
{-1047241800 -10800 1 -0330}
|
||||
{-1033938000 -12600 0 -0330}
|
||||
{-1015187400 -10800 1 -03}
|
||||
{-1015187400 -10800 1 -0330}
|
||||
{-1002488400 -12600 0 -0330}
|
||||
{-983737800 -10800 1 -03}
|
||||
{-983737800 -10800 1 -0330}
|
||||
{-971038800 -12600 0 -0330}
|
||||
{-952288200 -10800 1 -03}
|
||||
{-954707400 -10800 1 -0330}
|
||||
{-938984400 -12600 0 -0330}
|
||||
{-920838600 -10800 1 -03}
|
||||
{-920838600 -10800 1 -0330}
|
||||
{-907534800 -12600 0 -0330}
|
||||
{-896819400 -10800 1 -03}
|
||||
{-853623000 -10800 0 -03}
|
||||
{-853621200 -7200 1 -02}
|
||||
{-845848800 -10800 0 -03}
|
||||
{-334789200 -7200 1 -02}
|
||||
{-319672800 -10800 0 -03}
|
||||
{-314226000 -7200 1 -02}
|
||||
{-896819400 -10800 1 -0330}
|
||||
{-853621200 -9000 0 -03}
|
||||
{-845847000 -10800 0 -03}
|
||||
{-334789200 -9000 1 -03}
|
||||
{-319671000 -10800 0 -03}
|
||||
{-315608400 -10800 0 -03}
|
||||
{-314226000 -7200 1 -03}
|
||||
{-309996000 -10800 0 -03}
|
||||
{-149720400 -7200 1 -02}
|
||||
{-149720400 -7200 1 -03}
|
||||
{-134604000 -10800 0 -03}
|
||||
{-118270800 -7200 1 -02}
|
||||
{-100044000 -10800 0 -03}
|
||||
{-86821200 -7200 1 -02}
|
||||
{-68508000 -10800 0 -03}
|
||||
{-63147600 -10800 0 -03}
|
||||
{-50446800 -9000 1 -0230}
|
||||
{-34119000 -10800 0 -03}
|
||||
{-18910800 -9000 1 -0230}
|
||||
{-2583000 -10800 0 -03}
|
||||
{12625200 -9000 1 -0230}
|
||||
{28953000 -10800 0 -03}
|
||||
{31546800 -10800 0 -03}
|
||||
{72932400 -7200 1 -02}
|
||||
{82692000 -10800 0 -03}
|
||||
{-50446800 -9000 1 -03}
|
||||
{-34205400 -10800 0 -03}
|
||||
{10800 -10800 0 -03}
|
||||
{9860400 -7200 1 -03}
|
||||
{14176800 -10800 0 -03}
|
||||
{72846000 -7200 1 -03}
|
||||
{80100000 -10800 0 -03}
|
||||
{126241200 -10800 0 -03}
|
||||
{132116400 -9000 1 -0230}
|
||||
{156909600 -9000 0 -02}
|
||||
{156911400 -7200 1 -02}
|
||||
{212983200 -10800 0 -03}
|
||||
{250052400 -7200 1 -02}
|
||||
{260244000 -10800 0 -03}
|
||||
{307594800 -7200 1 -02}
|
||||
{325994400 -10800 0 -03}
|
||||
{566449200 -7200 1 -02}
|
||||
{574308000 -10800 0 -03}
|
||||
{597812400 -7200 1 -02}
|
||||
{605671200 -10800 0 -03}
|
||||
{625633200 -7200 1 -02}
|
||||
{636516000 -10800 0 -03}
|
||||
{656478000 -7200 1 -02}
|
||||
{127278000 -5400 1 -03}
|
||||
{132112800 -9000 0 -03}
|
||||
{147234600 -10800 0 -03}
|
||||
{156909600 -10800 0 -03}
|
||||
{156913200 -7200 1 -03}
|
||||
{165376800 -10800 0 -03}
|
||||
{219812400 -7200 1 -03}
|
||||
{226461600 -10800 0 -03}
|
||||
{250052400 -7200 1 -03}
|
||||
{257911200 -10800 0 -03}
|
||||
{282711600 -7200 1 -03}
|
||||
{289360800 -10800 0 -03}
|
||||
{294202800 -7200 1 -03}
|
||||
{322020000 -10800 0 -03}
|
||||
{566449200 -7200 1 -03}
|
||||
{573012000 -10800 0 -03}
|
||||
{597812400 -7200 1 -03}
|
||||
{605066400 -10800 0 -03}
|
||||
{625633200 -7200 1 -03}
|
||||
{635911200 -10800 0 -03}
|
||||
{656478000 -7200 1 -03}
|
||||
{667965600 -10800 0 -03}
|
||||
{688532400 -7200 1 -02}
|
||||
{688532400 -7200 1 -03}
|
||||
{699415200 -10800 0 -03}
|
||||
{719377200 -7200 1 -02}
|
||||
{719377200 -7200 1 -03}
|
||||
{730864800 -10800 0 -03}
|
||||
{1095562800 -7200 1 -02}
|
||||
{1095562800 -7200 1 -03}
|
||||
{1111896000 -10800 0 -03}
|
||||
{1128834000 -7200 1 -02}
|
||||
{1128834000 -7200 1 -03}
|
||||
{1142136000 -10800 0 -03}
|
||||
{1159678800 -7200 1 -02}
|
||||
{1159678800 -7200 1 -03}
|
||||
{1173585600 -10800 0 -03}
|
||||
{1191733200 -7200 1 -02}
|
||||
{1191733200 -7200 1 -03}
|
||||
{1205035200 -10800 0 -03}
|
||||
{1223182800 -7200 1 -02}
|
||||
{1223182800 -7200 1 -03}
|
||||
{1236484800 -10800 0 -03}
|
||||
{1254632400 -7200 1 -02}
|
||||
{1254632400 -7200 1 -03}
|
||||
{1268539200 -10800 0 -03}
|
||||
{1286082000 -7200 1 -02}
|
||||
{1286082000 -7200 1 -03}
|
||||
{1299988800 -10800 0 -03}
|
||||
{1317531600 -7200 1 -02}
|
||||
{1317531600 -7200 1 -03}
|
||||
{1331438400 -10800 0 -03}
|
||||
{1349586000 -7200 1 -02}
|
||||
{1349586000 -7200 1 -03}
|
||||
{1362888000 -10800 0 -03}
|
||||
{1381035600 -7200 1 -02}
|
||||
{1381035600 -7200 1 -03}
|
||||
{1394337600 -10800 0 -03}
|
||||
{1412485200 -7200 1 -02}
|
||||
{1412485200 -7200 1 -03}
|
||||
{1425787200 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -3,46 +3,46 @@
|
||||
set TZData(:America/Noronha) {
|
||||
{-9223372036854775808 -7780 0 LMT}
|
||||
{-1767217820 -7200 0 -02}
|
||||
{-1206961200 -3600 1 -01}
|
||||
{-1206961200 -3600 1 -02}
|
||||
{-1191366000 -7200 0 -02}
|
||||
{-1175378400 -3600 1 -01}
|
||||
{-1175378400 -3600 1 -02}
|
||||
{-1159830000 -7200 0 -02}
|
||||
{-633823200 -3600 1 -01}
|
||||
{-633823200 -3600 1 -02}
|
||||
{-622072800 -7200 0 -02}
|
||||
{-602287200 -3600 1 -01}
|
||||
{-602287200 -3600 1 -02}
|
||||
{-591836400 -7200 0 -02}
|
||||
{-570751200 -3600 1 -01}
|
||||
{-570751200 -3600 1 -02}
|
||||
{-560214000 -7200 0 -02}
|
||||
{-539128800 -3600 1 -01}
|
||||
{-539128800 -3600 1 -02}
|
||||
{-531356400 -7200 0 -02}
|
||||
{-191368800 -3600 1 -01}
|
||||
{-191368800 -3600 1 -02}
|
||||
{-184201200 -7200 0 -02}
|
||||
{-155167200 -3600 1 -01}
|
||||
{-155167200 -3600 1 -02}
|
||||
{-150073200 -7200 0 -02}
|
||||
{-128901600 -3600 1 -01}
|
||||
{-128901600 -3600 1 -02}
|
||||
{-121129200 -7200 0 -02}
|
||||
{-99957600 -3600 1 -01}
|
||||
{-99957600 -3600 1 -02}
|
||||
{-89593200 -7200 0 -02}
|
||||
{-68421600 -3600 1 -01}
|
||||
{-68421600 -3600 1 -02}
|
||||
{-57970800 -7200 0 -02}
|
||||
{499744800 -3600 1 -01}
|
||||
{499744800 -3600 1 -02}
|
||||
{511232400 -7200 0 -02}
|
||||
{530589600 -3600 1 -01}
|
||||
{530589600 -3600 1 -02}
|
||||
{540262800 -7200 0 -02}
|
||||
{562125600 -3600 1 -01}
|
||||
{562125600 -3600 1 -02}
|
||||
{571194000 -7200 0 -02}
|
||||
{592970400 -3600 1 -01}
|
||||
{592970400 -3600 1 -02}
|
||||
{602038800 -7200 0 -02}
|
||||
{624420000 -3600 1 -01}
|
||||
{624420000 -3600 1 -02}
|
||||
{634698000 -7200 0 -02}
|
||||
{653533200 -7200 0 -02}
|
||||
{938656800 -7200 0 -02}
|
||||
{938916000 -3600 1 -01}
|
||||
{938916000 -3600 1 -02}
|
||||
{951613200 -7200 0 -02}
|
||||
{970970400 -3600 1 -01}
|
||||
{970970400 -3600 1 -02}
|
||||
{971571600 -7200 0 -02}
|
||||
{1000346400 -7200 0 -02}
|
||||
{1003024800 -3600 1 -01}
|
||||
{1003024800 -3600 1 -02}
|
||||
{1013907600 -7200 0 -02}
|
||||
{1033434000 -7200 0 -02}
|
||||
}
|
||||
|
||||
@@ -3,33 +3,33 @@
|
||||
set TZData(:America/Porto_Velho) {
|
||||
{-9223372036854775808 -15336 0 LMT}
|
||||
{-1767210264 -14400 0 -04}
|
||||
{-1206954000 -10800 1 -03}
|
||||
{-1206954000 -10800 1 -04}
|
||||
{-1191358800 -14400 0 -04}
|
||||
{-1175371200 -10800 1 -03}
|
||||
{-1175371200 -10800 1 -04}
|
||||
{-1159822800 -14400 0 -04}
|
||||
{-633816000 -10800 1 -03}
|
||||
{-633816000 -10800 1 -04}
|
||||
{-622065600 -14400 0 -04}
|
||||
{-602280000 -10800 1 -03}
|
||||
{-602280000 -10800 1 -04}
|
||||
{-591829200 -14400 0 -04}
|
||||
{-570744000 -10800 1 -03}
|
||||
{-570744000 -10800 1 -04}
|
||||
{-560206800 -14400 0 -04}
|
||||
{-539121600 -10800 1 -03}
|
||||
{-539121600 -10800 1 -04}
|
||||
{-531349200 -14400 0 -04}
|
||||
{-191361600 -10800 1 -03}
|
||||
{-191361600 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-155160000 -10800 1 -03}
|
||||
{-155160000 -10800 1 -04}
|
||||
{-150066000 -14400 0 -04}
|
||||
{-128894400 -10800 1 -03}
|
||||
{-128894400 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-99950400 -10800 1 -03}
|
||||
{-99950400 -10800 1 -04}
|
||||
{-89586000 -14400 0 -04}
|
||||
{-68414400 -10800 1 -03}
|
||||
{-68414400 -10800 1 -04}
|
||||
{-57963600 -14400 0 -04}
|
||||
{499752000 -10800 1 -03}
|
||||
{499752000 -10800 1 -04}
|
||||
{511239600 -14400 0 -04}
|
||||
{530596800 -10800 1 -03}
|
||||
{530596800 -10800 1 -04}
|
||||
{540270000 -14400 0 -04}
|
||||
{562132800 -10800 1 -03}
|
||||
{562132800 -10800 1 -04}
|
||||
{571201200 -14400 0 -04}
|
||||
{590036400 -14400 0 -04}
|
||||
}
|
||||
|
||||
@@ -8,115 +8,115 @@ set TZData(:America/Punta_Arenas) {
|
||||
{-1619205434 -14400 0 -04}
|
||||
{-1593806400 -16966 0 SMT}
|
||||
{-1335986234 -18000 0 -05}
|
||||
{-1335985200 -14400 1 -04}
|
||||
{-1335985200 -14400 1 -05}
|
||||
{-1317585600 -18000 0 -05}
|
||||
{-1304362800 -14400 1 -04}
|
||||
{-1304362800 -14400 1 -05}
|
||||
{-1286049600 -18000 0 -05}
|
||||
{-1272826800 -14400 1 -04}
|
||||
{-1272826800 -14400 1 -05}
|
||||
{-1254513600 -18000 0 -05}
|
||||
{-1241290800 -14400 1 -04}
|
||||
{-1241290800 -14400 1 -05}
|
||||
{-1222977600 -18000 0 -05}
|
||||
{-1209754800 -14400 1 -04}
|
||||
{-1209754800 -14400 1 -05}
|
||||
{-1191355200 -18000 0 -05}
|
||||
{-1178132400 -14400 0 -04}
|
||||
{-870552000 -18000 0 -05}
|
||||
{-865278000 -14400 0 -04}
|
||||
{-718056000 -18000 0 -05}
|
||||
{-713649600 -14400 0 -04}
|
||||
{-36619200 -10800 1 -03}
|
||||
{-36619200 -10800 1 -04}
|
||||
{-23922000 -14400 0 -04}
|
||||
{-3355200 -10800 1 -03}
|
||||
{-3355200 -10800 1 -04}
|
||||
{7527600 -14400 0 -04}
|
||||
{24465600 -10800 1 -03}
|
||||
{24465600 -10800 1 -04}
|
||||
{37767600 -14400 0 -04}
|
||||
{55915200 -10800 1 -03}
|
||||
{55915200 -10800 1 -04}
|
||||
{69217200 -14400 0 -04}
|
||||
{87969600 -10800 1 -03}
|
||||
{87969600 -10800 1 -04}
|
||||
{100666800 -14400 0 -04}
|
||||
{118209600 -10800 1 -03}
|
||||
{118209600 -10800 1 -04}
|
||||
{132116400 -14400 0 -04}
|
||||
{150868800 -10800 1 -03}
|
||||
{150868800 -10800 1 -04}
|
||||
{163566000 -14400 0 -04}
|
||||
{182318400 -10800 1 -03}
|
||||
{182318400 -10800 1 -04}
|
||||
{195620400 -14400 0 -04}
|
||||
{213768000 -10800 1 -03}
|
||||
{213768000 -10800 1 -04}
|
||||
{227070000 -14400 0 -04}
|
||||
{245217600 -10800 1 -03}
|
||||
{245217600 -10800 1 -04}
|
||||
{258519600 -14400 0 -04}
|
||||
{277272000 -10800 1 -03}
|
||||
{277272000 -10800 1 -04}
|
||||
{289969200 -14400 0 -04}
|
||||
{308721600 -10800 1 -03}
|
||||
{308721600 -10800 1 -04}
|
||||
{321418800 -14400 0 -04}
|
||||
{340171200 -10800 1 -03}
|
||||
{340171200 -10800 1 -04}
|
||||
{353473200 -14400 0 -04}
|
||||
{371620800 -10800 1 -03}
|
||||
{371620800 -10800 1 -04}
|
||||
{384922800 -14400 0 -04}
|
||||
{403070400 -10800 1 -03}
|
||||
{403070400 -10800 1 -04}
|
||||
{416372400 -14400 0 -04}
|
||||
{434520000 -10800 1 -03}
|
||||
{434520000 -10800 1 -04}
|
||||
{447822000 -14400 0 -04}
|
||||
{466574400 -10800 1 -03}
|
||||
{466574400 -10800 1 -04}
|
||||
{479271600 -14400 0 -04}
|
||||
{498024000 -10800 1 -03}
|
||||
{498024000 -10800 1 -04}
|
||||
{510721200 -14400 0 -04}
|
||||
{529473600 -10800 1 -03}
|
||||
{529473600 -10800 1 -04}
|
||||
{545194800 -14400 0 -04}
|
||||
{560923200 -10800 1 -03}
|
||||
{560923200 -10800 1 -04}
|
||||
{574225200 -14400 0 -04}
|
||||
{592372800 -10800 1 -03}
|
||||
{592372800 -10800 1 -04}
|
||||
{605674800 -14400 0 -04}
|
||||
{624427200 -10800 1 -03}
|
||||
{624427200 -10800 1 -04}
|
||||
{637124400 -14400 0 -04}
|
||||
{653457600 -10800 1 -03}
|
||||
{653457600 -10800 1 -04}
|
||||
{668574000 -14400 0 -04}
|
||||
{687326400 -10800 1 -03}
|
||||
{687326400 -10800 1 -04}
|
||||
{700628400 -14400 0 -04}
|
||||
{718776000 -10800 1 -03}
|
||||
{718776000 -10800 1 -04}
|
||||
{732078000 -14400 0 -04}
|
||||
{750225600 -10800 1 -03}
|
||||
{750225600 -10800 1 -04}
|
||||
{763527600 -14400 0 -04}
|
||||
{781675200 -10800 1 -03}
|
||||
{781675200 -10800 1 -04}
|
||||
{794977200 -14400 0 -04}
|
||||
{813729600 -10800 1 -03}
|
||||
{813729600 -10800 1 -04}
|
||||
{826426800 -14400 0 -04}
|
||||
{845179200 -10800 1 -03}
|
||||
{845179200 -10800 1 -04}
|
||||
{859690800 -14400 0 -04}
|
||||
{876628800 -10800 1 -03}
|
||||
{876628800 -10800 1 -04}
|
||||
{889930800 -14400 0 -04}
|
||||
{906868800 -10800 1 -03}
|
||||
{906868800 -10800 1 -04}
|
||||
{923194800 -14400 0 -04}
|
||||
{939528000 -10800 1 -03}
|
||||
{939528000 -10800 1 -04}
|
||||
{952830000 -14400 0 -04}
|
||||
{971582400 -10800 1 -03}
|
||||
{971582400 -10800 1 -04}
|
||||
{984279600 -14400 0 -04}
|
||||
{1003032000 -10800 1 -03}
|
||||
{1003032000 -10800 1 -04}
|
||||
{1015729200 -14400 0 -04}
|
||||
{1034481600 -10800 1 -03}
|
||||
{1034481600 -10800 1 -04}
|
||||
{1047178800 -14400 0 -04}
|
||||
{1065931200 -10800 1 -03}
|
||||
{1065931200 -10800 1 -04}
|
||||
{1079233200 -14400 0 -04}
|
||||
{1097380800 -10800 1 -03}
|
||||
{1097380800 -10800 1 -04}
|
||||
{1110682800 -14400 0 -04}
|
||||
{1128830400 -10800 1 -03}
|
||||
{1128830400 -10800 1 -04}
|
||||
{1142132400 -14400 0 -04}
|
||||
{1160884800 -10800 1 -03}
|
||||
{1160884800 -10800 1 -04}
|
||||
{1173582000 -14400 0 -04}
|
||||
{1192334400 -10800 1 -03}
|
||||
{1192334400 -10800 1 -04}
|
||||
{1206846000 -14400 0 -04}
|
||||
{1223784000 -10800 1 -03}
|
||||
{1223784000 -10800 1 -04}
|
||||
{1237086000 -14400 0 -04}
|
||||
{1255233600 -10800 1 -03}
|
||||
{1255233600 -10800 1 -04}
|
||||
{1270350000 -14400 0 -04}
|
||||
{1286683200 -10800 1 -03}
|
||||
{1286683200 -10800 1 -04}
|
||||
{1304823600 -14400 0 -04}
|
||||
{1313899200 -10800 1 -03}
|
||||
{1313899200 -10800 1 -04}
|
||||
{1335668400 -14400 0 -04}
|
||||
{1346558400 -10800 1 -03}
|
||||
{1346558400 -10800 1 -04}
|
||||
{1367118000 -14400 0 -04}
|
||||
{1378612800 -10800 1 -03}
|
||||
{1378612800 -10800 1 -04}
|
||||
{1398567600 -14400 0 -04}
|
||||
{1410062400 -10800 1 -03}
|
||||
{1410062400 -10800 1 -04}
|
||||
{1463281200 -14400 0 -04}
|
||||
{1471147200 -10800 1 -03}
|
||||
{1471147200 -10800 1 -04}
|
||||
{1480820400 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -3,46 +3,46 @@
|
||||
set TZData(:America/Recife) {
|
||||
{-9223372036854775808 -8376 0 LMT}
|
||||
{-1767217224 -10800 0 -03}
|
||||
{-1206957600 -7200 1 -02}
|
||||
{-1206957600 -7200 1 -03}
|
||||
{-1191362400 -10800 0 -03}
|
||||
{-1175374800 -7200 1 -02}
|
||||
{-1175374800 -7200 1 -03}
|
||||
{-1159826400 -10800 0 -03}
|
||||
{-633819600 -7200 1 -02}
|
||||
{-633819600 -7200 1 -03}
|
||||
{-622069200 -10800 0 -03}
|
||||
{-602283600 -7200 1 -02}
|
||||
{-602283600 -7200 1 -03}
|
||||
{-591832800 -10800 0 -03}
|
||||
{-570747600 -7200 1 -02}
|
||||
{-570747600 -7200 1 -03}
|
||||
{-560210400 -10800 0 -03}
|
||||
{-539125200 -7200 1 -02}
|
||||
{-539125200 -7200 1 -03}
|
||||
{-531352800 -10800 0 -03}
|
||||
{-191365200 -7200 1 -02}
|
||||
{-191365200 -7200 1 -03}
|
||||
{-184197600 -10800 0 -03}
|
||||
{-155163600 -7200 1 -02}
|
||||
{-155163600 -7200 1 -03}
|
||||
{-150069600 -10800 0 -03}
|
||||
{-128898000 -7200 1 -02}
|
||||
{-128898000 -7200 1 -03}
|
||||
{-121125600 -10800 0 -03}
|
||||
{-99954000 -7200 1 -02}
|
||||
{-99954000 -7200 1 -03}
|
||||
{-89589600 -10800 0 -03}
|
||||
{-68418000 -7200 1 -02}
|
||||
{-68418000 -7200 1 -03}
|
||||
{-57967200 -10800 0 -03}
|
||||
{499748400 -7200 1 -02}
|
||||
{499748400 -7200 1 -03}
|
||||
{511236000 -10800 0 -03}
|
||||
{530593200 -7200 1 -02}
|
||||
{530593200 -7200 1 -03}
|
||||
{540266400 -10800 0 -03}
|
||||
{562129200 -7200 1 -02}
|
||||
{562129200 -7200 1 -03}
|
||||
{571197600 -10800 0 -03}
|
||||
{592974000 -7200 1 -02}
|
||||
{592974000 -7200 1 -03}
|
||||
{602042400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{634701600 -10800 0 -03}
|
||||
{653536800 -10800 0 -03}
|
||||
{938660400 -10800 0 -03}
|
||||
{938919600 -7200 1 -02}
|
||||
{938919600 -7200 1 -03}
|
||||
{951616800 -10800 0 -03}
|
||||
{970974000 -7200 1 -02}
|
||||
{970974000 -7200 1 -03}
|
||||
{971575200 -10800 0 -03}
|
||||
{1000350000 -10800 0 -03}
|
||||
{1003028400 -7200 1 -02}
|
||||
{1003028400 -7200 1 -03}
|
||||
{1013911200 -10800 0 -03}
|
||||
{1033437600 -10800 0 -03}
|
||||
}
|
||||
|
||||
@@ -3,33 +3,33 @@
|
||||
set TZData(:America/Rio_Branco) {
|
||||
{-9223372036854775808 -16272 0 LMT}
|
||||
{-1767209328 -18000 0 -05}
|
||||
{-1206950400 -14400 1 -04}
|
||||
{-1206950400 -14400 1 -05}
|
||||
{-1191355200 -18000 0 -05}
|
||||
{-1175367600 -14400 1 -04}
|
||||
{-1175367600 -14400 1 -05}
|
||||
{-1159819200 -18000 0 -05}
|
||||
{-633812400 -14400 1 -04}
|
||||
{-633812400 -14400 1 -05}
|
||||
{-622062000 -18000 0 -05}
|
||||
{-602276400 -14400 1 -04}
|
||||
{-602276400 -14400 1 -05}
|
||||
{-591825600 -18000 0 -05}
|
||||
{-570740400 -14400 1 -04}
|
||||
{-570740400 -14400 1 -05}
|
||||
{-560203200 -18000 0 -05}
|
||||
{-539118000 -14400 1 -04}
|
||||
{-539118000 -14400 1 -05}
|
||||
{-531345600 -18000 0 -05}
|
||||
{-191358000 -14400 1 -04}
|
||||
{-191358000 -14400 1 -05}
|
||||
{-184190400 -18000 0 -05}
|
||||
{-155156400 -14400 1 -04}
|
||||
{-155156400 -14400 1 -05}
|
||||
{-150062400 -18000 0 -05}
|
||||
{-128890800 -14400 1 -04}
|
||||
{-128890800 -14400 1 -05}
|
||||
{-121118400 -18000 0 -05}
|
||||
{-99946800 -14400 1 -04}
|
||||
{-99946800 -14400 1 -05}
|
||||
{-89582400 -18000 0 -05}
|
||||
{-68410800 -14400 1 -04}
|
||||
{-68410800 -14400 1 -05}
|
||||
{-57960000 -18000 0 -05}
|
||||
{499755600 -14400 1 -04}
|
||||
{499755600 -14400 1 -05}
|
||||
{511243200 -18000 0 -05}
|
||||
{530600400 -14400 1 -04}
|
||||
{530600400 -14400 1 -05}
|
||||
{540273600 -18000 0 -05}
|
||||
{562136400 -14400 1 -04}
|
||||
{562136400 -14400 1 -05}
|
||||
{571204800 -18000 0 -05}
|
||||
{590040000 -18000 0 -05}
|
||||
{1214283600 -14400 0 -04}
|
||||
|
||||
@@ -3,33 +3,33 @@
|
||||
set TZData(:America/Santarem) {
|
||||
{-9223372036854775808 -13128 0 LMT}
|
||||
{-1767212472 -14400 0 -04}
|
||||
{-1206954000 -10800 1 -03}
|
||||
{-1206954000 -10800 1 -04}
|
||||
{-1191358800 -14400 0 -04}
|
||||
{-1175371200 -10800 1 -03}
|
||||
{-1175371200 -10800 1 -04}
|
||||
{-1159822800 -14400 0 -04}
|
||||
{-633816000 -10800 1 -03}
|
||||
{-633816000 -10800 1 -04}
|
||||
{-622065600 -14400 0 -04}
|
||||
{-602280000 -10800 1 -03}
|
||||
{-602280000 -10800 1 -04}
|
||||
{-591829200 -14400 0 -04}
|
||||
{-570744000 -10800 1 -03}
|
||||
{-570744000 -10800 1 -04}
|
||||
{-560206800 -14400 0 -04}
|
||||
{-539121600 -10800 1 -03}
|
||||
{-539121600 -10800 1 -04}
|
||||
{-531349200 -14400 0 -04}
|
||||
{-191361600 -10800 1 -03}
|
||||
{-191361600 -10800 1 -04}
|
||||
{-184194000 -14400 0 -04}
|
||||
{-155160000 -10800 1 -03}
|
||||
{-155160000 -10800 1 -04}
|
||||
{-150066000 -14400 0 -04}
|
||||
{-128894400 -10800 1 -03}
|
||||
{-128894400 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-99950400 -10800 1 -03}
|
||||
{-99950400 -10800 1 -04}
|
||||
{-89586000 -14400 0 -04}
|
||||
{-68414400 -10800 1 -03}
|
||||
{-68414400 -10800 1 -04}
|
||||
{-57963600 -14400 0 -04}
|
||||
{499752000 -10800 1 -03}
|
||||
{499752000 -10800 1 -04}
|
||||
{511239600 -14400 0 -04}
|
||||
{530596800 -10800 1 -03}
|
||||
{530596800 -10800 1 -04}
|
||||
{540270000 -14400 0 -04}
|
||||
{562132800 -10800 1 -03}
|
||||
{562132800 -10800 1 -04}
|
||||
{571201200 -14400 0 -04}
|
||||
{590036400 -14400 0 -04}
|
||||
{1214280000 -10800 0 -03}
|
||||
|
||||
+136
-136
@@ -8,15 +8,15 @@ set TZData(:America/Santiago) {
|
||||
{-1619205434 -14400 0 -04}
|
||||
{-1593806400 -16966 0 SMT}
|
||||
{-1335986234 -18000 0 -05}
|
||||
{-1335985200 -14400 1 -04}
|
||||
{-1335985200 -14400 1 -05}
|
||||
{-1317585600 -18000 0 -05}
|
||||
{-1304362800 -14400 1 -04}
|
||||
{-1304362800 -14400 1 -05}
|
||||
{-1286049600 -18000 0 -05}
|
||||
{-1272826800 -14400 1 -04}
|
||||
{-1272826800 -14400 1 -05}
|
||||
{-1254513600 -18000 0 -05}
|
||||
{-1241290800 -14400 1 -04}
|
||||
{-1241290800 -14400 1 -05}
|
||||
{-1222977600 -18000 0 -05}
|
||||
{-1209754800 -14400 1 -04}
|
||||
{-1209754800 -14400 1 -05}
|
||||
{-1191355200 -18000 0 -05}
|
||||
{-1178132400 -14400 0 -04}
|
||||
{-870552000 -18000 0 -05}
|
||||
@@ -25,265 +25,265 @@ set TZData(:America/Santiago) {
|
||||
{-736376400 -14400 0 -04}
|
||||
{-718056000 -18000 0 -05}
|
||||
{-713649600 -14400 0 -04}
|
||||
{-36619200 -10800 1 -03}
|
||||
{-36619200 -10800 1 -04}
|
||||
{-23922000 -14400 0 -04}
|
||||
{-3355200 -10800 1 -03}
|
||||
{-3355200 -10800 1 -04}
|
||||
{7527600 -14400 0 -04}
|
||||
{24465600 -10800 1 -03}
|
||||
{24465600 -10800 1 -04}
|
||||
{37767600 -14400 0 -04}
|
||||
{55915200 -10800 1 -03}
|
||||
{55915200 -10800 1 -04}
|
||||
{69217200 -14400 0 -04}
|
||||
{87969600 -10800 1 -03}
|
||||
{87969600 -10800 1 -04}
|
||||
{100666800 -14400 0 -04}
|
||||
{118209600 -10800 1 -03}
|
||||
{118209600 -10800 1 -04}
|
||||
{132116400 -14400 0 -04}
|
||||
{150868800 -10800 1 -03}
|
||||
{150868800 -10800 1 -04}
|
||||
{163566000 -14400 0 -04}
|
||||
{182318400 -10800 1 -03}
|
||||
{182318400 -10800 1 -04}
|
||||
{195620400 -14400 0 -04}
|
||||
{213768000 -10800 1 -03}
|
||||
{213768000 -10800 1 -04}
|
||||
{227070000 -14400 0 -04}
|
||||
{245217600 -10800 1 -03}
|
||||
{245217600 -10800 1 -04}
|
||||
{258519600 -14400 0 -04}
|
||||
{277272000 -10800 1 -03}
|
||||
{277272000 -10800 1 -04}
|
||||
{289969200 -14400 0 -04}
|
||||
{308721600 -10800 1 -03}
|
||||
{308721600 -10800 1 -04}
|
||||
{321418800 -14400 0 -04}
|
||||
{340171200 -10800 1 -03}
|
||||
{340171200 -10800 1 -04}
|
||||
{353473200 -14400 0 -04}
|
||||
{371620800 -10800 1 -03}
|
||||
{371620800 -10800 1 -04}
|
||||
{384922800 -14400 0 -04}
|
||||
{403070400 -10800 1 -03}
|
||||
{403070400 -10800 1 -04}
|
||||
{416372400 -14400 0 -04}
|
||||
{434520000 -10800 1 -03}
|
||||
{434520000 -10800 1 -04}
|
||||
{447822000 -14400 0 -04}
|
||||
{466574400 -10800 1 -03}
|
||||
{466574400 -10800 1 -04}
|
||||
{479271600 -14400 0 -04}
|
||||
{498024000 -10800 1 -03}
|
||||
{498024000 -10800 1 -04}
|
||||
{510721200 -14400 0 -04}
|
||||
{529473600 -10800 1 -03}
|
||||
{529473600 -10800 1 -04}
|
||||
{545194800 -14400 0 -04}
|
||||
{560923200 -10800 1 -03}
|
||||
{560923200 -10800 1 -04}
|
||||
{574225200 -14400 0 -04}
|
||||
{592372800 -10800 1 -03}
|
||||
{592372800 -10800 1 -04}
|
||||
{605674800 -14400 0 -04}
|
||||
{624427200 -10800 1 -03}
|
||||
{624427200 -10800 1 -04}
|
||||
{637124400 -14400 0 -04}
|
||||
{653457600 -10800 1 -03}
|
||||
{653457600 -10800 1 -04}
|
||||
{668574000 -14400 0 -04}
|
||||
{687326400 -10800 1 -03}
|
||||
{687326400 -10800 1 -04}
|
||||
{700628400 -14400 0 -04}
|
||||
{718776000 -10800 1 -03}
|
||||
{718776000 -10800 1 -04}
|
||||
{732078000 -14400 0 -04}
|
||||
{750225600 -10800 1 -03}
|
||||
{750225600 -10800 1 -04}
|
||||
{763527600 -14400 0 -04}
|
||||
{781675200 -10800 1 -03}
|
||||
{781675200 -10800 1 -04}
|
||||
{794977200 -14400 0 -04}
|
||||
{813729600 -10800 1 -03}
|
||||
{813729600 -10800 1 -04}
|
||||
{826426800 -14400 0 -04}
|
||||
{845179200 -10800 1 -03}
|
||||
{845179200 -10800 1 -04}
|
||||
{859690800 -14400 0 -04}
|
||||
{876628800 -10800 1 -03}
|
||||
{876628800 -10800 1 -04}
|
||||
{889930800 -14400 0 -04}
|
||||
{906868800 -10800 1 -03}
|
||||
{906868800 -10800 1 -04}
|
||||
{923194800 -14400 0 -04}
|
||||
{939528000 -10800 1 -03}
|
||||
{939528000 -10800 1 -04}
|
||||
{952830000 -14400 0 -04}
|
||||
{971582400 -10800 1 -03}
|
||||
{971582400 -10800 1 -04}
|
||||
{984279600 -14400 0 -04}
|
||||
{1003032000 -10800 1 -03}
|
||||
{1003032000 -10800 1 -04}
|
||||
{1015729200 -14400 0 -04}
|
||||
{1034481600 -10800 1 -03}
|
||||
{1034481600 -10800 1 -04}
|
||||
{1047178800 -14400 0 -04}
|
||||
{1065931200 -10800 1 -03}
|
||||
{1065931200 -10800 1 -04}
|
||||
{1079233200 -14400 0 -04}
|
||||
{1097380800 -10800 1 -03}
|
||||
{1097380800 -10800 1 -04}
|
||||
{1110682800 -14400 0 -04}
|
||||
{1128830400 -10800 1 -03}
|
||||
{1128830400 -10800 1 -04}
|
||||
{1142132400 -14400 0 -04}
|
||||
{1160884800 -10800 1 -03}
|
||||
{1160884800 -10800 1 -04}
|
||||
{1173582000 -14400 0 -04}
|
||||
{1192334400 -10800 1 -03}
|
||||
{1192334400 -10800 1 -04}
|
||||
{1206846000 -14400 0 -04}
|
||||
{1223784000 -10800 1 -03}
|
||||
{1223784000 -10800 1 -04}
|
||||
{1237086000 -14400 0 -04}
|
||||
{1255233600 -10800 1 -03}
|
||||
{1255233600 -10800 1 -04}
|
||||
{1270350000 -14400 0 -04}
|
||||
{1286683200 -10800 1 -03}
|
||||
{1286683200 -10800 1 -04}
|
||||
{1304823600 -14400 0 -04}
|
||||
{1313899200 -10800 1 -03}
|
||||
{1313899200 -10800 1 -04}
|
||||
{1335668400 -14400 0 -04}
|
||||
{1346558400 -10800 1 -03}
|
||||
{1346558400 -10800 1 -04}
|
||||
{1367118000 -14400 0 -04}
|
||||
{1378612800 -10800 1 -03}
|
||||
{1378612800 -10800 1 -04}
|
||||
{1398567600 -14400 0 -04}
|
||||
{1410062400 -10800 1 -03}
|
||||
{1410062400 -10800 1 -04}
|
||||
{1463281200 -14400 0 -04}
|
||||
{1471147200 -10800 1 -03}
|
||||
{1471147200 -10800 1 -04}
|
||||
{1494730800 -14400 0 -04}
|
||||
{1502596800 -10800 1 -03}
|
||||
{1502596800 -10800 1 -04}
|
||||
{1526180400 -14400 0 -04}
|
||||
{1534046400 -10800 1 -03}
|
||||
{1534046400 -10800 1 -04}
|
||||
{1557630000 -14400 0 -04}
|
||||
{1565496000 -10800 1 -03}
|
||||
{1565496000 -10800 1 -04}
|
||||
{1589079600 -14400 0 -04}
|
||||
{1596945600 -10800 1 -03}
|
||||
{1596945600 -10800 1 -04}
|
||||
{1620529200 -14400 0 -04}
|
||||
{1629000000 -10800 1 -03}
|
||||
{1629000000 -10800 1 -04}
|
||||
{1652583600 -14400 0 -04}
|
||||
{1660449600 -10800 1 -03}
|
||||
{1660449600 -10800 1 -04}
|
||||
{1684033200 -14400 0 -04}
|
||||
{1691899200 -10800 1 -03}
|
||||
{1691899200 -10800 1 -04}
|
||||
{1715482800 -14400 0 -04}
|
||||
{1723348800 -10800 1 -03}
|
||||
{1723348800 -10800 1 -04}
|
||||
{1746932400 -14400 0 -04}
|
||||
{1754798400 -10800 1 -03}
|
||||
{1754798400 -10800 1 -04}
|
||||
{1778382000 -14400 0 -04}
|
||||
{1786248000 -10800 1 -03}
|
||||
{1786248000 -10800 1 -04}
|
||||
{1809831600 -14400 0 -04}
|
||||
{1818302400 -10800 1 -03}
|
||||
{1818302400 -10800 1 -04}
|
||||
{1841886000 -14400 0 -04}
|
||||
{1849752000 -10800 1 -03}
|
||||
{1849752000 -10800 1 -04}
|
||||
{1873335600 -14400 0 -04}
|
||||
{1881201600 -10800 1 -03}
|
||||
{1881201600 -10800 1 -04}
|
||||
{1904785200 -14400 0 -04}
|
||||
{1912651200 -10800 1 -03}
|
||||
{1912651200 -10800 1 -04}
|
||||
{1936234800 -14400 0 -04}
|
||||
{1944100800 -10800 1 -03}
|
||||
{1944100800 -10800 1 -04}
|
||||
{1967684400 -14400 0 -04}
|
||||
{1976155200 -10800 1 -03}
|
||||
{1976155200 -10800 1 -04}
|
||||
{1999738800 -14400 0 -04}
|
||||
{2007604800 -10800 1 -03}
|
||||
{2007604800 -10800 1 -04}
|
||||
{2031188400 -14400 0 -04}
|
||||
{2039054400 -10800 1 -03}
|
||||
{2039054400 -10800 1 -04}
|
||||
{2062638000 -14400 0 -04}
|
||||
{2070504000 -10800 1 -03}
|
||||
{2070504000 -10800 1 -04}
|
||||
{2094087600 -14400 0 -04}
|
||||
{2101953600 -10800 1 -03}
|
||||
{2101953600 -10800 1 -04}
|
||||
{2125537200 -14400 0 -04}
|
||||
{2133403200 -10800 1 -03}
|
||||
{2133403200 -10800 1 -04}
|
||||
{2156986800 -14400 0 -04}
|
||||
{2165457600 -10800 1 -03}
|
||||
{2165457600 -10800 1 -04}
|
||||
{2189041200 -14400 0 -04}
|
||||
{2196907200 -10800 1 -03}
|
||||
{2196907200 -10800 1 -04}
|
||||
{2220490800 -14400 0 -04}
|
||||
{2228356800 -10800 1 -03}
|
||||
{2228356800 -10800 1 -04}
|
||||
{2251940400 -14400 0 -04}
|
||||
{2259806400 -10800 1 -03}
|
||||
{2259806400 -10800 1 -04}
|
||||
{2283390000 -14400 0 -04}
|
||||
{2291256000 -10800 1 -03}
|
||||
{2291256000 -10800 1 -04}
|
||||
{2314839600 -14400 0 -04}
|
||||
{2322705600 -10800 1 -03}
|
||||
{2322705600 -10800 1 -04}
|
||||
{2346894000 -14400 0 -04}
|
||||
{2354760000 -10800 1 -03}
|
||||
{2354760000 -10800 1 -04}
|
||||
{2378343600 -14400 0 -04}
|
||||
{2386209600 -10800 1 -03}
|
||||
{2386209600 -10800 1 -04}
|
||||
{2409793200 -14400 0 -04}
|
||||
{2417659200 -10800 1 -03}
|
||||
{2417659200 -10800 1 -04}
|
||||
{2441242800 -14400 0 -04}
|
||||
{2449108800 -10800 1 -03}
|
||||
{2449108800 -10800 1 -04}
|
||||
{2472692400 -14400 0 -04}
|
||||
{2480558400 -10800 1 -03}
|
||||
{2480558400 -10800 1 -04}
|
||||
{2504142000 -14400 0 -04}
|
||||
{2512612800 -10800 1 -03}
|
||||
{2512612800 -10800 1 -04}
|
||||
{2536196400 -14400 0 -04}
|
||||
{2544062400 -10800 1 -03}
|
||||
{2544062400 -10800 1 -04}
|
||||
{2567646000 -14400 0 -04}
|
||||
{2575512000 -10800 1 -03}
|
||||
{2575512000 -10800 1 -04}
|
||||
{2599095600 -14400 0 -04}
|
||||
{2606961600 -10800 1 -03}
|
||||
{2606961600 -10800 1 -04}
|
||||
{2630545200 -14400 0 -04}
|
||||
{2638411200 -10800 1 -03}
|
||||
{2638411200 -10800 1 -04}
|
||||
{2661994800 -14400 0 -04}
|
||||
{2669860800 -10800 1 -03}
|
||||
{2669860800 -10800 1 -04}
|
||||
{2693444400 -14400 0 -04}
|
||||
{2701915200 -10800 1 -03}
|
||||
{2701915200 -10800 1 -04}
|
||||
{2725498800 -14400 0 -04}
|
||||
{2733364800 -10800 1 -03}
|
||||
{2733364800 -10800 1 -04}
|
||||
{2756948400 -14400 0 -04}
|
||||
{2764814400 -10800 1 -03}
|
||||
{2764814400 -10800 1 -04}
|
||||
{2788398000 -14400 0 -04}
|
||||
{2796264000 -10800 1 -03}
|
||||
{2796264000 -10800 1 -04}
|
||||
{2819847600 -14400 0 -04}
|
||||
{2827713600 -10800 1 -03}
|
||||
{2827713600 -10800 1 -04}
|
||||
{2851297200 -14400 0 -04}
|
||||
{2859768000 -10800 1 -03}
|
||||
{2859768000 -10800 1 -04}
|
||||
{2883351600 -14400 0 -04}
|
||||
{2891217600 -10800 1 -03}
|
||||
{2891217600 -10800 1 -04}
|
||||
{2914801200 -14400 0 -04}
|
||||
{2922667200 -10800 1 -03}
|
||||
{2922667200 -10800 1 -04}
|
||||
{2946250800 -14400 0 -04}
|
||||
{2954116800 -10800 1 -03}
|
||||
{2954116800 -10800 1 -04}
|
||||
{2977700400 -14400 0 -04}
|
||||
{2985566400 -10800 1 -03}
|
||||
{2985566400 -10800 1 -04}
|
||||
{3009150000 -14400 0 -04}
|
||||
{3017016000 -10800 1 -03}
|
||||
{3017016000 -10800 1 -04}
|
||||
{3040599600 -14400 0 -04}
|
||||
{3049070400 -10800 1 -03}
|
||||
{3049070400 -10800 1 -04}
|
||||
{3072654000 -14400 0 -04}
|
||||
{3080520000 -10800 1 -03}
|
||||
{3080520000 -10800 1 -04}
|
||||
{3104103600 -14400 0 -04}
|
||||
{3111969600 -10800 1 -03}
|
||||
{3111969600 -10800 1 -04}
|
||||
{3135553200 -14400 0 -04}
|
||||
{3143419200 -10800 1 -03}
|
||||
{3143419200 -10800 1 -04}
|
||||
{3167002800 -14400 0 -04}
|
||||
{3174868800 -10800 1 -03}
|
||||
{3174868800 -10800 1 -04}
|
||||
{3198452400 -14400 0 -04}
|
||||
{3206318400 -10800 1 -03}
|
||||
{3206318400 -10800 1 -04}
|
||||
{3230506800 -14400 0 -04}
|
||||
{3238372800 -10800 1 -03}
|
||||
{3238372800 -10800 1 -04}
|
||||
{3261956400 -14400 0 -04}
|
||||
{3269822400 -10800 1 -03}
|
||||
{3269822400 -10800 1 -04}
|
||||
{3293406000 -14400 0 -04}
|
||||
{3301272000 -10800 1 -03}
|
||||
{3301272000 -10800 1 -04}
|
||||
{3324855600 -14400 0 -04}
|
||||
{3332721600 -10800 1 -03}
|
||||
{3332721600 -10800 1 -04}
|
||||
{3356305200 -14400 0 -04}
|
||||
{3364171200 -10800 1 -03}
|
||||
{3364171200 -10800 1 -04}
|
||||
{3387754800 -14400 0 -04}
|
||||
{3396225600 -10800 1 -03}
|
||||
{3396225600 -10800 1 -04}
|
||||
{3419809200 -14400 0 -04}
|
||||
{3427675200 -10800 1 -03}
|
||||
{3427675200 -10800 1 -04}
|
||||
{3451258800 -14400 0 -04}
|
||||
{3459124800 -10800 1 -03}
|
||||
{3459124800 -10800 1 -04}
|
||||
{3482708400 -14400 0 -04}
|
||||
{3490574400 -10800 1 -03}
|
||||
{3490574400 -10800 1 -04}
|
||||
{3514158000 -14400 0 -04}
|
||||
{3522024000 -10800 1 -03}
|
||||
{3522024000 -10800 1 -04}
|
||||
{3545607600 -14400 0 -04}
|
||||
{3553473600 -10800 1 -03}
|
||||
{3553473600 -10800 1 -04}
|
||||
{3577057200 -14400 0 -04}
|
||||
{3585528000 -10800 1 -03}
|
||||
{3585528000 -10800 1 -04}
|
||||
{3609111600 -14400 0 -04}
|
||||
{3616977600 -10800 1 -03}
|
||||
{3616977600 -10800 1 -04}
|
||||
{3640561200 -14400 0 -04}
|
||||
{3648427200 -10800 1 -03}
|
||||
{3648427200 -10800 1 -04}
|
||||
{3672010800 -14400 0 -04}
|
||||
{3679876800 -10800 1 -03}
|
||||
{3679876800 -10800 1 -04}
|
||||
{3703460400 -14400 0 -04}
|
||||
{3711326400 -10800 1 -03}
|
||||
{3711326400 -10800 1 -04}
|
||||
{3734910000 -14400 0 -04}
|
||||
{3743380800 -10800 1 -03}
|
||||
{3743380800 -10800 1 -04}
|
||||
{3766964400 -14400 0 -04}
|
||||
{3774830400 -10800 1 -03}
|
||||
{3774830400 -10800 1 -04}
|
||||
{3798414000 -14400 0 -04}
|
||||
{3806280000 -10800 1 -03}
|
||||
{3806280000 -10800 1 -04}
|
||||
{3829863600 -14400 0 -04}
|
||||
{3837729600 -10800 1 -03}
|
||||
{3837729600 -10800 1 -04}
|
||||
{3861313200 -14400 0 -04}
|
||||
{3869179200 -10800 1 -03}
|
||||
{3869179200 -10800 1 -04}
|
||||
{3892762800 -14400 0 -04}
|
||||
{3900628800 -10800 1 -03}
|
||||
{3900628800 -10800 1 -04}
|
||||
{3924212400 -14400 0 -04}
|
||||
{3932683200 -10800 1 -03}
|
||||
{3932683200 -10800 1 -04}
|
||||
{3956266800 -14400 0 -04}
|
||||
{3964132800 -10800 1 -03}
|
||||
{3964132800 -10800 1 -04}
|
||||
{3987716400 -14400 0 -04}
|
||||
{3995582400 -10800 1 -03}
|
||||
{3995582400 -10800 1 -04}
|
||||
{4019166000 -14400 0 -04}
|
||||
{4027032000 -10800 1 -03}
|
||||
{4027032000 -10800 1 -04}
|
||||
{4050615600 -14400 0 -04}
|
||||
{4058481600 -10800 1 -03}
|
||||
{4058481600 -10800 1 -04}
|
||||
{4082065200 -14400 0 -04}
|
||||
{4089931200 -10800 1 -03}
|
||||
{4089931200 -10800 1 -04}
|
||||
}
|
||||
|
||||
+125
-125
@@ -3,256 +3,256 @@
|
||||
set TZData(:America/Sao_Paulo) {
|
||||
{-9223372036854775808 -11188 0 LMT}
|
||||
{-1767214412 -10800 0 -03}
|
||||
{-1206957600 -7200 1 -02}
|
||||
{-1206957600 -7200 1 -03}
|
||||
{-1191362400 -10800 0 -03}
|
||||
{-1175374800 -7200 1 -02}
|
||||
{-1175374800 -7200 1 -03}
|
||||
{-1159826400 -10800 0 -03}
|
||||
{-633819600 -7200 1 -02}
|
||||
{-633819600 -7200 1 -03}
|
||||
{-622069200 -10800 0 -03}
|
||||
{-602283600 -7200 1 -02}
|
||||
{-602283600 -7200 1 -03}
|
||||
{-591832800 -10800 0 -03}
|
||||
{-570747600 -7200 1 -02}
|
||||
{-570747600 -7200 1 -03}
|
||||
{-560210400 -10800 0 -03}
|
||||
{-539125200 -7200 1 -02}
|
||||
{-539125200 -7200 1 -03}
|
||||
{-531352800 -10800 0 -03}
|
||||
{-195429600 -7200 1 -02}
|
||||
{-189381600 -7200 0 -03}
|
||||
{-184197600 -10800 0 -03}
|
||||
{-155163600 -7200 1 -02}
|
||||
{-155163600 -7200 1 -03}
|
||||
{-150069600 -10800 0 -03}
|
||||
{-128898000 -7200 1 -02}
|
||||
{-128898000 -7200 1 -03}
|
||||
{-121125600 -10800 0 -03}
|
||||
{-99954000 -7200 1 -02}
|
||||
{-99954000 -7200 1 -03}
|
||||
{-89589600 -10800 0 -03}
|
||||
{-68418000 -7200 1 -02}
|
||||
{-68418000 -7200 1 -03}
|
||||
{-57967200 -10800 0 -03}
|
||||
{499748400 -7200 1 -02}
|
||||
{499748400 -7200 1 -03}
|
||||
{511236000 -10800 0 -03}
|
||||
{530593200 -7200 1 -02}
|
||||
{530593200 -7200 1 -03}
|
||||
{540266400 -10800 0 -03}
|
||||
{562129200 -7200 1 -02}
|
||||
{562129200 -7200 1 -03}
|
||||
{571197600 -10800 0 -03}
|
||||
{592974000 -7200 1 -02}
|
||||
{592974000 -7200 1 -03}
|
||||
{602042400 -10800 0 -03}
|
||||
{624423600 -7200 1 -02}
|
||||
{624423600 -7200 1 -03}
|
||||
{634701600 -10800 0 -03}
|
||||
{656478000 -7200 1 -02}
|
||||
{656478000 -7200 1 -03}
|
||||
{666756000 -10800 0 -03}
|
||||
{687927600 -7200 1 -02}
|
||||
{687927600 -7200 1 -03}
|
||||
{697600800 -10800 0 -03}
|
||||
{719982000 -7200 1 -02}
|
||||
{719982000 -7200 1 -03}
|
||||
{728445600 -10800 0 -03}
|
||||
{750826800 -7200 1 -02}
|
||||
{750826800 -7200 1 -03}
|
||||
{761709600 -10800 0 -03}
|
||||
{782276400 -7200 1 -02}
|
||||
{782276400 -7200 1 -03}
|
||||
{793159200 -10800 0 -03}
|
||||
{813726000 -7200 1 -02}
|
||||
{813726000 -7200 1 -03}
|
||||
{824004000 -10800 0 -03}
|
||||
{844570800 -7200 1 -02}
|
||||
{844570800 -7200 1 -03}
|
||||
{856058400 -10800 0 -03}
|
||||
{876106800 -7200 1 -02}
|
||||
{876106800 -7200 1 -03}
|
||||
{888717600 -10800 0 -03}
|
||||
{908074800 -7200 1 -02}
|
||||
{908074800 -7200 1 -03}
|
||||
{919562400 -10800 0 -03}
|
||||
{938919600 -7200 1 -02}
|
||||
{938919600 -7200 1 -03}
|
||||
{951616800 -10800 0 -03}
|
||||
{970974000 -7200 1 -02}
|
||||
{970974000 -7200 1 -03}
|
||||
{982461600 -10800 0 -03}
|
||||
{1003028400 -7200 1 -02}
|
||||
{1003028400 -7200 1 -03}
|
||||
{1013911200 -10800 0 -03}
|
||||
{1036292400 -7200 1 -02}
|
||||
{1036292400 -7200 1 -03}
|
||||
{1045360800 -10800 0 -03}
|
||||
{1066532400 -7200 1 -02}
|
||||
{1066532400 -7200 1 -03}
|
||||
{1076810400 -10800 0 -03}
|
||||
{1099364400 -7200 1 -02}
|
||||
{1099364400 -7200 1 -03}
|
||||
{1108864800 -10800 0 -03}
|
||||
{1129431600 -7200 1 -02}
|
||||
{1129431600 -7200 1 -03}
|
||||
{1140314400 -10800 0 -03}
|
||||
{1162695600 -7200 1 -02}
|
||||
{1162695600 -7200 1 -03}
|
||||
{1172368800 -10800 0 -03}
|
||||
{1192330800 -7200 1 -02}
|
||||
{1192330800 -7200 1 -03}
|
||||
{1203213600 -10800 0 -03}
|
||||
{1224385200 -7200 1 -02}
|
||||
{1224385200 -7200 1 -03}
|
||||
{1234663200 -10800 0 -03}
|
||||
{1255834800 -7200 1 -02}
|
||||
{1255834800 -7200 1 -03}
|
||||
{1266717600 -10800 0 -03}
|
||||
{1287284400 -7200 1 -02}
|
||||
{1287284400 -7200 1 -03}
|
||||
{1298167200 -10800 0 -03}
|
||||
{1318734000 -7200 1 -02}
|
||||
{1318734000 -7200 1 -03}
|
||||
{1330221600 -10800 0 -03}
|
||||
{1350788400 -7200 1 -02}
|
||||
{1350788400 -7200 1 -03}
|
||||
{1361066400 -10800 0 -03}
|
||||
{1382238000 -7200 1 -02}
|
||||
{1382238000 -7200 1 -03}
|
||||
{1392516000 -10800 0 -03}
|
||||
{1413687600 -7200 1 -02}
|
||||
{1413687600 -7200 1 -03}
|
||||
{1424570400 -10800 0 -03}
|
||||
{1445137200 -7200 1 -02}
|
||||
{1445137200 -7200 1 -03}
|
||||
{1456020000 -10800 0 -03}
|
||||
{1476586800 -7200 1 -02}
|
||||
{1476586800 -7200 1 -03}
|
||||
{1487469600 -10800 0 -03}
|
||||
{1508036400 -7200 1 -02}
|
||||
{1508036400 -7200 1 -03}
|
||||
{1518919200 -10800 0 -03}
|
||||
{1541300400 -7200 1 -02}
|
||||
{1541300400 -7200 1 -03}
|
||||
{1550368800 -10800 0 -03}
|
||||
{1572750000 -7200 1 -02}
|
||||
{1572750000 -7200 1 -03}
|
||||
{1581818400 -10800 0 -03}
|
||||
{1604199600 -7200 1 -02}
|
||||
{1604199600 -7200 1 -03}
|
||||
{1613872800 -10800 0 -03}
|
||||
{1636254000 -7200 1 -02}
|
||||
{1636254000 -7200 1 -03}
|
||||
{1645322400 -10800 0 -03}
|
||||
{1667703600 -7200 1 -02}
|
||||
{1667703600 -7200 1 -03}
|
||||
{1677376800 -10800 0 -03}
|
||||
{1699153200 -7200 1 -02}
|
||||
{1699153200 -7200 1 -03}
|
||||
{1708221600 -10800 0 -03}
|
||||
{1730602800 -7200 1 -02}
|
||||
{1730602800 -7200 1 -03}
|
||||
{1739671200 -10800 0 -03}
|
||||
{1762052400 -7200 1 -02}
|
||||
{1762052400 -7200 1 -03}
|
||||
{1771725600 -10800 0 -03}
|
||||
{1793502000 -7200 1 -02}
|
||||
{1793502000 -7200 1 -03}
|
||||
{1803175200 -10800 0 -03}
|
||||
{1825556400 -7200 1 -02}
|
||||
{1825556400 -7200 1 -03}
|
||||
{1834624800 -10800 0 -03}
|
||||
{1857006000 -7200 1 -02}
|
||||
{1857006000 -7200 1 -03}
|
||||
{1866074400 -10800 0 -03}
|
||||
{1888455600 -7200 1 -02}
|
||||
{1888455600 -7200 1 -03}
|
||||
{1897524000 -10800 0 -03}
|
||||
{1919905200 -7200 1 -02}
|
||||
{1919905200 -7200 1 -03}
|
||||
{1928973600 -10800 0 -03}
|
||||
{1951354800 -7200 1 -02}
|
||||
{1951354800 -7200 1 -03}
|
||||
{1960423200 -10800 0 -03}
|
||||
{1983409200 -7200 1 -02}
|
||||
{1983409200 -7200 1 -03}
|
||||
{1992477600 -10800 0 -03}
|
||||
{2014858800 -7200 1 -02}
|
||||
{2014858800 -7200 1 -03}
|
||||
{2024532000 -10800 0 -03}
|
||||
{2046308400 -7200 1 -02}
|
||||
{2046308400 -7200 1 -03}
|
||||
{2055376800 -10800 0 -03}
|
||||
{2077758000 -7200 1 -02}
|
||||
{2077758000 -7200 1 -03}
|
||||
{2086826400 -10800 0 -03}
|
||||
{2109207600 -7200 1 -02}
|
||||
{2109207600 -7200 1 -03}
|
||||
{2118880800 -10800 0 -03}
|
||||
{2140657200 -7200 1 -02}
|
||||
{2140657200 -7200 1 -03}
|
||||
{2150330400 -10800 0 -03}
|
||||
{2172711600 -7200 1 -02}
|
||||
{2172711600 -7200 1 -03}
|
||||
{2181780000 -10800 0 -03}
|
||||
{2204161200 -7200 1 -02}
|
||||
{2204161200 -7200 1 -03}
|
||||
{2213229600 -10800 0 -03}
|
||||
{2235610800 -7200 1 -02}
|
||||
{2235610800 -7200 1 -03}
|
||||
{2244679200 -10800 0 -03}
|
||||
{2267060400 -7200 1 -02}
|
||||
{2267060400 -7200 1 -03}
|
||||
{2276128800 -10800 0 -03}
|
||||
{2298510000 -7200 1 -02}
|
||||
{2298510000 -7200 1 -03}
|
||||
{2307578400 -10800 0 -03}
|
||||
{2329959600 -7200 1 -02}
|
||||
{2329959600 -7200 1 -03}
|
||||
{2339632800 -10800 0 -03}
|
||||
{2362014000 -7200 1 -02}
|
||||
{2362014000 -7200 1 -03}
|
||||
{2371082400 -10800 0 -03}
|
||||
{2393463600 -7200 1 -02}
|
||||
{2393463600 -7200 1 -03}
|
||||
{2402532000 -10800 0 -03}
|
||||
{2424913200 -7200 1 -02}
|
||||
{2424913200 -7200 1 -03}
|
||||
{2433981600 -10800 0 -03}
|
||||
{2456362800 -7200 1 -02}
|
||||
{2456362800 -7200 1 -03}
|
||||
{2465431200 -10800 0 -03}
|
||||
{2487812400 -7200 1 -02}
|
||||
{2487812400 -7200 1 -03}
|
||||
{2497485600 -10800 0 -03}
|
||||
{2519866800 -7200 1 -02}
|
||||
{2519866800 -7200 1 -03}
|
||||
{2528935200 -10800 0 -03}
|
||||
{2551316400 -7200 1 -02}
|
||||
{2551316400 -7200 1 -03}
|
||||
{2560384800 -10800 0 -03}
|
||||
{2582766000 -7200 1 -02}
|
||||
{2582766000 -7200 1 -03}
|
||||
{2591834400 -10800 0 -03}
|
||||
{2614215600 -7200 1 -02}
|
||||
{2614215600 -7200 1 -03}
|
||||
{2623284000 -10800 0 -03}
|
||||
{2645665200 -7200 1 -02}
|
||||
{2645665200 -7200 1 -03}
|
||||
{2654733600 -10800 0 -03}
|
||||
{2677114800 -7200 1 -02}
|
||||
{2677114800 -7200 1 -03}
|
||||
{2686788000 -10800 0 -03}
|
||||
{2709169200 -7200 1 -02}
|
||||
{2709169200 -7200 1 -03}
|
||||
{2718237600 -10800 0 -03}
|
||||
{2740618800 -7200 1 -02}
|
||||
{2740618800 -7200 1 -03}
|
||||
{2749687200 -10800 0 -03}
|
||||
{2772068400 -7200 1 -02}
|
||||
{2772068400 -7200 1 -03}
|
||||
{2781136800 -10800 0 -03}
|
||||
{2803518000 -7200 1 -02}
|
||||
{2803518000 -7200 1 -03}
|
||||
{2812586400 -10800 0 -03}
|
||||
{2834967600 -7200 1 -02}
|
||||
{2834967600 -7200 1 -03}
|
||||
{2844036000 -10800 0 -03}
|
||||
{2867022000 -7200 1 -02}
|
||||
{2867022000 -7200 1 -03}
|
||||
{2876090400 -10800 0 -03}
|
||||
{2898471600 -7200 1 -02}
|
||||
{2898471600 -7200 1 -03}
|
||||
{2907540000 -10800 0 -03}
|
||||
{2929921200 -7200 1 -02}
|
||||
{2929921200 -7200 1 -03}
|
||||
{2938989600 -10800 0 -03}
|
||||
{2961370800 -7200 1 -02}
|
||||
{2961370800 -7200 1 -03}
|
||||
{2970439200 -10800 0 -03}
|
||||
{2992820400 -7200 1 -02}
|
||||
{2992820400 -7200 1 -03}
|
||||
{3001888800 -10800 0 -03}
|
||||
{3024270000 -7200 1 -02}
|
||||
{3024270000 -7200 1 -03}
|
||||
{3033943200 -10800 0 -03}
|
||||
{3056324400 -7200 1 -02}
|
||||
{3056324400 -7200 1 -03}
|
||||
{3065392800 -10800 0 -03}
|
||||
{3087774000 -7200 1 -02}
|
||||
{3087774000 -7200 1 -03}
|
||||
{3096842400 -10800 0 -03}
|
||||
{3119223600 -7200 1 -02}
|
||||
{3119223600 -7200 1 -03}
|
||||
{3128292000 -10800 0 -03}
|
||||
{3150673200 -7200 1 -02}
|
||||
{3150673200 -7200 1 -03}
|
||||
{3159741600 -10800 0 -03}
|
||||
{3182122800 -7200 1 -02}
|
||||
{3182122800 -7200 1 -03}
|
||||
{3191191200 -10800 0 -03}
|
||||
{3213572400 -7200 1 -02}
|
||||
{3213572400 -7200 1 -03}
|
||||
{3223245600 -10800 0 -03}
|
||||
{3245626800 -7200 1 -02}
|
||||
{3245626800 -7200 1 -03}
|
||||
{3254695200 -10800 0 -03}
|
||||
{3277076400 -7200 1 -02}
|
||||
{3277076400 -7200 1 -03}
|
||||
{3286144800 -10800 0 -03}
|
||||
{3308526000 -7200 1 -02}
|
||||
{3308526000 -7200 1 -03}
|
||||
{3317594400 -10800 0 -03}
|
||||
{3339975600 -7200 1 -02}
|
||||
{3339975600 -7200 1 -03}
|
||||
{3349044000 -10800 0 -03}
|
||||
{3371425200 -7200 1 -02}
|
||||
{3371425200 -7200 1 -03}
|
||||
{3381098400 -10800 0 -03}
|
||||
{3403479600 -7200 1 -02}
|
||||
{3403479600 -7200 1 -03}
|
||||
{3412548000 -10800 0 -03}
|
||||
{3434929200 -7200 1 -02}
|
||||
{3434929200 -7200 1 -03}
|
||||
{3443997600 -10800 0 -03}
|
||||
{3466378800 -7200 1 -02}
|
||||
{3466378800 -7200 1 -03}
|
||||
{3475447200 -10800 0 -03}
|
||||
{3497828400 -7200 1 -02}
|
||||
{3497828400 -7200 1 -03}
|
||||
{3506896800 -10800 0 -03}
|
||||
{3529278000 -7200 1 -02}
|
||||
{3529278000 -7200 1 -03}
|
||||
{3538346400 -10800 0 -03}
|
||||
{3560727600 -7200 1 -02}
|
||||
{3560727600 -7200 1 -03}
|
||||
{3570400800 -10800 0 -03}
|
||||
{3592782000 -7200 1 -02}
|
||||
{3592782000 -7200 1 -03}
|
||||
{3601850400 -10800 0 -03}
|
||||
{3624231600 -7200 1 -02}
|
||||
{3624231600 -7200 1 -03}
|
||||
{3633300000 -10800 0 -03}
|
||||
{3655681200 -7200 1 -02}
|
||||
{3655681200 -7200 1 -03}
|
||||
{3664749600 -10800 0 -03}
|
||||
{3687130800 -7200 1 -02}
|
||||
{3687130800 -7200 1 -03}
|
||||
{3696199200 -10800 0 -03}
|
||||
{3718580400 -7200 1 -02}
|
||||
{3718580400 -7200 1 -03}
|
||||
{3727648800 -10800 0 -03}
|
||||
{3750634800 -7200 1 -02}
|
||||
{3750634800 -7200 1 -03}
|
||||
{3759703200 -10800 0 -03}
|
||||
{3782084400 -7200 1 -02}
|
||||
{3782084400 -7200 1 -03}
|
||||
{3791152800 -10800 0 -03}
|
||||
{3813534000 -7200 1 -02}
|
||||
{3813534000 -7200 1 -03}
|
||||
{3822602400 -10800 0 -03}
|
||||
{3844983600 -7200 1 -02}
|
||||
{3844983600 -7200 1 -03}
|
||||
{3854052000 -10800 0 -03}
|
||||
{3876433200 -7200 1 -02}
|
||||
{3876433200 -7200 1 -03}
|
||||
{3885501600 -10800 0 -03}
|
||||
{3907882800 -7200 1 -02}
|
||||
{3907882800 -7200 1 -03}
|
||||
{3917556000 -10800 0 -03}
|
||||
{3939937200 -7200 1 -02}
|
||||
{3939937200 -7200 1 -03}
|
||||
{3949005600 -10800 0 -03}
|
||||
{3971386800 -7200 1 -02}
|
||||
{3971386800 -7200 1 -03}
|
||||
{3980455200 -10800 0 -03}
|
||||
{4002836400 -7200 1 -02}
|
||||
{4002836400 -7200 1 -03}
|
||||
{4011904800 -10800 0 -03}
|
||||
{4034286000 -7200 1 -02}
|
||||
{4034286000 -7200 1 -03}
|
||||
{4043354400 -10800 0 -03}
|
||||
{4065735600 -7200 1 -02}
|
||||
{4065735600 -7200 1 -03}
|
||||
{4074804000 -10800 0 -03}
|
||||
{4097185200 -7200 1 -02}
|
||||
{4097185200 -7200 1 -03}
|
||||
}
|
||||
|
||||
@@ -8,4 +8,5 @@ set TZData(:Antarctica/Casey) {
|
||||
{1319738400 39600 0 +11}
|
||||
{1329843600 28800 0 +08}
|
||||
{1477065600 39600 0 +11}
|
||||
{1520701200 28800 0 +08}
|
||||
}
|
||||
|
||||
@@ -4,84 +4,84 @@ set TZData(:Antarctica/Palmer) {
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-157766400 -14400 0 -04}
|
||||
{-152654400 -14400 0 -04}
|
||||
{-132955200 -10800 1 -03}
|
||||
{-132955200 -10800 1 -04}
|
||||
{-121122000 -14400 0 -04}
|
||||
{-101419200 -10800 1 -03}
|
||||
{-101419200 -10800 1 -04}
|
||||
{-86821200 -14400 0 -04}
|
||||
{-71092800 -10800 1 -03}
|
||||
{-71092800 -10800 1 -04}
|
||||
{-54766800 -14400 0 -04}
|
||||
{-39038400 -10800 1 -03}
|
||||
{-39038400 -10800 1 -04}
|
||||
{-23317200 -14400 0 -04}
|
||||
{-7588800 -10800 0 -03}
|
||||
{128142000 -7200 1 -02}
|
||||
{128142000 -7200 1 -03}
|
||||
{136605600 -10800 0 -03}
|
||||
{389070000 -14400 0 -04}
|
||||
{403070400 -10800 1 -03}
|
||||
{403070400 -10800 1 -04}
|
||||
{416372400 -14400 0 -04}
|
||||
{434520000 -10800 1 -03}
|
||||
{434520000 -10800 1 -04}
|
||||
{447822000 -14400 0 -04}
|
||||
{466574400 -10800 1 -03}
|
||||
{466574400 -10800 1 -04}
|
||||
{479271600 -14400 0 -04}
|
||||
{498024000 -10800 1 -03}
|
||||
{498024000 -10800 1 -04}
|
||||
{510721200 -14400 0 -04}
|
||||
{529473600 -10800 1 -03}
|
||||
{529473600 -10800 1 -04}
|
||||
{545194800 -14400 0 -04}
|
||||
{560923200 -10800 1 -03}
|
||||
{560923200 -10800 1 -04}
|
||||
{574225200 -14400 0 -04}
|
||||
{592372800 -10800 1 -03}
|
||||
{592372800 -10800 1 -04}
|
||||
{605674800 -14400 0 -04}
|
||||
{624427200 -10800 1 -03}
|
||||
{624427200 -10800 1 -04}
|
||||
{637124400 -14400 0 -04}
|
||||
{653457600 -10800 1 -03}
|
||||
{653457600 -10800 1 -04}
|
||||
{668574000 -14400 0 -04}
|
||||
{687326400 -10800 1 -03}
|
||||
{687326400 -10800 1 -04}
|
||||
{700628400 -14400 0 -04}
|
||||
{718776000 -10800 1 -03}
|
||||
{718776000 -10800 1 -04}
|
||||
{732078000 -14400 0 -04}
|
||||
{750225600 -10800 1 -03}
|
||||
{750225600 -10800 1 -04}
|
||||
{763527600 -14400 0 -04}
|
||||
{781675200 -10800 1 -03}
|
||||
{781675200 -10800 1 -04}
|
||||
{794977200 -14400 0 -04}
|
||||
{813729600 -10800 1 -03}
|
||||
{813729600 -10800 1 -04}
|
||||
{826426800 -14400 0 -04}
|
||||
{845179200 -10800 1 -03}
|
||||
{845179200 -10800 1 -04}
|
||||
{859690800 -14400 0 -04}
|
||||
{876628800 -10800 1 -03}
|
||||
{876628800 -10800 1 -04}
|
||||
{889930800 -14400 0 -04}
|
||||
{906868800 -10800 1 -03}
|
||||
{906868800 -10800 1 -04}
|
||||
{923194800 -14400 0 -04}
|
||||
{939528000 -10800 1 -03}
|
||||
{939528000 -10800 1 -04}
|
||||
{952830000 -14400 0 -04}
|
||||
{971582400 -10800 1 -03}
|
||||
{971582400 -10800 1 -04}
|
||||
{984279600 -14400 0 -04}
|
||||
{1003032000 -10800 1 -03}
|
||||
{1003032000 -10800 1 -04}
|
||||
{1015729200 -14400 0 -04}
|
||||
{1034481600 -10800 1 -03}
|
||||
{1034481600 -10800 1 -04}
|
||||
{1047178800 -14400 0 -04}
|
||||
{1065931200 -10800 1 -03}
|
||||
{1065931200 -10800 1 -04}
|
||||
{1079233200 -14400 0 -04}
|
||||
{1097380800 -10800 1 -03}
|
||||
{1097380800 -10800 1 -04}
|
||||
{1110682800 -14400 0 -04}
|
||||
{1128830400 -10800 1 -03}
|
||||
{1128830400 -10800 1 -04}
|
||||
{1142132400 -14400 0 -04}
|
||||
{1160884800 -10800 1 -03}
|
||||
{1160884800 -10800 1 -04}
|
||||
{1173582000 -14400 0 -04}
|
||||
{1192334400 -10800 1 -03}
|
||||
{1192334400 -10800 1 -04}
|
||||
{1206846000 -14400 0 -04}
|
||||
{1223784000 -10800 1 -03}
|
||||
{1223784000 -10800 1 -04}
|
||||
{1237086000 -14400 0 -04}
|
||||
{1255233600 -10800 1 -03}
|
||||
{1255233600 -10800 1 -04}
|
||||
{1270350000 -14400 0 -04}
|
||||
{1286683200 -10800 1 -03}
|
||||
{1286683200 -10800 1 -04}
|
||||
{1304823600 -14400 0 -04}
|
||||
{1313899200 -10800 1 -03}
|
||||
{1313899200 -10800 1 -04}
|
||||
{1335668400 -14400 0 -04}
|
||||
{1346558400 -10800 1 -03}
|
||||
{1346558400 -10800 1 -04}
|
||||
{1367118000 -14400 0 -04}
|
||||
{1378612800 -10800 1 -03}
|
||||
{1378612800 -10800 1 -04}
|
||||
{1398567600 -14400 0 -04}
|
||||
{1410062400 -10800 1 -03}
|
||||
{1410062400 -10800 1 -04}
|
||||
{1463281200 -14400 0 -04}
|
||||
{1471147200 -10800 1 -03}
|
||||
{1471147200 -10800 1 -04}
|
||||
{1480820400 -10800 0 -03}
|
||||
}
|
||||
|
||||
+24
-24
@@ -4,54 +4,54 @@ set TZData(:Asia/Almaty) {
|
||||
{-9223372036854775808 18468 0 LMT}
|
||||
{-1441170468 18000 0 +05}
|
||||
{-1247547600 21600 0 +06}
|
||||
{354909600 25200 1 +07}
|
||||
{354909600 25200 1 +06}
|
||||
{370717200 21600 0 +06}
|
||||
{386445600 25200 1 +07}
|
||||
{386445600 25200 1 +06}
|
||||
{402253200 21600 0 +06}
|
||||
{417981600 25200 1 +07}
|
||||
{417981600 25200 1 +06}
|
||||
{433789200 21600 0 +06}
|
||||
{449604000 25200 1 +07}
|
||||
{449604000 25200 1 +06}
|
||||
{465336000 21600 0 +06}
|
||||
{481060800 25200 1 +07}
|
||||
{481060800 25200 1 +06}
|
||||
{496785600 21600 0 +06}
|
||||
{512510400 25200 1 +07}
|
||||
{512510400 25200 1 +06}
|
||||
{528235200 21600 0 +06}
|
||||
{543960000 25200 1 +07}
|
||||
{543960000 25200 1 +06}
|
||||
{559684800 21600 0 +06}
|
||||
{575409600 25200 1 +07}
|
||||
{575409600 25200 1 +06}
|
||||
{591134400 21600 0 +06}
|
||||
{606859200 25200 1 +07}
|
||||
{606859200 25200 1 +06}
|
||||
{622584000 21600 0 +06}
|
||||
{638308800 25200 1 +07}
|
||||
{638308800 25200 1 +06}
|
||||
{654638400 21600 0 +06}
|
||||
{670363200 18000 0 +05}
|
||||
{670366800 21600 1 +06}
|
||||
{670366800 21600 1 +05}
|
||||
{686091600 18000 0 +05}
|
||||
{695768400 21600 0 +06}
|
||||
{701812800 25200 1 +07}
|
||||
{701812800 25200 1 +06}
|
||||
{717537600 21600 0 +06}
|
||||
{733262400 25200 1 +07}
|
||||
{733262400 25200 1 +06}
|
||||
{748987200 21600 0 +06}
|
||||
{764712000 25200 1 +07}
|
||||
{764712000 25200 1 +06}
|
||||
{780436800 21600 0 +06}
|
||||
{796161600 25200 1 +07}
|
||||
{796161600 25200 1 +06}
|
||||
{811886400 21600 0 +06}
|
||||
{828216000 25200 1 +07}
|
||||
{828216000 25200 1 +06}
|
||||
{846360000 21600 0 +06}
|
||||
{859665600 25200 1 +07}
|
||||
{859665600 25200 1 +06}
|
||||
{877809600 21600 0 +06}
|
||||
{891115200 25200 1 +07}
|
||||
{891115200 25200 1 +06}
|
||||
{909259200 21600 0 +06}
|
||||
{922564800 25200 1 +07}
|
||||
{922564800 25200 1 +06}
|
||||
{941313600 21600 0 +06}
|
||||
{954014400 25200 1 +07}
|
||||
{954014400 25200 1 +06}
|
||||
{972763200 21600 0 +06}
|
||||
{985464000 25200 1 +07}
|
||||
{985464000 25200 1 +06}
|
||||
{1004212800 21600 0 +06}
|
||||
{1017518400 25200 1 +07}
|
||||
{1017518400 25200 1 +06}
|
||||
{1035662400 21600 0 +06}
|
||||
{1048968000 25200 1 +07}
|
||||
{1048968000 25200 1 +06}
|
||||
{1067112000 21600 0 +06}
|
||||
{1080417600 25200 1 +07}
|
||||
{1080417600 25200 1 +06}
|
||||
{1099166400 21600 0 +06}
|
||||
}
|
||||
|
||||
+24
-24
@@ -6,53 +6,53 @@ set TZData(:Asia/Aqtau) {
|
||||
{-1247544000 18000 0 +05}
|
||||
{370724400 21600 0 +06}
|
||||
{386445600 18000 0 +05}
|
||||
{386449200 21600 1 +06}
|
||||
{386449200 21600 1 +05}
|
||||
{402256800 18000 0 +05}
|
||||
{417985200 21600 1 +06}
|
||||
{417985200 21600 1 +05}
|
||||
{433792800 18000 0 +05}
|
||||
{449607600 21600 1 +06}
|
||||
{449607600 21600 1 +05}
|
||||
{465339600 18000 0 +05}
|
||||
{481064400 21600 1 +06}
|
||||
{481064400 21600 1 +05}
|
||||
{496789200 18000 0 +05}
|
||||
{512514000 21600 1 +06}
|
||||
{512514000 21600 1 +05}
|
||||
{528238800 18000 0 +05}
|
||||
{543963600 21600 1 +06}
|
||||
{543963600 21600 1 +05}
|
||||
{559688400 18000 0 +05}
|
||||
{575413200 21600 1 +06}
|
||||
{575413200 21600 1 +05}
|
||||
{591138000 18000 0 +05}
|
||||
{606862800 21600 1 +06}
|
||||
{606862800 21600 1 +05}
|
||||
{622587600 18000 0 +05}
|
||||
{638312400 21600 1 +06}
|
||||
{638312400 21600 1 +05}
|
||||
{654642000 18000 0 +05}
|
||||
{670366800 14400 0 +04}
|
||||
{670370400 18000 1 +05}
|
||||
{670370400 18000 1 +04}
|
||||
{686095200 14400 0 +04}
|
||||
{695772000 18000 0 +05}
|
||||
{701816400 21600 1 +06}
|
||||
{701816400 21600 1 +05}
|
||||
{717541200 18000 0 +05}
|
||||
{733266000 21600 1 +06}
|
||||
{733266000 21600 1 +05}
|
||||
{748990800 18000 0 +05}
|
||||
{764715600 21600 1 +06}
|
||||
{780440400 18000 0 +05}
|
||||
{764715600 21600 1 +05}
|
||||
{780440400 18000 0 +04}
|
||||
{780444000 14400 0 +04}
|
||||
{796168800 18000 1 +05}
|
||||
{796168800 18000 1 +04}
|
||||
{811893600 14400 0 +04}
|
||||
{828223200 18000 1 +05}
|
||||
{828223200 18000 1 +04}
|
||||
{846367200 14400 0 +04}
|
||||
{859672800 18000 1 +05}
|
||||
{859672800 18000 1 +04}
|
||||
{877816800 14400 0 +04}
|
||||
{891122400 18000 1 +05}
|
||||
{891122400 18000 1 +04}
|
||||
{909266400 14400 0 +04}
|
||||
{922572000 18000 1 +05}
|
||||
{922572000 18000 1 +04}
|
||||
{941320800 14400 0 +04}
|
||||
{954021600 18000 1 +05}
|
||||
{954021600 18000 1 +04}
|
||||
{972770400 14400 0 +04}
|
||||
{985471200 18000 1 +05}
|
||||
{985471200 18000 1 +04}
|
||||
{1004220000 14400 0 +04}
|
||||
{1017525600 18000 1 +05}
|
||||
{1017525600 18000 1 +04}
|
||||
{1035669600 14400 0 +04}
|
||||
{1048975200 18000 1 +05}
|
||||
{1048975200 18000 1 +04}
|
||||
{1067119200 14400 0 +04}
|
||||
{1080424800 18000 1 +05}
|
||||
{1080424800 18000 1 +04}
|
||||
{1099173600 18000 0 +05}
|
||||
}
|
||||
|
||||
+23
-23
@@ -7,52 +7,52 @@ set TZData(:Asia/Aqtobe) {
|
||||
{354913200 21600 1 +06}
|
||||
{370720800 21600 0 +06}
|
||||
{386445600 18000 0 +05}
|
||||
{386449200 21600 1 +06}
|
||||
{386449200 21600 1 +05}
|
||||
{402256800 18000 0 +05}
|
||||
{417985200 21600 1 +06}
|
||||
{417985200 21600 1 +05}
|
||||
{433792800 18000 0 +05}
|
||||
{449607600 21600 1 +06}
|
||||
{449607600 21600 1 +05}
|
||||
{465339600 18000 0 +05}
|
||||
{481064400 21600 1 +06}
|
||||
{481064400 21600 1 +05}
|
||||
{496789200 18000 0 +05}
|
||||
{512514000 21600 1 +06}
|
||||
{512514000 21600 1 +05}
|
||||
{528238800 18000 0 +05}
|
||||
{543963600 21600 1 +06}
|
||||
{543963600 21600 1 +05}
|
||||
{559688400 18000 0 +05}
|
||||
{575413200 21600 1 +06}
|
||||
{575413200 21600 1 +05}
|
||||
{591138000 18000 0 +05}
|
||||
{606862800 21600 1 +06}
|
||||
{606862800 21600 1 +05}
|
||||
{622587600 18000 0 +05}
|
||||
{638312400 21600 1 +06}
|
||||
{638312400 21600 1 +05}
|
||||
{654642000 18000 0 +05}
|
||||
{670366800 14400 0 +04}
|
||||
{670370400 18000 1 +05}
|
||||
{670370400 18000 1 +04}
|
||||
{686095200 14400 0 +04}
|
||||
{695772000 18000 0 +05}
|
||||
{701816400 21600 1 +06}
|
||||
{701816400 21600 1 +05}
|
||||
{717541200 18000 0 +05}
|
||||
{733266000 21600 1 +06}
|
||||
{733266000 21600 1 +05}
|
||||
{748990800 18000 0 +05}
|
||||
{764715600 21600 1 +06}
|
||||
{764715600 21600 1 +05}
|
||||
{780440400 18000 0 +05}
|
||||
{796165200 21600 1 +06}
|
||||
{796165200 21600 1 +05}
|
||||
{811890000 18000 0 +05}
|
||||
{828219600 21600 1 +06}
|
||||
{828219600 21600 1 +05}
|
||||
{846363600 18000 0 +05}
|
||||
{859669200 21600 1 +06}
|
||||
{859669200 21600 1 +05}
|
||||
{877813200 18000 0 +05}
|
||||
{891118800 21600 1 +06}
|
||||
{891118800 21600 1 +05}
|
||||
{909262800 18000 0 +05}
|
||||
{922568400 21600 1 +06}
|
||||
{922568400 21600 1 +05}
|
||||
{941317200 18000 0 +05}
|
||||
{954018000 21600 1 +06}
|
||||
{954018000 21600 1 +05}
|
||||
{972766800 18000 0 +05}
|
||||
{985467600 21600 1 +06}
|
||||
{985467600 21600 1 +05}
|
||||
{1004216400 18000 0 +05}
|
||||
{1017522000 21600 1 +06}
|
||||
{1017522000 21600 1 +05}
|
||||
{1035666000 18000 0 +05}
|
||||
{1048971600 21600 1 +06}
|
||||
{1048971600 21600 1 +05}
|
||||
{1067115600 18000 0 +05}
|
||||
{1080421200 21600 1 +06}
|
||||
{1080421200 21600 1 +05}
|
||||
{1099170000 18000 0 +05}
|
||||
}
|
||||
|
||||
@@ -4,28 +4,28 @@ set TZData(:Asia/Ashgabat) {
|
||||
{-9223372036854775808 14012 0 LMT}
|
||||
{-1441166012 14400 0 +04}
|
||||
{-1247544000 18000 0 +05}
|
||||
{354913200 21600 1 +06}
|
||||
{354913200 21600 1 +05}
|
||||
{370720800 18000 0 +05}
|
||||
{386449200 21600 1 +06}
|
||||
{386449200 21600 1 +05}
|
||||
{402256800 18000 0 +05}
|
||||
{417985200 21600 1 +06}
|
||||
{417985200 21600 1 +05}
|
||||
{433792800 18000 0 +05}
|
||||
{449607600 21600 1 +06}
|
||||
{449607600 21600 1 +05}
|
||||
{465339600 18000 0 +05}
|
||||
{481064400 21600 1 +06}
|
||||
{481064400 21600 1 +05}
|
||||
{496789200 18000 0 +05}
|
||||
{512514000 21600 1 +06}
|
||||
{512514000 21600 1 +05}
|
||||
{528238800 18000 0 +05}
|
||||
{543963600 21600 1 +06}
|
||||
{543963600 21600 1 +05}
|
||||
{559688400 18000 0 +05}
|
||||
{575413200 21600 1 +06}
|
||||
{575413200 21600 1 +05}
|
||||
{591138000 18000 0 +05}
|
||||
{606862800 21600 1 +06}
|
||||
{606862800 21600 1 +05}
|
||||
{622587600 18000 0 +05}
|
||||
{638312400 21600 1 +06}
|
||||
{638312400 21600 1 +05}
|
||||
{654642000 18000 0 +05}
|
||||
{670366800 14400 0 +04}
|
||||
{670370400 18000 1 +05}
|
||||
{670370400 18000 1 +04}
|
||||
{686095200 14400 0 +04}
|
||||
{695772000 18000 0 +05}
|
||||
}
|
||||
|
||||
+23
-23
@@ -6,53 +6,53 @@ set TZData(:Asia/Atyrau) {
|
||||
{-1247540400 18000 0 +05}
|
||||
{370724400 21600 0 +06}
|
||||
{386445600 18000 0 +05}
|
||||
{386449200 21600 1 +06}
|
||||
{386449200 21600 1 +05}
|
||||
{402256800 18000 0 +05}
|
||||
{417985200 21600 1 +06}
|
||||
{417985200 21600 1 +05}
|
||||
{433792800 18000 0 +05}
|
||||
{449607600 21600 1 +06}
|
||||
{449607600 21600 1 +05}
|
||||
{465339600 18000 0 +05}
|
||||
{481064400 21600 1 +06}
|
||||
{481064400 21600 1 +05}
|
||||
{496789200 18000 0 +05}
|
||||
{512514000 21600 1 +06}
|
||||
{512514000 21600 1 +05}
|
||||
{528238800 18000 0 +05}
|
||||
{543963600 21600 1 +06}
|
||||
{543963600 21600 1 +05}
|
||||
{559688400 18000 0 +05}
|
||||
{575413200 21600 1 +06}
|
||||
{575413200 21600 1 +05}
|
||||
{591138000 18000 0 +05}
|
||||
{606862800 21600 1 +06}
|
||||
{606862800 21600 1 +05}
|
||||
{622587600 18000 0 +05}
|
||||
{638312400 21600 1 +06}
|
||||
{638312400 21600 1 +05}
|
||||
{654642000 18000 0 +05}
|
||||
{670366800 14400 0 +04}
|
||||
{670370400 18000 1 +05}
|
||||
{670370400 18000 1 +04}
|
||||
{686095200 14400 0 +04}
|
||||
{695772000 18000 0 +05}
|
||||
{701816400 21600 1 +06}
|
||||
{701816400 21600 1 +05}
|
||||
{717541200 18000 0 +05}
|
||||
{733266000 21600 1 +06}
|
||||
{733266000 21600 1 +05}
|
||||
{748990800 18000 0 +05}
|
||||
{764715600 21600 1 +06}
|
||||
{764715600 21600 1 +05}
|
||||
{780440400 18000 0 +05}
|
||||
{796165200 21600 1 +06}
|
||||
{796165200 21600 1 +05}
|
||||
{811890000 18000 0 +05}
|
||||
{828219600 21600 1 +06}
|
||||
{828219600 21600 1 +05}
|
||||
{846363600 18000 0 +05}
|
||||
{859669200 21600 1 +06}
|
||||
{859669200 21600 1 +05}
|
||||
{877813200 18000 0 +05}
|
||||
{891118800 21600 1 +06}
|
||||
{891118800 21600 1 +05}
|
||||
{909262800 18000 0 +05}
|
||||
{922568400 14400 0 +04}
|
||||
{922572000 18000 1 +05}
|
||||
{922572000 18000 1 +04}
|
||||
{941320800 14400 0 +04}
|
||||
{954021600 18000 1 +05}
|
||||
{954021600 18000 1 +04}
|
||||
{972770400 14400 0 +04}
|
||||
{985471200 18000 1 +05}
|
||||
{985471200 18000 1 +04}
|
||||
{1004220000 14400 0 +04}
|
||||
{1017525600 18000 1 +05}
|
||||
{1017525600 18000 1 +04}
|
||||
{1035669600 14400 0 +04}
|
||||
{1048975200 18000 1 +05}
|
||||
{1048975200 18000 1 +04}
|
||||
{1067119200 14400 0 +04}
|
||||
{1080424800 18000 1 +05}
|
||||
{1080424800 18000 1 +04}
|
||||
{1099173600 18000 0 +05}
|
||||
}
|
||||
|
||||
+52
-52
@@ -4,56 +4,56 @@ set TZData(:Asia/Baghdad) {
|
||||
{-9223372036854775808 10660 0 LMT}
|
||||
{-2524532260 10656 0 BMT}
|
||||
{-1641005856 10800 0 +03}
|
||||
{389048400 14400 0 +04}
|
||||
{402264000 10800 0 +04}
|
||||
{417906000 14400 1 +04}
|
||||
{433800000 10800 0 +04}
|
||||
{449614800 14400 1 +04}
|
||||
{465422400 10800 0 +04}
|
||||
{481150800 14400 1 +04}
|
||||
{496792800 10800 0 +04}
|
||||
{512517600 14400 1 +04}
|
||||
{528242400 10800 0 +04}
|
||||
{543967200 14400 1 +04}
|
||||
{559692000 10800 0 +04}
|
||||
{575416800 14400 1 +04}
|
||||
{591141600 10800 0 +04}
|
||||
{606866400 14400 1 +04}
|
||||
{622591200 10800 0 +04}
|
||||
{638316000 14400 1 +04}
|
||||
{654645600 10800 0 +04}
|
||||
{670464000 14400 1 +04}
|
||||
{686275200 10800 0 +04}
|
||||
{702086400 14400 1 +04}
|
||||
{717897600 10800 0 +04}
|
||||
{733622400 14400 1 +04}
|
||||
{749433600 10800 0 +04}
|
||||
{765158400 14400 1 +04}
|
||||
{780969600 10800 0 +04}
|
||||
{796694400 14400 1 +04}
|
||||
{812505600 10800 0 +04}
|
||||
{828316800 14400 1 +04}
|
||||
{844128000 10800 0 +04}
|
||||
{859852800 14400 1 +04}
|
||||
{875664000 10800 0 +04}
|
||||
{891388800 14400 1 +04}
|
||||
{907200000 10800 0 +04}
|
||||
{922924800 14400 1 +04}
|
||||
{938736000 10800 0 +04}
|
||||
{954547200 14400 1 +04}
|
||||
{970358400 10800 0 +04}
|
||||
{986083200 14400 1 +04}
|
||||
{1001894400 10800 0 +04}
|
||||
{1017619200 14400 1 +04}
|
||||
{1033430400 10800 0 +04}
|
||||
{1049155200 14400 1 +04}
|
||||
{1064966400 10800 0 +04}
|
||||
{1080777600 14400 1 +04}
|
||||
{1096588800 10800 0 +04}
|
||||
{1112313600 14400 1 +04}
|
||||
{1128124800 10800 0 +04}
|
||||
{1143849600 14400 1 +04}
|
||||
{1159660800 10800 0 +04}
|
||||
{1175385600 14400 1 +04}
|
||||
{1191196800 10800 0 +04}
|
||||
{389048400 14400 0 +03}
|
||||
{402264000 10800 0 +03}
|
||||
{417906000 14400 1 +03}
|
||||
{433800000 10800 0 +03}
|
||||
{449614800 14400 1 +03}
|
||||
{465422400 10800 0 +03}
|
||||
{481150800 14400 1 +03}
|
||||
{496792800 10800 0 +03}
|
||||
{512517600 14400 1 +03}
|
||||
{528242400 10800 0 +03}
|
||||
{543967200 14400 1 +03}
|
||||
{559692000 10800 0 +03}
|
||||
{575416800 14400 1 +03}
|
||||
{591141600 10800 0 +03}
|
||||
{606866400 14400 1 +03}
|
||||
{622591200 10800 0 +03}
|
||||
{638316000 14400 1 +03}
|
||||
{654645600 10800 0 +03}
|
||||
{670464000 14400 1 +03}
|
||||
{686275200 10800 0 +03}
|
||||
{702086400 14400 1 +03}
|
||||
{717897600 10800 0 +03}
|
||||
{733622400 14400 1 +03}
|
||||
{749433600 10800 0 +03}
|
||||
{765158400 14400 1 +03}
|
||||
{780969600 10800 0 +03}
|
||||
{796694400 14400 1 +03}
|
||||
{812505600 10800 0 +03}
|
||||
{828316800 14400 1 +03}
|
||||
{844128000 10800 0 +03}
|
||||
{859852800 14400 1 +03}
|
||||
{875664000 10800 0 +03}
|
||||
{891388800 14400 1 +03}
|
||||
{907200000 10800 0 +03}
|
||||
{922924800 14400 1 +03}
|
||||
{938736000 10800 0 +03}
|
||||
{954547200 14400 1 +03}
|
||||
{970358400 10800 0 +03}
|
||||
{986083200 14400 1 +03}
|
||||
{1001894400 10800 0 +03}
|
||||
{1017619200 14400 1 +03}
|
||||
{1033430400 10800 0 +03}
|
||||
{1049155200 14400 1 +03}
|
||||
{1064966400 10800 0 +03}
|
||||
{1080777600 14400 1 +03}
|
||||
{1096588800 10800 0 +03}
|
||||
{1112313600 14400 1 +03}
|
||||
{1128124800 10800 0 +03}
|
||||
{1143849600 14400 1 +03}
|
||||
{1159660800 10800 0 +03}
|
||||
{1175385600 14400 1 +03}
|
||||
{1191196800 10800 0 +03}
|
||||
}
|
||||
|
||||
+31
-31
@@ -4,71 +4,71 @@ set TZData(:Asia/Baku) {
|
||||
{-9223372036854775808 11964 0 LMT}
|
||||
{-1441163964 10800 0 +03}
|
||||
{-405140400 14400 0 +04}
|
||||
{354916800 18000 1 +05}
|
||||
{354916800 18000 1 +04}
|
||||
{370724400 14400 0 +04}
|
||||
{386452800 18000 1 +05}
|
||||
{386452800 18000 1 +04}
|
||||
{402260400 14400 0 +04}
|
||||
{417988800 18000 1 +05}
|
||||
{417988800 18000 1 +04}
|
||||
{433796400 14400 0 +04}
|
||||
{449611200 18000 1 +05}
|
||||
{449611200 18000 1 +04}
|
||||
{465343200 14400 0 +04}
|
||||
{481068000 18000 1 +05}
|
||||
{481068000 18000 1 +04}
|
||||
{496792800 14400 0 +04}
|
||||
{512517600 18000 1 +05}
|
||||
{512517600 18000 1 +04}
|
||||
{528242400 14400 0 +04}
|
||||
{543967200 18000 1 +05}
|
||||
{543967200 18000 1 +04}
|
||||
{559692000 14400 0 +04}
|
||||
{575416800 18000 1 +05}
|
||||
{575416800 18000 1 +04}
|
||||
{591141600 14400 0 +04}
|
||||
{606866400 18000 1 +05}
|
||||
{606866400 18000 1 +04}
|
||||
{622591200 14400 0 +04}
|
||||
{638316000 18000 1 +05}
|
||||
{638316000 18000 1 +04}
|
||||
{654645600 14400 0 +04}
|
||||
{670370400 10800 0 +03}
|
||||
{670374000 14400 1 +04}
|
||||
{670374000 14400 1 +03}
|
||||
{686098800 10800 0 +03}
|
||||
{701823600 14400 1 +04}
|
||||
{701823600 14400 1 +03}
|
||||
{717548400 14400 0 +04}
|
||||
{820440000 14400 0 +04}
|
||||
{828234000 18000 1 +05}
|
||||
{846378000 14400 0 +04}
|
||||
{852062400 14400 0 +04}
|
||||
{859680000 18000 1 +05}
|
||||
{859680000 18000 1 +04}
|
||||
{877824000 14400 0 +04}
|
||||
{891129600 18000 1 +05}
|
||||
{891129600 18000 1 +04}
|
||||
{909273600 14400 0 +04}
|
||||
{922579200 18000 1 +05}
|
||||
{922579200 18000 1 +04}
|
||||
{941328000 14400 0 +04}
|
||||
{954028800 18000 1 +05}
|
||||
{954028800 18000 1 +04}
|
||||
{972777600 14400 0 +04}
|
||||
{985478400 18000 1 +05}
|
||||
{985478400 18000 1 +04}
|
||||
{1004227200 14400 0 +04}
|
||||
{1017532800 18000 1 +05}
|
||||
{1017532800 18000 1 +04}
|
||||
{1035676800 14400 0 +04}
|
||||
{1048982400 18000 1 +05}
|
||||
{1048982400 18000 1 +04}
|
||||
{1067126400 14400 0 +04}
|
||||
{1080432000 18000 1 +05}
|
||||
{1080432000 18000 1 +04}
|
||||
{1099180800 14400 0 +04}
|
||||
{1111881600 18000 1 +05}
|
||||
{1111881600 18000 1 +04}
|
||||
{1130630400 14400 0 +04}
|
||||
{1143331200 18000 1 +05}
|
||||
{1143331200 18000 1 +04}
|
||||
{1162080000 14400 0 +04}
|
||||
{1174780800 18000 1 +05}
|
||||
{1174780800 18000 1 +04}
|
||||
{1193529600 14400 0 +04}
|
||||
{1206835200 18000 1 +05}
|
||||
{1206835200 18000 1 +04}
|
||||
{1224979200 14400 0 +04}
|
||||
{1238284800 18000 1 +05}
|
||||
{1238284800 18000 1 +04}
|
||||
{1256428800 14400 0 +04}
|
||||
{1269734400 18000 1 +05}
|
||||
{1269734400 18000 1 +04}
|
||||
{1288483200 14400 0 +04}
|
||||
{1301184000 18000 1 +05}
|
||||
{1301184000 18000 1 +04}
|
||||
{1319932800 14400 0 +04}
|
||||
{1332633600 18000 1 +05}
|
||||
{1332633600 18000 1 +04}
|
||||
{1351382400 14400 0 +04}
|
||||
{1364688000 18000 1 +05}
|
||||
{1364688000 18000 1 +04}
|
||||
{1382832000 14400 0 +04}
|
||||
{1396137600 18000 1 +05}
|
||||
{1396137600 18000 1 +04}
|
||||
{1414281600 14400 0 +04}
|
||||
{1427587200 18000 1 +05}
|
||||
{1427587200 18000 1 +04}
|
||||
{1445731200 14400 0 +04}
|
||||
}
|
||||
|
||||
+25
-25
@@ -4,55 +4,55 @@ set TZData(:Asia/Bishkek) {
|
||||
{-9223372036854775808 17904 0 LMT}
|
||||
{-1441169904 18000 0 +05}
|
||||
{-1247547600 21600 0 +06}
|
||||
{354909600 25200 1 +07}
|
||||
{354909600 25200 1 +06}
|
||||
{370717200 21600 0 +06}
|
||||
{386445600 25200 1 +07}
|
||||
{386445600 25200 1 +06}
|
||||
{402253200 21600 0 +06}
|
||||
{417981600 25200 1 +07}
|
||||
{417981600 25200 1 +06}
|
||||
{433789200 21600 0 +06}
|
||||
{449604000 25200 1 +07}
|
||||
{449604000 25200 1 +06}
|
||||
{465336000 21600 0 +06}
|
||||
{481060800 25200 1 +07}
|
||||
{481060800 25200 1 +06}
|
||||
{496785600 21600 0 +06}
|
||||
{512510400 25200 1 +07}
|
||||
{512510400 25200 1 +06}
|
||||
{528235200 21600 0 +06}
|
||||
{543960000 25200 1 +07}
|
||||
{543960000 25200 1 +06}
|
||||
{559684800 21600 0 +06}
|
||||
{575409600 25200 1 +07}
|
||||
{575409600 25200 1 +06}
|
||||
{591134400 21600 0 +06}
|
||||
{606859200 25200 1 +07}
|
||||
{606859200 25200 1 +06}
|
||||
{622584000 21600 0 +06}
|
||||
{638308800 25200 1 +07}
|
||||
{638308800 25200 1 +06}
|
||||
{654638400 21600 0 +06}
|
||||
{670363200 18000 0 +05}
|
||||
{670366800 21600 1 +06}
|
||||
{670366800 21600 1 +05}
|
||||
{683586000 18000 0 +05}
|
||||
{703018800 21600 1 +06}
|
||||
{703018800 21600 1 +05}
|
||||
{717530400 18000 0 +05}
|
||||
{734468400 21600 1 +06}
|
||||
{734468400 21600 1 +05}
|
||||
{748980000 18000 0 +05}
|
||||
{765918000 21600 1 +06}
|
||||
{765918000 21600 1 +05}
|
||||
{780429600 18000 0 +05}
|
||||
{797367600 21600 1 +06}
|
||||
{797367600 21600 1 +05}
|
||||
{811879200 18000 0 +05}
|
||||
{828817200 21600 1 +06}
|
||||
{828817200 21600 1 +05}
|
||||
{843933600 18000 0 +05}
|
||||
{859671000 21600 1 +06}
|
||||
{859671000 21600 1 +05}
|
||||
{877811400 18000 0 +05}
|
||||
{891120600 21600 1 +06}
|
||||
{891120600 21600 1 +05}
|
||||
{909261000 18000 0 +05}
|
||||
{922570200 21600 1 +06}
|
||||
{922570200 21600 1 +05}
|
||||
{941315400 18000 0 +05}
|
||||
{954019800 21600 1 +06}
|
||||
{954019800 21600 1 +05}
|
||||
{972765000 18000 0 +05}
|
||||
{985469400 21600 1 +06}
|
||||
{985469400 21600 1 +05}
|
||||
{1004214600 18000 0 +05}
|
||||
{1017523800 21600 1 +06}
|
||||
{1017523800 21600 1 +05}
|
||||
{1035664200 18000 0 +05}
|
||||
{1048973400 21600 1 +06}
|
||||
{1048973400 21600 1 +05}
|
||||
{1067113800 18000 0 +05}
|
||||
{1080423000 21600 1 +06}
|
||||
{1080423000 21600 1 +05}
|
||||
{1099168200 18000 0 +05}
|
||||
{1111872600 21600 1 +06}
|
||||
{1111872600 21600 1 +05}
|
||||
{1123783200 21600 0 +06}
|
||||
}
|
||||
|
||||
@@ -4,53 +4,53 @@ set TZData(:Asia/Choibalsan) {
|
||||
{-9223372036854775808 27480 0 LMT}
|
||||
{-2032933080 25200 0 +07}
|
||||
{252435600 28800 0 +08}
|
||||
{417974400 36000 0 +10}
|
||||
{417974400 36000 0 +09}
|
||||
{433778400 32400 0 +09}
|
||||
{449593200 36000 1 +10}
|
||||
{449593200 36000 1 +09}
|
||||
{465314400 32400 0 +09}
|
||||
{481042800 36000 1 +10}
|
||||
{481042800 36000 1 +09}
|
||||
{496764000 32400 0 +09}
|
||||
{512492400 36000 1 +10}
|
||||
{512492400 36000 1 +09}
|
||||
{528213600 32400 0 +09}
|
||||
{543942000 36000 1 +10}
|
||||
{543942000 36000 1 +09}
|
||||
{559663200 32400 0 +09}
|
||||
{575391600 36000 1 +10}
|
||||
{575391600 36000 1 +09}
|
||||
{591112800 32400 0 +09}
|
||||
{606841200 36000 1 +10}
|
||||
{606841200 36000 1 +09}
|
||||
{622562400 32400 0 +09}
|
||||
{638290800 36000 1 +10}
|
||||
{638290800 36000 1 +09}
|
||||
{654616800 32400 0 +09}
|
||||
{670345200 36000 1 +10}
|
||||
{670345200 36000 1 +09}
|
||||
{686066400 32400 0 +09}
|
||||
{701794800 36000 1 +10}
|
||||
{701794800 36000 1 +09}
|
||||
{717516000 32400 0 +09}
|
||||
{733244400 36000 1 +10}
|
||||
{733244400 36000 1 +09}
|
||||
{748965600 32400 0 +09}
|
||||
{764694000 36000 1 +10}
|
||||
{764694000 36000 1 +09}
|
||||
{780415200 32400 0 +09}
|
||||
{796143600 36000 1 +10}
|
||||
{796143600 36000 1 +09}
|
||||
{811864800 32400 0 +09}
|
||||
{828198000 36000 1 +10}
|
||||
{828198000 36000 1 +09}
|
||||
{843919200 32400 0 +09}
|
||||
{859647600 36000 1 +10}
|
||||
{859647600 36000 1 +09}
|
||||
{875368800 32400 0 +09}
|
||||
{891097200 36000 1 +10}
|
||||
{891097200 36000 1 +09}
|
||||
{906818400 32400 0 +09}
|
||||
{988390800 36000 1 +10}
|
||||
{988390800 36000 1 +09}
|
||||
{1001692800 32400 0 +09}
|
||||
{1017421200 36000 1 +10}
|
||||
{1017421200 36000 1 +09}
|
||||
{1033142400 32400 0 +09}
|
||||
{1048870800 36000 1 +10}
|
||||
{1048870800 36000 1 +09}
|
||||
{1064592000 32400 0 +09}
|
||||
{1080320400 36000 1 +10}
|
||||
{1080320400 36000 1 +09}
|
||||
{1096041600 32400 0 +09}
|
||||
{1111770000 36000 1 +10}
|
||||
{1111770000 36000 1 +09}
|
||||
{1127491200 32400 0 +09}
|
||||
{1143219600 36000 1 +10}
|
||||
{1143219600 36000 1 +09}
|
||||
{1159545600 32400 0 +09}
|
||||
{1206889200 28800 0 +08}
|
||||
{1427479200 32400 1 +09}
|
||||
{1427479200 32400 1 +08}
|
||||
{1443193200 28800 0 +08}
|
||||
{1458928800 32400 1 +09}
|
||||
{1458928800 32400 1 +08}
|
||||
{1474642800 28800 0 +08}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,6 @@ set TZData(:Asia/Dhaka) {
|
||||
{-862637400 23400 0 +0630}
|
||||
{-576138600 21600 0 +06}
|
||||
{1230746400 21600 0 +06}
|
||||
{1245430800 25200 1 +07}
|
||||
{1245430800 25200 1 +06}
|
||||
{1262278800 21600 0 +06}
|
||||
}
|
||||
|
||||
@@ -4,25 +4,25 @@ set TZData(:Asia/Dushanbe) {
|
||||
{-9223372036854775808 16512 0 LMT}
|
||||
{-1441168512 18000 0 +05}
|
||||
{-1247547600 21600 0 +06}
|
||||
{354909600 25200 1 +07}
|
||||
{354909600 25200 1 +06}
|
||||
{370717200 21600 0 +06}
|
||||
{386445600 25200 1 +07}
|
||||
{386445600 25200 1 +06}
|
||||
{402253200 21600 0 +06}
|
||||
{417981600 25200 1 +07}
|
||||
{417981600 25200 1 +06}
|
||||
{433789200 21600 0 +06}
|
||||
{449604000 25200 1 +07}
|
||||
{449604000 25200 1 +06}
|
||||
{465336000 21600 0 +06}
|
||||
{481060800 25200 1 +07}
|
||||
{481060800 25200 1 +06}
|
||||
{496785600 21600 0 +06}
|
||||
{512510400 25200 1 +07}
|
||||
{512510400 25200 1 +06}
|
||||
{528235200 21600 0 +06}
|
||||
{543960000 25200 1 +07}
|
||||
{543960000 25200 1 +06}
|
||||
{559684800 21600 0 +06}
|
||||
{575409600 25200 1 +07}
|
||||
{575409600 25200 1 +06}
|
||||
{591134400 21600 0 +06}
|
||||
{606859200 25200 1 +07}
|
||||
{606859200 25200 1 +06}
|
||||
{622584000 21600 0 +06}
|
||||
{638308800 25200 1 +07}
|
||||
{638308800 25200 1 +06}
|
||||
{654638400 21600 0 +06}
|
||||
{670363200 21600 1 +06}
|
||||
{684363600 18000 0 +05}
|
||||
|
||||
+36
-36
@@ -111,9 +111,9 @@ set TZData(:Asia/Gaza) {
|
||||
{1477692000 7200 0 EET}
|
||||
{1490396400 10800 1 EEST}
|
||||
{1509141600 7200 0 EET}
|
||||
{1522450800 10800 1 EEST}
|
||||
{1521846000 10800 1 EEST}
|
||||
{1540591200 7200 0 EET}
|
||||
{1553900400 10800 1 EEST}
|
||||
{1553295600 10800 1 EEST}
|
||||
{1572040800 7200 0 EET}
|
||||
{1585350000 10800 1 EEST}
|
||||
{1604095200 7200 0 EET}
|
||||
@@ -123,9 +123,9 @@ set TZData(:Asia/Gaza) {
|
||||
{1666994400 7200 0 EET}
|
||||
{1679698800 10800 1 EEST}
|
||||
{1698444000 7200 0 EET}
|
||||
{1711753200 10800 1 EEST}
|
||||
{1711148400 10800 1 EEST}
|
||||
{1729893600 7200 0 EET}
|
||||
{1743202800 10800 1 EEST}
|
||||
{1742598000 10800 1 EEST}
|
||||
{1761343200 7200 0 EET}
|
||||
{1774652400 10800 1 EEST}
|
||||
{1793397600 7200 0 EET}
|
||||
@@ -133,11 +133,11 @@ set TZData(:Asia/Gaza) {
|
||||
{1824847200 7200 0 EET}
|
||||
{1837551600 10800 1 EEST}
|
||||
{1856296800 7200 0 EET}
|
||||
{1869606000 10800 1 EEST}
|
||||
{1869001200 10800 1 EEST}
|
||||
{1887746400 7200 0 EET}
|
||||
{1901055600 10800 1 EEST}
|
||||
{1900450800 10800 1 EEST}
|
||||
{1919196000 7200 0 EET}
|
||||
{1932505200 10800 1 EEST}
|
||||
{1931900400 10800 1 EEST}
|
||||
{1950645600 7200 0 EET}
|
||||
{1963954800 10800 1 EEST}
|
||||
{1982700000 7200 0 EET}
|
||||
@@ -145,9 +145,9 @@ set TZData(:Asia/Gaza) {
|
||||
{2014149600 7200 0 EET}
|
||||
{2026854000 10800 1 EEST}
|
||||
{2045599200 7200 0 EET}
|
||||
{2058908400 10800 1 EEST}
|
||||
{2058303600 10800 1 EEST}
|
||||
{2077048800 7200 0 EET}
|
||||
{2090358000 10800 1 EEST}
|
||||
{2089753200 10800 1 EEST}
|
||||
{2108498400 7200 0 EET}
|
||||
{2121807600 10800 1 EEST}
|
||||
{2140552800 7200 0 EET}
|
||||
@@ -155,11 +155,11 @@ set TZData(:Asia/Gaza) {
|
||||
{2172002400 7200 0 EET}
|
||||
{2184706800 10800 1 EEST}
|
||||
{2203452000 7200 0 EET}
|
||||
{2216761200 10800 1 EEST}
|
||||
{2216156400 10800 1 EEST}
|
||||
{2234901600 7200 0 EET}
|
||||
{2248210800 10800 1 EEST}
|
||||
{2247606000 10800 1 EEST}
|
||||
{2266351200 7200 0 EET}
|
||||
{2279660400 10800 1 EEST}
|
||||
{2279055600 10800 1 EEST}
|
||||
{2297800800 7200 0 EET}
|
||||
{2311110000 10800 1 EEST}
|
||||
{2329855200 7200 0 EET}
|
||||
@@ -167,9 +167,9 @@ set TZData(:Asia/Gaza) {
|
||||
{2361304800 7200 0 EET}
|
||||
{2374009200 10800 1 EEST}
|
||||
{2392754400 7200 0 EET}
|
||||
{2406063600 10800 1 EEST}
|
||||
{2405458800 10800 1 EEST}
|
||||
{2424204000 7200 0 EET}
|
||||
{2437513200 10800 1 EEST}
|
||||
{2436908400 10800 1 EEST}
|
||||
{2455653600 7200 0 EET}
|
||||
{2468962800 10800 1 EEST}
|
||||
{2487708000 7200 0 EET}
|
||||
@@ -179,9 +179,9 @@ set TZData(:Asia/Gaza) {
|
||||
{2550607200 7200 0 EET}
|
||||
{2563311600 10800 1 EEST}
|
||||
{2582056800 7200 0 EET}
|
||||
{2595366000 10800 1 EEST}
|
||||
{2594761200 10800 1 EEST}
|
||||
{2613506400 7200 0 EET}
|
||||
{2626815600 10800 1 EEST}
|
||||
{2626210800 10800 1 EEST}
|
||||
{2644956000 7200 0 EET}
|
||||
{2658265200 10800 1 EEST}
|
||||
{2677010400 7200 0 EET}
|
||||
@@ -189,11 +189,11 @@ set TZData(:Asia/Gaza) {
|
||||
{2708460000 7200 0 EET}
|
||||
{2721164400 10800 1 EEST}
|
||||
{2739909600 7200 0 EET}
|
||||
{2753218800 10800 1 EEST}
|
||||
{2752614000 10800 1 EEST}
|
||||
{2771359200 7200 0 EET}
|
||||
{2784668400 10800 1 EEST}
|
||||
{2784063600 10800 1 EEST}
|
||||
{2802808800 7200 0 EET}
|
||||
{2816118000 10800 1 EEST}
|
||||
{2815513200 10800 1 EEST}
|
||||
{2834258400 7200 0 EET}
|
||||
{2847567600 10800 1 EEST}
|
||||
{2866312800 7200 0 EET}
|
||||
@@ -201,9 +201,9 @@ set TZData(:Asia/Gaza) {
|
||||
{2897762400 7200 0 EET}
|
||||
{2910466800 10800 1 EEST}
|
||||
{2929212000 7200 0 EET}
|
||||
{2942521200 10800 1 EEST}
|
||||
{2941916400 10800 1 EEST}
|
||||
{2960661600 7200 0 EET}
|
||||
{2973970800 10800 1 EEST}
|
||||
{2973366000 10800 1 EEST}
|
||||
{2992111200 7200 0 EET}
|
||||
{3005420400 10800 1 EEST}
|
||||
{3024165600 7200 0 EET}
|
||||
@@ -211,11 +211,11 @@ set TZData(:Asia/Gaza) {
|
||||
{3055615200 7200 0 EET}
|
||||
{3068319600 10800 1 EEST}
|
||||
{3087064800 7200 0 EET}
|
||||
{3100374000 10800 1 EEST}
|
||||
{3099769200 10800 1 EEST}
|
||||
{3118514400 7200 0 EET}
|
||||
{3131823600 10800 1 EEST}
|
||||
{3131218800 10800 1 EEST}
|
||||
{3149964000 7200 0 EET}
|
||||
{3163273200 10800 1 EEST}
|
||||
{3162668400 10800 1 EEST}
|
||||
{3181413600 7200 0 EET}
|
||||
{3194722800 10800 1 EEST}
|
||||
{3213468000 7200 0 EET}
|
||||
@@ -223,9 +223,9 @@ set TZData(:Asia/Gaza) {
|
||||
{3244917600 7200 0 EET}
|
||||
{3257622000 10800 1 EEST}
|
||||
{3276367200 7200 0 EET}
|
||||
{3289676400 10800 1 EEST}
|
||||
{3289071600 10800 1 EEST}
|
||||
{3307816800 7200 0 EET}
|
||||
{3321126000 10800 1 EEST}
|
||||
{3320521200 10800 1 EEST}
|
||||
{3339266400 7200 0 EET}
|
||||
{3352575600 10800 1 EEST}
|
||||
{3371320800 7200 0 EET}
|
||||
@@ -235,9 +235,9 @@ set TZData(:Asia/Gaza) {
|
||||
{3434220000 7200 0 EET}
|
||||
{3446924400 10800 1 EEST}
|
||||
{3465669600 7200 0 EET}
|
||||
{3478978800 10800 1 EEST}
|
||||
{3478374000 10800 1 EEST}
|
||||
{3497119200 7200 0 EET}
|
||||
{3510428400 10800 1 EEST}
|
||||
{3509823600 10800 1 EEST}
|
||||
{3528568800 7200 0 EET}
|
||||
{3541878000 10800 1 EEST}
|
||||
{3560623200 7200 0 EET}
|
||||
@@ -245,11 +245,11 @@ set TZData(:Asia/Gaza) {
|
||||
{3592072800 7200 0 EET}
|
||||
{3604777200 10800 1 EEST}
|
||||
{3623522400 7200 0 EET}
|
||||
{3636831600 10800 1 EEST}
|
||||
{3636226800 10800 1 EEST}
|
||||
{3654972000 7200 0 EET}
|
||||
{3668281200 10800 1 EEST}
|
||||
{3667676400 10800 1 EEST}
|
||||
{3686421600 7200 0 EET}
|
||||
{3699730800 10800 1 EEST}
|
||||
{3699126000 10800 1 EEST}
|
||||
{3717871200 7200 0 EET}
|
||||
{3731180400 10800 1 EEST}
|
||||
{3749925600 7200 0 EET}
|
||||
@@ -257,9 +257,9 @@ set TZData(:Asia/Gaza) {
|
||||
{3781375200 7200 0 EET}
|
||||
{3794079600 10800 1 EEST}
|
||||
{3812824800 7200 0 EET}
|
||||
{3826134000 10800 1 EEST}
|
||||
{3825529200 10800 1 EEST}
|
||||
{3844274400 7200 0 EET}
|
||||
{3857583600 10800 1 EEST}
|
||||
{3856978800 10800 1 EEST}
|
||||
{3875724000 7200 0 EET}
|
||||
{3889033200 10800 1 EEST}
|
||||
{3907778400 7200 0 EET}
|
||||
@@ -267,11 +267,11 @@ set TZData(:Asia/Gaza) {
|
||||
{3939228000 7200 0 EET}
|
||||
{3951932400 10800 1 EEST}
|
||||
{3970677600 7200 0 EET}
|
||||
{3983986800 10800 1 EEST}
|
||||
{3983382000 10800 1 EEST}
|
||||
{4002127200 7200 0 EET}
|
||||
{4015436400 10800 1 EEST}
|
||||
{4014831600 10800 1 EEST}
|
||||
{4033576800 7200 0 EET}
|
||||
{4046886000 10800 1 EEST}
|
||||
{4046281200 10800 1 EEST}
|
||||
{4065026400 7200 0 EET}
|
||||
{4078335600 10800 1 EEST}
|
||||
{4097080800 7200 0 EET}
|
||||
|
||||
+36
-36
@@ -110,9 +110,9 @@ set TZData(:Asia/Hebron) {
|
||||
{1477692000 7200 0 EET}
|
||||
{1490396400 10800 1 EEST}
|
||||
{1509141600 7200 0 EET}
|
||||
{1522450800 10800 1 EEST}
|
||||
{1521846000 10800 1 EEST}
|
||||
{1540591200 7200 0 EET}
|
||||
{1553900400 10800 1 EEST}
|
||||
{1553295600 10800 1 EEST}
|
||||
{1572040800 7200 0 EET}
|
||||
{1585350000 10800 1 EEST}
|
||||
{1604095200 7200 0 EET}
|
||||
@@ -122,9 +122,9 @@ set TZData(:Asia/Hebron) {
|
||||
{1666994400 7200 0 EET}
|
||||
{1679698800 10800 1 EEST}
|
||||
{1698444000 7200 0 EET}
|
||||
{1711753200 10800 1 EEST}
|
||||
{1711148400 10800 1 EEST}
|
||||
{1729893600 7200 0 EET}
|
||||
{1743202800 10800 1 EEST}
|
||||
{1742598000 10800 1 EEST}
|
||||
{1761343200 7200 0 EET}
|
||||
{1774652400 10800 1 EEST}
|
||||
{1793397600 7200 0 EET}
|
||||
@@ -132,11 +132,11 @@ set TZData(:Asia/Hebron) {
|
||||
{1824847200 7200 0 EET}
|
||||
{1837551600 10800 1 EEST}
|
||||
{1856296800 7200 0 EET}
|
||||
{1869606000 10800 1 EEST}
|
||||
{1869001200 10800 1 EEST}
|
||||
{1887746400 7200 0 EET}
|
||||
{1901055600 10800 1 EEST}
|
||||
{1900450800 10800 1 EEST}
|
||||
{1919196000 7200 0 EET}
|
||||
{1932505200 10800 1 EEST}
|
||||
{1931900400 10800 1 EEST}
|
||||
{1950645600 7200 0 EET}
|
||||
{1963954800 10800 1 EEST}
|
||||
{1982700000 7200 0 EET}
|
||||
@@ -144,9 +144,9 @@ set TZData(:Asia/Hebron) {
|
||||
{2014149600 7200 0 EET}
|
||||
{2026854000 10800 1 EEST}
|
||||
{2045599200 7200 0 EET}
|
||||
{2058908400 10800 1 EEST}
|
||||
{2058303600 10800 1 EEST}
|
||||
{2077048800 7200 0 EET}
|
||||
{2090358000 10800 1 EEST}
|
||||
{2089753200 10800 1 EEST}
|
||||
{2108498400 7200 0 EET}
|
||||
{2121807600 10800 1 EEST}
|
||||
{2140552800 7200 0 EET}
|
||||
@@ -154,11 +154,11 @@ set TZData(:Asia/Hebron) {
|
||||
{2172002400 7200 0 EET}
|
||||
{2184706800 10800 1 EEST}
|
||||
{2203452000 7200 0 EET}
|
||||
{2216761200 10800 1 EEST}
|
||||
{2216156400 10800 1 EEST}
|
||||
{2234901600 7200 0 EET}
|
||||
{2248210800 10800 1 EEST}
|
||||
{2247606000 10800 1 EEST}
|
||||
{2266351200 7200 0 EET}
|
||||
{2279660400 10800 1 EEST}
|
||||
{2279055600 10800 1 EEST}
|
||||
{2297800800 7200 0 EET}
|
||||
{2311110000 10800 1 EEST}
|
||||
{2329855200 7200 0 EET}
|
||||
@@ -166,9 +166,9 @@ set TZData(:Asia/Hebron) {
|
||||
{2361304800 7200 0 EET}
|
||||
{2374009200 10800 1 EEST}
|
||||
{2392754400 7200 0 EET}
|
||||
{2406063600 10800 1 EEST}
|
||||
{2405458800 10800 1 EEST}
|
||||
{2424204000 7200 0 EET}
|
||||
{2437513200 10800 1 EEST}
|
||||
{2436908400 10800 1 EEST}
|
||||
{2455653600 7200 0 EET}
|
||||
{2468962800 10800 1 EEST}
|
||||
{2487708000 7200 0 EET}
|
||||
@@ -178,9 +178,9 @@ set TZData(:Asia/Hebron) {
|
||||
{2550607200 7200 0 EET}
|
||||
{2563311600 10800 1 EEST}
|
||||
{2582056800 7200 0 EET}
|
||||
{2595366000 10800 1 EEST}
|
||||
{2594761200 10800 1 EEST}
|
||||
{2613506400 7200 0 EET}
|
||||
{2626815600 10800 1 EEST}
|
||||
{2626210800 10800 1 EEST}
|
||||
{2644956000 7200 0 EET}
|
||||
{2658265200 10800 1 EEST}
|
||||
{2677010400 7200 0 EET}
|
||||
@@ -188,11 +188,11 @@ set TZData(:Asia/Hebron) {
|
||||
{2708460000 7200 0 EET}
|
||||
{2721164400 10800 1 EEST}
|
||||
{2739909600 7200 0 EET}
|
||||
{2753218800 10800 1 EEST}
|
||||
{2752614000 10800 1 EEST}
|
||||
{2771359200 7200 0 EET}
|
||||
{2784668400 10800 1 EEST}
|
||||
{2784063600 10800 1 EEST}
|
||||
{2802808800 7200 0 EET}
|
||||
{2816118000 10800 1 EEST}
|
||||
{2815513200 10800 1 EEST}
|
||||
{2834258400 7200 0 EET}
|
||||
{2847567600 10800 1 EEST}
|
||||
{2866312800 7200 0 EET}
|
||||
@@ -200,9 +200,9 @@ set TZData(:Asia/Hebron) {
|
||||
{2897762400 7200 0 EET}
|
||||
{2910466800 10800 1 EEST}
|
||||
{2929212000 7200 0 EET}
|
||||
{2942521200 10800 1 EEST}
|
||||
{2941916400 10800 1 EEST}
|
||||
{2960661600 7200 0 EET}
|
||||
{2973970800 10800 1 EEST}
|
||||
{2973366000 10800 1 EEST}
|
||||
{2992111200 7200 0 EET}
|
||||
{3005420400 10800 1 EEST}
|
||||
{3024165600 7200 0 EET}
|
||||
@@ -210,11 +210,11 @@ set TZData(:Asia/Hebron) {
|
||||
{3055615200 7200 0 EET}
|
||||
{3068319600 10800 1 EEST}
|
||||
{3087064800 7200 0 EET}
|
||||
{3100374000 10800 1 EEST}
|
||||
{3099769200 10800 1 EEST}
|
||||
{3118514400 7200 0 EET}
|
||||
{3131823600 10800 1 EEST}
|
||||
{3131218800 10800 1 EEST}
|
||||
{3149964000 7200 0 EET}
|
||||
{3163273200 10800 1 EEST}
|
||||
{3162668400 10800 1 EEST}
|
||||
{3181413600 7200 0 EET}
|
||||
{3194722800 10800 1 EEST}
|
||||
{3213468000 7200 0 EET}
|
||||
@@ -222,9 +222,9 @@ set TZData(:Asia/Hebron) {
|
||||
{3244917600 7200 0 EET}
|
||||
{3257622000 10800 1 EEST}
|
||||
{3276367200 7200 0 EET}
|
||||
{3289676400 10800 1 EEST}
|
||||
{3289071600 10800 1 EEST}
|
||||
{3307816800 7200 0 EET}
|
||||
{3321126000 10800 1 EEST}
|
||||
{3320521200 10800 1 EEST}
|
||||
{3339266400 7200 0 EET}
|
||||
{3352575600 10800 1 EEST}
|
||||
{3371320800 7200 0 EET}
|
||||
@@ -234,9 +234,9 @@ set TZData(:Asia/Hebron) {
|
||||
{3434220000 7200 0 EET}
|
||||
{3446924400 10800 1 EEST}
|
||||
{3465669600 7200 0 EET}
|
||||
{3478978800 10800 1 EEST}
|
||||
{3478374000 10800 1 EEST}
|
||||
{3497119200 7200 0 EET}
|
||||
{3510428400 10800 1 EEST}
|
||||
{3509823600 10800 1 EEST}
|
||||
{3528568800 7200 0 EET}
|
||||
{3541878000 10800 1 EEST}
|
||||
{3560623200 7200 0 EET}
|
||||
@@ -244,11 +244,11 @@ set TZData(:Asia/Hebron) {
|
||||
{3592072800 7200 0 EET}
|
||||
{3604777200 10800 1 EEST}
|
||||
{3623522400 7200 0 EET}
|
||||
{3636831600 10800 1 EEST}
|
||||
{3636226800 10800 1 EEST}
|
||||
{3654972000 7200 0 EET}
|
||||
{3668281200 10800 1 EEST}
|
||||
{3667676400 10800 1 EEST}
|
||||
{3686421600 7200 0 EET}
|
||||
{3699730800 10800 1 EEST}
|
||||
{3699126000 10800 1 EEST}
|
||||
{3717871200 7200 0 EET}
|
||||
{3731180400 10800 1 EEST}
|
||||
{3749925600 7200 0 EET}
|
||||
@@ -256,9 +256,9 @@ set TZData(:Asia/Hebron) {
|
||||
{3781375200 7200 0 EET}
|
||||
{3794079600 10800 1 EEST}
|
||||
{3812824800 7200 0 EET}
|
||||
{3826134000 10800 1 EEST}
|
||||
{3825529200 10800 1 EEST}
|
||||
{3844274400 7200 0 EET}
|
||||
{3857583600 10800 1 EEST}
|
||||
{3856978800 10800 1 EEST}
|
||||
{3875724000 7200 0 EET}
|
||||
{3889033200 10800 1 EEST}
|
||||
{3907778400 7200 0 EET}
|
||||
@@ -266,11 +266,11 @@ set TZData(:Asia/Hebron) {
|
||||
{3939228000 7200 0 EET}
|
||||
{3951932400 10800 1 EEST}
|
||||
{3970677600 7200 0 EET}
|
||||
{3983986800 10800 1 EEST}
|
||||
{3983382000 10800 1 EEST}
|
||||
{4002127200 7200 0 EET}
|
||||
{4015436400 10800 1 EEST}
|
||||
{4014831600 10800 1 EEST}
|
||||
{4033576800 7200 0 EET}
|
||||
{4046886000 10800 1 EEST}
|
||||
{4046281200 10800 1 EEST}
|
||||
{4065026400 7200 0 EET}
|
||||
{4078335600 10800 1 EEST}
|
||||
{4097080800 7200 0 EET}
|
||||
|
||||
+24
-24
@@ -4,52 +4,52 @@ set TZData(:Asia/Hovd) {
|
||||
{-9223372036854775808 21996 0 LMT}
|
||||
{-2032927596 21600 0 +06}
|
||||
{252439200 25200 0 +07}
|
||||
{417978000 28800 1 +08}
|
||||
{417978000 28800 1 +07}
|
||||
{433785600 25200 0 +07}
|
||||
{449600400 28800 1 +08}
|
||||
{449600400 28800 1 +07}
|
||||
{465321600 25200 0 +07}
|
||||
{481050000 28800 1 +08}
|
||||
{481050000 28800 1 +07}
|
||||
{496771200 25200 0 +07}
|
||||
{512499600 28800 1 +08}
|
||||
{512499600 28800 1 +07}
|
||||
{528220800 25200 0 +07}
|
||||
{543949200 28800 1 +08}
|
||||
{543949200 28800 1 +07}
|
||||
{559670400 25200 0 +07}
|
||||
{575398800 28800 1 +08}
|
||||
{575398800 28800 1 +07}
|
||||
{591120000 25200 0 +07}
|
||||
{606848400 28800 1 +08}
|
||||
{606848400 28800 1 +07}
|
||||
{622569600 25200 0 +07}
|
||||
{638298000 28800 1 +08}
|
||||
{638298000 28800 1 +07}
|
||||
{654624000 25200 0 +07}
|
||||
{670352400 28800 1 +08}
|
||||
{670352400 28800 1 +07}
|
||||
{686073600 25200 0 +07}
|
||||
{701802000 28800 1 +08}
|
||||
{701802000 28800 1 +07}
|
||||
{717523200 25200 0 +07}
|
||||
{733251600 28800 1 +08}
|
||||
{733251600 28800 1 +07}
|
||||
{748972800 25200 0 +07}
|
||||
{764701200 28800 1 +08}
|
||||
{764701200 28800 1 +07}
|
||||
{780422400 25200 0 +07}
|
||||
{796150800 28800 1 +08}
|
||||
{796150800 28800 1 +07}
|
||||
{811872000 25200 0 +07}
|
||||
{828205200 28800 1 +08}
|
||||
{828205200 28800 1 +07}
|
||||
{843926400 25200 0 +07}
|
||||
{859654800 28800 1 +08}
|
||||
{859654800 28800 1 +07}
|
||||
{875376000 25200 0 +07}
|
||||
{891104400 28800 1 +08}
|
||||
{891104400 28800 1 +07}
|
||||
{906825600 25200 0 +07}
|
||||
{988398000 28800 1 +08}
|
||||
{988398000 28800 1 +07}
|
||||
{1001700000 25200 0 +07}
|
||||
{1017428400 28800 1 +08}
|
||||
{1017428400 28800 1 +07}
|
||||
{1033149600 25200 0 +07}
|
||||
{1048878000 28800 1 +08}
|
||||
{1048878000 28800 1 +07}
|
||||
{1064599200 25200 0 +07}
|
||||
{1080327600 28800 1 +08}
|
||||
{1080327600 28800 1 +07}
|
||||
{1096048800 25200 0 +07}
|
||||
{1111777200 28800 1 +08}
|
||||
{1111777200 28800 1 +07}
|
||||
{1127498400 25200 0 +07}
|
||||
{1143226800 28800 1 +08}
|
||||
{1143226800 28800 1 +07}
|
||||
{1159552800 25200 0 +07}
|
||||
{1427482800 28800 1 +08}
|
||||
{1427482800 28800 1 +07}
|
||||
{1443196800 25200 0 +07}
|
||||
{1458932400 28800 1 +08}
|
||||
{1458932400 28800 1 +07}
|
||||
{1474646400 25200 0 +07}
|
||||
}
|
||||
|
||||
@@ -4,19 +4,19 @@ set TZData(:Asia/Kuching) {
|
||||
{-9223372036854775808 26480 0 LMT}
|
||||
{-1383463280 27000 0 +0730}
|
||||
{-1167636600 28800 0 +08}
|
||||
{-1082448000 30000 1 +0820}
|
||||
{-1082448000 30000 1 +08}
|
||||
{-1074586800 28800 0 +08}
|
||||
{-1050825600 30000 1 +0820}
|
||||
{-1050825600 30000 1 +08}
|
||||
{-1042964400 28800 0 +08}
|
||||
{-1019289600 30000 1 +0820}
|
||||
{-1019289600 30000 1 +08}
|
||||
{-1011428400 28800 0 +08}
|
||||
{-987753600 30000 1 +0820}
|
||||
{-987753600 30000 1 +08}
|
||||
{-979892400 28800 0 +08}
|
||||
{-956217600 30000 1 +0820}
|
||||
{-956217600 30000 1 +08}
|
||||
{-948356400 28800 0 +08}
|
||||
{-924595200 30000 1 +0820}
|
||||
{-924595200 30000 1 +08}
|
||||
{-916734000 28800 0 +08}
|
||||
{-893059200 30000 1 +0820}
|
||||
{-893059200 30000 1 +08}
|
||||
{-885198000 28800 0 +08}
|
||||
{-879667200 32400 0 +09}
|
||||
{-767005200 28800 0 +08}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
set TZData(:Asia/Macau) {
|
||||
{-9223372036854775808 27260 0 LMT}
|
||||
{-1830411260 28800 0 CST}
|
||||
{-1830412800 28800 0 CST}
|
||||
{-277360200 32400 1 CDT}
|
||||
{-257405400 28800 0 CST}
|
||||
{-245910600 32400 1 CDT}
|
||||
|
||||
@@ -4,12 +4,12 @@ set TZData(:Asia/Manila) {
|
||||
{-9223372036854775808 -57360 0 LMT}
|
||||
{-3944621040 29040 0 LMT}
|
||||
{-2229321840 28800 0 +08}
|
||||
{-1046678400 32400 1 +09}
|
||||
{-1046678400 32400 1 +08}
|
||||
{-1038733200 28800 0 +08}
|
||||
{-873273600 32400 0 +09}
|
||||
{-794221200 28800 0 +08}
|
||||
{-496224000 32400 1 +09}
|
||||
{-496224000 32400 1 +08}
|
||||
{-489315600 28800 0 +08}
|
||||
{259344000 32400 1 +09}
|
||||
{259344000 32400 1 +08}
|
||||
{275151600 28800 0 +08}
|
||||
}
|
||||
|
||||
+23
-23
@@ -7,52 +7,52 @@ set TZData(:Asia/Oral) {
|
||||
{354913200 21600 1 +06}
|
||||
{370720800 21600 0 +06}
|
||||
{386445600 18000 0 +05}
|
||||
{386449200 21600 1 +06}
|
||||
{386449200 21600 1 +05}
|
||||
{402256800 18000 0 +05}
|
||||
{417985200 21600 1 +06}
|
||||
{417985200 21600 1 +05}
|
||||
{433792800 18000 0 +05}
|
||||
{449607600 21600 1 +06}
|
||||
{449607600 21600 1 +05}
|
||||
{465339600 18000 0 +05}
|
||||
{481064400 21600 1 +06}
|
||||
{481064400 21600 1 +05}
|
||||
{496789200 18000 0 +05}
|
||||
{512514000 21600 1 +06}
|
||||
{512514000 21600 1 +05}
|
||||
{528238800 18000 0 +05}
|
||||
{543963600 21600 1 +06}
|
||||
{543963600 21600 1 +05}
|
||||
{559688400 18000 0 +05}
|
||||
{575413200 21600 1 +06}
|
||||
{575413200 21600 1 +05}
|
||||
{591138000 18000 0 +05}
|
||||
{606862800 14400 0 +04}
|
||||
{606866400 18000 1 +05}
|
||||
{606866400 18000 1 +04}
|
||||
{622591200 14400 0 +04}
|
||||
{638316000 18000 1 +05}
|
||||
{638316000 18000 1 +04}
|
||||
{654645600 14400 0 +04}
|
||||
{670370400 18000 1 +05}
|
||||
{670370400 18000 1 +04}
|
||||
{686095200 14400 0 +04}
|
||||
{701816400 14400 0 +04}
|
||||
{701820000 18000 1 +05}
|
||||
{701820000 18000 1 +04}
|
||||
{717544800 14400 0 +04}
|
||||
{733269600 18000 1 +05}
|
||||
{733269600 18000 1 +04}
|
||||
{748994400 14400 0 +04}
|
||||
{764719200 18000 1 +05}
|
||||
{764719200 18000 1 +04}
|
||||
{780444000 14400 0 +04}
|
||||
{796168800 18000 1 +05}
|
||||
{796168800 18000 1 +04}
|
||||
{811893600 14400 0 +04}
|
||||
{828223200 18000 1 +05}
|
||||
{828223200 18000 1 +04}
|
||||
{846367200 14400 0 +04}
|
||||
{859672800 18000 1 +05}
|
||||
{859672800 18000 1 +04}
|
||||
{877816800 14400 0 +04}
|
||||
{891122400 18000 1 +05}
|
||||
{891122400 18000 1 +04}
|
||||
{909266400 14400 0 +04}
|
||||
{922572000 18000 1 +05}
|
||||
{922572000 18000 1 +04}
|
||||
{941320800 14400 0 +04}
|
||||
{954021600 18000 1 +05}
|
||||
{954021600 18000 1 +04}
|
||||
{972770400 14400 0 +04}
|
||||
{985471200 18000 1 +05}
|
||||
{985471200 18000 1 +04}
|
||||
{1004220000 14400 0 +04}
|
||||
{1017525600 18000 1 +05}
|
||||
{1017525600 18000 1 +04}
|
||||
{1035669600 14400 0 +04}
|
||||
{1048975200 18000 1 +05}
|
||||
{1048975200 18000 1 +04}
|
||||
{1067119200 14400 0 +04}
|
||||
{1080424800 18000 1 +05}
|
||||
{1080424800 18000 1 +04}
|
||||
{1099173600 18000 0 +05}
|
||||
}
|
||||
|
||||
@@ -7,51 +7,51 @@ set TZData(:Asia/Qyzylorda) {
|
||||
{354913200 21600 1 +06}
|
||||
{370720800 21600 0 +06}
|
||||
{386445600 18000 0 +05}
|
||||
{386449200 21600 1 +06}
|
||||
{386449200 21600 1 +05}
|
||||
{402256800 18000 0 +05}
|
||||
{417985200 21600 1 +06}
|
||||
{417985200 21600 1 +05}
|
||||
{433792800 18000 0 +05}
|
||||
{449607600 21600 1 +06}
|
||||
{449607600 21600 1 +05}
|
||||
{465339600 18000 0 +05}
|
||||
{481064400 21600 1 +06}
|
||||
{481064400 21600 1 +05}
|
||||
{496789200 18000 0 +05}
|
||||
{512514000 21600 1 +06}
|
||||
{512514000 21600 1 +05}
|
||||
{528238800 18000 0 +05}
|
||||
{543963600 21600 1 +06}
|
||||
{543963600 21600 1 +05}
|
||||
{559688400 18000 0 +05}
|
||||
{575413200 21600 1 +06}
|
||||
{575413200 21600 1 +05}
|
||||
{591138000 18000 0 +05}
|
||||
{606862800 21600 1 +06}
|
||||
{606862800 21600 1 +05}
|
||||
{622587600 18000 0 +05}
|
||||
{638312400 21600 1 +06}
|
||||
{638312400 21600 1 +05}
|
||||
{654642000 18000 0 +05}
|
||||
{670366800 14400 0 +04}
|
||||
{670370400 18000 1 +05}
|
||||
{670370400 18000 1 +04}
|
||||
{701812800 18000 0 +05}
|
||||
{701816400 21600 1 +06}
|
||||
{701816400 21600 1 +05}
|
||||
{717541200 18000 0 +05}
|
||||
{733266000 21600 1 +06}
|
||||
{733266000 21600 1 +05}
|
||||
{748990800 18000 0 +05}
|
||||
{764715600 21600 1 +06}
|
||||
{764715600 21600 1 +05}
|
||||
{780440400 18000 0 +05}
|
||||
{796165200 21600 1 +06}
|
||||
{796165200 21600 1 +05}
|
||||
{811890000 18000 0 +05}
|
||||
{828219600 21600 1 +06}
|
||||
{828219600 21600 1 +05}
|
||||
{846363600 18000 0 +05}
|
||||
{859669200 21600 1 +06}
|
||||
{859669200 21600 1 +05}
|
||||
{877813200 18000 0 +05}
|
||||
{891118800 21600 1 +06}
|
||||
{891118800 21600 1 +05}
|
||||
{909262800 18000 0 +05}
|
||||
{922568400 21600 1 +06}
|
||||
{922568400 21600 1 +05}
|
||||
{941317200 18000 0 +05}
|
||||
{954018000 21600 1 +06}
|
||||
{954018000 21600 1 +05}
|
||||
{972766800 18000 0 +05}
|
||||
{985467600 21600 1 +06}
|
||||
{985467600 21600 1 +05}
|
||||
{1004216400 18000 0 +05}
|
||||
{1017522000 21600 1 +06}
|
||||
{1017522000 21600 1 +05}
|
||||
{1035666000 18000 0 +05}
|
||||
{1048971600 21600 1 +06}
|
||||
{1048971600 21600 1 +05}
|
||||
{1067115600 18000 0 +05}
|
||||
{1080421200 21600 1 +06}
|
||||
{1080421200 21600 1 +05}
|
||||
{1099170000 21600 0 +06}
|
||||
}
|
||||
|
||||
@@ -7,25 +7,25 @@ set TZData(:Asia/Samarkand) {
|
||||
{354913200 21600 1 +06}
|
||||
{370720800 21600 0 +06}
|
||||
{386445600 18000 0 +05}
|
||||
{386449200 21600 1 +06}
|
||||
{386449200 21600 1 +05}
|
||||
{402256800 18000 0 +05}
|
||||
{417985200 21600 1 +06}
|
||||
{417985200 21600 1 +05}
|
||||
{433792800 18000 0 +05}
|
||||
{449607600 21600 1 +06}
|
||||
{449607600 21600 1 +05}
|
||||
{465339600 18000 0 +05}
|
||||
{481064400 21600 1 +06}
|
||||
{481064400 21600 1 +05}
|
||||
{496789200 18000 0 +05}
|
||||
{512514000 21600 1 +06}
|
||||
{512514000 21600 1 +05}
|
||||
{528238800 18000 0 +05}
|
||||
{543963600 21600 1 +06}
|
||||
{543963600 21600 1 +05}
|
||||
{559688400 18000 0 +05}
|
||||
{575413200 21600 1 +06}
|
||||
{575413200 21600 1 +05}
|
||||
{591138000 18000 0 +05}
|
||||
{606862800 21600 1 +06}
|
||||
{606862800 21600 1 +05}
|
||||
{622587600 18000 0 +05}
|
||||
{638312400 21600 1 +06}
|
||||
{638312400 21600 1 +05}
|
||||
{654642000 18000 0 +05}
|
||||
{670366800 21600 1 +06}
|
||||
{670366800 21600 1 +05}
|
||||
{686091600 18000 0 +05}
|
||||
{694206000 18000 0 +05}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user