Blob Blame History Raw
diff -ur blt2.4z/library/Makefile.vc blt2.4z-8.5.2/library/Makefile.vc
--- blt2.4z/library/Makefile.vc	2002-08-21 08:20:51.000000000 +0200
+++ blt2.4z-8.5.2/library/Makefile.vc	2008-04-15 17:31:26.000000000 +0200
@@ -6,7 +6,6 @@
 include ../win/makedefs
 
 version =	$(BLT_MAJOR_VERSION).$(BLT_MINOR_VERSION)
-pkgdir =	$(libdir)/tcl$(v1)/blt$(version)
 srcdir =	.
 
 cursors = 	treeview.cur
@@ -30,8 +29,7 @@
 		tclIndex
 
 instdirs =	$(prefix) $(exec_prefix) $(libdir) \
-		$(scriptdir) $(scriptdir)/dd_protocols $(libdir)/tcl$(v1) \
-		$(pkgdir)
+		$(scriptdir) $(scriptdir)/dd_protocols $(libdir)/tcl$(v1)
 
 all: build-pkgindex
 
@@ -62,7 +60,6 @@
 
 install-pkgindex: pkgIndex.tcl
 	$(INSTALL_DATA) pkgIndex.tcl $(scriptdir)
-	$(INSTALL_DATA) pkgIndex.tcl $(pkgdir)
 
 clean:
 	$(RM) pkgIndex.tcl
diff -ur blt2.4z/Makefile.in blt2.4z-8.5.2/Makefile.in
--- blt2.4z/Makefile.in	2002-02-19 01:11:43.000000000 +0100
+++ blt2.4z-8.5.2/Makefile.in	2008-04-15 17:31:26.000000000 +0200
@@ -72,4 +72,8 @@
 	config.status config.cache config.log Makefile 
 
 distclean: clean
+	(cd src; $(MAKE) distclean)
+	(cd library; $(MAKE) distclean)
+	(cd man; $(MAKE) distclean)
+	(cd demos; $(MAKE) distclean)
 	$(RM) $(GENERATED_FILES)
diff -ur blt2.4z/src/bltBgexec.c blt2.4z-8.5.2/src/bltBgexec.c
--- blt2.4z/src/bltBgexec.c	2002-09-19 00:30:50.000000000 +0200
+++ blt2.4z-8.5.2/src/bltBgexec.c	2008-04-15 17:31:26.000000000 +0200
@@ -58,7 +58,7 @@
 typedef int Process;
 #endif
 
-#if (TCL_VERSION_NUMBER <  _VERSION(8,1,0)) 
+#if (TCL_VERSION_NUMBER <  _VERSION(8,1,0))
 typedef void *Tcl_Encoding;	/* Make up dummy type for encoding.  */
 #endif
 
@@ -276,7 +276,7 @@
     int objc;			/*  */
 #endif
 
-    int flags;			
+    int flags;
 
     Tcl_File file;		/* Used for backward compatability
 				 * with Tcl 7.5 */
@@ -370,35 +370,35 @@
     StringToSignal, (Blt_SwitchFreeProc *)NULL, (ClientData)0,
 };
 
-static Blt_SwitchSpec switchSpecs[] = 
+static Blt_SwitchSpec switchSpecs[] =
 {
-    {BLT_SWITCH_STRING, "-decodeoutput", 
+    {BLT_SWITCH_STRING, "-decodeoutput",
          Blt_Offset(BackgroundInfo, outputEncodingName), 0},
-    {BLT_SWITCH_STRING, "-decodeerror", 
+    {BLT_SWITCH_STRING, "-decodeerror",
          Blt_Offset(BackgroundInfo, errorEncodingName), 0},
-    {BLT_SWITCH_BOOLEAN, "-echo", 
+    {BLT_SWITCH_BOOLEAN, "-echo",
          Blt_Offset(BackgroundInfo, sink2.echo), 0},
-    {BLT_SWITCH_STRING, "-error", 
+    {BLT_SWITCH_STRING, "-error",
          Blt_Offset(BackgroundInfo, sink2.doneVar), 0},
-    {BLT_SWITCH_STRING, "-update", 
+    {BLT_SWITCH_STRING, "-update",
 	Blt_Offset(BackgroundInfo, sink1.updateVar), 0},
-    {BLT_SWITCH_STRING, "-output", 
+    {BLT_SWITCH_STRING, "-output",
         Blt_Offset(BackgroundInfo, sink1.doneVar), 0},
-    {BLT_SWITCH_STRING, "-lasterror", 
+    {BLT_SWITCH_STRING, "-lasterror",
 	Blt_Offset(BackgroundInfo, sink2.updateVar), 0},
-    {BLT_SWITCH_STRING, "-lastoutput", 
+    {BLT_SWITCH_STRING, "-lastoutput",
 	Blt_Offset(BackgroundInfo, sink1.updateVar), 0},
-    {BLT_SWITCH_LIST, "-onerror", 
+    {BLT_SWITCH_LIST, "-onerror",
 	Blt_Offset(BackgroundInfo, sink2.updateCmd), 0},
-    {BLT_SWITCH_LIST, "-onoutput", 
+    {BLT_SWITCH_LIST, "-onoutput",
 	Blt_Offset(BackgroundInfo, sink1.updateCmd), 0},
-    {BLT_SWITCH_BOOLEAN, "-keepnewline", 
+    {BLT_SWITCH_BOOLEAN, "-keepnewline",
 	Blt_Offset(BackgroundInfo, keepNewline), 0},
-    {BLT_SWITCH_BOOLEAN, "-check", 
+    {BLT_SWITCH_INT, "-check",
 	Blt_Offset(BackgroundInfo, interval), 0},
-    {BLT_SWITCH_CUSTOM, "-killsignal", 
+    {BLT_SWITCH_CUSTOM, "-killsignal",
 	Blt_Offset(BackgroundInfo, signalNum), 0, &killSignalSwitch},
-    {BLT_SWITCH_BOOLEAN, "-linebuffered", 
+    {BLT_SWITCH_BOOLEAN, "-linebuffered",
 	Blt_Offset(BackgroundInfo, lineBuffered), 0},
     {BLT_SWITCH_END, NULL, 0, 0}
 };
@@ -517,7 +517,7 @@
  *	Returns the next block of data since the last time this
  *	routine was called.
  *
- *---------------------------------------------------------------------- 
+ *----------------------------------------------------------------------
  */
 static unsigned char *
 NextBlock(sinkPtr, lengthPtr)
@@ -531,7 +531,7 @@
     length = sinkPtr->mark - sinkPtr->lastMark;
     sinkPtr->lastMark = sinkPtr->mark;
     if (length > 0) {
-	if ((!(sinkPtr->flags & SINK_KEEP_NL)) && 
+	if ((!(sinkPtr->flags & SINK_KEEP_NL)) &&
 	    (string[length - 1] == '\n')) {
 	    length--;
 	}
@@ -565,7 +565,7 @@
 	for (i = 0; i < newBytes; i++) {
 	    if (string[i] == '\n') {
 		int length;
-		
+
 		length = i + 1;
 		sinkPtr->lastMark += length;
 		if (!(sinkPtr->flags & SINK_KEEP_NL)) {
@@ -594,13 +594,13 @@
  *	keeping all the data collected from the channel (no -output
  *	flag and the process is detached).
  *
- *---------------------------------------------------------------------- 
+ *----------------------------------------------------------------------
  */
 static void
 ResetSink(sinkPtr)
     Sink *sinkPtr;
-{ 
-    if ((sinkPtr->flags & SINK_BUFFERED) && 
+{
+    if ((sinkPtr->flags & SINK_BUFFERED) &&
 	(sinkPtr->fill > sinkPtr->lastMark)) {
 	register size_t i, j;
 
@@ -654,8 +654,8 @@
     }
     if (bgPtr->lineBuffered) {
 	sinkPtr->flags |= SINK_BUFFERED;
-    }	
-    if ((sinkPtr->updateCmd != NULL) || 
+    }
+    if ((sinkPtr->updateCmd != NULL) ||
 	(sinkPtr->updateVar != NULL) ||
 	(sinkPtr->echo)) {
 	sinkPtr->flags |= SINK_NOTIFY;
@@ -843,7 +843,7 @@
 #define IsOpenSink(sinkPtr)  ((sinkPtr)->fd != -1)
 
 static void
-CloseSink(interp, sinkPtr) 
+CloseSink(interp, sinkPtr)
     Tcl_Interp *interp;
     Sink *sinkPtr;
 {
@@ -864,19 +864,19 @@
 	if (sinkPtr->doneVar != NULL) {
 	    unsigned char *data;
 	    size_t length;
-	    /* 
+	    /*
 	     * If data is to be collected, set the "done" variable
-	     * with the contents of the buffer.  
+	     * with the contents of the buffer.
 	     */
 	    GetSinkData(sinkPtr, &data, &length);
-#if (TCL_VERSION_NUMBER <  _VERSION(8,1,0)) 
+#if (TCL_VERSION_NUMBER <  _VERSION(8,1,0))
 	    data[length] = '\0';
-	    if (Tcl_SetVar(interp, sinkPtr->doneVar, data, 
+	    if (Tcl_SetVar(interp, sinkPtr->doneVar, data,
 			   TCL_GLOBAL_ONLY) == NULL) {
 		Tcl_BackgroundError(interp);
 	    }
 #else
-	    if (Tcl_SetVar2Ex(interp, sinkPtr->doneVar, NULL, 
+	    if (Tcl_SetVar2Ex(interp, sinkPtr->doneVar, NULL,
 			      Tcl_NewByteArrayObj(data, length),
 			      (TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) == NULL) {
 		Tcl_BackgroundError(interp);
@@ -917,9 +917,9 @@
 #endif
     if (sinkPtr->encoding == ENCODING_BINARY) { /* binary */
 	/* No translation needed. */
-	sinkPtr->mark = sinkPtr->fill; 
+	sinkPtr->mark = sinkPtr->fill;
     } else if (sinkPtr->encoding == ENCODING_ASCII) { /* ascii */
-#if (TCL_VERSION_NUMBER <  _VERSION(8,1,0)) 
+#if (TCL_VERSION_NUMBER <  _VERSION(8,1,0))
 	/* Convert NUL bytes to question marks. */
 	srcPtr = sinkPtr->byteArr + sinkPtr->mark;
 	endPtr = sinkPtr->byteArr + sinkPtr->fill;
@@ -932,7 +932,7 @@
 #endif /* < 8.1.0 */
 	/* One-to-one translation. mark == fill. */
 	sinkPtr->mark = sinkPtr->fill;
-#if (TCL_VERSION_NUMBER >= _VERSION(8,1,0)) 
+#if (TCL_VERSION_NUMBER >= _VERSION(8,1,0))
     } else { /* unicode. */
 	int nSrcCooked, nCooked;
 	int result;
@@ -941,41 +941,41 @@
 	unsigned char *destPtr;
 	unsigned char *raw, *cooked;
 	unsigned char leftover[100];
-	
+
 	raw = sinkPtr->byteArr + sinkPtr->mark;
 	nRaw = sinkPtr->fill - sinkPtr->mark;
 	/* Ideally, the cooked buffer size should be smaller */
 	cookedSize = nRaw * TCL_UTF_MAX + 1;
 	cooked = Blt_Malloc(cookedSize);
-	result = Tcl_ExternalToUtf(interp, sinkPtr->encoding, 
-			(char *)raw, nRaw, 0, NULL, (char *)cooked, 
+	result = Tcl_ExternalToUtf(interp, sinkPtr->encoding,
+			(char *)raw, nRaw, 0, NULL, (char *)cooked,
 			cookedSize, &nSrcCooked, &nCooked, NULL);
 	nLeftOver = 0;
 	if (result == TCL_CONVERT_MULTIBYTE) {
-	    /* 
+	    /*
 	     * Last multibyte sequence wasn't completed.  Save the
-	     * extra characters in a temporary buffer.  
+	     * extra characters in a temporary buffer.
 	     */
 	    nLeftOver = (nRaw - nSrcCooked);
-	    srcPtr = sinkPtr->byteArr + (sinkPtr->mark + nSrcCooked); 
+	    srcPtr = sinkPtr->byteArr + (sinkPtr->mark + nSrcCooked);
 	    endPtr = srcPtr + nLeftOver;
 	    destPtr = leftover;
 	    while (srcPtr < endPtr) {
 		*destPtr++ = *srcPtr++;
 	    }
-	} 
+	}
 	/*
-	 * Create a bigger 
+	 * Create a bigger
 	 */
-						 
+
 	needed = nLeftOver + nCooked;
 	spaceLeft = sinkPtr->size - sinkPtr->mark;
 	if (spaceLeft >= needed) {
 	    spaceLeft = ExtendSinkBuffer(sinkPtr);
 	}
 	assert(spaceLeft > needed);
-	/* 
-	 * Replace the characters from the mark with the translated 
+	/*
+	 * Replace the characters from the mark with the translated
 	 * characters.
 	 */
 	srcPtr = cooked;
@@ -986,7 +986,7 @@
 	}
 	/* Add the number of newly translated characters to the mark */
 	sinkPtr->mark += nCooked;
-	
+
 	srcPtr = leftover;
 	endPtr = leftover + nLeftOver;
 	while (srcPtr < endPtr) {
@@ -996,7 +996,7 @@
 #endif /* >= 8.1.0  */
     }
 #ifdef WIN32
-    /* 
+    /*
      * Translate CRLF character sequences to LF characters.  We have to
      * do this after converting the string to UTF from UNICODE.
      */
@@ -1072,7 +1072,7 @@
 #endif
     timeout = (flags & WNOHANG) ? 0 : INFINITE;
     status = WaitForSingleObject(child.hProcess, timeout);
-				 
+
 #if WINDEBUG
     PurifyPrintf("WAITPID: wait status is %d\n", status);
 #endif
@@ -1147,9 +1147,9 @@
 
     EnumWindows(EnumWindowsProc, (LPARAM)&proc);
 
-    /* 
+    /*
      * Wait on the handle. If it signals, great. If it times out,
-     * then call TerminateProcess on it.  
+     * then call TerminateProcess on it.
      *
      * On Windows 95/98 this also has the added benefit of stopping
      * KERNEL32.dll from dumping.  The 2 second number is arbitrary.
@@ -1171,7 +1171,7 @@
 
 #endif /* WIN32 */
 
-#if (TCL_VERSION_NUMBER < _VERSION(8,1,0)) 
+#if (TCL_VERSION_NUMBER < _VERSION(8,1,0))
 
 static void
 NotifyOnUpdate(interp, sinkPtr, data, nBytes)
@@ -1192,7 +1192,7 @@
     data[nBytes] = '\0';
     if (sinkPtr->echo) {
 	Tcl_Channel channel;
-	
+
 	channel = Tcl_GetStdChannel(TCL_STDERR);
 	if (channel == NULL) {
 	    Tcl_AppendResult(interp, "can't get stderr channel", (char *)NULL);
@@ -1235,7 +1235,7 @@
     data[nBytes] = save;
 }
 
-#else 
+#else
 
 static void
 NotifyOnUpdate(interp, sinkPtr, data, nBytes)
@@ -1254,7 +1254,7 @@
     }
     if (sinkPtr->echo) {
 	Tcl_Channel channel;
-	
+
 	channel = Tcl_GetStdChannel(TCL_STDERR);
 	if (channel == NULL) {
 	    Tcl_AppendResult(interp, "can't get stderr channel", (char *)NULL);
@@ -1285,7 +1285,7 @@
     if (sinkPtr->updateVar != NULL) {
 	Tcl_Obj *result;
 
-	result = Tcl_SetVar2Ex(interp, sinkPtr->updateVar, NULL, objPtr, 
+	result = Tcl_SetVar2Ex(interp, sinkPtr->updateVar, NULL, objPtr,
 	       (TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG));
 	if (result == NULL) {
 	    Tcl_BackgroundError(interp);
@@ -1306,7 +1306,7 @@
     }
     ReadBytes(sinkPtr);
     CookSink(bgPtr->interp, sinkPtr);
-    if ((sinkPtr->mark > sinkPtr->lastMark) && 
+    if ((sinkPtr->mark > sinkPtr->lastMark) &&
 	(sinkPtr->flags & SINK_NOTIFY)) {
 	unsigned char *data;
 	int length;
@@ -1390,7 +1390,7 @@
 {
 
     if (bgPtr->traced) {
-	Tcl_UntraceVar(bgPtr->interp, bgPtr->statVar, TRACE_FLAGS, 
+	Tcl_UntraceVar(bgPtr->interp, bgPtr->statVar, TRACE_FLAGS,
 		VariableProc, bgPtr);
 	bgPtr->traced = FALSE;
     }
@@ -1558,7 +1558,7 @@
     register int i;
     unsigned int lastPid;
     int pid;
-    enum PROCESS_STATUS { 
+    enum PROCESS_STATUS {
 	PROCESS_EXITED, PROCESS_STOPPED, PROCESS_KILLED, PROCESS_UNKNOWN
     } pcode;
     WAIT_STATUS_TYPE waitStatus, lastStatus;
@@ -1595,7 +1595,7 @@
     }
     bgPtr->nProcs = nLeft;
 
-    if ((nLeft > 0) || (IsOpenSink(&bgPtr->sink1)) || 
+    if ((nLeft > 0) || (IsOpenSink(&bgPtr->sink1)) ||
 	(IsOpenSink(&bgPtr->sink2))) {
 	/* Keep polling for the status of the children that are left */
 	bgPtr->timerToken = Tcl_CreateTimerHandler(bgPtr->interval, TimerProc,
@@ -1641,11 +1641,11 @@
 	Tcl_DStringAppendElement(&dString, "child completed normally");
 	break;
     case PROCESS_KILLED:
-	Tcl_DStringAppendElement(&dString, 
+	Tcl_DStringAppendElement(&dString,
 				Tcl_SignalMsg((int)(WTERMSIG(lastStatus))));
 	break;
     case PROCESS_STOPPED:
-	Tcl_DStringAppendElement(&dString, 
+	Tcl_DStringAppendElement(&dString,
 		 Tcl_SignalMsg((int)(WSTOPSIG(lastStatus))));
 	break;
     case PROCESS_UNKNOWN:
@@ -1658,8 +1658,8 @@
 	*bgPtr->exitCodePtr = code;
     }
     DisableTriggers(bgPtr);
-    result = Tcl_SetVar(bgPtr->interp, bgPtr->statVar, 
-	Tcl_DStringValue(&dString), TCL_GLOBAL_ONLY);
+    result = Tcl_SetVar(bgPtr->interp, bgPtr->statVar,
+	Tcl_DStringValue(&dString), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG);
     Tcl_DStringFree(&dString);
     if (result == NULL) {
 	Tcl_BackgroundError(bgPtr->interp);
@@ -1712,7 +1712,7 @@
      * timer handler to periodically poll for the exit status of each
      * process.  Initially check at the next idle interval.
      */
-    if (!IsOpenSink(&bgPtr->sink2)) {
+    if (!IsOpenSink(&bgPtr->sink2) && bgPtr->timerToken == 0) {
 	bgPtr->timerToken = Tcl_CreateTimerHandler(0, TimerProc, clientData);
     }
 }
@@ -1760,7 +1760,7 @@
      * timer handler to periodically poll for the exit status of each
      * process.  Initially check at the next idle interval.
      */
-    if (!IsOpenSink(&bgPtr->sink1)) {
+    if (!IsOpenSink(&bgPtr->sink1) && bgPtr->timerToken == 0) {
 	bgPtr->timerToken = Tcl_CreateTimerHandler(0, TimerProc, clientData);
     }
 }
@@ -1827,7 +1827,7 @@
     /* Try to clean up any detached processes */
     Tcl_ReapDetachedProcs();
 
-    i = Blt_ProcessSwitches(interp, switchSpecs, argc - 2, argv + 2, 
+    i = Blt_ProcessSwitches(interp, switchSpecs, argc - 2, argv + 2,
 	(char *)bgPtr, BLT_SWITCH_ARGV_PARTIAL);
     if (i < 0) {
 	FreeBackgroundInfo(bgPtr);
@@ -1853,7 +1853,7 @@
 	if (strcmp(bgPtr->outputEncodingName, "binary") == 0) {
 	    encoding = ENCODING_BINARY;
 	} else {
-#if (TCL_VERSION_NUMBER >= _VERSION(8,1,0)) 
+#if (TCL_VERSION_NUMBER >= _VERSION(8,1,0))
 	    encoding = Tcl_GetEncoding(interp, bgPtr->outputEncodingName);
 	    if (encoding == NULL) {
 		goto error;
@@ -1866,7 +1866,7 @@
 	if (strcmp(bgPtr->errorEncodingName, "binary") == 0) {
 	    encoding = ENCODING_BINARY;
 	} else {
-#if (TCL_VERSION_NUMBER >= _VERSION(8,1,0)) 
+#if (TCL_VERSION_NUMBER >= _VERSION(8,1,0))
 	    encoding = Tcl_GetEncoding(interp, bgPtr->errorEncodingName);
 	    if (encoding == NULL) {
 		goto error;
@@ -1878,18 +1878,18 @@
 
     outFdPtr = errFdPtr = (int *)NULL;
 #ifdef WIN32
-    if ((!bgPtr->detached) || 
-	(bgPtr->sink1.doneVar != NULL) || 
-	(bgPtr->sink1.updateVar != NULL) || 
+    if ((!bgPtr->detached) ||
+	(bgPtr->sink1.doneVar != NULL) ||
+	(bgPtr->sink1.updateVar != NULL) ||
 	(bgPtr->sink1.updateCmd != NULL)) {
 	outFdPtr = &bgPtr->sink1.fd;
     }
 #else
     outFdPtr = &bgPtr->sink1.fd;
 #endif
-    if ((bgPtr->sink2.doneVar != NULL) || 
+    if ((bgPtr->sink2.doneVar != NULL) ||
 	(bgPtr->sink2.updateVar != NULL) ||
-	(bgPtr->sink2.updateCmd != NULL) || 
+	(bgPtr->sink2.updateCmd != NULL) ||
 	(bgPtr->sink2.echo)) {
 	errFdPtr = &bgPtr->sink2.fd;
     }
@@ -1900,6 +1900,7 @@
     }
     bgPtr->procArr = pidPtr;
     bgPtr->nProcs = nProcs;
+    bgPtr->timerToken = 0;
 
     if (bgPtr->sink1.fd == -1) {
 
@@ -1919,7 +1920,7 @@
 	(CreateSinkHandler(bgPtr, &bgPtr->sink2, StderrProc) != TCL_OK)) {
  	goto error;
     }
-    if (bgPtr->detached) {	
+    if (bgPtr->detached) {
 	char string[200];
 
 	/* If detached, return a list of the child process ids instead
@@ -1927,7 +1928,7 @@
 	for (i = 0; i < nProcs; i++) {
 #ifdef WIN32
 	    sprintf(string, "%u", (unsigned int)bgPtr->procArr[i].pid);
-#else 
+#else
 	    sprintf(string, "%d", bgPtr->procArr[i]);
 #endif
 	    Tcl_AppendElement(interp, string);
@@ -1950,7 +1951,7 @@
 
 	    /* Return the output of the pipeline. */
 	    GetSinkData(&bgPtr->sink1, &data, &length);
-#if (TCL_VERSION_NUMBER <  _VERSION(8,1,0)) 
+#if (TCL_VERSION_NUMBER <  _VERSION(8,1,0))
 	    data[length] = '\0';
 	    Tcl_SetResult(interp, data, TCL_VOLATILE);
 #else
diff -ur blt2.4z/src/bltGrMarker.c blt2.4z-8.5.2/src/bltGrMarker.c
--- blt2.4z/src/bltGrMarker.c	2002-09-19 00:30:51.000000000 +0200
+++ blt2.4z-8.5.2/src/bltGrMarker.c	2008-04-16 16:47:48.000000000 +0200
@@ -1061,10 +1061,12 @@
     Graph *graphPtr;
     Extents2D *extsPtr;
 {
+/*
     assert(extsPtr->right >= extsPtr->left);
     assert(extsPtr->bottom >= extsPtr->top);
     assert(graphPtr->right >= graphPtr->left);
     assert(graphPtr->bottom >= graphPtr->top);
+*/
 
     return (((double)graphPtr->right < extsPtr->left) ||
 	    ((double)graphPtr->bottom < extsPtr->top) ||
diff -ur blt2.4z/src/bltInit.c blt2.4z-8.5.2/src/bltInit.c
--- blt2.4z/src/bltInit.c	2002-09-10 07:12:33.000000000 +0200
+++ blt2.4z-8.5.2/src/bltInit.c	2008-04-15 17:31:25.000000000 +0200
@@ -28,7 +28,7 @@
 
 #include <bltInt.h>
 
-#define EXACT 1
+#define EXACT 0
 
 #ifndef BLT_LIBRARY
 #ifdef WIN32
diff -ur blt2.4z/src/bltNsUtil.h blt2.4z-8.5.2/src/bltNsUtil.h
--- blt2.4z/src/bltNsUtil.h	2002-07-18 08:35:32.000000000 +0200
+++ blt2.4z-8.5.2/src/bltNsUtil.h	2008-04-15 17:31:26.000000000 +0200
@@ -48,7 +48,7 @@
 
 
 EXTERN Tcl_Command Tcl_FindCommand _ANSI_ARGS_((Tcl_Interp *interp,
-	char *name, Tcl_Namespace *nsPtr, int flags));
+	CONST char *name, Tcl_Namespace *nsPtr, int flags));
 
 #define NS_SEARCH_NONE		(0)
 #define NS_SEARCH_CURRENT	(1<<0)
@@ -65,15 +65,15 @@
 
 #if (TCL_MAJOR_VERSION >= 8)
 EXTERN Tcl_Namespace *Tcl_CreateNamespace _ANSI_ARGS_((Tcl_Interp *interp,
-	char *name, ClientData clientData, Tcl_NamespaceDeleteProc *nsDelProc));
+	CONST char *name, ClientData clientData, Tcl_NamespaceDeleteProc *nsDelProc));
 
 EXTERN void Tcl_DeleteNamespace _ANSI_ARGS_((Tcl_Namespace *nsPtr));
 
 EXTERN Tcl_Namespace *Tcl_FindNamespace _ANSI_ARGS_((Tcl_Interp *interp,
-	char *name, Tcl_Namespace *context, int flags));
+	CONST char *name, Tcl_Namespace *context, int flags));
 
 EXTERN int Tcl_Export _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Namespace *nsPtr,
-	char *name, int resetFlag));
+	CONST char *name, int resetFlag));
 
 EXTERN Tcl_Var Tcl_FindNamespaceVar _ANSI_ARGS_((Tcl_Interp *interp, char *name,
 	Tcl_Namespace *contextNsPtr, int flags));
diff -ur blt2.4z/src/bltText.c blt2.4z-8.5.2/src/bltText.c
--- blt2.4z/src/bltText.c	2002-08-13 21:45:20.000000000 +0200
+++ blt2.4z-8.5.2/src/bltText.c	2008-04-16 16:37:41.000000000 +0200
@@ -671,6 +671,9 @@
     Pixmap bitmap;
     int active;
 
+    if (!textPtr)
+	return;
+    
     display = Tk_Display(tkwin);
     theta = FMOD(tsPtr->theta, (double)360.0);
     if (theta < 0.0) {
diff -ur blt2.4z/src/bltWindow.c blt2.4z-8.5.2/src/bltWindow.c
--- blt2.4z/src/bltWindow.c	2002-09-19 05:02:09.000000000 +0200
+++ blt2.4z-8.5.2/src/bltWindow.c	2008-04-16 16:38:15.000000000 +0200
@@ -89,9 +89,9 @@
 
 typedef struct TkDisplayStruct {
     Display *display;		/* Xlib's info about display. */
-    struct TkDisplayStruct *nextPtr; /* Next in list of all displays. */
-    char *name;			/* Name of display (with any screen
-				 * identifier removed).  Malloc-ed. */
+    struct TkDisplay *nextPtr;	/* Next in list of all displays. */
+    char *name;			/* Name of display (with any screen identifier
+				 * removed). Malloc-ed. */
     Time lastEventTime;		/* Time of last event received for this
 				 * display. */
 
@@ -107,8 +107,8 @@
      * Information used by tkAtom.c only:
      */
 
-    int atomInit;		/* 0 means stuff below hasn't been
-				 * initialized yet. */
+    int atomInit;		/* 0 means stuff below hasn't been initialized
+				 * yet. */
     Tcl_HashTable nameTable;	/* Maps from names to Atom's. */
     Tcl_HashTable atomTable;	/* Maps from Atom's back to names. */
 
@@ -116,27 +116,26 @@
      * Information used primarily by tkBind.c:
      */
 
-    int bindInfoStale;		/* Non-zero means the variables in this
-				 * part of the structure are potentially
-				 * incorrect and should be recomputed. */
+    int bindInfoStale;		/* Non-zero means the variables in this part
+				 * of the structure are potentially incorrect
+				 * and should be recomputed. */
     unsigned int modeModMask;	/* Has one bit set to indicate the modifier
-				 * corresponding to "mode shift".  If no
-				 * such modifier, than this is zero. */
+				 * corresponding to "mode shift". If no such
+				 * modifier, than this is zero. */
     unsigned int metaModMask;	/* Has one bit set to indicate the modifier
-				 * corresponding to the "Meta" key.  If no
-				 * such modifier, then this is zero. */
+				 * corresponding to the "Meta" key. If no such
+				 * modifier, then this is zero. */
     unsigned int altModMask;	/* Has one bit set to indicate the modifier
-				 * corresponding to the "Meta" key.  If no
-				 * such modifier, then this is zero. */
-    enum {
-	LU_IGNORE, LU_CAPS, LU_SHIFT
-    } lockUsage;		/* Indicates how to interpret lock modifier. */
+				 * corresponding to the "Meta" key. If no such
+				 * modifier, then this is zero. */
+    enum {LU_IGNORE, LU_CAPS, LU_SHIFT} lockUsage;
+				/* Indicates how to interpret lock
+				 * modifier. */
     int numModKeyCodes;		/* Number of entries in modKeyCodes array
 				 * below. */
-    KeyCode *modKeyCodes;	/* Pointer to an array giving keycodes for
-				 * all of the keys that have modifiers
-				 * associated with them.  Malloc'ed, but
-				 * may be NULL. */
+    KeyCode *modKeyCodes;	/* Pointer to an array giving keycodes for all
+				 * of the keys that have modifiers associated
+				 * with them. Malloc'ed, but may be NULL. */
 
     /*
      * Information used by tkBitmap.c only:
@@ -150,10 +149,10 @@
     Tcl_HashTable bitmapIdTable;/* Maps from bitmap id to the TkBitmap
 				 * structure for the bitmap. */
     Tcl_HashTable bitmapDataTable;
-				/* Used by Tk_GetBitmapFromData to map from
-				 * a collection of in-core data about a
-				 * bitmap to a reference giving an auto-
-				 * matically-generated name for the bitmap. */
+				/* Used by Tk_GetBitmapFromData to map from a
+				 * collection of in-core data about a bitmap
+				 * to a reference giving an automatically-
+				 * generated name for the bitmap. */
 
     /*
      * Information used by tkCanvas.c only:
@@ -167,9 +166,9 @@
      */
 
     int colorInit;		/* 0 means color module needs initializing. */
-    TkStressedCmap *stressPtr;	/* First in list of colormaps that have
-				 * filled up, so we have to pick an
-				 * approximate color. */
+    TkStressedCmap *stressPtr;	/* First in list of colormaps that have filled
+				 * up, so we have to pick an approximate
+				 * color. */
     Tcl_HashTable colorNameTable;
 				/* Maps from color name to TkColor structure
 				 * for that color. */
@@ -192,34 +191,33 @@
 				/* Maps from a cursor id to the TkCursor
 				 * structure for the cursor. */
     char cursorString[20];	/* Used to store a cursor id string. */
-    Font cursorFont;		/* Font to use for standard cursors.
-				 * None means font not loaded yet. */
+    Font cursorFont;		/* Font to use for standard cursors. None
+				 * means font not loaded yet. */
 
     /*
      * Information used by tkError.c only:
      */
 
     struct TkErrorHandler *errorPtr;
-				/* First in list of error handlers
-				 * for this display.  NULL means
-				 * no handlers exist at present. */
-    int deleteCount;		/* Counts # of handlers deleted since
-				 * last time inactive handlers were
-				 * garbage-collected.  When this number
-				 * gets big, handlers get cleaned up. */
+				/* First in list of error handlers for this
+				 * display. NULL means no handlers exist at
+				 * present. */
+    int deleteCount;		/* Counts # of handlers deleted since last
+				 * time inactive handlers were garbage-
+				 * collected. When this number gets big,
+				 * handlers get cleaned up. */
 
     /*
      * Used by tkEvent.c only:
      */
 
     struct TkWindowEvent *delayedMotionPtr;
-				/* Points to a malloc-ed motion event
-				 * whose processing has been delayed in
-				 * the hopes that another motion event
-				 * will come along right away and we can
-				 * merge the two of them together.  NULL
-				 * means that there is no delayed motion
-				 * event. */
+				/* Points to a malloc-ed motion event whose
+				 * processing has been delayed in the hopes
+				 * that another motion event will come along
+				 * right away and we can merge the two of them
+				 * together. NULL means that there is no
+				 * delayed motion event. */
 
     /*
      * Information used by tkFocus.c only:
@@ -229,26 +227,24 @@
 				 * statistics. */
     struct TkWindow *implicitWinPtr;
 				/* If the focus arrived at a toplevel window
-				 * implicitly via an Enter event (rather
-				 * than via a FocusIn event), this points
-				 * to the toplevel window.  Otherwise it is
-				 * NULL. */
+				 * implicitly via an Enter event (rather than
+				 * via a FocusIn event), this points to the
+				 * toplevel window. Otherwise it is NULL. */
     struct TkWindow *focusPtr;	/* Points to the window on this display that
-				 * should be receiving keyboard events.  When
+				 * should be receiving keyboard events. When
 				 * multiple applications on the display have
-				 * the focus, this will refer to the
-				 * innermost window in the innermost
-				 * application.  This information isn't used
-				 * under Unix or Windows, but it's needed on
-				 * the Macintosh. */
+				 * the focus, this will refer to the innermost
+				 * window in the innermost application. This
+				 * information isn't used under Unix or
+				 * Windows, but it's needed on the Mac. */
 
     /*
      * Information used by tkGC.c only:
      */
 
-    Tcl_HashTable gcValueTable;	/* Maps from a GC's values to a TkGC structure
+    Tcl_HashTable gcValueTable; /* Maps from a GC's values to a TkGC structure
 				 * describing a GC with those values. */
-    Tcl_HashTable gcIdTable;	/* Maps from a GC to a TkGC. */
+    Tcl_HashTable gcIdTable;    /* Maps from a GC to a TkGC. */
     int gcInit;			/* 0 means the tables below need
 				 * initializing. */
 
@@ -258,23 +254,22 @@
 
     Tcl_HashTable maintainHashTable;
 				/* Hash table that maps from a master's
-				 * Tk_Window token to a list of slaves
-				 * managed by that master. */
+				 * Tk_Window token to a list of slaves managed
+				 * by that master. */
     int geomInit;
 
     /*
      * Information used by tkGet.c only:
      */
 
-    Tcl_HashTable uidTable;	/* Stores all Tk_Uids used in a thread. */
+    Tcl_HashTable uidTable;	/* Stores all Tk_Uid used in a thread. */
     int uidInit;		/* 0 means uidTable needs initializing. */
 
     /*
      * Information used by tkGrab.c only:
      */
 
-    struct TkWindow *grabWinPtr;
-				/* Window in which the pointer is currently
+    struct TkWindow *grabWinPtr;/* Window in which the pointer is currently
 				 * grabbed, or NULL if none. */
     struct TkWindow *eventualGrabWinPtr;
 				/* Value that grabWinPtr will have once the
@@ -286,22 +281,22 @@
 				 * if no such press in effect. */
     struct TkWindow *serverWinPtr;
 				/* If no application contains the pointer then
-				 * this is NULL.  Otherwise it contains the
-				 * last window for which we've gotten an
-				 * Enter or Leave event from the server (i.e.
-				 * the last window known to have contained
-				 * the pointer).  Doesn't reflect events
-				 * that were synthesized in tkGrab.c. */
+				 * this is NULL. Otherwise it contains the
+				 * last window for which we've gotten an Enter
+				 * or Leave event from the server (i.e. the
+				 * last window known to have contained the
+				 * pointer). Doesn't reflect events that were
+				 * synthesized in tkGrab.c. */
     TkGrabEvent *firstGrabEventPtr;
 				/* First in list of enter/leave events
-				 * synthesized by grab code.  These events
-				 * must be processed in order before any other
-				 * events are processed.  NULL means no such
+				 * synthesized by grab code. These events must
+				 * be processed in order before any other
+				 * events are processed. NULL means no such
 				 * events. */
     TkGrabEvent *lastGrabEventPtr;
 				/* Last in list of synthesized events, or NULL
 				 * if list is empty. */
-    int grabFlags;		/* Miscellaneous flag values.  See definitions
+    int grabFlags;		/* Miscellaneous flag values. See definitions
 				 * in tkGrab.c. */
 
     /*
@@ -309,8 +304,8 @@
      */
 
     int gridInit;		/* 0 means table below needs initializing. */
-    Tcl_HashTable gridHashTable;/* Maps from Tk_Window tokens to
-				 * corresponding Grid structures. */
+    Tcl_HashTable gridHashTable;/* Maps from Tk_Window tokens to corresponding
+				 * Grid structures. */
 
     /*
      * Information used by tkImage.c only:
@@ -328,17 +323,14 @@
      * Information used by tkOption.c only.
      */
 
-
-
     /*
      * Information used by tkPack.c only.
      */
 
     int packInit;		/* 0 means table below needs initializing. */
     Tcl_HashTable packerHashTable;
-				/* Maps from Tk_Window tokens to
-				 * corresponding Packer structures. */
-
+				/* Maps from Tk_Window tokens to corresponding
+				 * Packer structures. */
 
     /*
      * Information used by tkPlace.c only.
@@ -354,14 +346,13 @@
      * Information used by tkSelect.c and tkClipboard.c only:
      */
 
-
     struct TkSelectionInfo *selectionInfoPtr;
-    /* First in list of selection information
-				 * records.  Each entry contains information
+				/* First in list of selection information
+				 * records. Each entry contains information
 				 * about the current owner of a particular
 				 * selection on this display. */
-    Atom multipleAtom;		/* Atom for MULTIPLE.  None means
-				 * selection stuff isn't initialized. */
+    Atom multipleAtom;		/* Atom for MULTIPLE. None means selection
+				 * stuff isn't initialized. */
     Atom incrAtom;		/* Atom for INCR. */
     Atom targetsAtom;		/* Atom for TARGETS. */
     Atom timestampAtom;		/* Atom for TIMESTAMP. */
@@ -370,9 +361,8 @@
     Atom applicationAtom;	/* Atom for TK_APPLICATION. */
     Atom windowAtom;		/* Atom for TK_WINDOW. */
     Atom clipboardAtom;		/* Atom for CLIPBOARD. */
-#if (TK_VERSION_NUMBER >= _VERSION(8,4,0))
-    Atom utf8Atom;
-#endif
+    Atom utf8Atom;		/* Atom for UTF8_STRING. */
+
     Tk_Window clipWindow;	/* Window used for clipboard ownership and to
 				 * retrieve selections between processes. NULL
 				 * means clipboard info hasn't been
@@ -383,7 +373,7 @@
 				/* Last application that owned clipboard. */
     struct TkClipboardTarget *clipTargetPtr;
 				/* First in list of clipboard type information
-				 * records.  Each entry contains information
+				 * records. Each entry contains information
 				 * about the buffers for a given selection
 				 * target. */
 
@@ -391,13 +381,13 @@
      * Information used by tkSend.c only:
      */
 
-    Tk_Window commTkwin;	/* Window used for communication
-				 * between interpreters during "send"
-				 * commands.  NULL means send info hasn't
-				 * been initialized yet. */
+    Tk_Window commTkwin;	/* Window used for communication between
+				 * interpreters during "send" commands. NULL
+				 * means send info hasn't been initialized
+				 * yet. */
     Atom commProperty;		/* X's name for comm property. */
-    Atom registryProperty;	/* X's name for property containing
-				 * registry of interpreter names. */
+    Atom registryProperty;	/* X's name for property containing registry
+				 * of interpreter names. */
     Atom appNameProperty;	/* X's name for property used to hold the
 				 * application name on each comm window. */
 
@@ -409,34 +399,21 @@
 				/* First in list of chunks of free resource
 				 * identifiers, or NULL if there are no free
 				 * resources. */
-    XID(*defaultAllocProc) _ANSI_ARGS_((Display *display));
+    XID (*defaultAllocProc) (Display *display);
 				/* Default resource allocator for display. */
     struct TkIdStack *windowStackPtr;
-				/* First in list of chunks of window
-				 * identifers that can't be reused right
-				 * now. */
-#if (TK_VERSION_NUMBER < _VERSION(8,4,0))
-    int idCleanupScheduled;	/* 1 means a call to WindowIdCleanup has
-				 * already been scheduled, 0 means it
-				 * hasn't. */
-#else
+				/* First in list of chunks of window ids that
+				 * can't be reused right now. */
     Tcl_TimerToken idCleanupScheduled;
 				/* If set, it means a call to WindowIdCleanup
 				 * has already been scheduled, 0 means it
 				 * hasn't. */
-#endif
+
     /*
      * Information used by tkUnixWm.c and tkWinWm.c only:
      */
 
-#if (TK_VERSION_NUMBER < _VERSION(8,4,0))
-    int wmTracing;		/* Used to enable or disable tracing in
-				 * this module.  If tracing is enabled,
-				 * then information is printed on
-				 * standard output about interesting
-				 * interactions with the window manager. */
-#endif
-    struct TkWmInfo *firstWmPtr; /* Points to first top-level window. */
+    struct TkWmInfo *firstWmPtr;/* Points to first top-level window. */
     struct TkWmInfo *foregroundWmPtr;
 				/* Points to the foreground window. */
 
@@ -444,9 +421,8 @@
      * Information maintained by tkWindow.c for use later on by tkXId.c:
      */
 
-
-    int destroyCount;		/* Number of Tk_DestroyWindow operations
-				 * in progress. */
+    int destroyCount;		/* Number of Tk_DestroyWindow operations in
+				 * progress. */
     unsigned long lastDestroyRequest;
 				/* Id of most recent XDestroyWindow request;
 				 * can re-use ids in windowStackPtr when
@@ -465,42 +441,41 @@
      */
 
 #ifdef TK_USE_INPUT_METHODS
-    XIM inputMethod;		/* Input method for this display */
-#if (TK_VERSION_NUMBER >= _VERSION(8,4,0))
-#if TK_XIM_SPOT
+    XIM inputMethod;		/* Input method for this display. */
+    XIMStyle inputStyle;	/* Input style selected for this display. */
     XFontSet inputXfs;		/* XFontSet cached for over-the-spot XIM. */
-#endif /* TK_XIM_SPOT */
-#endif /* TK_VERSION_NUMBER >= 8.4 */
 #endif /* TK_USE_INPUT_METHODS */
     Tcl_HashTable winTable;	/* Maps from X window ids to TkWindow ptrs. */
+
     int refCount;		/* Reference count of how many Tk applications
-                                 * are using this display. Used to clean up
-                                 * the display when we no longer have any
-                                 * Tk applications using it.
-                                 */
+				 * are using this display. Used to clean up
+				 * the display when we no longer have any Tk
+				 * applications using it. */
+
     /*
      * The following field were all added for Tk8.3
      */
-    int mouseButtonState;       /* current mouse button state for this
-                                 * display */
-#if (TK_VERSION_NUMBER < _VERSION(8,4,0))
-    int warpInProgress;
-#endif
+
+    int mouseButtonState;	/* Current mouse button state for this
+				 * display. */
+    Window mouseButtonWindow;	/* Window the button state was set in, added
+				 * in Tk 8.4. */
     Window warpWindow;
     int warpX;
     int warpY;
-#if (TK_VERSION_NUMBER < _VERSION(8,4,0))
-    int useInputMethods;        /* Whether to use input methods */
-#else
+
     /*
      * The following field(s) were all added for Tk8.4
      */
-    long deletionEpoch;		/* Incremented by window deletions */
-    unsigned int flags;		/* Various flag values:  these are all
-				 * defined in below. */
-    TkCaret caret;		/* information about the caret for this
-				 * display.  This is not a pointer. */
-#endif
+
+    unsigned int flags;		/* Various flag values: these are all defined
+				 * in below. */
+    TkCaret caret;		/* Information about the caret for this
+				 * display. This is not a pointer. */
+
+    int iconDataSize;		/* Size of default iconphoto image data. */
+    unsigned char *iconDataPtr;	/* Default iconphoto image data, if set. */
+
 } TkDisplay;
 
 #else
diff -ur blt2.4z/src/Makefile.in blt2.4z-8.5.2/src/Makefile.in
--- blt2.4z/src/Makefile.in	2002-07-15 11:31:29.000000000 +0200
+++ blt2.4z-8.5.2/src/Makefile.in	2008-04-15 17:31:26.000000000 +0200
@@ -230,7 +230,8 @@
 
 distclean: clean
 	$(RM) $(srcdir)/*.bak $(srcdir)/*\~ $(srcdir)/"#"*  Makefile
-	$(RM) bltConfig.h Makefile TAGS
+	$(RM) bltConfig.h bltHash.h Makefile TAGS
+	(cd shared; $(MAKE) distclean)
 
 .c.o:
 	$(CC) -c $(CC_SWITCHES) $<
diff -ur blt2.4z/src/Makefile.vc blt2.4z-8.5.2/src/Makefile.vc
--- blt2.4z/src/Makefile.vc	2002-09-07 22:12:10.000000000 +0200
+++ blt2.4z-8.5.2/src/Makefile.vc	2008-04-15 17:31:25.000000000 +0200
@@ -3,16 +3,15 @@
 # 	Makefile for BLT library using VC++.
 # ------------------------------------------------------------------------
 
-include	      e:/src/blt/win/makedefs
+include	      ../win/makedefs
 
-TOOLS32       =	c:/Program\ Files/Microsoft\ Visual\ Studio/Vc98
 AR            =	lib.exe -link50compat
 LD            =	link.exe
 CC            =	cl.exe
 rc32          =	rc.exe
 
 ifeq ($(WITH_JPEG),0)
-EXTRA_DEFINES = 
+EXTRA_DEFINES =
 endif
 ifeq ($(WITH_JPEG),1)
 EXTRA_DEFINES = -DHAVE_JPEGLIB_H=1
@@ -21,23 +20,23 @@
 JPEGINC	      = $(JPEGDIR)
 endif
 ifeq ($(WITH_JPEG),2)
-EXTRA_DEFINES = -DHAVE_IJL_H=1 
+EXTRA_DEFINES = -DHAVE_IJL_H=1
 JPEGDIR       =	c:/Program\ Files/Intel/IJL
 JPEGLIB	      =	$(JPEGDIR)/lib/ijl15l.lib
 JPEGINC	      = $(JPEGDIR)/Include
 endif
 
 # ------------------------------------------------------------------------
-# 	C Compiler options 
+# 	C Compiler options
 # ------------------------------------------------------------------------
 
 DEFINES       =	-D_X86_=1 -D__STDC__ -DWIN32 -DCONSOLE -D_MT \
-		$(DEBUG_DEFINES) $(SHLIB_DEFINES) $(EXTRA_DEFINES) 
+		$(DEBUG_DEFINES) $(SHLIB_DEFINES) $(EXTRA_DEFINES)
 
 ifeq ($(SHARED),1)
 SHLIB_DEFINES =	-D_DLL
 SHLIB_TARGET  =	build-dll
-LIBS          =	$(COMMON_LIBS) 
+LIBS          =	$(COMMON_LIBS)
 else
 SHLIB_DEFINES =	-D_CTYPE_DISABLE_MACROS
 LIBS          =	$(COMMON_LIBS) $(EXTRA_LIBS)
@@ -45,23 +44,23 @@
 
 ifeq ($(DEBUG),1)
 CFLAGS        =	-Z7 -Od
-DEBUG_LDFLAGS =	-debug:full -debugtype:cv  
+DEBUG_LDFLAGS =	-debug:full -debugtype:cv
 DEBUG_DEFINES = -DUSE_TCLALLOC=0
-TK_LIB        =	$(TKDIR)/win/Debug/tk$(v2)d.lib  
-TCL_LIB       =	$(TCLDIR)/win/Debug/tcl$(v2)d.lib 
+TK_LIB        =	$(TKDIR)/win/Debug/tk$(v2)d.lib
+TCL_LIB       =	$(TCLDIR)/win/Debug/tcl$(v2)d.lib
 MSVCRT        =	msvcrtd.lib
 else
-CFLAGS        =	-Ox -GB -GD 
-DEBUG_LDFLAGS =	-debug:full -debugtype:cv  
-TK_LIB        =	$(TKDIR)/win/Release/tk$(v2).lib  
-TCL_LIB       =	$(TCLDIR)/win/Release/tcl$(v2).lib 
+CFLAGS        =	-Ox -GB
+DEBUG_LDFLAGS =	-debug:full -debugtype:cv
+TK_LIB        =	$(TKDIR)/win/Release/tk$(v2).lib
+TCL_LIB       =	$(TCLDIR)/win/Release/tcl$(v2).lib
 MSVCRT        =	msvcrt.lib
 endif
 
-EXTRA_CFLAGS  =	-nologo -W3 
+EXTRA_CFLAGS  =	-nologo -W3
 
 # ------------------------------------------------------------------------
-# 	Linker flags and options 
+# 	Linker flags and options
 # ------------------------------------------------------------------------
 
 COMMON_LDFLAGS = -nodefaultlib -release -nologo -warn:3 \
@@ -72,14 +71,14 @@
 SHLIB_LDFLAGS = $(COMMON_LDFLAGS) \
 		-subsystem:console -entry:mainCRTStartup \
 		-subsystem:windows -entry:WinMainCRTStartup \
-		-entry:_DllMainCRTStartup$(DLLENTRY) -dll  
+		-entry:_DllMainCRTStartup$(DLLENTRY) -dll
 
 LDFLAGS       =	$(COMMON_LDFLAGS) \
-		-fixed:NO -stack:2300000 
+		-fixed:NO -stack:2300000
 
 COMMON_LIBS   =	$(TK_LIB) $(TCL_LIB) \
 		$(MSVCRT) \
-		kernel32.lib user32.lib 
+		kernel32.lib user32.lib
 
 EXTRA_LIBS    =	$(OLELIB) \
 		$(JPEGLIB) \
@@ -89,11 +88,11 @@
 		winspool.lib \
 		comdlg32.lib
 
-TCL_ONLY_LIBS = $(TCL_LIB) $(MSVCRT)  kernel32.lib user32.lib advapi32.lib 
+TCL_ONLY_LIBS = $(TCL_LIB) $(MSVCRT)  kernel32.lib user32.lib advapi32.lib
 
 
 # ------------------------------------------------------------------------
-# 	Source and target installation directories 
+# 	Source and target installation directories
 # ------------------------------------------------------------------------
 
 srcdir        =	.
@@ -108,7 +107,6 @@
 TCLDIR        =	$(srcdir)/../../tcl$(v3)
 TKDIR         =	$(srcdir)/../../tk$(v3)
 INCLUDES      =	-I. -I$(srcdir) \
-		-I$(TOOLS32)/include \
 		-I$(JPEGINC) \
 		-I$(TCLDIR)/win -I$(TCLDIR)/generic \
 		-I$(TKDIR)/win -I$(TKDIR)/generic -I$(TKDIR)/xlib \
@@ -122,9 +120,9 @@
 # ------------------------------------------------------------------------
 
 N_OBJS       =	bltTed.o
-V3_OBJS       =	bltTri.o bltGrMt.o 
+V3_OBJS       =	bltTri.o bltGrMt.o
 
-TK_OBJS       =	tkButton.o tkFrame.o tkScrollbar.o 
+TK_OBJS       =	tkButton.o tkFrame.o tkScrollbar.o
 
 GRAPH_OBJS =	bltGrAxis.o \
 		bltGrBar.o \
@@ -137,7 +135,7 @@
 		bltGrMisc.o \
 		bltGrPen.o \
 		bltGrPs.o \
-		bltGraph.o 
+		bltGraph.o
 
 TCL_ONLY_OBJS =	bltAlloc.o \
 		bltArrayObj.o \
@@ -161,8 +159,7 @@
 		bltWatch.o  \
 		bltWinPipe.o \
 		bltWinUtil.o \
-		bltWinDde.o \
-		pure_api.o
+		bltWinDde.o
 
 DEMO_OBJS     =	tkConsole.o bltWinMain.o
 
@@ -196,14 +193,14 @@
 		bltWindow.o \
 		bltObjConfig.o \
 		bltWinop.o \
-		$(TK_OBJS) $(N_OBJS) 
+		$(TK_OBJS) $(N_OBJS)
 
 NOT_YET       =	bltContainer.o bltCutBuffer.o bltColor.o
 
 HEADERS       =	blt.h bltChain.h bltVector.h bltTree.h bltPool.h bltHash.h
 
 # GNU Make-specific macro
-SRCS          =	$(patsubst %.o,$(srcdir)/%.c,$(OBJS)) 
+SRCS          =	$(patsubst %.o,$(srcdir)/%.c,$(OBJS))
 
 shell_name    = bltwish
 version       =	$(BLT_MAJOR_VERSION)$(BLT_MINOR_VERSION)
@@ -214,9 +211,9 @@
 
 lib_name =	BLT$(version)
 lib_a =		BLT$(version).lib
-lib_so =	BLT$(version).dll		
+lib_so =	BLT$(version).dll
 tcl_only_lib_a = BLTlite$(version).lib
-tcl_only_lib_so = BLTlite$(version).dll		
+tcl_only_lib_so = BLTlite$(version).dll
 
 CC_SWITCHES   =	$(CFLAGS) $(EXTRA_CFLAGS) $(DEFINES) $(INCLUDES)
 VPATH         =	$(srcdir)
@@ -232,21 +229,19 @@
 build-dll: build-library $(lib_so) $(tcl_only_lib_so)
 
 $(bltwish): $(lib_a) tkConsole.o  bltWinMain.c
-	$(RM) $(bltwish) 
+	$(RM) $(bltwish)
 	$(CC) -c $(CC_SWITCHES) -DTCLLIBPATH=\"$(TCLLIBPATH)\" \
 		-FobltWinMain.o $(srcdir)/bltWinMain.c
-	LIB=$(TOOLS32)/lib \
 	$(LD) $(LDFLAGS) tkConsole.o bltWinMain.o -out:$(bltwish) \
-		$(lib_a) $(LIBS) 
+		$(lib_a) $(LIBS)
 
 $(bltsh): $(tcl_only_lib_a) bltWinMain.c
-	$(RM) $(bltsh) 
+	$(RM) $(bltsh)
 	$(CC) -c $(CC_SWITCHES) -DTCL_ONLY \
 		-DTCLLIBPATH=\"$(TCLLIBPATH)\" \
 		-FobltWinMain.o $(srcdir)/bltWinMain.c
-	LIB=$(TOOLS32)/lib \
 	$(LD) $(LDFLAGS) bltWinMain.o -out:$(bltsh) \
-		$(tcl_only_lib_a) $(TCL_ONLY_LIBS) 
+		$(tcl_only_lib_a) $(TCL_ONLY_LIBS)
 
 $(lib_a):  bltHash.h $(OBJS) bltInit.c
 	$(RM) bltInit.o
@@ -260,7 +255,6 @@
 	$(CC) -c $(CC_SWITCHES) -DBLT_LIBRARY=\"$(BLT_LIBRARY)\" \
 		-FobltInit.o $(srcdir)/bltInit.c
 	$(RM) $@
-	LIB=$(TOOLS32)/lib \
 	$(LD) $(SHLIB_LDFLAGS) -out:$@ bltInit.o $(OBJS) $(SHLIB_LD_LIBS)
 
 $(tcl_only_lib_a):  bltHash.h $(TCL_ONLY_OBJS) bltInit.c
@@ -268,16 +262,15 @@
 	$(CC) -c $(CC_SWITCHES) -DTCL_ONLY -DBLT_LIBRARY=\"$(BLT_LIBRARY)\" \
 		-FobltInit.o $(srcdir)/bltInit.c
 	$(RM) $@
-	$(AR) -out:$@ bltInit.o $(TCL_ONLY_OBJS) 
+	$(AR) -out:$@ bltInit.o $(TCL_ONLY_OBJS)
 
 $(tcl_only_lib_so): $(tcl_only_lib_a) $(TCL_ONLY_OBJS) bltInit.c
 	$(RM) bltInit.o
 	$(CC) -c $(CC_SWITCHES) -DTCL_ONLY -DBLT_LIBRARY=\"$(BLT_LIBRARY)\" \
 		-FobltInit.o $(srcdir)/bltInit.c
 	$(RM) $@
-	LIB=$(TOOLS32)/lib \
 	$(LD) $(SHLIB_LDFLAGS) -out:$@ bltInit.o $(TCL_ONLY_OBJS) \
-		$(TCL_ONLY_LIBS) 
+		$(TCL_ONLY_LIBS)
 
 bltHash.h: bltHash.h.in
 	sed -e 's/@SIZEOF_VOID_P@/4/' \
@@ -295,7 +288,7 @@
 	    fi ; \
         done
 
-install-binaries: install-lib install-demos 
+install-binaries: install-lib install-demos
 
 install-demos: build-demos
 	$(INSTALL) $(bltwish) $(bindir)/$(bltwish)
@@ -303,8 +296,8 @@
 	$(INSTALL) $(bltsh) $(bindir)/$(bltsh)
 	$(INSTALL) $(bltsh) $(bindir)/$(bltsh2)
 
-install-lib: $(lib_so) $(lib_a) 
-	$(INSTALL_DATA) $(lib_so) $(bindir)
+install-lib: $(lib_so) $(lib_a)
+	$(INSTALL_DATA) $(lib_so) $(libdir)
 	$(INSTALL_DATA) $(lib_a) $(libdir)
 	$(INSTALL_DATA) $(tcl_only_lib_so) $(bindir)
 	$(INSTALL_DATA) $(tcl_only_lib_a) $(libdir)
@@ -321,11 +314,11 @@
 	$(RM) *.o *.pdb *.exp \
 		$(lib_a) $(lib_so) $(tcl_only_lib_a) $(tcl_only_lib_so) \
 		$(bltwish) $(bltsh) $(bltwish2) $(bltsh2)
-	$(RM) $(srcdir)/*.bak $(srcdir)/*\~ $(srcdir)/"#"*  
+	$(RM) $(srcdir)/*.bak $(srcdir)/*\~ $(srcdir)/"#"*
+	$(RM) bltHash.h
 
 distclean: clean
 	$(RM) Makefile
 
-.c.o:
+%.o : %.c
 	$(CC) -c $(CC_SWITCHES) -Fo$*.o $<
-
Sólo en blt2.4z/src: pure_api.c
diff -ur blt2.4z/src/shared/Makefile.in blt2.4z-8.5.2/src/shared/Makefile.in
--- blt2.4z/src/shared/Makefile.in	2002-05-14 23:37:19.000000000 +0200
+++ blt2.4z-8.5.2/src/shared/Makefile.in	2008-04-15 17:31:25.000000000 +0200
@@ -175,10 +175,10 @@
         done
 clean:
 	$(RM) $(OBJS) $(lib_so) $(tcl_only_lib_so) $(bltwish) $(bltsh) \
-		*pure* .pure* 
+		*pure* .pure* bltInit.o
 
 distclean: clean
-	$(RM) $(srcdir)/*.bak $(srcdir)/*\~ $(srcdir)/"#"* 
+	$(RM) Makefile $(srcdir)/*.bak $(srcdir)/*\~ $(srcdir)/"#"* 
 
 # ------------------------------------------------------------------------
 # 	in lieu of viewpath-ing...
Sólo en blt2.4z-8.5.2/src: t.t
diff -ur blt2.4z/win/makedefs blt2.4z-8.5.2/win/makedefs
--- blt2.4z/win/makedefs	2002-10-16 07:33:53.000000000 +0200
+++ blt2.4z-8.5.2/win/makedefs	2008-04-15 17:31:26.000000000 +0200
@@ -3,33 +3,13 @@
 
 v1 = 8.4
 v2 = 84
-v3 = 8.4.0
-
-#v1 = 8.3
-#v2 = 83
-#v3 = 8.3.4
-
-#v1 = 8.3
-#v2 = 83
-#v3 = 8.3.2
-
-#v1 = 8.2
-#v2 = 82
-#v3 = 8.2.3
-
-#v1 = 8.1
-#v2 = 81
-#v3 = 8.1.1
-
-#v1 = 8.0
-#v2 = 80
-#v3 = 8.0.5
+v3 = 8.4.12
 
 #Use Independent JPEG Group (IJG) library or Intel JPEG Library (IJL)
 # 0 = None.
 # 1 = IJG
 # 2 = IJL
-WITH_JPEG=2
+WITH_JPEG=0
 
 # ------------------------------------------------------------------------
 #       You shouldn't need to edit anything beyond this point
@@ -39,7 +19,7 @@
 BLT_MINOR_VERSION = 	4
 BLT_VERSION =		2.4
 
-prefix =		C:/Program\ Files/Tcl
+prefix =		x:/target/staff/koen/install/tcltk8.4.12/WIN
 exec_prefix =		$(prefix)
 includedir =		$(prefix)/include
 bindir =		$(prefix)/bin
@@ -48,7 +28,7 @@
 BLT_LIBRARY =		$(libdir)/blt$(BLT_VERSION)
 TCLLIBPATH =		$(libdir)/tcl$(v1)
 
-AUX_LIBS = 
+AUX_LIBS =
 SHLIB_SUFFIX =		.dll
 
 INSTALL =		install -m 0755