summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog82
-rw-r--r--doc/event.n5
-rw-r--r--generic/tkColor.c53
-rw-r--r--generic/tkInt.h2
-rw-r--r--library/tk.tcl9
-rw-r--r--library/tkfbox.tcl117
-rw-r--r--library/ttk/entry.tcl2
-rw-r--r--library/ttk/treeview.tcl2
-rw-r--r--unix/tkUnixColor.c21
-rw-r--r--unix/tkUnixWm.c9
-rwxr-xr-xwin/buildall.vc.bat69
-rw-r--r--win/makefile.vc156
-rw-r--r--win/nmakehlp.c10
-rw-r--r--win/rules.vc52
-rw-r--r--xlib/rgb.txt33
-rw-r--r--xlib/xcolors.c22
16 files changed, 446 insertions, 198 deletions
diff --git a/ChangeLog b/ChangeLog
index 5ba3e29..f9a8229 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,54 @@
+2012-08-24 Donal K. Fellows <dkf@users.sf.net>
+
+ * library/tkfbox.tcl (GlobFiltered): [Bug 3558535]: Factor out the
+ filtered-sorted globbing code into one procedure that knows how to
+ avoid nasty problems when non-list filters are used. This allows the
+ rest of the [tk_getOpenFile] implementation to be ignorant of the
+ considerable complexities of globbing.
+
+2012-08-23 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/tkUnixWm.c: [Bugs 3554026,3561016]: Stop crash with tearoff
+ menus.
+
+2012-08-23 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * library/tk.tcl: [Bug 3555644]: Better use of virtual events,
+ * library/ttk/entry.tcl Add <<ToggleSelection>> virtual event.
+ * library/ttk/treeview.tcl
+
+2012-08-22 Jan Nijtmans <nijtmans@users.sf.net>
+
+ TIP #403 IMPLEMENTATION
+
+ * xlib/xcolors.c: Web Colors for Tk. New colors aqua, crimson,
+ * xlib/rgb.txt: fuchsia, indigo, lime, olive, silver and teal.
+ * unix/tkUnixColor.c: Modified RGB values for gray/grey, green,
+ * generic/tkInt.h: maroon and purple.
+ * generic/tkColor.c
+
+2012-08-17 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/nmakehlp.c: Add "-V<num>" option, in order to be able to detect
+ partial version numbers.
+
+2012-08-15 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/buildall.vc.bat: Only build the threaded builds by default
+ * win/rules.vc: For msvcrt static builds, allow to link
+ against libraries where the 'x' is missing
+ (generated by Makefile.in).
+ * win/makefile.vc: Always compile Tk with -DUSE_TCL_STUBS,
+ formatting.
+ * library/tk.tcl: [Frq 3555324]: On Windows, re-define Ctrl-A
+ for Select-All., as most Windows applications
+ do.
+
2012-08-11 Jan Nijtmans <nijtmans@users.sf.net>
* library/*.tcl: [Bug 3555644]: Better use of virtual events.
- Pre-define 10 new Virtual events, and correct various
- bindings according to the Mac OSX documentation.
+ Pre-define 10 new Virtual events, and correct various bindings
+ according to the Mac OSX documentation.
* win/rules.vc: Sync with tcl version of rules.vc
2012-08-11 Francois Vogel <fvogelnew1@free.fr>
@@ -11,10 +57,10 @@
2012-08-09 Stuart Cassoff <stwo@users.sourceforge.net>
- * generic/tkEvent.c: Remove useless (void *) casts
- * unix/tkUnixEvent.c: introduced in checkin [81e50c85ed].
- * unix/tkUnixKey.c: The warnings were false flags from a
- * unix/tkUnixRFont.c: faulty OpenBSD C compiler.
+ * generic/tkEvent.c: Remove useless (void *) casts introduced in
+ * unix/tkUnixEvent.c: checkin [81e50c85ed]. The warnings were false
+ * unix/tkUnixKey.c: flags from a faulty OpenBSD C compiler.
+ * unix/tkUnixRFont.c:
2012-07-31 Donal K. Fellows <dkf@users.sf.net>
@@ -1618,12 +1664,14 @@
2010-01-19 Pat Thoyts <patthoyts@users.sourceforge.net>
- * library/bgerror.tcl: [TIP 359]: Extended Window Manager Hints
- * library/clrpick.tcl: following the freedesktop.org specification
- * library/demos/widget: are now supported on X11 using a new
- * library/dialog.tcl: wm attribute called '-type'
- * library/msgbox.tcl: This feature is now used in the Tk library
- * library/tkfbox.tcl: functions where appropriate.
+ TIP #359 IMPLEMENTATION
+
+ * library/bgerror.tcl: Extended Window Manager Hints following the
+ * library/clrpick.tcl: freedesktop.org specification are now
+ * library/demos/widget: supported on X11 using a new [wm attribute]
+ * library/dialog.tcl: called '-type'. This feature is now used in
+ * library/msgbox.tcl: the Tk library functions where appropriate.
+ * library/tkfbox.tcl:
* library/ttk/combobox.tcl:
* tests/unixWm.test:
* tests/wm.test:
@@ -1711,12 +1759,14 @@
2010-01-09 Pat Thoyts <patthoyts@users.sourceforge.net>
- * doc/menu.n: [TIP 360]: Remove special handling of
- * library/obsolete.tcl: the .help menu on X11.
+ TIP #360 IMPLEMENTATION
+
+ * doc/menu.n: Remove special handling of the .help menu on
+ * library/obsolete.tcl: X11.
* unix/tkUnixMenu.c:
- * library/menu.tcl: [TIP 360]: Make Tk menu activation
- * library/obsolete.tcl: follow mouse movements.
+ * library/menu.tcl: Make Tk menu activation follow mouse
+ * library/obsolete.tcl: movements.
2010-01-08 Pat Thoyts <patthoyts@users.sourceforge.net>
diff --git a/doc/event.n b/doc/event.n
index f45a13f..52cb992 100644
--- a/doc/event.n
+++ b/doc/event.n
@@ -480,7 +480,12 @@ range of selected contents.
Move to the previous group of items (i.e., visible word) in the current widget
while extending the range of selected contents.
.TP
+\fB<<ToggleSelection>>\fR
+.
+Toggle the selection.
+.TP
\fB<<Undo>>\fR
+.
Undo the last action.
.SH EXAMPLES
.SS "MAPPING KEYS TO VIRTUAL EVENTS"
diff --git a/generic/tkColor.c b/generic/tkColor.c
index 1bfb037..e4fa3f7 100644
--- a/generic/tkColor.c
+++ b/generic/tkColor.c
@@ -830,8 +830,35 @@ TkDebugColor(
}
#ifndef __WIN32__
+
/* This function is not necessary for Win32,
* since XParseColor already does the right thing */
+
+#undef XParseColor
+
+const char *const tkWebColors[20] = {
+ /* 'a' */ "qua\0#0000ffffffff",
+ /* 'b' */ NULL,
+ /* 'c' */ "rimson\0#dcdc14143c3c",
+ /* 'd' */ NULL,
+ /* 'e' */ NULL,
+ /* 'f' */ "uchsia\0#ffff0000ffff",
+ /* 'g' */ "reen\0#000080800000",
+ /* 'h' */ NULL,
+ /* 'i' */ "ndigo\0#4b4b00008282",
+ /* 'j' */ NULL,
+ /* 'k' */ NULL,
+ /* 'l' */ "ime\0#0000ffff0000",
+ /* 'm' */ "aroon\0#808000000000",
+ /* 'n' */ NULL,
+ /* 'o' */ "live\0#808080800000",
+ /* 'p' */ "urple\0#808000008080",
+ /* 'q' */ NULL,
+ /* 'r' */ NULL,
+ /* 's' */ "ilver\0#c0c0c0c0c0c0",
+ /* 't' */ "eal\0#000080808080"
+};
+
Status
TkParseColor(
Display *display, /* The display */
@@ -884,12 +911,30 @@ TkParseColor(
} else {
name -= 13;
}
- } else {
- if (strlen(name) > 99) {
- /* Don't bother to parse this. [Bug 2809525]*/
- return 0;
+ goto done;
+ } else if (((*name - 'A') & 0xdf) < sizeof(tkWebColors)/sizeof(tkWebColors[0])) {
+ if (!((name[0] - 'G') & 0xdf) && !((name[1] - 'R') & 0xdf)
+ && !((name[2] - 'A') & 0xdb) && !((name[3] - 'Y') & 0xdf)
+ && !name[4]) {
+ name = "#808080808080";
+ goto done;
+ } else {
+ const char *p = tkWebColors[((*name - 'A') & 0x1f)];
+ if (p) {
+ const char *q = name;
+ while (!((*p - *(++q)) & 0xdf)) {
+ if (!*p++) {
+ name = p;
+ goto done;
+ }
+ }
+ }
}
}
+ if (strlen(name) > 99) {
+ return 0;
+ }
+done:
return XParseColor(display, map, name, color);
}
#endif /* __WIN32__ */
diff --git a/generic/tkInt.h b/generic/tkInt.h
index 833dd0c..21b882c 100644
--- a/generic/tkInt.h
+++ b/generic/tkInt.h
@@ -944,6 +944,8 @@ MODULE_SCOPE TkMainInfo *tkMainWindowList;
MODULE_SCOPE Tk_ImageType tkPhotoImageType;
MODULE_SCOPE Tcl_HashTable tkPredefBitmapTable;
+MODULE_SCOPE const char *const tkWebColors[20];
+
/*
* The definition of pi, at least from the perspective of double-precision
* floats.
diff --git a/library/tk.tcl b/library/tk.tcl
index 7ef25ec..cac9075 100644
--- a/library/tk.tcl
+++ b/library/tk.tcl
@@ -391,6 +391,7 @@ switch -exact -- [tk windowingsystem] {
event add <<NextPara>> <Control-Down>
event add <<SelectPrevPara>> <Control-Shift-Up>
event add <<SelectPrevPara>> <Control-Shift-Down>
+ event add <<ToggleSelection>> <Control-ButtonPress-1>
# Some OS's define a goofy (as in, not <Shift-Tab>) keysym that is
# returned when the user presses <Shift-Tab>. In order for tab
@@ -417,7 +418,7 @@ switch -exact -- [tk windowingsystem] {
event add <<Redo>> <Control-Key-y> <Control-Lock-Key-Y>
event add <<ContextMenu>> <Button-3>
- event add <<SelectAll>> <Control-Key-slash>
+ event add <<SelectAll>> <Control-Key-slash> <Control-Key-a> <Control-Lock-Key-A>
event add <<SelectNone>> <Control-Key-backslash>
event add <<NextChar>> <Right>
event add <<SelectNextChar>> <Shift-Right>
@@ -427,9 +428,9 @@ switch -exact -- [tk windowingsystem] {
event add <<SelectNextWord>> <Control-Shift-Right>
event add <<PrevWord>> <Control-Left>
event add <<SelectPrevWord>> <Control-Shift-Left>
- event add <<LineStart>> <Home> <Control-Key-a> <Control-Lock-Key-A>
+ event add <<LineStart>> <Home>
event add <<SelectLineStart>> <Shift-Home>
- event add <<LineEnd>> <End> <Control-Key-e> <Control-Lock-Key-E>
+ event add <<LineEnd>> <End>
event add <<SelectLineEnd>> <Shift-End>
event add <<PrevLine>> <Up>
event add <<NextLine>> <Down>
@@ -439,6 +440,7 @@ switch -exact -- [tk windowingsystem] {
event add <<NextPara>> <Control-Down>
event add <<SelectPrevPara>> <Control-Shift-Up>
event add <<SelectPrevPara>> <Control-Shift-Down>
+ event add <<ToggleSelection>> <Control-ButtonPress-1>
}
"aqua" {
event add <<Cut>> <Command-Key-x> <Key-F2> <Control-Lock-Key-X>
@@ -476,6 +478,7 @@ switch -exact -- [tk windowingsystem] {
event add <<NextPara>> <Option-Down>
event add <<SelectPrevPara>> <Shift-Option-Up>
event add <<SelectPrevPara>> <Shift-Option-Down>
+ event add <<ToggleSelection>> <Command-ButtonPress-1>
}
}
diff --git a/library/tkfbox.tcl b/library/tkfbox.tcl
index ff79df8..ae16939 100644
--- a/library/tkfbox.tcl
+++ b/library/tkfbox.tcl
@@ -588,38 +588,15 @@ proc ::tk::dialog::file::Update {w} {
set showHidden $showHiddenVar
- # Make the dir list
- # Using -directory [pwd] is better in some VFS cases.
- set cmd [list glob -tails -directory [pwd] -type d -nocomplain *]
- if {$showHidden} {
- lappend cmd .*
- }
- set dirs [lsort -dictionary -unique [{*}$cmd]]
- set dirList {}
- foreach d $dirs {
- if {$d eq "." || $d eq ".."} {
- continue
- }
- lappend dirList $d
- }
- $data(icons) add $folder $dirList
+ # Make the dir list. Note that using an explicit [pwd] (instead of '.') is
+ # better in some VFS cases.
+ $data(icons) add $folder [GlobFiltered [pwd] d 1]
if {$class eq "TkFDialog"} {
# Make the file list if this is a File Dialog, selecting all but
# 'd'irectory type files.
#
- set cmd [list glob -tails -directory [pwd] \
- -type {f b c l p s} -nocomplain]
- if {$data(filter) eq "*"} {
- lappend cmd *
- if {$showHidden} {
- lappend cmd .*
- }
- } else {
- lappend cmd {*}$data(filter)
- }
- set fileList [lsort -dictionary -unique [{*}$cmd]]
- $data(icons) add $file $fileList
+ $data(icons) add $file [GlobFiltered [pwd] {f b c l p s}]
}
# Update the Directory: option menu
@@ -1148,50 +1125,72 @@ proc ::tk::dialog::file::Done {w {selectFilePath ""}} {
set Priv(selectFilePath) $selectFilePath
}
+# ::tk::dialog::file::GlobFiltered --
+#
+# Gets called to do globbing, returning the results and filtering them
+# according to the current filter (and removing the entries for '.' and
+# '..' which are never shown). Deals with evil cases such as where the
+# user is supplying a filter which is an invalid list or where it has an
+# unbalanced brace. The resulting list will be dictionary sorted.
+#
+# Arguments:
+# dir Which directory to search
+# type List of filetypes to look for ('d' or 'f b c l p s')
+# overrideFilter Whether to ignore the filter for this search.
+#
+# NB: Assumes that the caller has mapped the state variable to 'data'.
+#
+proc ::tk::dialog::file::GlobFiltered {dir type {overrideFilter 0}} {
+ variable showHiddenVar
+ upvar 1 data(filter) filter
+
+ if {$filter eq "*" || $overrideFilter} {
+ set patterns [list *]
+ if {$showHiddenVar} {
+ lappend patterns .*
+ }
+ } elseif {[string is list $filter]} {
+ set patterns $filter
+ } else {
+ # Invalid list; assume we can use non-whitespace sequences as words
+ set patterns [regexp -inline -all {\S+} $filter]
+ }
+
+ set opts [list -tails -directory $dir -type $type -nocomplain]
+
+ set result {}
+ catch {
+ # We have a catch because we might have a really bad pattern (e.g.,
+ # with an unbalanced brace); even [glob -nocomplain] doesn't like it.
+ # Using a catch ensures that it just means we match nothing instead of
+ # throwing a nasty error at the user...
+ foreach f [glob {*}$opts -- {*}$patterns] {
+ if {$f eq "." || $f eq ".."} {
+ continue
+ }
+ lappend result $f
+ }
+ }
+ return [lsort -dictionary -unique $result]
+}
+
proc ::tk::dialog::file::CompleteEnt {w} {
variable showHiddenVar
upvar ::tk::dialog::file::[winfo name $w] data
set f [$data(ent) get]
if {$data(-multiple)} {
- if {[catch {llength $f} len] || $len != 1} {
+ if {![string is list $f] || [llength $f] != 1} {
return -code break
}
set f [lindex $f 0]
}
# Get list of matching filenames and dirnames
- set globF [list glob -tails -directory $data(selectPath) \
- -type {f b c l p s} -nocomplain]
- set globD [list glob -tails -directory $data(selectPath) -type d \
- -nocomplain *]
- if {$data(filter) eq "*"} {
- lappend globF *
- if {$showHiddenVar} {
- lappend globF .*
- lappend globD .*
- }
- if {[winfo class $w] eq "TkFDialog"} {
- set files [lsort -dictionary -unique [{*}$globF]]
- } else {
- set files {}
- }
- set dirs [lsort -dictionary -unique [{*}$globD]]
- } else {
- if {$showHiddenVar} {
- lappend globD .*
- }
- if {[winfo class $w] eq "TkFDialog"} {
- set files [lsort -dictionary -unique [{*}$globF {*}$data(filter)]]
- } else {
- set files {}
- }
- set dirs [lsort -dictionary -unique [{*}$globD]]
- }
- # Filter specials
- set dirs [lsearch -all -not -exact -inline $dirs .]
- set dirs [lsearch -all -not -exact -inline $dirs ..]
+ set files [if {[winfo class $w] eq "TkFDialog"} {
+ GlobFiltered $data(selectPath) {f b c l p s}
+ }]
set dirs2 {}
- foreach d $dirs {lappend dirs2 $d/}
+ foreach d [GlobFiltered $data(selectPath) d] {lappend dirs2 $d/}
set targets [concat \
[lsearch -glob -all -inline $files $f*] \
diff --git a/library/ttk/entry.tcl b/library/ttk/entry.tcl
index 22c4115..f5ba19e 100644
--- a/library/ttk/entry.tcl
+++ b/library/ttk/entry.tcl
@@ -78,7 +78,7 @@ bind TEntry <B1-Leave> { ttk::Repeatedly ttk::entry::AutoScroll %W }
bind TEntry <B1-Enter> { ttk::CancelRepeat }
bind TEntry <ButtonRelease-1> { ttk::CancelRepeat }
-bind TEntry <Control-ButtonPress-1> {
+bind TEntry <<ToggleSelection>> {
%W instate {!readonly !disabled} { %W icursor @%x ; focus %W }
}
diff --git a/library/ttk/treeview.tcl b/library/ttk/treeview.tcl
index 1160e9b..8772587 100644
--- a/library/ttk/treeview.tcl
+++ b/library/ttk/treeview.tcl
@@ -43,7 +43,7 @@ bind Treeview <KeyPress-space> { ttk::treeview::ToggleFocus %W }
bind Treeview <Shift-ButtonPress-1> \
{ ttk::treeview::Select %W %x %y extend }
-bind Treeview <Control-ButtonPress-1> \
+bind Treeview <<ToggleSelection>> \
{ ttk::treeview::Select %W %x %y toggle }
ttk::copyBindings TtkScrollable Treeview
diff --git a/unix/tkUnixColor.c b/unix/tkUnixColor.c
index 9bfe8bb..43500ad 100644
--- a/unix/tkUnixColor.c
+++ b/unix/tkUnixColor.c
@@ -136,6 +136,25 @@ TkpGetColor(
if (*name != '#') {
XColor screen;
+ if (((*name - 'A') & 0xdf) < sizeof(tkWebColors)/sizeof(tkWebColors[0])) {
+ if (!((name[0] - 'G') & 0xdf) && !((name[1] - 'R') & 0xdf)
+ && !((name[2] - 'A') & 0xdb) && !((name[3] - 'Y') & 0xdf)
+ && !name[4]) {
+ name = "#808080808080";
+ goto gotWebColor;
+ } else {
+ const char *p = tkWebColors[((*name - 'A') & 0x1f)];
+ if (p) {
+ const char *q = name;
+ while (!((*p - *(++q)) & 0xdf)) {
+ if (!*p++) {
+ name = p;
+ goto gotWebColor;
+ }
+ }
+ }
+ }
+ }
if (strlen(name) > 99) {
/* Don't bother to parse this. [Bug 2809525]*/
return (TkColor *) NULL;
@@ -155,6 +174,7 @@ TkpGetColor(
FindClosestColor(tkwin, &screen, &color);
}
} else {
+ gotWebColor:
if (TkParseColor(display, colormap, name, &color) == 0) {
return NULL;
}
@@ -420,6 +440,7 @@ TkpCmapStressed(
return 0;
}
+
/*
* Local Variables:
* mode: c
diff --git a/unix/tkUnixWm.c b/unix/tkUnixWm.c
index 9df3eae..3362081 100644
--- a/unix/tkUnixWm.c
+++ b/unix/tkUnixWm.c
@@ -6823,7 +6823,14 @@ TkSetTransientFor(Tk_Window tkwin, Tk_Window parent)
if (parent == None) {
parent = Tk_Parent(tkwin);
while (!Tk_IsTopLevel(parent))
- parent = Tk_Parent(tkwin);
+ parent = Tk_Parent(parent);
+ }
+ /*
+ * Prevent crash due to incomplete initialization, or other problems.
+ * [Bugs 3554026, 3561016]
+ */
+ if (((TkWindow *)parent)->wmInfoPtr->wrapperPtr == NULL) {
+ CreateWrapper(((TkWindow *)parent)->wmInfoPtr);
}
XSetTransientForHint(Tk_Display(tkwin),
((TkWindow *)tkwin)->wmInfoPtr->wrapperPtr->window,
diff --git a/win/buildall.vc.bat b/win/buildall.vc.bat
index 58360b9..1400dbb 100755
--- a/win/buildall.vc.bat
+++ b/win/buildall.vc.bat
@@ -23,18 +23,27 @@ goto OPTIONS_DONE
:: reset errorlevel
cd > nul
+:: You might have installed your developer studio to add itself to the
+:: path or have already run vcvars32.bat. Testing these envars proves
+:: cl.exe and friends are in your path.
+::
+if defined VCINSTALLDIR (goto :startBuilding)
+if defined MSDEVDIR (goto :startBuilding)
+if defined MSVCDIR (goto :startBuilding)
+if defined MSSDK (goto :startBuilding)
+if defined WINDOWSSDKDIR (goto :startBuilding)
+
:: We need to run the development environment batch script that comes
-:: with developer studio (v4,5,6,7,etc...) All have it. These paths
-:: might not be correct. You may need to edit these.
+:: with developer studio (v4,5,6,7,etc...) All have it. This path
+:: might not be correct. You should call it yourself prior to running
+:: this batchfile.
::
-if not defined MSDevDir (
- call "C:\Program Files\Microsoft Developer Studio\vc98\bin\vcvars32.bat"
- ::call "C:\Program Files\Microsoft Developer Studio\vc\bin\vcvars32.bat"
- ::call c:\dev\devstudio60\vc98\bin\vcvars32.bat
- if errorlevel 1 goto no_vcvars
-)
+call "C:\Program Files\Microsoft Developer Studio\vc98\bin\vcvars32.bat"
+if errorlevel 1 (goto no_vcvars)
+:startBuilding
+echo.
echo Sit back and have a cup of coffee while this grinds through ;)
echo You asked for *everything*, remember?
echo.
@@ -54,6 +63,7 @@ if "%TCLDIR%" == "" set TCLDIR=..\..\tcl
:: Build the normal stuff along with the help file.
::
+<<<<<<< BEGIN MERGE CONFLICT: local copy shown first <<<<<<<<<<<<<<<
set OPTS=none
if not %SYMBOLS%.==. set OPTS=symbols
nmake -nologo -f makefile.vc release htmlhelp OPTS=%OPTS% %1
@@ -75,26 +85,43 @@ if errorlevel 1 goto error
:: Build the core and shell for thread support.
::
-set OPTS=threads
-if not %SYMBOLS%.==. set OPTS=symbols,threads
+======= COMMON ANCESTOR content follows ============================
+set OPTS=none
+if not %SYMBOLS%.==. set OPTS=symbols
+nmake -nologo -f makefile.vc release winhelp OPTS=%OPTS% %1
+if errorlevel 1 goto error
+
+:: Build the static core, dlls and shell.
+::
+set OPTS=static
+if not %SYMBOLS%.==. set OPTS=symbols,static
nmake -nologo -f makefile.vc release OPTS=%OPTS% %1
if errorlevel 1 goto error
-:: Build a static, thread support core library (no shell).
+:: Build the special static libraries that use the dynamic runtime.
::
-set OPTS=static,threads
-if not %SYMBOLS%.==. set OPTS=symbols,static,threads
+set OPTS=static,msvcrt
+if not %SYMBOLS%.==. set OPTS=symbols,static,msvcrt
nmake -nologo -f makefile.vc core OPTS=%OPTS% %1
if errorlevel 1 goto error
-:: Build the special static libraries the use the dynamic runtime,
-:: but now with thread support.
+:: Build the core and shell for thread support.
+::
+======= MERGED IN content follows ==================================
+>>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+set OPTS=threads
+if not %SYMBOLS%.==. set OPTS=symbols,threads
+nmake -nologo -f makefile.vc release OPTS=%OPTS% %1
+if errorlevel 1 goto error
+
+:: Build the static core and shell.
::
set OPTS=static,msvcrt,threads
if not %SYMBOLS%.==. set OPTS=symbols,static,msvcrt,threads
-nmake -nologo -f makefile.vc core OPTS=%OPTS% %1
+nmake -nologo -f makefile.vc shell OPTS=%OPTS% %1
if errorlevel 1 goto error
+set OPTS=
set SYMBOLS=
goto end
@@ -103,16 +130,16 @@ echo *** BOOM! ***
goto end
:no_vcvars
-echo vcvars32.bat not found. You'll need to edit this batch script.
+echo vcvars32.bat was not run prior to this batchfile, nor are the MS tools in your path.
goto out
:help
title buildall.vc.bat help message
echo usage:
-echo %0 : builds Tk for all build types (do this first)
-echo %0 install : installs all the release builds (do this second)
-echo %0 symbols : builds Tk for all debugging build types.
-echo %0 symbols install : install all the debug builds
+echo %0 : builds Tk for all build types (do this first)
+echo %0 install : installs all the release builds (do this second)
+echo %0 symbols : builds Tk for all debugging build types
+echo %0 symbols install : install all the debug builds
echo.
goto out
diff --git a/win/makefile.vc b/win/makefile.vc
index 8557923..584a11b 100644
--- a/win/makefile.vc
+++ b/win/makefile.vc
@@ -43,22 +43,27 @@ the build instructions.
#
# 3) Targets are:
# release -- Builds the core, the shell. (default)
-# core -- Only builds the core.
+# dlls -- Just builds the windows extensions.
+# shell -- Just builds the shell and the core.
+# core -- Only builds the core [tkXX.(dll|lib)].
# all -- Builds everything.
# test -- Builds and runs the test suite.
# tktest -- Just builds the binaries for the test suite.
# install -- Installs the built binaries and libraries to $(INSTALLDIR)
# as the root of the install tree.
# cwish -- Builds a console version of wish.
-# clean -- Removes the contents of $(TMP_DIR)
-# hose -- Removes the contents of $(TMP_DIR) and $(OUT_DIR)
+# tidy/clean/hose -- varying levels of cleaning.
# genstubs -- Rebuilds the Stubs table and support files (dev only).
# depend -- Generates an accurate set of source dependancies for this
# makefile. Helpful to avoid problems when the sources are
# refreshed and you rebuild, but can "overbuild" when common
# headers like tkInt.h just get small changes.
-# winhelp -- builds the windows .hlp file for Tcl from the troff man
-# files.
+# htmlhelp -- Builds a Windows .chm help file for Tcl and Tk from the
+# troff manual pages found in $(ROOT)\doc. You need to
+# have installed the HTML Help Compiler package from Microsoft
+# to produce the .chm file.
+# winhelp -- Builds the windows .hlp file for Tcl from the troff man
+# files found in $(ROOT)\doc.
#
# 4) Macros usable on the commandline:
# TCLDIR=<path>
@@ -78,19 +83,18 @@ the build instructions.
#
# loimpact = Adds a flag for how NT treats the heap to keep memory
# in use, low. This is said to impact alloc performance.
-# msvcrt = Affects the static option only to switch it from
+# msvcrt = Affects the static option only to switch it from
# using libcmt(d) as the C runtime [by default] to
# msvcrt(d). This is useful for static embedding
# support.
-# nothreads = Turns off full multithreading support.
+# nothreads= Turns off full multithreading support.
# noxp = If you do not have the uxtheme.h header then you
# cannot include support for XP themeing.
# square = Include the demo square widget.
-# static = Builds a static library of the core instead of a
+# static = Builds a static library of the core instead of a
# dll. The shell will be static (and large), as well.
-# staticpkg = Affects the static option only to switch
-# wishXX.exe to have the dde and reg extension linked
-# inside it.
+# staticpkg= Affects the static option only to switch wishXX.exe
+# to have the dde and reg extension linked inside it.
# pdbs = Build detached symbols for release builds.
# profile = Adds profiling hooks. Map file is assumed.
# thrdalloc = Use the thread allocator (shared global free pool)
@@ -102,29 +106,30 @@ the build instructions.
# enabled runtime (msvcrt.dll not msvcrtd.dll
# or libcmt.lib not libcmtd.lib).
#
-# STATS=memdbg,compdbg,none
+# STATS=compdbg,memdbg,none
# Sets optional memory and bytecode compiler debugging code added
# to the core. The default is for none. Any combination of the
# above may be used (comma separated). 'none' will over-ride
# everything to nothing.
#
-# memdbg = Enables the debugging memory allocator.
# compdbg = Enables byte compilation logging.
+# memdbg = Enables the debugging memory allocator.
#
-# CHECKS=nodep,fullwarn,64bit,none
+# CHECKS=64bit,fullwarn,nodep,none
# Sets special macros for checking compatability.
#
-# nodep = Turns off compatability macros to ensure Tk isn't
-# being built with deprecated functions.
+# 64bit = Enable 64bit portability warnings (if available)
# fullwarn = Builds with full compiler and link warnings enabled.
# Very verbose.
-# 64bit = Enable 64bit portability warnings (if available)
+# nodep = Turns off compatability macros to ensure the core
+# isn't being built with deprecated functions.
#
# MACHINE=(ALPHA|AMD64|IA64|IX86)
# Set the machine type used for the compiler, linker, and
# resource compiler. This hook is needed to tell the tools
# when alternate platforms are requested. IX86 is the default
-# when not specified.
+# when not specified. If the CPU environment variable has been
+# set (ie: recent Platform SDK) then MACHINE is set from CPU.
#
# TMP_DIR=<path>
# OUT_DIR=<path>
@@ -177,7 +182,7 @@ Please `cd` to its location first.
!error $(MSG)
!endif
-PROJECT = tk
+PROJECT = tk
!include "rules.vc"
!if $(TCLINSTALL)
@@ -237,7 +242,6 @@ WISHOBJS = \
!if $(TCL_USE_STATIC_PACKAGES)
$(TCLDDELIB) \
$(TCLREGLIB) \
- $(TCLSTUBLIB) \
!endif
$(TMP_DIR)\wish.res
@@ -361,7 +365,7 @@ TKOBJS = \
$(TMP_DIR)\tkVisual.obj \
$(TMP_DIR)\tkStubInit.obj \
$(TMP_DIR)\tkWindow.obj \
- $(TTK_OBJS) \
+ $(TTK_OBJS) \
!if !$(STATIC_BUILD)
$(TMP_DIR)\tk.res
!endif
@@ -402,7 +406,8 @@ TTK_OBJS = \
$(TMP_DIR)\ttkStubInit.obj
TKSTUBOBJS = \
- $(TMP_DIR)\tkStubLib.obj $(TMP_DIR)\ttkStubLib.obj
+ $(TMP_DIR)\tkStubLib.obj \
+ $(TMP_DIR)\ttkStubLib.obj
WINDIR = $(ROOT)\win
@@ -442,7 +447,7 @@ cdebug = $(OPTIMIZATIONS)
cdebug =
!endif
!if $(SYMBOLS)
-cdebug = $(cdebug) -Zi
+cdebug = $(cdebug) -Zi
!endif
!else if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"
### Warnings are too many, can't support warnings into errors.
@@ -470,15 +475,10 @@ crt = -MT
!endif
BASE_CFLAGS = $(cdebug) $(cflags) $(crt) $(TK_INCLUDES)
-TK_CFLAGS = $(BASE_CFLAGS) $(TK_DEFINES)
+TK_CFLAGS = $(BASE_CFLAGS) $(TK_DEFINES) -DUSE_TCL_STUBS
CON_CFLAGS = $(cdebug) $(cflags) $(crt) -DCONSOLE
WISH_CFLAGS = $(BASE_CFLAGS) $(TK_DEFINES)
-### Stubs files should not be compiled with -GL
-STUB_CFLAGS = $(cflags) $(cdebug:-GL=) $(TK_DEFINES)
-
-!if !$(STATIC_BUILD)
-TK_CFLAGS = $(TK_CFLAGS) -DUSE_TCL_STUBS
-!endif
+STUB_CFLAGS = $(cflags) $(cdebug) $(TK_DEFINES)
#---------------------------------------------------------------------
# Link flags
@@ -516,10 +516,7 @@ dlllflags = $(lflags) -dll
conlflags = $(lflags) -subsystem:console
guilflags = $(lflags) -subsystem:windows
-tcllibs = $(TCLIMPLIB)
-!if !$(STATIC_BUILD)
-tcllibs = $(TCLSTUBLIB) $(tcllibs)
-!endif
+tcllibs = $(TCLSTUBLIB) $(TCLIMPLIB)
baselibs = netapi32.lib kernel32.lib user32.lib advapi32.lib ws2_32.lib
# Avoid 'unresolved external symbol __security_cookie' errors.
@@ -537,7 +534,7 @@ guilibs = $(baselibs) gdi32.lib
#---------------------------------------------------------------------
!if "$(TESTPAT)" != ""
-TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
+TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
!endif
@@ -564,11 +561,7 @@ test-classic: setup $(TKTEST) $(TKLIB) $(CAT32)
!else
@set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
!endif
-!if "$(OS)" == "Windows_NT" || "$(MSVCDIR)" == "IDE"
- $(DEBUGGER) $(TKTEST) "$(ROOT)/tests/all.tcl" $(TESTFLAGS) | $(CAT32)
-!else
- $(DEBUGGER) $(TKTEST) "$(ROOT)/tests/all.tcl" $(TESTFLAGS) | $(CAT32)
-!endif
+ $(DEBUGGER) $(TKTEST) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) | $(CAT32)
test-ttk: setup $(TKTEST) $(TKLIB) $(CAT32)
@set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
@@ -579,11 +572,7 @@ test-ttk: setup $(TKTEST) $(TKLIB) $(CAT32)
!else
@set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
!endif
-!if "$(OS)" == "Windows_NT" || "$(MSVCDIR)" == "IDE"
- $(DEBUGGER) $(TKTEST) "$(ROOT)/tests/ttk/all.tcl" $(TESTFLAGS) | $(CAT32)
-!else
- $(DEBUGGER) $(TKTEST) "$(ROOT)/tests/ttk/all.tcl" $(TESTFLAGS) | $(CAT32)
-!endif
+ $(DEBUGGER) $(TKTEST) "$(ROOT:\=/)/tests/ttk/all.tcl" $(TESTFLAGS) | $(CAT32)
runtest: setup $(TKTEST) $(TKLIB) $(CAT32)
@set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
@@ -605,7 +594,7 @@ rundemo: setup $(TKTEST) $(TKLIB) $(CAT32)
!else
@set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
!endif
- $(TKTEST) $(ROOT)\library\demos\widget
+ $(TKTEST) $(ROOT:\=/)\library\demos\widget
shell: setup $(WISH)
@set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
@@ -620,6 +609,17 @@ shell: setup $(WISH)
console show
<<
+dbgshell: setup $(WISH)
+ @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
+ @set TK_LIBRARY=$(TK_LIBRARY:\=/)
+ @set TCLLIBPATH=
+!if $(TCLINSTALL)
+ @set PATH=$(_TCLDIR)\bin;$(PATH)
+!else
+ @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
+!endif
+ windbg $(WISH)
+
setup:
@if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
@if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
@@ -682,9 +682,49 @@ genstubs:
#---------------------------------------------------------------------
-# Regenerate the windows help files.
+# Build the Windows HTML help file.
#---------------------------------------------------------------------
+# NOTE: you can define HHC on the command-line to override this
+!ifndef HHC
+HHC=""%ProgramFiles%\HTML Help Workshop\hhc.exe""
+!endif
+HTMLDIR=$(ROOT)\html
+HTMLBASE=TclTk$(VERSION)
+HHPFILE=$(HTMLDIR)\$(HTMLBASE).hhp
+CHMFILE=$(HTMLDIR)\$(HTMLBASE).chm
+
+htmlhelp: chmsetup $(CHMFILE)
+
+$(CHMFILE): $(DOCDIR)\*
+ @$(TCLSH) $(TOOLSDIR)\tcltk-man2html.tcl
+ @echo Compiling HTML help project
+ @$(HHC) <<$(HHPFILE) >NUL
+[OPTIONS]
+Compatibility=1.1 or later
+Compiled file=$(HTMLBASE).chm
+Display compile progress=no
+Error log file=$(HTMLBASE).log
+Language=0x409 English (United States)
+Title=Tcl/Tk $(DOT_VERSION) Help
+[FILES]
+contents.htm
+docs.css
+Keywords
+TclCmd
+TclLib
+TkCmd
+TkLib
+UserCmd
+<<
+
+chmsetup:
+ @if not exist $(HTMLDIR)\nul mkdir $(HTMLDIR)
+
+#-------------------------------------------------------------------------
+# Build the old-style Windows .hlp file
+#-------------------------------------------------------------------------
+
HLPBASE = $(PROJECT)$(TK_VERSION)
HELPFILE = $(OUT_DIR)\$(HLPBASE).hlp
HELPCNT = $(OUT_DIR)\$(HLPBASE).cnt
@@ -811,11 +851,15 @@ $(TMP_DIR)\tkStubLib.obj : $(GENERICDIR)\tkStubLib.c
$(TMP_DIR)\wish.exe.manifest: $(WINDIR)\wish.exe.manifest.in
@nmakehlp -s << $** >$@
@MACHINE@ $(MACHINE:IX86=X86)
-@TK_WIN_VERSION@ $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION).0.0
+@TK_WIN_VERSION@ $(TK_DOTVERSION).0.0
<<
#---------------------------------------------------------------------
-# Generate the makefile depedancies.
+# Generate the source dependencies. Having dependency rules will
+# improve incremental build accuracy without having to resort to a
+# full rebuild just because some non-global header file like
+# tclCompile.h was changed. These rules aren't needed when building
+# from scratch.
#---------------------------------------------------------------------
depend:
@@ -823,7 +867,7 @@ depend:
@echo Build tclsh first!
!else
set TCL_LIBRARY=$(TCL_LIBRARY)
- $(TCLSH) $(TCLTOOLSDIR)\mkdepend.tcl -vc32 -out:"$(OUT_DIR)\depend.mk" \
+ $(TCLSH) $(TCLTOOLSDIR:\=/)/mkdepend.tcl -vc32 -out:"$(OUT_DIR)\depend.mk" \
-passthru:"-DBUILD_tk $(TK_INCLUDES)" $(GENERICDIR),$$(GENERICDIR) \
$(WINDIR),$$(WINDIR) $(TTKDIR),$$(TTKDIR) $(XLIBDIR),$$(XLIBDIR) \
$(BITMAPDIR),$$(BITMAPDIR) @<<
@@ -831,7 +875,6 @@ $(TKOBJS)
<<
!endif
-
#---------------------------------------------------------------------
# Dependency rules
#---------------------------------------------------------------------
@@ -909,8 +952,13 @@ install-binaries:
!if !$(STATIC_BUILD)
@echo creating package index
@type << > $(OUT_DIR)\pkgIndex.tcl
-if {[package vcompare [package provide Tcl] $(TCL_PATCH_LEVEL)] != 0} { return }
-package ifneeded Tk $(TK_PATCH_LEVEL) [list load [file join $$dir .. .. bin $(TKLIBNAME)] Tk]
+if {[catch {package present Tcl $(TCL_PATCH_LEVEL)}]} { return }
+if {($$::tcl_platform(platform) eq "unix") && ([info exists ::env(DISPLAY)]
+ || ([info exists ::argv] && ("-display" in $$::argv)))} {
+ package ifneeded Tk $(TK_PATCH_LEVEL) [list load [file join $$dir .. .. bin libtk$(TK_DOTVERSION).dll] Tk]
+} else {
+ package ifneeded Tk $(TK_PATCH_LEVEL) [list load [file join $$dir .. .. bin $(TKLIBNAME)] Tk]
+}
<<
@$(CPY) $(OUT_DIR)\pkgIndex.tcl "$(SCRIPT_INSTALL_DIR)\"
!endif
@@ -972,6 +1020,8 @@ clean:
@echo Cleaning $(WINDIR)\versions.vc ...
@if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc
+realclean: hose
+
hose:
@echo Hosing $(OUT_DIR)\* ...
@if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)
diff --git a/win/nmakehlp.c b/win/nmakehlp.c
index 2868857..d0edcf0 100644
--- a/win/nmakehlp.c
+++ b/win/nmakehlp.c
@@ -47,7 +47,7 @@ static int CheckForLinkerFeature(const char *option);
static int IsIn(const char *string, const char *substring);
static int SubstituteFile(const char *substs, const char *filename);
static int QualifyPath(const char *path);
-static const char *GetVersionFromFile(const char *filename, const char *match);
+static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
static DWORD WINAPI ReadFromPipe(LPVOID args);
/* globals */
@@ -153,7 +153,7 @@ main(
&dwWritten, NULL);
return 0;
}
- printf("%s\n", GetVersionFromFile(argv[2], argv[3]));
+ printf("%s\n", GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0'));
return 0;
case 'Q':
if (argc != 3) {
@@ -479,7 +479,8 @@ IsIn(
static const char *
GetVersionFromFile(
const char *filename,
- const char *match)
+ const char *match,
+ int numdots)
{
size_t cbBuffer = 100;
static char szBuffer[100];
@@ -509,7 +510,8 @@ GetVersionFromFile(
*/
q = p;
- while (*q && (isalnum(*q) || *q == '.')) {
+ while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q)
+ && (!strchr("ab", q[-1])) || --numdots))) {
++q;
}
diff --git a/win/rules.vc b/win/rules.vc
index f09e2ea..adc3165 100644
--- a/win/rules.vc
+++ b/win/rules.vc
@@ -218,7 +218,7 @@ DEBUG = 0
SYMBOLS = 0
PROFILE = 0
PGO = 0
-MSVCRT = 0
+MSVCRT = 1
LOIMPACT = 0
TCL_USE_STATIC_PACKAGES = 0
USE_THREAD_ALLOC = 1
@@ -234,9 +234,13 @@ STATIC_BUILD = 0
!message *** Doing msvcrt
MSVCRT = 1
!else
+!if !$(STATIC_BUILD)
+MSVCRT = 1
+!else
MSVCRT = 0
!endif
-!if [nmakehlp -f $(OPTS) "staticpkg"]
+!endif
+!if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD)
!message *** Doing staticpkg
TCL_USE_STATIC_PACKAGES = 1
!else
@@ -245,6 +249,7 @@ TCL_USE_STATIC_PACKAGES = 0
!if [nmakehlp -f $(OPTS) "nothreads"]
!message *** Compile explicitly for non-threaded tcl
TCL_THREADS = 0
+USE_THREAD_ALLOC= 0
!else
TCL_THREADS = 1
USE_THREAD_ALLOC= 1
@@ -298,15 +303,6 @@ UNCHECKED = 0
!endif
!endif
-
-!if !$(STATIC_BUILD)
-# Make sure we don't build overly fat DLLs.
-MSVCRT = 1
-# We shouldn't statically put the extensions inside the shell when dynamic.
-TCL_USE_STATIC_PACKAGES = 0
-!endif
-
-
#----------------------------------------------------------
# Figure-out how to name our intermediate and output directories.
# We wouldn't want different builds to use the same .obj files
@@ -348,10 +344,8 @@ TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX
TMP_DIRFULL = $(TMP_DIRFULL:Static=)
SUFX = $(SUFX:s=)
EXT = dll
-!if $(MSVCRT)
TMP_DIRFULL = $(TMP_DIRFULL:X=)
SUFX = $(SUFX:x=)
-!endif
!else
TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)
EXT = lib
@@ -583,19 +577,16 @@ Failed to find tcl.h. The TCLDIR macro does not appear correct.
TCL_VERSION = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)
-!if $(TCL_VERSION) < 81
-TCL_DOES_STUBS = 0
-!else
-TCL_DOES_STUBS = 1
-!endif
-
!if $(TCLINSTALL)
TCLSH = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe"
-!if !exist($(TCLSH)) && $(TCL_THREADS)
-TCLSH = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe"
+!if !exist($(TCLSH))
+TCLSH = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX:x=).exe"
!endif
TCLSTUBLIB = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib"
TCLIMPLIB = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib"
+!if !exist($(TCLIMPLIB))
+TCLIMPLIB = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX:x=).lib"
+!endif
TCL_LIBRARY = $(_TCLDIR)\lib
TCLREGLIB = "$(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib"
TCLDDELIB = "$(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib"
@@ -604,11 +595,14 @@ TCLTOOLSDIR = \must\have\tcl\sources\to\build\this\target
TCL_INCLUDES = -I"$(_TCLDIR)\include"
!else
TCLSH = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe"
-!if !exist($(TCLSH)) && $(TCL_THREADS)
-TCLSH = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe"
+!if !exist($(TCLSH))
+TCLSH = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX:x=).exe"
!endif
TCLSTUBLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib"
TCLIMPLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib"
+!if !exist($(TCLIMPLIB))
+TCLIMPLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX:x=).lib"
+!endif
TCL_LIBRARY = $(_TCLDIR)\library
TCLREGLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib"
TCLDDELIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib"
@@ -681,13 +675,25 @@ TK_VERSION = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)
!if "$(PROJECT)" != "tk"
!if $(TKINSTALL)
WISH = "$(_TKDIR)\bin\wish$(TK_VERSION)$(SUFX).exe"
+!if !exist($(WISH))
+WISH = "$(_TKDIR)\bin\wish$(TK_VERSION)$(SUFX:x=).exe"
+!endif
TKSTUBLIB = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib"
TKIMPLIB = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib"
+!if !exist($(TKIMPLIB))
+TKIMPLIB = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX:x=).lib"
+!endif
TK_INCLUDES = -I"$(_TKDIR)\include"
!else
WISH = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)$(SUFX).exe"
+!if !exist($(WISH))
+WISH = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)$(SUFX:x=).exe"
+!endif
TKSTUBLIB = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib"
TKIMPLIB = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib"
+!if !exist($(TKIMPLIB))
+TKIMPLIB = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX:x=).lib"
+!endif
TK_INCLUDES = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"
!endif
!endif
diff --git a/xlib/rgb.txt b/xlib/rgb.txt
index 67b979e..7a4f983 100644
--- a/xlib/rgb.txt
+++ b/xlib/rgb.txt
@@ -1,3 +1,18 @@
+! Changes compared to Xorg:rgb.txt
+! name old value new value
+! aqua - 0 255 255
+! crimson - 220 20 60
+! fuchsia - 255 0 255
+! gray 190 190 190 128 128 128
+! green 0 255 0 0 128 0
+! grey 190 190 190 128 128 128
+! indigo - 75 0 130
+! lime - 0 255 0
+! maroon 176 48 96 128 0 0
+! olive - 128 128 0
+! purple 160 32 240 128 0 128
+! silver - 192 192 192
+! teal - 0 128 128
!
240 248 255 aliceBlue
250 235 215 antiqueWhite
@@ -5,6 +20,7 @@
238 223 204 antiqueWhite2
205 192 176 antiqueWhite3
139 131 120 antiqueWhite4
+ 0 255 255 aqua
127 255 212 aquamarine
127 255 212 aquamarine1
118 238 198 aquamarine2
@@ -65,6 +81,7 @@
238 232 205 cornsilk2
205 200 177 cornsilk3
139 136 120 cornsilk4
+220 20 60 crimson
0 255 255 cyan
0 255 255 cyan1
0 238 238 cyan2
@@ -137,6 +154,7 @@
139 26 26 firebrick4
255 250 240 floralWhite
34 139 34 forestGreen
+255 0 255 fuchsia
220 220 220 gainsboro
248 248 255 ghostWhite
255 215 0 gold
@@ -149,7 +167,7 @@
238 180 34 goldenrod2
205 155 29 goldenrod3
139 105 20 goldenrod4
-190 190 190 gray
+128 128 128 gray
3 3 3 gray1
5 5 5 gray2
8 8 8 gray3
@@ -251,13 +269,13 @@
252 252 252 gray99
255 255 255 gray100
0 0 0 gray0
- 0 255 0 green
+ 0 128 0 green
0 255 0 green1
0 238 0 green2
0 205 0 green3
0 139 0 green4
173 255 47 greenYellow
-190 190 190 grey
+128 128 128 grey
3 3 3 grey1
5 5 5 grey2
8 8 8 grey3
@@ -374,6 +392,7 @@
238 99 99 indianRed2
205 85 85 indianRed3
139 58 58 indianRed4
+ 75 0 130 indigo
255 255 240 ivory
255 255 240 ivory1
238 238 224 ivory2
@@ -445,6 +464,7 @@
238 238 209 lightYellow2
205 205 180 lightYellow3
139 139 122 lightYellow4
+ 0 255 0 lime
50 205 50 limeGreen
250 240 230 linen
255 0 255 magenta
@@ -452,7 +472,7 @@
238 0 238 magenta2
205 0 205 magenta3
139 0 139 magenta4
-176 48 96 maroon
+128 0 0 maroon
255 52 179 maroon1
238 48 167 maroon2
205 41 144 maroon3
@@ -490,6 +510,7 @@
0 0 128 navy
0 0 128 navyBlue
253 245 230 oldLace
+128 128 0 olive
107 142 35 oliveDrab
192 255 62 oliveDrab1
179 238 58 oliveDrab2
@@ -544,7 +565,7 @@
205 150 205 plum3
139 102 139 plum4
176 224 230 powderBlue
-160 32 240 purple
+128 0 128 purple
155 48 255 purple1
145 44 238 purple2
125 38 205 purple3
@@ -586,6 +607,7 @@
238 121 66 sienna2
205 104 57 sienna3
139 71 38 sienna4
+192 192 192 silver
135 206 235 skyBlue
135 206 255 skyBlue1
126 192 238 skyBlue2
@@ -622,6 +644,7 @@
238 154 73 tan2
205 133 63 tan3
139 90 43 tan4
+ 0 128 128 teal
216 191 216 thistle
255 225 255 thistle1
238 210 238 thistle2
diff --git a/xlib/xcolors.c b/xlib/xcolors.c
index 497f251..8942d14 100644
--- a/xlib/xcolors.c
+++ b/xlib/xcolors.c
@@ -17,8 +17,8 @@
* Index array. For each of the characters 'a'-'y', this table gives the first color
* starting with that character in the xColors table.
*/
-static const unsigned char az[] = {0, 4, 12, 19, 43, 44, 47, 57, 59, 61,
- 62, 63, 86, 101, 104, 109, 120, 121, 124, 137, 141, 142, 144, 147, 148, 150};
+static const unsigned char az[] = {0, 5, 13, 21, 45, 46, 50, 60, 62, 65, 66,
+ 67, 91, 106, 109, 115, 126, 127, 130, 144, 149, 150, 152, 155, 156, 158};
/*
* Define an array that defines the mapping from color names to RGB values.
@@ -43,6 +43,7 @@ static const elem xColors[] = {
/* Colors starting with 'a' */
"liceBlue\0 \360\370\377",
"ntiqueWhite\0 \213\203\170\315\300\260\356\337\314\377\357\333\372\353\327\4",
+ "qua\0 \000\377\377",
"quamarine\0 \105\213\164\146\315\252\166\356\306\177\377\324\177\377\324\4",
"zure\0 \203\213\213\301\315\315\340\356\356\360\377\377\360\377\377\4",
/* Colors starting with 'b' */
@@ -61,6 +62,7 @@ static const elem xColors[] = {
"oral\0 \213\076\057\315\133\105\356\152\120\377\162\126\377\177\120\4",
"ornflowerBlue\0 \144\225\355",
"ornsilk\0 \213\210\170\315\310\261\356\350\315\377\370\334\377\370\334\4",
+ "rimson\0 \334\024\074",
"yan\0 \000\213\213\000\315\315\000\356\356\000\377\377\000\377\377\4",
/* Colors starting with 'd' */
"arkBlue\0 \000\000\213",
@@ -93,24 +95,26 @@ static const elem xColors[] = {
"irebrick\0 \213\032\032\315\046\046\356\054\054\377\060\060\262\042\042\4",
"loralWhite\0 \377\372\360",
"orestGreen\0 \042\213\042",
+ "uchsia\0 \377\000\377",
/* Colors starting with 'g' */
"ainsboro\0 \334\334\334",
"hostWhite\0 \370\370\377",
"old\0 \213\165\000\315\255\000\356\311\000\377\327\000\377\327\000\4",
"oldenrod\0 \213\151\024\315\233\035\356\264\042\377\301\045\332\245\040\4",
"ray\0\024\024\024\022\022\022\017\017\017\015\015\015\012\012\012"
- "\010\010\010\005\005\005\003\003\003\276\276\276\10",
+ "\010\010\010\005\005\005\003\003\003\200\200\200\10",
"ray0\0 \000\000\000",
- "reen\0 \000\213\000\000\315\000\000\356\000\000\377\000\000\377\000\4",
+ "reen\0 \000\213\000\000\315\000\000\356\000\000\377\000\000\200\000\4",
"reenYellow\0 \255\377\057",
"rey\0\024\024\024\022\022\022\017\017\017\015\015\015\012\012\012"
- "\010\010\010\005\005\005\003\003\003\276\276\276\10",
+ "\010\010\010\005\005\005\003\003\003\200\200\200\10",
"rey0\0 \000\000\000",
/* Colors starting with 'h' */
"oneydew\0 \203\213\203\301\315\301\340\356\340\360\377\360\360\377\360\4",
"otPink\0 \213\072\142\315\140\220\356\152\247\377\156\264\377\151\264\4",
/* Colors starting with 'i' */
"ndianRed\0 \213\072\072\315\125\125\356\143\143\377\152\152\315\134\134\4",
+ "ndigo\0 \113\000\202",
"vory\0 \213\213\203\315\315\301\356\356\340\377\377\360\377\377\360\4",
/* Colors starting with 'j' */
"\377" /* placeholder */,
@@ -138,11 +142,12 @@ static const elem xColors[] = {
"ightSlateGrey\0 \167\210\231",
"ightSteelBlue\0 \156\173\213\242\265\315\274\322\356\312\341\377\260\304\336\4",
"ightYellow\0 \213\213\172\315\315\264\356\356\321\377\377\340\377\377\340\4",
+ "ime\0 \000\377\000",
"imeGreen\0 \062\315\062",
"inen\0 \372\360\346",
/* Colors starting with 'm' */
"agenta\0 \213\000\213\315\000\315\356\000\356\377\000\377\377\000\377\4",
- "aroon\0 \213\034\142\315\051\220\356\060\247\377\064\263\260\060\140\4",
+ "aroon\0 \213\034\142\315\051\220\356\060\247\377\064\263\200\000\000\4",
"ediumAquamarine\0 \146\315\252",
"ediumBlue\0 \000\000\315",
"ediumOrchid\0 \172\067\213\264\122\315\321\137\356\340\146\377\272\125\323\4",
@@ -162,6 +167,7 @@ static const elem xColors[] = {
"avyBlue\0 \000\000\200",
/* Colors starting with 'o' */
"ldLace\0 \375\365\346",
+ "live\0 \200\200\000",
"liveDrab\0 \151\213\042\232\315\062\263\356\072\300\377\076\153\216\043\4",
"range\0 \213\132\000\315\205\000\356\232\000\377\245\000\377\245\000\4",
"rangeRed\0 \213\045\000\315\067\000\356\100\000\377\105\000\377\105\000\4",
@@ -177,7 +183,7 @@ static const elem xColors[] = {
"ink\0 \213\143\154\315\221\236\356\251\270\377\265\305\377\300\313\4",
"lum\0 \213\146\213\315\226\315\356\256\356\377\273\377\335\240\335\4",
"owderBlue\0 \260\340\346",
- "urple\0 \125\032\213\175\046\315\221\054\356\233\060\377\240\040\360\4",
+ "urple\0 \125\032\213\175\046\315\221\054\356\233\060\377\200\000\200\4",
/* Colors starting with 'q' */
"\377" /* placeholder */,
/* Colors starting with 'r' */
@@ -191,6 +197,7 @@ static const elem xColors[] = {
"eaGreen\0 \056\213\127\103\315\200\116\356\224\124\377\237\056\213\127\4",
"eashell\0 \213\206\202\315\305\277\356\345\336\377\365\356\377\365\356\4",
"ienna\0 \213\107\046\315\150\071\356\171\102\377\202\107\240\122\055\4",
+ "ilver\0 \300\300\300",
"kyBlue\0 \112\160\213\154\246\315\176\300\356\207\316\377\207\316\353\4",
"lateBlue\0 \107\074\213\151\131\315\172\147\356\203\157\377\152\132\315\4",
"lateGray\0 \154\173\213\237\266\315\271\323\356\306\342\377\160\200\220\4",
@@ -200,6 +207,7 @@ static const elem xColors[] = {
"teelBlue\0 \066\144\213\117\224\315\134\254\356\143\270\377\106\202\264\4",
/* Colors starting with 't' */
"an\0 \213\132\053\315\205\077\356\232\111\377\245\117\322\264\214\4",
+ "eal\0 \000\200\200",
"histle\0 \213\173\213\315\265\315\356\322\356\377\341\377\330\277\330\4",
"omato\0 \213\066\046\315\117\071\356\134\102\377\143\107\377\143\107\4",
"urquoise\0 \000\206\213\000\305\315\000\345\356\000\365\377\100\340\320\4",