public inbox for insight@sourceware.org
 help / color / mirror / Atom feed
* Re: [PATCH] libgui: Make it compileable on windows with recent gcc versions and also on win64
@ 2012-08-08 13:37 Roland Schwingel
  0 siblings, 0 replies; 5+ messages in thread
From: Roland Schwingel @ 2012-08-08 13:37 UTC (permalink / raw)
  To: insight, Keith Seitz

Hi,

Finally I found some air to commit this...

Keith Seitz <keiths@redhat.com> wrote on 04.06.2012 03:13:15:
 > Thanks for the patch. I only have a (very) minor few nits...
I addressed all of your notes beside of 2 (see below).

 > > @@ -631,6 +638,31 @@
 > >         (rowPtr), (colPtr))
 > >
 > >   /*
 > > + * Macros used to cast between pointers and integers (e.g. when
 > storing an int
 > > + * in ClientData), on 64-bit architectures they avoid gcc warning
 > about "cast
 > > + * to/from pointer from/to integer of different size".
 > > + */
 > > +
 > > +#if !defined(INT2PTR)&&  !defined(PTR2INT)
 > > +#   if defined(HAVE_INTPTR_T) || defined(intptr_t)
 > > +#  define INT2PTR(p) ((void *)(intptr_t)(p))
 > > +#  define PTR2INT(p) ((int)(intptr_t)(p))
 > > +#   else
 > > +#  define INT2PTR(p) ((void *)(p))
 > > +#  define PTR2INT(p) ((int)(p))
 > > +#   endif
 > > +#endif
 > > +#if !defined(UINT2PTR)&&  !defined(PTR2UINT)
 > > +#   if defined(HAVE_UINTPTR_T) || defined(uintptr_t)
 > > +#  define UINT2PTR(p) ((void *)(uintptr_t)(p))
 > > +#  define PTR2UINT(p) ((unsigned int)(uintptr_t)(p))
 > > +#   else
 > > +#  define UINT2PTR(p) ((void *)(p))
 > > +#  define PTR2UINT(p) ((unsigned int)(p))
 > > +#   endif
 > > +#endif
 >
 > I'm not going to force this file to the GNU Coding Standard.
 > Just please be consistent with the surrounding code. For example,
 > "!defined(INT2PTR) && !defined(PTR2INT)" seems more natural.
I left this on purpose as the above construct was directly taken
from tcl itself and I would like to see this to be in sync for
better overview. The definition is done if you compile against
older tcl which has some of these definitions not in place.

 > > diff -ruN libgui_orig/src/tkWinPrintText.c libgui/src/tkWinPrintText.c
 > > --- libgui_orig/src/tkWinPrintText.c   2001-09-09 
00:34:48.000000000 +0200
 > > +++ libgui/src/tkWinPrintText.c   2012-03-22 13:56:42.037502500 +0100
 > > +#if (TCL_MAJOR_VERSION>= 8)&&  (TCL_MINOR_VERSION>= 5)
 > > +    numLines = TkBTreeNumLines(textPtr->sharedTextPtr->tree,textPtr);
 > > +    TkTextMakeByteIndex(textPtr->sharedTextPtr->tree, textPtr, 
0,0,&first);
 > > +    TkTextMakeByteIndex(textPtr->sharedTextPtr->tree, textPtr,
 > numLines, 100,&last);
 > > +    TkTextChanged(textPtr->sharedTextPtr, textPtr,&first,&last);
 > > +#elif (TCL_MAJOR_VERSION>= 8)&&  (TCL_MINOR_VERSION>= 1)
 > >       numLines = TkBTreeNumLines(textPtr->tree);
 > > -#if (TCL_MAJOR_VERSION>= 8)&&  (TCL_MINOR_VERSION>= 1)
 > >       TkTextMakeByteIndex(textPtr->tree, 0, 0,&first);
 > >       TkTextMakeByteIndex(textPtr->tree, numLines, 100,&last);
 > > +    TkTextChanged(textPtr,&first,&last);
 > >   #else
 > > +    numLines = TkBTreeNumLines(textPtr->tree);
 > >       TkTextMakeIndex(textPtr->tree, 0, 0,&first);
 > >       TkTextMakeIndex(textPtr->tree, numLines, 100,&last);
 > > -#endif
 > >       TkTextChanged(textPtr,&first,&last);
 > > -
 > > +#endif
 > >       /*
 > >        * Set the display info flag to out-of-date.
 > >        */
 >
 > I'd like to see spaces before/after "&&", "||", ">", "<", ">=", etc.
 > This happens in a few places.
This might have been an issue of your editor in my patch it appeared
to be correct. (????)

As already outlined some time ago this patch is just a first starting 
point in cleaning up libgui to ensure compileability with newer tcl/tk
versions and current mingw/mingw-w64 compilers.

Roland

^ permalink raw reply	[flat|nested] 5+ messages in thread
* Re: [PATCH] libgui: Make it compileable on windows with recent gcc versions and also on win64
@ 2012-05-25 12:00 Roland Schwingel
  2012-06-04  1:13 ` Keith Seitz
  0 siblings, 1 reply; 5+ messages in thread
From: Roland Schwingel @ 2012-05-25 12:00 UTC (permalink / raw)
  To: insight

[-- Attachment #1: Type: text/plain, Size: 815 bytes --]

Hi...

Keith Seitz <keiths@redhat.com> wrote on 24.05.2012 23:34:20:

 > This last bit here is being corrupted for some reason:
 >
 > $ patch -p1 < libgui_src.base.patch
 > [snip]
 > patch: **** malformed patch at line 877: @@ -403,7 +409,7 @@
 >
 > Can you verify and resend this patch?
Yes it was corrupt some offset were wrong... But can't tell why...
Here is it again. (And I checked that it can be applied :-).

Please keep in mind that this patch is a bit rough. I wanted to get it
compiled properly not win a design award as in some areas I believe
it is unused code anyway.

To be able to clean libgui properly this patch should get thru first 
because I fear if I start out the way I should do with libgui I would 
endup in some very hard to review changes. So it is better to do it step 
by step.

Roland

[-- Attachment #2: libgui_src.base.patch --]
[-- Type: text/plain, Size: 31388 bytes --]

diff -ruN libgui_orig/src/subcommand.c libgui/src/subcommand.c
--- libgui_orig/src/subcommand.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/subcommand.c	2012-02-24 13:53:50.760585300 +0100
@@ -34,7 +34,7 @@
    table.  */
 static int
 subcommand_implementation (ClientData cd, Tcl_Interp *interp,
-			   int argc, char *argv[])
+			   int argc,CONST84 char *argv[])
 {
   struct subcommand_clientdata *data = (struct subcommand_clientdata *) cd;
   const struct ide_subcommand_table *commands = data->commands;
@@ -90,7 +90,7 @@
 
 /* Define a command with subcommands.  */
 int
-ide_create_command_with_subcommands (Tcl_Interp *interp, char *name,
+ide_create_command_with_subcommands (Tcl_Interp *interp, const char *name,
 				     const struct ide_subcommand_table *table,
 				     ClientData subdata,
 				     Tcl_CmdDeleteProc *delete)
diff -ruN libgui_orig/src/subcommand.h libgui/src/subcommand.h
--- libgui_orig/src/subcommand.h	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/subcommand.h	2012-02-24 13:52:36.539002400 +0100
@@ -21,7 +21,7 @@
 
 /* Define a command with subcommands.  */
 int ide_create_command_with_subcommands
-  (Tcl_Interp *interp, char *name, const struct ide_subcommand_table *table,
+  (Tcl_Interp *interp, const char *name, const struct ide_subcommand_table *table,
    ClientData, Tcl_CmdDeleteProc *);
 
 #ifdef __cplusplus
diff -ruN libgui_orig/src/tclcursor.c libgui/src/tclcursor.c
--- libgui_orig/src/tclcursor.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tclcursor.c	2012-02-24 14:02:44.176135300 +0100
@@ -25,7 +25,7 @@
 #include "subcommand.h"
 
 static int
-get_cursor_size (ClientData cd, Tcl_Interp *interp, int argc, char *argv[])
+get_cursor_size (ClientData cd, Tcl_Interp *interp, int argc,CONST84 char *argv[])
 {
   char buf[30];
 
@@ -38,7 +38,7 @@
 }
 
 static int
-get_cursor_position (ClientData cd, Tcl_Interp *interp, int argc, char *argv[])
+get_cursor_position (ClientData cd, Tcl_Interp *interp, int argc,CONST84 char *argv[])
 {
   POINT where;
   char buf[30];
diff -ruN libgui_orig/src/tclmsgbox.c libgui/src/tclmsgbox.c
--- libgui_orig/src/tclmsgbox.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tclmsgbox.c	2012-02-24 13:33:44.464962700 +0100
@@ -4,11 +4,11 @@
 
 #ifdef _WIN32
 
+#include <windows.h>
+
 #include <tcl.h>
 #include <tk.h>
 
-#include <windows.h>
-
 /* FIXME: We use some internal Tcl and Tk Windows stuff.  */
 #include <tkWinInt.h>
 
@@ -96,7 +96,7 @@
   class.hInstance = TclWinGetTclInstance();
   class.hbrBackground = NULL;
   class.lpszMenuName = NULL;
-  class.lpszClassName = "ide_messagebox";
+  class.lpszClassName = TEXT("ide_messagebox");
   class.lpfnWndProc = msgbox_wndproc;
   class.hIcon = NULL;
   class.hCursor = NULL;
@@ -104,7 +104,7 @@
   if (! RegisterClass (&class))
     return TCL_ERROR;
 
-  hidden_hwnd = CreateWindow ("ide_messagebox", "ide_messagebox", WS_TILED,
+  hidden_hwnd = CreateWindow (TEXT("ide_messagebox"), TEXT("ide_messagebox"), WS_TILED,
 			      0, 0, 0, 0, NULL, NULL, class.hInstance, NULL);
   if (hidden_hwnd == NULL)
     return TCL_ERROR;
@@ -119,7 +119,7 @@
 {
   if (hidden_hwnd != NULL)
     {
-      UnregisterClass ("ide_messagebox", TclWinGetTclInstance ());
+      UnregisterClass (TEXT("ide_messagebox"), TclWinGetTclInstance ());
       DestroyWindow (hidden_hwnd);
       hidden_hwnd = NULL;
 
@@ -136,7 +136,7 @@
 {
   struct msgbox_data *md = (struct msgbox_data *) arg;
 
-  md->result = MessageBox (md->hwnd, md->message, md->title,
+  md->result = MessageBoxA (md->hwnd, md->message, md->title,
 			   md->flags | MB_SETFOREGROUND);
   PostMessage (md->hidden_hwnd, MSGBOX_MESSAGE, 0, (LPARAM) arg);
   return 0;
@@ -241,18 +241,18 @@
 
 static int
 msgbox_internal (ClientData clientData, Tcl_Interp *interp, int argc,
-		 char **argv, char *code)
+		 CONST84 char **argv, CONST84 char *code)
 {
     int flags;
     Tk_Window parent = NULL;
     HWND hWnd;
-    char *message = "";
-    char *title = "";
+    CONST84 char *message = "";
+    CONST84 char *title = "";
     int icon = MB_ICONINFORMATION;
     int type = MB_OK;
     int modal = MB_SYSTEMMODAL;
     int i, j;
-    char *defaultBtn = NULL;
+    CONST84 char *defaultBtn = NULL;
     int defaultBtnIdx = -1;
 
     for (i=1; i<argc; i+=2) {
@@ -430,7 +430,7 @@
 /* This is the ide_messageBox function.  */
 
 static int
-msgbox (ClientData cd, Tcl_Interp *interp, int argc, char **argv)
+msgbox (ClientData cd, Tcl_Interp *interp, int argc,CONST84 char **argv)
 {
   if (argc < 2)
     {
diff -ruN libgui_orig/src/tclshellexe.c libgui/src/tclshellexe.c
--- libgui_orig/src/tclshellexe.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tclshellexe.c	2012-03-22 15:49:59.547660300 +0100
@@ -16,12 +16,12 @@
 
 static int
 shell_execute_command (ClientData clientData, Tcl_Interp *interp,
-		       int argc, char *argv[])
+		       int argc, CONST84 char *argv[])
 {
-  char	*operation;
-  char	*file;
-  char	*param;
-  char	*dir;
+  CONST84 char	*operation;
+  CONST84 char	*file;
+  CONST84 char	*param;
+  CONST84 char	*dir;
   int	ret;
 
   if (argc < 3 || argc > 5)
@@ -55,7 +55,7 @@
   else
     dir = NULL;
 
-  ret = (int)ShellExecute(NULL, operation, file, param, dir, SW_SHOWNORMAL);
+  ret = (int)(ssize_t)ShellExecuteA(NULL, operation, file, param, dir, SW_SHOWNORMAL);
   if (ret <= 32)
     {
       Tcl_AppendResult(interp, strerror(ret), NULL);
diff -ruN libgui_orig/src/tclwinfont.c libgui/src/tclwinfont.c
--- libgui_orig/src/tclwinfont.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tclwinfont.c	2012-02-24 13:42:41.393703800 +0100
@@ -50,13 +50,13 @@
 /* Implement the ide_win_choose_font procedure.  */
 
 static int
-win_choose_font (ClientData cd, Tcl_Interp *interp, int argc, char **argv)
+win_choose_font (ClientData cd, Tcl_Interp *interp, int argc,CONST84 char **argv)
 {
-  char *deffont;
+  CONST84 char *deffont;
   Tk_Window parent;
   int i, oldMode;
-  CHOOSEFONT cf;
-  LOGFONT lf;
+  CHOOSEFONTA cf;
+  LOGFONTA lf;
   HDC hdc;
   HFONT hfont;
   char facebuf[LF_FACESIZE];
@@ -154,7 +154,7 @@
     }
 
   oldMode = Tcl_SetServiceMode(TCL_SERVICE_ALL);
-  if (! ChooseFont (&cf))
+  if (! ChooseFontA (&cf))
     {
       DWORD code;
 
@@ -191,7 +191,7 @@
      specification it will wind up with the font that the user expects
      to see.  Some of this code is taken from AllocFont.  */
 
-  hfont = CreateFontIndirect (&lf);
+  hfont = CreateFontIndirectA (&lf);
   if (hfont == NULL)
     {
       /* This should be impossible.  */
@@ -208,7 +208,7 @@
 
   hdc = GetDC (cf.hwndOwner);
   hfont = SelectObject (hdc, hfont);
-  GetTextFace (hdc, sizeof (facebuf), facebuf);
+  GetTextFaceA (hdc, sizeof (facebuf), facebuf);
   GetTextMetrics (hdc, &tm);
 
   Tcl_ResetResult (interp);
diff -ruN libgui_orig/src/tclwinmode.c libgui/src/tclwinmode.c
--- libgui_orig/src/tclwinmode.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tclwinmode.c	2012-02-24 14:06:55.963738000 +0100
@@ -28,7 +28,7 @@
 
 static int
 seterrormode_command (ClientData cd, Tcl_Interp *interp,
-		      int argc, char *argv[])
+		      int argc, CONST84 char *argv[])
 {
 #ifdef __CYGWIN32__
   int len, i;
diff -ruN libgui_orig/src/tclwinprint.c libgui/src/tclwinprint.c
--- libgui_orig/src/tclwinprint.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tclwinprint.c	2012-02-24 13:57:12.703864500 +0100
@@ -136,7 +136,7 @@
 
 static int
 winprint_page_setup_command (ClientData cd, Tcl_Interp *interp, int argc,
-			     char **argv)
+			     CONST84 char **argv)
 {
   struct winprint_data *wd = (struct winprint_data *) cd;
   Tk_Window parent;
@@ -258,13 +258,13 @@
   /* Whether to use the print dialog.  */
   int dialog;
   /* The parent window.  */
-  char *parent;
+  const char *parent;
   /* The document name.  */
-  char *name;
+  const char *name;
   /* The page procedure.  */
-  char *pageproc;
+  const char *pageproc;
   /* The init procedure. This is called once before printing. */
-  char *initproc;
+  const char *initproc;
   /* Print using PostScript? */
   int postscript;
 };
@@ -273,7 +273,7 @@
 
 static int
 winprint_print_text_options (struct winprint_data *wd, Tcl_Interp *interp,
-			     int argc, char **argv,
+			     int argc, const char **argv,
 			     struct print_text_options *pto)
 {
   int i;
@@ -458,7 +458,7 @@
 winprint_start (struct winprint_data *wd, Tcl_Interp *interp, PRINTDLG *pd,
 		const struct print_text_options *pto, int *cancelled)
 {
-  DOCINFO di;
+  DOCINFOA di;
 
   *cancelled = 0;
 
@@ -479,7 +479,7 @@
   di.lpszDatatype = NULL;
   di.fwType = 0;
 
-  if (StartDoc (pd->hDC, &di) <= 0)
+  if (StartDocA (pd->hDC, &di) <= 0)
     {
       if (GetLastError () == ERROR_CANCELLED)
 	*cancelled = 1;
@@ -527,7 +527,7 @@
 /* Invoke the query or page procedure for ide_winprint print_text.  */
 
 static int
-winprint_print_text_invoke (Tcl_Interp *interp, char *proc, const char *name,
+winprint_print_text_invoke (Tcl_Interp *interp, const char *proc, const char *name,
 			    enum winprint_query *result)
 {
   char *q;
@@ -557,11 +557,11 @@
 /* Implement ide_winprint print_text.  */
 static int
 winprint_print_command (ClientData cd, Tcl_Interp *interp, int argc,
-			     char **argv)
+			     CONST84 char **argv)
 {
   struct winprint_data *wd = (struct winprint_data *) cd;
-  char *queryproc;
-  char *textproc;
+  const char *queryproc;
+  const char *textproc;
   struct print_text_options pto;
   PRINTDLG pd;
   int cancelled;
@@ -829,7 +829,7 @@
 	      
 	      l = Tcl_GetStringFromObj (Tcl_GetObjResult (interp), &len);
 	      
-	      TextOut (pd.hDC, left, y, l, len);
+	      TextOutA (pd.hDC, left, y, l, len);
 	      y += lineheight;
 	      
 	      if (y >= bottom)
@@ -890,7 +890,7 @@
 
 static int
 winprint_abort_command (ClientData cd, Tcl_Interp *interp, int argc,
-			char **argv)
+			CONST84 char **argv)
 {
   struct winprint_data *wd = (struct winprint_data *) cd;
 
diff -ruN libgui_orig/src/tkTable.c libgui/src/tkTable.c
--- libgui_orig/src/tkTable.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tkTable.c	2012-02-24 15:25:18.870312200 +0100
@@ -24,20 +24,16 @@
 
 #include "tkTable.h"
 
-#ifdef DEBUG
-#include "dprint.h"
-#endif
-
 static char **	StringifyObjects _ANSI_ARGS_((int objc,
-			Tcl_Obj *CONST objv[]));
+			Tcl_Obj *const objv[]));
 
 static int	Tk_TableObjCmd _ANSI_ARGS_((ClientData clientData,
-			Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
+			Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]));
 
 static int	TableWidgetObjCmd _ANSI_ARGS_((ClientData clientData,
-			Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
+			Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]));
 static int	TableConfigure _ANSI_ARGS_((Tcl_Interp *interp,
-			Table *tablePtr, int objc, Tcl_Obj *CONST objv[],
+			Table *tablePtr, int objc, Tcl_Obj *const objv[],
 			int flags, int forceUpdate));
 static void	TableDestroy _ANSI_ARGS_((ClientData clientdata));
 static void	TableEventProc _ANSI_ARGS_((ClientData clientData,
@@ -65,7 +61,7 @@
  * enumerated types used to dispatch the widget command.
  */
 
-static char *selCmdNames[] = {
+static const char *selCmdNames[] = {
     "anchor", "clear", "includes", "present", "set", (char *)NULL
 };
 enum selCommand {
@@ -73,7 +69,7 @@
     CMD_SEL_SET
 };
 
-static char *commandNames[] = {
+static const char *commandNames[] = {
     "activate", "bbox", "border", "cget", "clear", "configure",
     "curselection", "curvalue", "delete", "get", "height",
     "hidden", "icursor", "index", "insert",
@@ -328,7 +324,7 @@
  * Keep this in sync with the above values.
  */
 
-static char *updateOpts[] = {
+static const char *updateOpts[] = {
     "-anchor",		"-background",	"-bg",		"-bd",	
     "-borderwidth",	"-cache",	"-command",	"-colorigin",
     "-cols",		"-colstretchmode",		"-coltagcommand",
@@ -1041,7 +1037,7 @@
     /* Do the configuration */
     argv = StringifyObjects(objc, objv);
     result = Tk_ConfigureWidget(interp, tablePtr->tkwin, tableSpecs,
-	    objc, argv, (char *) tablePtr, flags);
+	    objc, (CONST84 char **)argv, (char *) tablePtr, flags);
     ckfree((char *) argv);
     if (result != TCL_OK) {
 	return TCL_ERROR;
@@ -1679,12 +1675,6 @@
 	    invalidY+invalidHeight-1, &rowTo, &colTo);
     tablePtr->flags &= ~AVOID_SPANS;
 
-#ifdef DEBUG
-    tcl_dprintf(tablePtr->interp, "%d,%d => %d,%d",
-	    rowFrom+tablePtr->rowOffset, colFrom+tablePtr->colOffset,
-	    rowTo+tablePtr->rowOffset, colTo+tablePtr->colOffset);
-#endif
-
     /* 
      * Initialize colTagsCache hash table to cache column tag names.
      */
@@ -3377,7 +3367,7 @@
     Tcl_HashSearch search;
     int length, count, lastrow=0, needcs=0, r, c, listArgc, rslen=0, cslen=0;
     int numcols, numrows;
-    char **listArgv;
+    CONST84 char **listArgv;
 
     /* if we are not exporting the selection ||
      * we have no data source, return */
diff -ruN libgui_orig/src/tkTable.h libgui/src/tkTable.h
--- libgui_orig/src/tkTable.h	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tkTable.h	2012-03-22 15:50:05.366470500 +0100
@@ -15,9 +15,26 @@
 #ifndef _TKTABLE_H_
 #define _TKTABLE_H_
 
+#ifdef WIN32
+#   define WIN32_LEAN_AND_MEAN
+#   include <windows.h>
+#   undef WIN32_LEAN_AND_MEAN
+/* VC++ has an entry point called DllMain instead of DllEntryPoint */
+#   if defined(_MSC_VER)
+#	define DllEntryPoint DllMain
+#   endif
+#endif
+
+
 #include <string.h>
 #include <stdlib.h>
+#include <stdint.h>
 #include <tk.h>
+
+#ifndef CONST86
+#      define CONST86 CONST84
+#endif
+
 #ifdef MAC_TCL
 # include <Xatom.h>
 #else
@@ -46,16 +63,6 @@
 # define TCL_STORAGE_CLASS DLLIMPORT
 #endif
 
-#ifdef WIN32
-#   define WIN32_LEAN_AND_MEAN
-#   include <windows.h>
-#   undef WIN32_LEAN_AND_MEAN
-/* VC++ has an entry point called DllMain instead of DllEntryPoint */
-#   if defined(_MSC_VER)
-#	define DllEntryPoint DllMain
-#   endif
-#endif
-
 #if defined(WIN32) || defined(MAC_TCL)
 /* XSync call defined in the internals for some reason */
 #   ifndef XSync
@@ -506,17 +513,17 @@
 
 extern int	TableOptionBdSet _ANSI_ARGS_((ClientData clientData,
 			Tcl_Interp *interp, Tk_Window tkwin,
-			char *value, char *widgRec, int offset));
-extern char *	TableOptionBdGet _ANSI_ARGS_((ClientData clientData,
+			CONST84 char *value, char *widgRec, int offset));
+extern CONST86 char *	TableOptionBdGet _ANSI_ARGS_((ClientData clientData,
 			Tk_Window tkwin, char *widgRec, int offset,
 			Tcl_FreeProc **freeProcPtr));
 extern int	TableTagConfigureBd _ANSI_ARGS_((Table *tablePtr,
 			TableTag *tagPtr, char *oldValue, int nullOK));
 extern int	Cmd_OptionSet _ANSI_ARGS_((ClientData clientData,
 					   Tcl_Interp *interp,
-					   Tk_Window unused, char *value,
+					   Tk_Window unused, CONST84 char *value,
 					   char *widgRec, int offset));
-extern char *	Cmd_OptionGet _ANSI_ARGS_((ClientData clientData,
+extern CONST86 char *	Cmd_OptionGet _ANSI_ARGS_((ClientData clientData,
 					   Tk_Window unused, char *widgRec,
 					   int offset,
 					   Tcl_FreeProc **freeProcPtr));
@@ -631,6 +638,31 @@
 		(rowPtr), (colPtr))
 
 /*
+ * Macros used to cast between pointers and integers (e.g. when storing an int
+ * in ClientData), on 64-bit architectures they avoid gcc warning about "cast
+ * to/from pointer from/to integer of different size".
+ */
+
+#if !defined(INT2PTR) && !defined(PTR2INT)
+#   if defined(HAVE_INTPTR_T) || defined(intptr_t)
+#  define INT2PTR(p) ((void *)(intptr_t)(p))
+#  define PTR2INT(p) ((int)(intptr_t)(p))
+#   else
+#  define INT2PTR(p) ((void *)(p))
+#  define PTR2INT(p) ((int)(p))
+#   endif
+#endif
+#if !defined(UINT2PTR) && !defined(PTR2UINT)
+#   if defined(HAVE_UINTPTR_T) || defined(uintptr_t)
+#  define UINT2PTR(p) ((void *)(uintptr_t)(p))
+#  define PTR2UINT(p) ((unsigned int)(uintptr_t)(p))
+#   else
+#  define UINT2PTR(p) ((void *)(p))
+#  define PTR2UINT(p) ((unsigned int)(p))
+#   endif
+#endif
+
+/*
  * end of header
  * reset TCL_STORAGE_CLASS to DLLIMPORT.
  */
diff -ruN libgui_orig/src/tkTableCmds.c libgui/src/tkTableCmds.c
--- libgui_orig/src/tkTableCmds.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tkTableCmds.c	2012-03-22 15:50:15.428488200 +0100
@@ -306,7 +306,7 @@
     return TCL_OK;
 }
 \f
-static char *bdCmdNames[] = {
+static CONST84 char *bdCmdNames[] = {
     "mark", "dragto", (char *)NULL
 };
 enum bdCmd {
@@ -438,7 +438,7 @@
 }
 \f
 /* clear subcommands */
-static char *clearNames[] = {
+static CONST84 char *clearNames[] = {
     "all", "cache", "sizes", "tags", (char *)NULL
 };
 enum clearCommand {
diff -ruN libgui_orig/src/tkTableEdit.c libgui/src/tkTableEdit.c
--- libgui_orig/src/tkTableEdit.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tkTableEdit.c	2012-03-22 15:50:23.727702800 +0100
@@ -20,7 +20,7 @@
 			int outOfBounds));
 
 /* insert/delete subcommands */
-static char *modCmdNames[] = {
+static CONST84 char *modCmdNames[] = {
     "active", "cols", "rows", (char *)NULL
 };
 enum modCmd {
@@ -28,7 +28,7 @@
 };
 
 /* insert/delete row/col switches */
-static char *rcCmdNames[] = {
+static CONST84 char *rcCmdNames[] = {
     "-keeptitles",	"-holddimensions",	"-holdselection",
     "-holdtags",	"-holdwindows",	"--",
     (char *) NULL
diff -ruN libgui_orig/src/tkTableTag.c libgui/src/tkTableTag.c
--- libgui_orig/src/tkTableTag.c	2002-06-07 10:59:44.000000000 +0200
+++ libgui/src/tkTableTag.c	2012-02-24 15:28:18.042081700 +0100
@@ -14,13 +14,13 @@
 #include "tkTable.h"
 
 static TableTag *TableTagGetEntry _ANSI_ARGS_((Table *tablePtr, char *name,
-	int objc, char **argv));
+	int objc, CONST84 char **argv));
 static unsigned int	TableTagGetPriority _ANSI_ARGS_((Table *tablePtr,
 	TableTag *tagPtr));
 static void	TableImageProc _ANSI_ARGS_((ClientData clientData, int x,
 	int y, int width, int height, int imageWidth, int imageHeight));
 
-static char *tagCmdNames[] = {
+static CONST84 char *tagCmdNames[] = {
     "celltag", "cget", "coltag", "configure", "delete", "exists",
     "includes", "lower", "names", "raise", "rowtag", (char *) NULL
 };
@@ -436,7 +436,7 @@
  *----------------------------------------------------------------------
  */
 static TableTag *
-TableTagGetEntry(Table *tablePtr, char *name, int objc, char **argv)
+TableTagGetEntry(Table *tablePtr, char *name, int objc, CONST84 char **argv)
 {
     Tcl_HashEntry *entryPtr;
     TableTag *tagPtr = NULL;
@@ -516,12 +516,12 @@
 void
 TableInitTags(Table *tablePtr)
 {
-    static char *activeArgs[]	= {"-bg", ACTIVE_BG, "-relief", "flat" };
-    static char *selArgs[]	= {"-bg", SELECT_BG, "-fg", SELECT_FG,
+    static CONST84 char *activeArgs[]	= {"-bg", ACTIVE_BG, "-relief", "flat" };
+    static CONST84 char *selArgs[]	= {"-bg", SELECT_BG, "-fg", SELECT_FG,
 				   "-relief", "sunken" };
-    static char *titleArgs[]	= {"-bg", DISABLED, "-fg", "white",
+    static CONST84 char *titleArgs[]	= {"-bg", DISABLED, "-fg", "white",
 				   "-relief", "flat", "-state", "disabled" };
-    static char *flashArgs[]	= {"-bg", "red" };
+    static CONST84 char *flashArgs[]	= {"-bg", "red" };
     /*
      * The order of creation is important to priority.
      */
@@ -568,7 +568,7 @@
 	    sprintf(buf, " %d", cell);
 	    Tcl_Preserve((ClientData) interp);
 	    if (Tcl_VarEval(interp, cmd, buf, (char *)NULL) == TCL_OK) {
-		char *name = Tcl_GetStringResult(interp);
+		CONST84_RETURN char *name = Tcl_GetStringResult(interp);
 		if (name && *name) {
 		    /*
 		     * If a result was returned, check to see if it is
@@ -976,10 +976,10 @@
 			(char *) tagPtr, (objc == 5) ?
 			Tcl_GetString(objv[4]) : NULL, 0);
 	    } else {
-		char **argv;
+		CONST84 char **argv;
 
 		/* Stringify */
-		argv = (char **) ckalloc((objc + 1) * sizeof(char *));
+		argv = (CONST84 char **) ckalloc((objc + 1) * sizeof(char *));
 		for (i = 0; i < objc; i++)
 		    argv[i] = Tcl_GetString(objv[i]);
 		argv[objc] = NULL;
diff -ruN libgui_orig/src/tkTableUtil.c libgui/src/tkTableUtil.c
--- libgui_orig/src/tkTableUtil.c	2001-09-09 00:34:48.000000000 +0200
+++ libgui/src/tkTableUtil.c	2012-02-24 12:27:11.311731300 +0100
@@ -41,16 +41,16 @@
     ClientData clientData;		/* Type of struct being set. */
     Tcl_Interp *interp;			/* Used for reporting errors. */
     Tk_Window tkwin;			/* Window containing table widget. */
-    char *value;			/* Value of option. */
+    CONST84 char *value;			/* Value of option. */
     char *widgRec;			/* Pointer to record for item. */
     int offset;				/* Offset into item. */
 {
     char **borderStr;
     int *bordersPtr, *bdPtr;
-    int type	= (int) clientData;
+    int type	= PTR2INT(clientData);
     int result	= TCL_OK;
     int argc;
-    char **argv;
+    CONST84 char **argv;
 
 
     if ((type == BD_TABLE) && (value[0] == '\0')) {
@@ -137,7 +137,7 @@
  *----------------------------------------------------------------------
  */
 
-char *
+CONST86 char *
 TableOptionBdGet(clientData, tkwin, widgRec, offset, freeProcPtr)
     ClientData clientData;		/* Type of struct being set. */
     Tk_Window tkwin;			/* Window containing canvas widget. */
@@ -147,7 +147,7 @@
 					 * information about how to reclaim
 					 * storage for return string. */
 {
-    register int type	= (int) clientData;
+    register int type	= PTR2INT(clientData);
 
     if (type == BD_TABLE) {
 	return ((TableTag *) (widgRec + offset))->borderStr;
@@ -183,7 +183,7 @@
 	char *oldValue, int nullOK)
 {
     int i, argc, result = TCL_OK;
-    char **argv;
+    CONST84 char **argv;
 
     /*
      * First check to see if the value really changed.
@@ -270,7 +270,7 @@
 
 int
 Cmd_OptionSet(ClientData clientData, Tcl_Interp *interp,
-	      Tk_Window unused, char *value, char *widgRec, int offset)
+	      Tk_Window unused, CONST84 char *value, char *widgRec, int offset)
 {
   Cmd_Struct *p = (Cmd_Struct *)clientData;
   int mode = Cmd_GetValue(p,value);
@@ -297,7 +297,7 @@
  *----------------------------------------------------------------------
  */
 
-char *
+CONST86 char *
 Cmd_OptionGet(ClientData clientData, Tk_Window unused,
 	      char *widgRec, int offset, Tcl_FreeProc **freeProcPtr)
 {
diff -ruN libgui_orig/src/tkTableWin.c libgui/src/tkTableWin.c
--- libgui_orig/src/tkTableWin.c	2001-09-09 00:34:48.000000000 +0200
+++ libgui/src/tkTableWin.c	2012-02-24 15:29:04.600424800 +0100
@@ -15,9 +15,9 @@
 #include "tkTable.h"
 
 static int	StickyParseProc _ANSI_ARGS_((ClientData clientData,
-			    Tcl_Interp *interp, Tk_Window tkwin, char *value,
+			    Tcl_Interp *interp, Tk_Window tkwin, CONST84 char *value,
 			    char *widgRec, int offset));
-static char *	StickyPrintProc _ANSI_ARGS_((ClientData clientData,
+static CONST86 char *	StickyPrintProc _ANSI_ARGS_((ClientData clientData,
 			    Tk_Window tkwin, char *widgRec, int offset,
 			    Tcl_FreeProc **freeProcPtr));
 
@@ -43,7 +43,7 @@
 };
 
 /* windows subcommands */
-static char *winCmdNames[] = {
+static const char *winCmdNames[] = {
     "cget", "configure", "delete", "move", "names", (char *) NULL
 };
 enum winCommand {
@@ -117,7 +117,7 @@
  *
  *----------------------------------------------------------------------
  */
-static char *
+static CONST86 char *
 StickyPrintProc(clientData, tkwin, widgRec, offset, freeProcPtr)
     ClientData clientData;		/* Ignored. */
     Tk_Window tkwin;			/* Window for text widget. */
@@ -163,7 +163,7 @@
     ClientData clientData;		/* Not used.*/
     Tcl_Interp *interp;			/* Used for reporting errors. */
     Tk_Window tkwin;			/* Window for text widget. */
-    char *value;			/* Value of option. */
+    CONST84 char *value;			/* Value of option. */
     char *widgRec;			/* Pointer to TkTextEmbWindow
 					 * structure. */
     int offset;				/* Offset into item (ignored). */
@@ -615,19 +615,19 @@
     Tcl_Interp *interp = tablePtr->interp;
     Tk_Window oldWindow;
     int i, result;
-    char **argv;
+    const char **argv;
 
     oldWindow = ewPtr->tkwin;
 
     /* Stringify */
-    argv = (char **) ckalloc((objc + 1) * sizeof(char *));
+    argv = (const char **) ckalloc((objc + 1) * sizeof(char *));
     for (i = 0; i < objc; i++)
 	argv[i] = Tcl_GetString(objv[i]);
     argv[i] = NULL;
     result = Tk_ConfigureWidget(interp, tablePtr->tkwin,
 				winConfigSpecs, objc, argv, (char *) ewPtr,
 				TK_CONFIG_ARGV_ONLY);
-    ckfree((char *) argv);
+    ckfree((const char *) argv);
     if (result != TCL_OK) {
 	return TCL_ERROR;
     }
diff -ruN libgui_orig/src/tkWarpPointer.c libgui/src/tkWarpPointer.c
--- libgui_orig/src/tkWarpPointer.c	2001-09-09 00:34:48.000000000 +0200
+++ libgui/src/tkWarpPointer.c	2012-02-24 15:29:15.586078900 +0100
@@ -24,12 +24,13 @@
 *	
 *
 * ---------------------------------------------------------------------------*/
-#include "tk.h"
 #ifdef _WIN32
 #include <windows.h>
 #include <winuser.h>
 #endif
 
+#include "tk.h"
+
 int
 WarpPointer (clientData, interp, objc, objv)
     ClientData clientData;
@@ -39,7 +40,6 @@
 {
     Tk_Window tkwin;
     int x, y;
-    char *str;
 
     if (objc != 4) {
       Tcl_WrongNumArgs(interp, 1, objv, "widgetId x y");
diff -ruN libgui_orig/src/tkWinPrintCanvas.c libgui/src/tkWinPrintCanvas.c
--- libgui_orig/src/tkWinPrintCanvas.c	2001-09-09 00:34:48.000000000 +0200
+++ libgui/src/tkWinPrintCanvas.c	2012-02-24 14:01:44.848274800 +0100
@@ -52,7 +52,7 @@
     int tiles_wide,tiles_high;
     int tile_y, tile_x;
     int screenX1, screenX2, screenY1, screenY2, width, height;
-    DOCINFO *lpdi = (DOCINFO *) ckalloc(sizeof(DOCINFO));
+    DOCINFOA *lpdi = (DOCINFOA *) ckalloc(sizeof(DOCINFOA));
 
     if (argc < 2) {
 	Tcl_AppendResult(interp, "wrong # args: should be \"",
@@ -75,7 +75,7 @@
     memset(lpdi,0,sizeof(DOCINFO));
     lpdi->cbSize=sizeof(DOCINFO);
     lpdi->lpszDocName= (LPCSTR) ckalloc(255);
-    sprintf((char*)lpdi->lpszDocName,"SN - Printing\0");
+    strcpy((char *)lpdi->lpszDocName,"SN - Printing");
     lpdi->lpszOutput=NULL;
 
     canvasPtr = (TkCanvas *)(canvCmd.clientData);
@@ -144,7 +144,7 @@
     tiles_high = ( widget_Y_size / page_Y_size ); /* start at zero */
     tiles_wide = ( widget_X_size / page_X_size ); /* start at zero */
 
-    StartDoc(pd.hDC,lpdi);
+    StartDocA(pd.hDC,lpdi);
 
     for (tile_x = 0; tile_x <= tiles_wide;tile_x++) {
     for (tile_y = 0; tile_y <= tiles_high;tile_y++) {
@@ -154,7 +154,7 @@
  	for (itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;
 		itemPtr = itemPtr->nextPtr) {
 	    (*itemPtr->typePtr->displayProc)((Tk_Canvas) canvasPtr, itemPtr,
-		    canvasPtr->display, (unsigned long) PrinterDrawable/*pixmap*/, screenX1, screenY1, width,
+		    canvasPtr->display, (Drawable) PrinterDrawable/*pixmap*/, screenX1, screenY1, width,
 		    height);
 	}
     
diff -ruN libgui_orig/src/tkWinPrintText.c libgui/src/tkWinPrintText.c
--- libgui_orig/src/tkWinPrintText.c	2001-09-09 00:34:48.000000000 +0200
+++ libgui/src/tkWinPrintText.c	2012-03-22 13:56:42.037502500 +0100
@@ -243,13 +243,11 @@
     DLine *dlPtr;
     TkWinDrawable *PrinterDrawable;
     Tk_Window tkwin;
-    Tk_Item *itemPtr;
     int maxHeight;
     DLine *prevPtr;
     Pixmap pixmap;
-    int bottomY = 0;		/* Initialization needed only to stop
-				 * compiler warnings. */
-    DOCINFO *lpdi = (DOCINFO *) ckalloc(sizeof(DOCINFO));
+
+    DOCINFOA *lpdi = (DOCINFOA *) ckalloc(sizeof(DOCINFOA));
     TkTextIndex first, last;
     int numLines;
     HDC hDCpixmap;
@@ -292,7 +290,7 @@
     memset(lpdi,0,sizeof(DOCINFO));
     lpdi->cbSize=sizeof(DOCINFO);
     lpdi->lpszDocName = (LPCSTR) ckalloc(255);
-    sprintf((char*)lpdi->lpszDocName,"SN - Printing\0");
+    strcpy((char*)lpdi->lpszDocName,"SN - Printing\0");
     lpdi->lpszOutput=NULL;
 
     textPtr = (TkText *)(textCmd.clientData);
@@ -358,16 +356,22 @@
     /* Make the text widget big enough for all the
     text to be seen. */
 
+#if (TCL_MAJOR_VERSION >= 8) && (TCL_MINOR_VERSION >= 5)
+    numLines = TkBTreeNumLines(textPtr->sharedTextPtr->tree,textPtr);
+    TkTextMakeByteIndex(textPtr->sharedTextPtr->tree, textPtr, 0, 0, &first);
+    TkTextMakeByteIndex(textPtr->sharedTextPtr->tree, textPtr, numLines, 100, &last);	 
+    TkTextChanged(textPtr->sharedTextPtr, textPtr, &first, &last);
+#elif (TCL_MAJOR_VERSION >= 8) && (TCL_MINOR_VERSION >= 1)
     numLines = TkBTreeNumLines(textPtr->tree);
-#if (TCL_MAJOR_VERSION >= 8) && (TCL_MINOR_VERSION >= 1)
     TkTextMakeByteIndex(textPtr->tree, 0, 0, &first);
     TkTextMakeByteIndex(textPtr->tree, numLines, 100, &last);
+    TkTextChanged(textPtr, &first, &last);
 #else
+    numLines = TkBTreeNumLines(textPtr->tree);
     TkTextMakeIndex(textPtr->tree, 0, 0, &first);
     TkTextMakeIndex(textPtr->tree, numLines, 100, &last);
-#endif
     TkTextChanged(textPtr, &first, &last);
-
+#endif
     /*
      * Set the display info flag to out-of-date.
      */
@@ -403,7 +407,7 @@
 
     tiles_high = ( maxHeight / page_Y_size ); /* start at page zero */
 
-    StartDoc(pd.hDC,lpdi);
+    StartDocA(pd.hDC,lpdi);
     for (tile_y = 0; tile_y <= tiles_high;tile_y++) {
 	SetViewportOrgEx(pd.hDC,0,-(tile_y*Ptr_pixY),NULL);
 
@@ -437,8 +441,11 @@
     /*
      * Pitch the info again.
      */
+    #if (TCL_MAJOR_VERSION >= 8) && (TCL_MINOR_VERSION >= 5)
+    TkTextChanged(textPtr->sharedTextPtr,textPtr, &first, &last);
+    #else
     TkTextChanged(textPtr, &first, &last);
-
+    #endif
     /*
      * Display info not valid anymore.
      */
@@ -455,14 +462,6 @@
     return TCL_ERROR;
 }
 
-
-
-static void 
-ide_delete_print_text_command(ClientData clientData)
-{
-  /* destructor code here.*/
-}
-
 int
 ide_create_print_text_command (Tcl_Interp *interp)
 {
@@ -498,7 +497,7 @@
     register TkTextDispChunk *chunkPtr;
     TextDInfo *dInfoPtr = textPtr->dInfoPtr;
     Display *display;
-    int height, x;
+    int x;
 
     /*
      * First, clear the area of the line to the background color for the
@@ -518,21 +517,36 @@
 	    continue;
 	} else {
 	    x = chunkPtr->x + dInfoPtr->x - dInfoPtr->curPixelOffset;
+       #if (TCL_MAJOR_VERSION >= 8) && (TCL_MINOR_VERSION >= 5)
+	    if ((x + chunkPtr->width <= 0) || (x >= dInfoPtr->maxX)) {
+	        (*chunkPtr->displayProc)(textPtr, chunkPtr, -chunkPtr->width,
+		    dlPtr->y,
+		    dlPtr->height - dlPtr->spaceAbove - dlPtr->spaceBelow,
+		    dlPtr->baseline - dlPtr->spaceAbove, display, (Drawable)drawable,
+		    dlPtr->y + dlPtr->spaceAbove);
+	    } else {
+	        (*chunkPtr->displayProc)(textPtr, chunkPtr, x, dlPtr->y,
+		    dlPtr->height - dlPtr->spaceAbove - dlPtr->spaceBelow,
+		    dlPtr->baseline - dlPtr->spaceAbove, display, (Drawable)drawable,
+		    dlPtr->y + dlPtr->spaceAbove);
+	    }
+	    #else
 	    if ((x + chunkPtr->width <= 0) || (x >= dInfoPtr->maxX)) {
 	        (*chunkPtr->displayProc)(chunkPtr, -chunkPtr->width,
 		    dlPtr->y,
 		    dlPtr->height - dlPtr->spaceAbove - dlPtr->spaceBelow,
-		    dlPtr->baseline - dlPtr->spaceAbove, display, (unsigned long)drawable,
+		    dlPtr->baseline - dlPtr->spaceAbove, display, (Drawable)drawable,
 		    dlPtr->y + dlPtr->spaceAbove);
 	    } else {
 	        (*chunkPtr->displayProc)(chunkPtr, x, dlPtr->y,
 		    dlPtr->height - dlPtr->spaceAbove - dlPtr->spaceBelow,
-		    dlPtr->baseline - dlPtr->spaceAbove, display, (unsigned long)drawable,
+		    dlPtr->baseline - dlPtr->spaceAbove, display, (Drawable)drawable,
 		    dlPtr->y + dlPtr->spaceAbove);
 	    }
+	    #endif
 	}
     }
 
 }
 
-#endif /* _WIN */
+#endif /* _WIN32 */

^ permalink raw reply	[flat|nested] 5+ messages in thread
* [PATCH] libgui: Make it compileable on windows with recent gcc versions and also on win64
@ 2012-03-23 10:22 Roland Schwingel
  2012-05-24 21:35 ` Keith Seitz
  0 siblings, 1 reply; 5+ messages in thread
From: Roland Schwingel @ 2012-03-23 10:22 UTC (permalink / raw)
  To: insight

[-- Attachment #1: Type: text/plain, Size: 3199 bytes --]

Hi...

The attached patch fixes the major problems of libgui on native windows 
(mingw) regarding compilation and 64bit. It also adjusts to new tcl/tk 
versions. There are still some warnings left I have to adress later but 
in the current shape it runs here now successfully for some weeks.

This is just a first rough version. More polishing here is needed. There 
are also a bunch dead code in which can be removed.

Changelog:

2012-03-23  Roland Schwingel <roland.schwingel@onevision.com>

     * src/subcommand.c,src/subcommand.h
     (subcommand_implementation,ide_create_command_with_subcommands):
     Make some params const to match tcl/tk changes.
     * src/tclcursor.c (get_cursor_size,get_cursor_position): Ditto.
     * src/tclmsgbox.c: Include windows.h early.
     (msgbox_init,msgbox_exit): Take care about encodings to windows 
functions.
     (msgbox_thread): Use correct api call here.
     (msgbox_internal,msgbox): Make CONST84 where needed.
     * src/tclwinmode.c (seterrormode_command): Ditto.
     * src/tclshellexe.c (shell_execute_command): Ditto. Plus correct 
cast return
     value to shut up 64bit gcc.
     * src/tclwinfont.c (win_choose_font): Make CONST84 where needed and
     use dedicated windows api.
     * src/tclwinprint.c (winprint_page_setup_command): Make 
const/CONST84 where needed.
     
(winprint_print_text_options,winprint_print_text_invoke,winprint_print_command): 
Ditto.
     (winprint_print_text_invoke,): Ditto.
     (winprint_start,winprint_print_commandwinprint_abort_command): use 
dedicated windows structs/api.
     * src/tkTable.c: Obsolete old dprint stuff.
     
(StringifyObjects,Tk_TableObjCmd,TableWidgetObjCmd,TableConfigure,TableFetchSelection): 
adjust const.
     (selCmdNames,commandNames,updateOpts): make const.
     * src/tkTable.h: Adjust windows includes. include stdint.h. define 
CONST86 if missing. Deine
     PTR2INT/INT2PTR taken from tcl if missing. Make some functions const.
     * src/tkTableCmds.c: Make bdCmdNames and clearnames CONST84.
     * src/tkTableEdit.c: Make modCmdNamesand rcCmdNames CONST84.
     * src/tkTableTag.c: Make tagCmdNames CONST84.
     (TableTagGetEntry): Make param argcv CONST84.
     (TableInitTags): Make some internal strings CONST84.
     (FindRowColTag): Ditto.
     (Table_TagCmd): Ditto.
     * src/tkTableUtil.c (TableOptionBdSet):Ditto.
     (TableOptionBdGet): Make retval CONST86. Fix ptr/int arithmetics.
     (Cmd_OptionSet): Make param value CONST84.
     (Cmd_OptionGet): Make retval CONST86.
     * src/tkTableWin.c (StickyPrintProc): Ditto. Make some internal 
strings CONST84.
     (StickyParseProc): Make param value CONST84.
     * src/tkWarpPointer.c: Include windows.h ahead of tk.h.
     (WarpPointer): Remove unused var.
     * src/tkWinPrintCanvas.c (PrintCanvasCmd): use dedicated windows 
structs/api.
     Fix casting.
     * src/tkWinPrintText.c (PrintTextCmd): Add #if case for compiling 
against tcl 8.5 and up.
     use dedicated windows structs/api.
     (ide_delete_print_text_command): Delete unused static function.
     (DisplayDLineToDrawable): Add #if case for compiling against tcl 
8.5 and up. Fix casting.

Any comments? Is this ok?

Roland


[-- Attachment #2: libgui_src.base.patch --]
[-- Type: text/plain, Size: 31388 bytes --]

diff -ruN libgui_orig/src/subcommand.c libgui/src/subcommand.c
--- libgui_orig/src/subcommand.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/subcommand.c	2012-02-24 13:53:50.760585300 +0100
@@ -34,7 +34,7 @@
    table.  */
 static int
 subcommand_implementation (ClientData cd, Tcl_Interp *interp,
-			   int argc, char *argv[])
+			   int argc,CONST84 char *argv[])
 {
   struct subcommand_clientdata *data = (struct subcommand_clientdata *) cd;
   const struct ide_subcommand_table *commands = data->commands;
@@ -90,7 +90,7 @@
 
 /* Define a command with subcommands.  */
 int
-ide_create_command_with_subcommands (Tcl_Interp *interp, char *name,
+ide_create_command_with_subcommands (Tcl_Interp *interp, const char *name,
 				     const struct ide_subcommand_table *table,
 				     ClientData subdata,
 				     Tcl_CmdDeleteProc *delete)
diff -ruN libgui_orig/src/subcommand.h libgui/src/subcommand.h
--- libgui_orig/src/subcommand.h	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/subcommand.h	2012-02-24 13:52:36.539002400 +0100
@@ -21,7 +21,7 @@
 
 /* Define a command with subcommands.  */
 int ide_create_command_with_subcommands
-  (Tcl_Interp *interp, char *name, const struct ide_subcommand_table *table,
+  (Tcl_Interp *interp, const char *name, const struct ide_subcommand_table *table,
    ClientData, Tcl_CmdDeleteProc *);
 
 #ifdef __cplusplus
diff -ruN libgui_orig/src/tclcursor.c libgui/src/tclcursor.c
--- libgui_orig/src/tclcursor.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tclcursor.c	2012-02-24 14:02:44.176135300 +0100
@@ -25,7 +25,7 @@
 #include "subcommand.h"
 
 static int
-get_cursor_size (ClientData cd, Tcl_Interp *interp, int argc, char *argv[])
+get_cursor_size (ClientData cd, Tcl_Interp *interp, int argc,CONST84 char *argv[])
 {
   char buf[30];
 
@@ -38,7 +38,7 @@
 }
 
 static int
-get_cursor_position (ClientData cd, Tcl_Interp *interp, int argc, char *argv[])
+get_cursor_position (ClientData cd, Tcl_Interp *interp, int argc,CONST84 char *argv[])
 {
   POINT where;
   char buf[30];
diff -ruN libgui_orig/src/tclmsgbox.c libgui/src/tclmsgbox.c
--- libgui_orig/src/tclmsgbox.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tclmsgbox.c	2012-02-24 13:33:44.464962700 +0100
@@ -4,11 +4,11 @@
 
 #ifdef _WIN32
 
+#include <windows.h>
+
 #include <tcl.h>
 #include <tk.h>
 
-#include <windows.h>
-
 /* FIXME: We use some internal Tcl and Tk Windows stuff.  */
 #include <tkWinInt.h>
 
@@ -96,7 +96,7 @@
   class.hInstance = TclWinGetTclInstance();
   class.hbrBackground = NULL;
   class.lpszMenuName = NULL;
-  class.lpszClassName = "ide_messagebox";
+  class.lpszClassName = TEXT("ide_messagebox");
   class.lpfnWndProc = msgbox_wndproc;
   class.hIcon = NULL;
   class.hCursor = NULL;
@@ -104,7 +104,7 @@
   if (! RegisterClass (&class))
     return TCL_ERROR;
 
-  hidden_hwnd = CreateWindow ("ide_messagebox", "ide_messagebox", WS_TILED,
+  hidden_hwnd = CreateWindow (TEXT("ide_messagebox"), TEXT("ide_messagebox"), WS_TILED,
 			      0, 0, 0, 0, NULL, NULL, class.hInstance, NULL);
   if (hidden_hwnd == NULL)
     return TCL_ERROR;
@@ -119,7 +119,7 @@
 {
   if (hidden_hwnd != NULL)
     {
-      UnregisterClass ("ide_messagebox", TclWinGetTclInstance ());
+      UnregisterClass (TEXT("ide_messagebox"), TclWinGetTclInstance ());
       DestroyWindow (hidden_hwnd);
       hidden_hwnd = NULL;
 
@@ -136,7 +136,7 @@
 {
   struct msgbox_data *md = (struct msgbox_data *) arg;
 
-  md->result = MessageBox (md->hwnd, md->message, md->title,
+  md->result = MessageBoxA (md->hwnd, md->message, md->title,
 			   md->flags | MB_SETFOREGROUND);
   PostMessage (md->hidden_hwnd, MSGBOX_MESSAGE, 0, (LPARAM) arg);
   return 0;
@@ -241,18 +241,18 @@
 
 static int
 msgbox_internal (ClientData clientData, Tcl_Interp *interp, int argc,
-		 char **argv, char *code)
+		 CONST84 char **argv, CONST84 char *code)
 {
     int flags;
     Tk_Window parent = NULL;
     HWND hWnd;
-    char *message = "";
-    char *title = "";
+    CONST84 char *message = "";
+    CONST84 char *title = "";
     int icon = MB_ICONINFORMATION;
     int type = MB_OK;
     int modal = MB_SYSTEMMODAL;
     int i, j;
-    char *defaultBtn = NULL;
+    CONST84 char *defaultBtn = NULL;
     int defaultBtnIdx = -1;
 
     for (i=1; i<argc; i+=2) {
@@ -430,7 +430,7 @@
 /* This is the ide_messageBox function.  */
 
 static int
-msgbox (ClientData cd, Tcl_Interp *interp, int argc, char **argv)
+msgbox (ClientData cd, Tcl_Interp *interp, int argc,CONST84 char **argv)
 {
   if (argc < 2)
     {
diff -ruN libgui_orig/src/tclshellexe.c libgui/src/tclshellexe.c
--- libgui_orig/src/tclshellexe.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tclshellexe.c	2012-03-22 15:49:59.547660300 +0100
@@ -16,12 +16,12 @@
 
 static int
 shell_execute_command (ClientData clientData, Tcl_Interp *interp,
-		       int argc, char *argv[])
+		       int argc, CONST84 char *argv[])
 {
-  char	*operation;
-  char	*file;
-  char	*param;
-  char	*dir;
+  CONST84 char	*operation;
+  CONST84 char	*file;
+  CONST84 char	*param;
+  CONST84 char	*dir;
   int	ret;
 
   if (argc < 3 || argc > 5)
@@ -55,7 +55,7 @@
   else
     dir = NULL;
 
-  ret = (int)ShellExecute(NULL, operation, file, param, dir, SW_SHOWNORMAL);
+  ret = (int)(ssize_t)ShellExecuteA(NULL, operation, file, param, dir, SW_SHOWNORMAL);
   if (ret <= 32)
     {
       Tcl_AppendResult(interp, strerror(ret), NULL);
diff -ruN libgui_orig/src/tclwinfont.c libgui/src/tclwinfont.c
--- libgui_orig/src/tclwinfont.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tclwinfont.c	2012-02-24 13:42:41.393703800 +0100
@@ -50,13 +50,13 @@
 /* Implement the ide_win_choose_font procedure.  */
 
 static int
-win_choose_font (ClientData cd, Tcl_Interp *interp, int argc, char **argv)
+win_choose_font (ClientData cd, Tcl_Interp *interp, int argc,CONST84 char **argv)
 {
-  char *deffont;
+  CONST84 char *deffont;
   Tk_Window parent;
   int i, oldMode;
-  CHOOSEFONT cf;
-  LOGFONT lf;
+  CHOOSEFONTA cf;
+  LOGFONTA lf;
   HDC hdc;
   HFONT hfont;
   char facebuf[LF_FACESIZE];
@@ -154,7 +154,7 @@
     }
 
   oldMode = Tcl_SetServiceMode(TCL_SERVICE_ALL);
-  if (! ChooseFont (&cf))
+  if (! ChooseFontA (&cf))
     {
       DWORD code;
 
@@ -191,7 +191,7 @@
      specification it will wind up with the font that the user expects
      to see.  Some of this code is taken from AllocFont.  */
 
-  hfont = CreateFontIndirect (&lf);
+  hfont = CreateFontIndirectA (&lf);
   if (hfont == NULL)
     {
       /* This should be impossible.  */
@@ -208,7 +208,7 @@
 
   hdc = GetDC (cf.hwndOwner);
   hfont = SelectObject (hdc, hfont);
-  GetTextFace (hdc, sizeof (facebuf), facebuf);
+  GetTextFaceA (hdc, sizeof (facebuf), facebuf);
   GetTextMetrics (hdc, &tm);
 
   Tcl_ResetResult (interp);
diff -ruN libgui_orig/src/tclwinmode.c libgui/src/tclwinmode.c
--- libgui_orig/src/tclwinmode.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tclwinmode.c	2012-02-24 14:06:55.963738000 +0100
@@ -28,7 +28,7 @@
 
 static int
 seterrormode_command (ClientData cd, Tcl_Interp *interp,
-		      int argc, char *argv[])
+		      int argc, CONST84 char *argv[])
 {
 #ifdef __CYGWIN32__
   int len, i;
diff -ruN libgui_orig/src/tclwinprint.c libgui/src/tclwinprint.c
--- libgui_orig/src/tclwinprint.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tclwinprint.c	2012-02-24 13:57:12.703864500 +0100
@@ -136,7 +136,7 @@
 
 static int
 winprint_page_setup_command (ClientData cd, Tcl_Interp *interp, int argc,
-			     char **argv)
+			     CONST84 char **argv)
 {
   struct winprint_data *wd = (struct winprint_data *) cd;
   Tk_Window parent;
@@ -258,13 +258,13 @@
   /* Whether to use the print dialog.  */
   int dialog;
   /* The parent window.  */
-  char *parent;
+  const char *parent;
   /* The document name.  */
-  char *name;
+  const char *name;
   /* The page procedure.  */
-  char *pageproc;
+  const char *pageproc;
   /* The init procedure. This is called once before printing. */
-  char *initproc;
+  const char *initproc;
   /* Print using PostScript? */
   int postscript;
 };
@@ -273,7 +273,7 @@
 
 static int
 winprint_print_text_options (struct winprint_data *wd, Tcl_Interp *interp,
-			     int argc, char **argv,
+			     int argc, const char **argv,
 			     struct print_text_options *pto)
 {
   int i;
@@ -458,7 +458,7 @@
 winprint_start (struct winprint_data *wd, Tcl_Interp *interp, PRINTDLG *pd,
 		const struct print_text_options *pto, int *cancelled)
 {
-  DOCINFO di;
+  DOCINFOA di;
 
   *cancelled = 0;
 
@@ -479,7 +479,7 @@
   di.lpszDatatype = NULL;
   di.fwType = 0;
 
-  if (StartDoc (pd->hDC, &di) <= 0)
+  if (StartDocA (pd->hDC, &di) <= 0)
     {
       if (GetLastError () == ERROR_CANCELLED)
 	*cancelled = 1;
@@ -527,7 +527,7 @@
 /* Invoke the query or page procedure for ide_winprint print_text.  */
 
 static int
-winprint_print_text_invoke (Tcl_Interp *interp, char *proc, const char *name,
+winprint_print_text_invoke (Tcl_Interp *interp, const char *proc, const char *name,
 			    enum winprint_query *result)
 {
   char *q;
@@ -557,11 +557,11 @@
 /* Implement ide_winprint print_text.  */
 static int
 winprint_print_command (ClientData cd, Tcl_Interp *interp, int argc,
-			     char **argv)
+			     CONST84 char **argv)
 {
   struct winprint_data *wd = (struct winprint_data *) cd;
-  char *queryproc;
-  char *textproc;
+  const char *queryproc;
+  const char *textproc;
   struct print_text_options pto;
   PRINTDLG pd;
   int cancelled;
@@ -829,7 +829,7 @@
 	      
 	      l = Tcl_GetStringFromObj (Tcl_GetObjResult (interp), &len);
 	      
-	      TextOut (pd.hDC, left, y, l, len);
+	      TextOutA (pd.hDC, left, y, l, len);
 	      y += lineheight;
 	      
 	      if (y >= bottom)
@@ -890,7 +890,7 @@
 
 static int
 winprint_abort_command (ClientData cd, Tcl_Interp *interp, int argc,
-			char **argv)
+			CONST84 char **argv)
 {
   struct winprint_data *wd = (struct winprint_data *) cd;
 
diff -ruN libgui_orig/src/tkTable.c libgui/src/tkTable.c
--- libgui_orig/src/tkTable.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tkTable.c	2012-02-24 15:25:18.870312200 +0100
@@ -24,20 +24,16 @@
 
 #include "tkTable.h"
 
-#ifdef DEBUG
-#include "dprint.h"
-#endif
-
 static char **	StringifyObjects _ANSI_ARGS_((int objc,
-			Tcl_Obj *CONST objv[]));
+			Tcl_Obj *const objv[]));
 
 static int	Tk_TableObjCmd _ANSI_ARGS_((ClientData clientData,
-			Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
+			Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]));
 
 static int	TableWidgetObjCmd _ANSI_ARGS_((ClientData clientData,
-			Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
+			Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]));
 static int	TableConfigure _ANSI_ARGS_((Tcl_Interp *interp,
-			Table *tablePtr, int objc, Tcl_Obj *CONST objv[],
+			Table *tablePtr, int objc, Tcl_Obj *const objv[],
 			int flags, int forceUpdate));
 static void	TableDestroy _ANSI_ARGS_((ClientData clientdata));
 static void	TableEventProc _ANSI_ARGS_((ClientData clientData,
@@ -65,7 +61,7 @@
  * enumerated types used to dispatch the widget command.
  */
 
-static char *selCmdNames[] = {
+static const char *selCmdNames[] = {
     "anchor", "clear", "includes", "present", "set", (char *)NULL
 };
 enum selCommand {
@@ -73,7 +69,7 @@
     CMD_SEL_SET
 };
 
-static char *commandNames[] = {
+static const char *commandNames[] = {
     "activate", "bbox", "border", "cget", "clear", "configure",
     "curselection", "curvalue", "delete", "get", "height",
     "hidden", "icursor", "index", "insert",
@@ -328,7 +324,7 @@
  * Keep this in sync with the above values.
  */
 
-static char *updateOpts[] = {
+static const char *updateOpts[] = {
     "-anchor",		"-background",	"-bg",		"-bd",	
     "-borderwidth",	"-cache",	"-command",	"-colorigin",
     "-cols",		"-colstretchmode",		"-coltagcommand",
@@ -1041,7 +1037,7 @@
     /* Do the configuration */
     argv = StringifyObjects(objc, objv);
     result = Tk_ConfigureWidget(interp, tablePtr->tkwin, tableSpecs,
-	    objc, argv, (char *) tablePtr, flags);
+	    objc, (CONST84 char **)argv, (char *) tablePtr, flags);
     ckfree((char *) argv);
     if (result != TCL_OK) {
 	return TCL_ERROR;
@@ -1679,12 +1675,6 @@
 	    invalidY+invalidHeight-1, &rowTo, &colTo);
     tablePtr->flags &= ~AVOID_SPANS;
 
-#ifdef DEBUG
-    tcl_dprintf(tablePtr->interp, "%d,%d => %d,%d",
-	    rowFrom+tablePtr->rowOffset, colFrom+tablePtr->colOffset,
-	    rowTo+tablePtr->rowOffset, colTo+tablePtr->colOffset);
-#endif
-
     /* 
      * Initialize colTagsCache hash table to cache column tag names.
      */
@@ -3377,7 +3367,7 @@
     Tcl_HashSearch search;
     int length, count, lastrow=0, needcs=0, r, c, listArgc, rslen=0, cslen=0;
     int numcols, numrows;
-    char **listArgv;
+    CONST84 char **listArgv;
 
     /* if we are not exporting the selection ||
      * we have no data source, return */
diff -ruN libgui_orig/src/tkTable.h libgui/src/tkTable.h
--- libgui_orig/src/tkTable.h	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tkTable.h	2012-03-22 15:50:05.366470500 +0100
@@ -15,9 +15,26 @@
 #ifndef _TKTABLE_H_
 #define _TKTABLE_H_
 
+#ifdef WIN32
+#   define WIN32_LEAN_AND_MEAN
+#   include <windows.h>
+#   undef WIN32_LEAN_AND_MEAN
+/* VC++ has an entry point called DllMain instead of DllEntryPoint */
+#   if defined(_MSC_VER)
+#	define DllEntryPoint DllMain
+#   endif
+#endif
+
+
 #include <string.h>
 #include <stdlib.h>
+#include <stdint.h>
 #include <tk.h>
+
+#ifndef CONST86
+#      define CONST86 CONST84
+#endif
+
 #ifdef MAC_TCL
 # include <Xatom.h>
 #else
@@ -46,16 +63,6 @@
 # define TCL_STORAGE_CLASS DLLIMPORT
 #endif
 
-#ifdef WIN32
-#   define WIN32_LEAN_AND_MEAN
-#   include <windows.h>
-#   undef WIN32_LEAN_AND_MEAN
-/* VC++ has an entry point called DllMain instead of DllEntryPoint */
-#   if defined(_MSC_VER)
-#	define DllEntryPoint DllMain
-#   endif
-#endif
-
 #if defined(WIN32) || defined(MAC_TCL)
 /* XSync call defined in the internals for some reason */
 #   ifndef XSync
@@ -506,17 +513,17 @@
 
 extern int	TableOptionBdSet _ANSI_ARGS_((ClientData clientData,
 			Tcl_Interp *interp, Tk_Window tkwin,
-			char *value, char *widgRec, int offset));
-extern char *	TableOptionBdGet _ANSI_ARGS_((ClientData clientData,
+			CONST84 char *value, char *widgRec, int offset));
+extern CONST86 char *	TableOptionBdGet _ANSI_ARGS_((ClientData clientData,
 			Tk_Window tkwin, char *widgRec, int offset,
 			Tcl_FreeProc **freeProcPtr));
 extern int	TableTagConfigureBd _ANSI_ARGS_((Table *tablePtr,
 			TableTag *tagPtr, char *oldValue, int nullOK));
 extern int	Cmd_OptionSet _ANSI_ARGS_((ClientData clientData,
 					   Tcl_Interp *interp,
-					   Tk_Window unused, char *value,
+					   Tk_Window unused, CONST84 char *value,
 					   char *widgRec, int offset));
-extern char *	Cmd_OptionGet _ANSI_ARGS_((ClientData clientData,
+extern CONST86 char *	Cmd_OptionGet _ANSI_ARGS_((ClientData clientData,
 					   Tk_Window unused, char *widgRec,
 					   int offset,
 					   Tcl_FreeProc **freeProcPtr));
@@ -631,6 +638,31 @@
 		(rowPtr), (colPtr))
 
 /*
+ * Macros used to cast between pointers and integers (e.g. when storing an int
+ * in ClientData), on 64-bit architectures they avoid gcc warning about "cast
+ * to/from pointer from/to integer of different size".
+ */
+
+#if !defined(INT2PTR) && !defined(PTR2INT)
+#   if defined(HAVE_INTPTR_T) || defined(intptr_t)
+#  define INT2PTR(p) ((void *)(intptr_t)(p))
+#  define PTR2INT(p) ((int)(intptr_t)(p))
+#   else
+#  define INT2PTR(p) ((void *)(p))
+#  define PTR2INT(p) ((int)(p))
+#   endif
+#endif
+#if !defined(UINT2PTR) && !defined(PTR2UINT)
+#   if defined(HAVE_UINTPTR_T) || defined(uintptr_t)
+#  define UINT2PTR(p) ((void *)(uintptr_t)(p))
+#  define PTR2UINT(p) ((unsigned int)(uintptr_t)(p))
+#   else
+#  define UINT2PTR(p) ((void *)(p))
+#  define PTR2UINT(p) ((unsigned int)(p))
+#   endif
+#endif
+
+/*
  * end of header
  * reset TCL_STORAGE_CLASS to DLLIMPORT.
  */
diff -ruN libgui_orig/src/tkTableCmds.c libgui/src/tkTableCmds.c
--- libgui_orig/src/tkTableCmds.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tkTableCmds.c	2012-03-22 15:50:15.428488200 +0100
@@ -306,7 +306,7 @@
     return TCL_OK;
 }
 \f
-static char *bdCmdNames[] = {
+static CONST84 char *bdCmdNames[] = {
     "mark", "dragto", (char *)NULL
 };
 enum bdCmd {
@@ -438,7 +438,7 @@
 }
 \f
 /* clear subcommands */
-static char *clearNames[] = {
+static CONST84 char *clearNames[] = {
     "all", "cache", "sizes", "tags", (char *)NULL
 };
 enum clearCommand {
diff -ruN libgui_orig/src/tkTableEdit.c libgui/src/tkTableEdit.c
--- libgui_orig/src/tkTableEdit.c	2001-09-09 00:34:47.000000000 +0200
+++ libgui/src/tkTableEdit.c	2012-03-22 15:50:23.727702800 +0100
@@ -20,7 +20,7 @@
 			int outOfBounds));
 
 /* insert/delete subcommands */
-static char *modCmdNames[] = {
+static CONST84 char *modCmdNames[] = {
     "active", "cols", "rows", (char *)NULL
 };
 enum modCmd {
@@ -28,7 +28,7 @@
 };
 
 /* insert/delete row/col switches */
-static char *rcCmdNames[] = {
+static CONST84 char *rcCmdNames[] = {
     "-keeptitles",	"-holddimensions",	"-holdselection",
     "-holdtags",	"-holdwindows",	"--",
     (char *) NULL
diff -ruN libgui_orig/src/tkTableTag.c libgui/src/tkTableTag.c
--- libgui_orig/src/tkTableTag.c	2002-06-07 10:59:44.000000000 +0200
+++ libgui/src/tkTableTag.c	2012-02-24 15:28:18.042081700 +0100
@@ -14,13 +14,13 @@
 #include "tkTable.h"
 
 static TableTag *TableTagGetEntry _ANSI_ARGS_((Table *tablePtr, char *name,
-	int objc, char **argv));
+	int objc, CONST84 char **argv));
 static unsigned int	TableTagGetPriority _ANSI_ARGS_((Table *tablePtr,
 	TableTag *tagPtr));
 static void	TableImageProc _ANSI_ARGS_((ClientData clientData, int x,
 	int y, int width, int height, int imageWidth, int imageHeight));
 
-static char *tagCmdNames[] = {
+static CONST84 char *tagCmdNames[] = {
     "celltag", "cget", "coltag", "configure", "delete", "exists",
     "includes", "lower", "names", "raise", "rowtag", (char *) NULL
 };
@@ -436,7 +436,7 @@
  *----------------------------------------------------------------------
  */
 static TableTag *
-TableTagGetEntry(Table *tablePtr, char *name, int objc, char **argv)
+TableTagGetEntry(Table *tablePtr, char *name, int objc, CONST84 char **argv)
 {
     Tcl_HashEntry *entryPtr;
     TableTag *tagPtr = NULL;
@@ -516,12 +516,12 @@
 void
 TableInitTags(Table *tablePtr)
 {
-    static char *activeArgs[]	= {"-bg", ACTIVE_BG, "-relief", "flat" };
-    static char *selArgs[]	= {"-bg", SELECT_BG, "-fg", SELECT_FG,
+    static CONST84 char *activeArgs[]	= {"-bg", ACTIVE_BG, "-relief", "flat" };
+    static CONST84 char *selArgs[]	= {"-bg", SELECT_BG, "-fg", SELECT_FG,
 				   "-relief", "sunken" };
-    static char *titleArgs[]	= {"-bg", DISABLED, "-fg", "white",
+    static CONST84 char *titleArgs[]	= {"-bg", DISABLED, "-fg", "white",
 				   "-relief", "flat", "-state", "disabled" };
-    static char *flashArgs[]	= {"-bg", "red" };
+    static CONST84 char *flashArgs[]	= {"-bg", "red" };
     /*
      * The order of creation is important to priority.
      */
@@ -568,7 +568,7 @@
 	    sprintf(buf, " %d", cell);
 	    Tcl_Preserve((ClientData) interp);
 	    if (Tcl_VarEval(interp, cmd, buf, (char *)NULL) == TCL_OK) {
-		char *name = Tcl_GetStringResult(interp);
+		CONST84_RETURN char *name = Tcl_GetStringResult(interp);
 		if (name && *name) {
 		    /*
 		     * If a result was returned, check to see if it is
@@ -976,10 +976,10 @@
 			(char *) tagPtr, (objc == 5) ?
 			Tcl_GetString(objv[4]) : NULL, 0);
 	    } else {
-		char **argv;
+		CONST84 char **argv;
 
 		/* Stringify */
-		argv = (char **) ckalloc((objc + 1) * sizeof(char *));
+		argv = (CONST84 char **) ckalloc((objc + 1) * sizeof(char *));
 		for (i = 0; i < objc; i++)
 		    argv[i] = Tcl_GetString(objv[i]);
 		argv[objc] = NULL;
diff -ruN libgui_orig/src/tkTableUtil.c libgui/src/tkTableUtil.c
--- libgui_orig/src/tkTableUtil.c	2001-09-09 00:34:48.000000000 +0200
+++ libgui/src/tkTableUtil.c	2012-02-24 12:27:11.311731300 +0100
@@ -41,16 +41,16 @@
     ClientData clientData;		/* Type of struct being set. */
     Tcl_Interp *interp;			/* Used for reporting errors. */
     Tk_Window tkwin;			/* Window containing table widget. */
-    char *value;			/* Value of option. */
+    CONST84 char *value;			/* Value of option. */
     char *widgRec;			/* Pointer to record for item. */
     int offset;				/* Offset into item. */
 {
     char **borderStr;
     int *bordersPtr, *bdPtr;
-    int type	= (int) clientData;
+    int type	= PTR2INT(clientData);
     int result	= TCL_OK;
     int argc;
-    char **argv;
+    CONST84 char **argv;
 
 
     if ((type == BD_TABLE) && (value[0] == '\0')) {
@@ -137,7 +137,7 @@
  *----------------------------------------------------------------------
  */
 
-char *
+CONST86 char *
 TableOptionBdGet(clientData, tkwin, widgRec, offset, freeProcPtr)
     ClientData clientData;		/* Type of struct being set. */
     Tk_Window tkwin;			/* Window containing canvas widget. */
@@ -147,7 +147,7 @@
 					 * information about how to reclaim
 					 * storage for return string. */
 {
-    register int type	= (int) clientData;
+    register int type	= PTR2INT(clientData);
 
     if (type == BD_TABLE) {
 	return ((TableTag *) (widgRec + offset))->borderStr;
@@ -183,7 +183,7 @@
 	char *oldValue, int nullOK)
 {
     int i, argc, result = TCL_OK;
-    char **argv;
+    CONST84 char **argv;
 
     /*
      * First check to see if the value really changed.
@@ -270,7 +270,7 @@
 
 int
 Cmd_OptionSet(ClientData clientData, Tcl_Interp *interp,
-	      Tk_Window unused, char *value, char *widgRec, int offset)
+	      Tk_Window unused, CONST84 char *value, char *widgRec, int offset)
 {
   Cmd_Struct *p = (Cmd_Struct *)clientData;
   int mode = Cmd_GetValue(p,value);
@@ -297,7 +297,7 @@
  *----------------------------------------------------------------------
  */
 
-char *
+CONST86 char *
 Cmd_OptionGet(ClientData clientData, Tk_Window unused,
 	      char *widgRec, int offset, Tcl_FreeProc **freeProcPtr)
 {
diff -ruN libgui_orig/src/tkTableWin.c libgui/src/tkTableWin.c
--- libgui_orig/src/tkTableWin.c	2001-09-09 00:34:48.000000000 +0200
+++ libgui/src/tkTableWin.c	2012-02-24 15:29:04.600424800 +0100
@@ -15,9 +15,9 @@
 #include "tkTable.h"
 
 static int	StickyParseProc _ANSI_ARGS_((ClientData clientData,
-			    Tcl_Interp *interp, Tk_Window tkwin, char *value,
+			    Tcl_Interp *interp, Tk_Window tkwin, CONST84 char *value,
 			    char *widgRec, int offset));
-static char *	StickyPrintProc _ANSI_ARGS_((ClientData clientData,
+static CONST86 char *	StickyPrintProc _ANSI_ARGS_((ClientData clientData,
 			    Tk_Window tkwin, char *widgRec, int offset,
 			    Tcl_FreeProc **freeProcPtr));
 
@@ -43,7 +43,7 @@
 };
 
 /* windows subcommands */
-static char *winCmdNames[] = {
+static const char *winCmdNames[] = {
     "cget", "configure", "delete", "move", "names", (char *) NULL
 };
 enum winCommand {
@@ -117,7 +117,7 @@
  *
  *----------------------------------------------------------------------
  */
-static char *
+static CONST86 char *
 StickyPrintProc(clientData, tkwin, widgRec, offset, freeProcPtr)
     ClientData clientData;		/* Ignored. */
     Tk_Window tkwin;			/* Window for text widget. */
@@ -163,7 +163,7 @@
     ClientData clientData;		/* Not used.*/
     Tcl_Interp *interp;			/* Used for reporting errors. */
     Tk_Window tkwin;			/* Window for text widget. */
-    char *value;			/* Value of option. */
+    CONST84 char *value;			/* Value of option. */
     char *widgRec;			/* Pointer to TkTextEmbWindow
 					 * structure. */
     int offset;				/* Offset into item (ignored). */
@@ -615,19 +615,19 @@
     Tcl_Interp *interp = tablePtr->interp;
     Tk_Window oldWindow;
     int i, result;
-    char **argv;
+    const char **argv;
 
     oldWindow = ewPtr->tkwin;
 
     /* Stringify */
-    argv = (char **) ckalloc((objc + 1) * sizeof(char *));
+    argv = (const char **) ckalloc((objc + 1) * sizeof(char *));
     for (i = 0; i < objc; i++)
 	argv[i] = Tcl_GetString(objv[i]);
     argv[i] = NULL;
     result = Tk_ConfigureWidget(interp, tablePtr->tkwin,
 				winConfigSpecs, objc, argv, (char *) ewPtr,
 				TK_CONFIG_ARGV_ONLY);
-    ckfree((char *) argv);
+    ckfree((const char *) argv);
     if (result != TCL_OK) {
 	return TCL_ERROR;
     }
diff -ruN libgui_orig/src/tkWarpPointer.c libgui/src/tkWarpPointer.c
--- libgui_orig/src/tkWarpPointer.c	2001-09-09 00:34:48.000000000 +0200
+++ libgui/src/tkWarpPointer.c	2012-02-24 15:29:15.586078900 +0100
@@ -24,12 +24,13 @@
 *	
 *
 * ---------------------------------------------------------------------------*/
-#include "tk.h"
 #ifdef _WIN32
 #include <windows.h>
 #include <winuser.h>
 #endif
 
+#include "tk.h"
+
 int
 WarpPointer (clientData, interp, objc, objv)
     ClientData clientData;
@@ -39,7 +40,6 @@
 {
     Tk_Window tkwin;
     int x, y;
-    char *str;
 
     if (objc != 4) {
       Tcl_WrongNumArgs(interp, 1, objv, "widgetId x y");
diff -ruN libgui_orig/src/tkWinPrintCanvas.c libgui/src/tkWinPrintCanvas.c
--- libgui_orig/src/tkWinPrintCanvas.c	2001-09-09 00:34:48.000000000 +0200
+++ libgui/src/tkWinPrintCanvas.c	2012-02-24 14:01:44.848274800 +0100
@@ -52,7 +52,7 @@
     int tiles_wide,tiles_high;
     int tile_y, tile_x;
     int screenX1, screenX2, screenY1, screenY2, width, height;
-    DOCINFO *lpdi = (DOCINFO *) ckalloc(sizeof(DOCINFO));
+    DOCINFOA *lpdi = (DOCINFOA *) ckalloc(sizeof(DOCINFOA));
 
     if (argc < 2) {
 	Tcl_AppendResult(interp, "wrong # args: should be \"",
@@ -75,7 +75,7 @@
     memset(lpdi,0,sizeof(DOCINFO));
     lpdi->cbSize=sizeof(DOCINFO);
     lpdi->lpszDocName= (LPCSTR) ckalloc(255);
-    sprintf((char*)lpdi->lpszDocName,"SN - Printing\0");
+    strcpy((char *)lpdi->lpszDocName,"SN - Printing");
     lpdi->lpszOutput=NULL;
 
     canvasPtr = (TkCanvas *)(canvCmd.clientData);
@@ -144,7 +144,7 @@
     tiles_high = ( widget_Y_size / page_Y_size ); /* start at zero */
     tiles_wide = ( widget_X_size / page_X_size ); /* start at zero */
 
-    StartDoc(pd.hDC,lpdi);
+    StartDocA(pd.hDC,lpdi);
 
     for (tile_x = 0; tile_x <= tiles_wide;tile_x++) {
     for (tile_y = 0; tile_y <= tiles_high;tile_y++) {
@@ -154,7 +154,7 @@
  	for (itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;
 		itemPtr = itemPtr->nextPtr) {
 	    (*itemPtr->typePtr->displayProc)((Tk_Canvas) canvasPtr, itemPtr,
-		    canvasPtr->display, (unsigned long) PrinterDrawable/*pixmap*/, screenX1, screenY1, width,
+		    canvasPtr->display, (Drawable) PrinterDrawable/*pixmap*/, screenX1, screenY1, width,
 		    height);
 	}
     
diff -ruN libgui_orig/src/tkWinPrintText.c libgui/src/tkWinPrintText.c
--- libgui_orig/src/tkWinPrintText.c	2001-09-09 00:34:48.000000000 +0200
+++ libgui/src/tkWinPrintText.c	2012-03-22 13:56:42.037502500 +0100
@@ -243,13 +243,11 @@
     DLine *dlPtr;
     TkWinDrawable *PrinterDrawable;
     Tk_Window tkwin;
-    Tk_Item *itemPtr;
     int maxHeight;
     DLine *prevPtr;
     Pixmap pixmap;
-    int bottomY = 0;		/* Initialization needed only to stop
-				 * compiler warnings. */
-    DOCINFO *lpdi = (DOCINFO *) ckalloc(sizeof(DOCINFO));
+
+    DOCINFOA *lpdi = (DOCINFOA *) ckalloc(sizeof(DOCINFOA));
     TkTextIndex first, last;
     int numLines;
     HDC hDCpixmap;
@@ -292,7 +290,7 @@
     memset(lpdi,0,sizeof(DOCINFO));
     lpdi->cbSize=sizeof(DOCINFO);
     lpdi->lpszDocName = (LPCSTR) ckalloc(255);
-    sprintf((char*)lpdi->lpszDocName,"SN - Printing\0");
+    strcpy((char*)lpdi->lpszDocName,"SN - Printing\0");
     lpdi->lpszOutput=NULL;
 
     textPtr = (TkText *)(textCmd.clientData);
@@ -358,16 +356,24 @@
     /* Make the text widget big enough for all the
     text to be seen. */
 
+#if (TCL_MAJOR_VERSION >= 8) && (TCL_MINOR_VERSION >= 5)
+    numLines = TkBTreeNumLines(textPtr->sharedTextPtr->tree,textPtr);
+    TkTextMakeByteIndex(textPtr->sharedTextPtr->tree, textPtr, 0, 0, &first);
+    TkTextMakeByteIndex(textPtr->sharedTextPtr->tree, textPtr, numLines, 100, &last);	 
+    TkTextChanged(textPtr->sharedTextPtr, textPtr, &first, &last);
+#elif (TCL_MAJOR_VERSION >= 8) && (TCL_MINOR_VERSION >= 1)
     numLines = TkBTreeNumLines(textPtr->tree);
-#if (TCL_MAJOR_VERSION >= 8) && (TCL_MINOR_VERSION >= 1)
     TkTextMakeByteIndex(textPtr->tree, 0, 0, &first);
     TkTextMakeByteIndex(textPtr->tree, numLines, 100, &last);
+    TkTextChanged(textPtr, &first, &last);
 #else
+    numLines = TkBTreeNumLines(textPtr->tree);
     TkTextMakeIndex(textPtr->tree, 0, 0, &first);
     TkTextMakeIndex(textPtr->tree, numLines, 100, &last);
-#endif
     TkTextChanged(textPtr, &first, &last);
-
+#endif
     /*
      * Set the display info flag to out-of-date.
      */
@@ -403,7 +409,7 @@
 
     tiles_high = ( maxHeight / page_Y_size ); /* start at page zero */
 
-    StartDoc(pd.hDC,lpdi);
+    StartDocA(pd.hDC,lpdi);
     for (tile_y = 0; tile_y <= tiles_high;tile_y++) {
 	SetViewportOrgEx(pd.hDC,0,-(tile_y*Ptr_pixY),NULL);
 
@@ -437,8 +443,13 @@
     /*
      * Pitch the info again.
      */
+    #if (TCL_MAJOR_VERSION >= 8) && (TCL_MINOR_VERSION >= 5)
+    TkTextChanged(textPtr->sharedTextPtr,textPtr, &first, &last);
+    #else
     TkTextChanged(textPtr, &first, &last);
-
+    #endif
     /*
      * Display info not valid anymore.
      */
@@ -455,14 +466,6 @@
     return TCL_ERROR;
 }
 
-
-
-static void 
-ide_delete_print_text_command(ClientData clientData)
-{
-  /* destructor code here.*/
-}
-
 int
 ide_create_print_text_command (Tcl_Interp *interp)
 {
@@ -498,7 +501,7 @@
     register TkTextDispChunk *chunkPtr;
     TextDInfo *dInfoPtr = textPtr->dInfoPtr;
     Display *display;
-    int height, x;
+    int x;
 
     /*
      * First, clear the area of the line to the background color for the
@@ -518,21 +521,36 @@
 	    continue;
 	} else {
 	    x = chunkPtr->x + dInfoPtr->x - dInfoPtr->curPixelOffset;
+       #if (TCL_MAJOR_VERSION >= 8) && (TCL_MINOR_VERSION >= 5)
+	    if ((x + chunkPtr->width <= 0) || (x >= dInfoPtr->maxX)) {
+	        (*chunkPtr->displayProc)(textPtr, chunkPtr, -chunkPtr->width,
+		    dlPtr->y,
+		    dlPtr->height - dlPtr->spaceAbove - dlPtr->spaceBelow,
+		    dlPtr->baseline - dlPtr->spaceAbove, display, (Drawable)drawable,
+		    dlPtr->y + dlPtr->spaceAbove);
+	    } else {
+	        (*chunkPtr->displayProc)(textPtr, chunkPtr, x, dlPtr->y,
+		    dlPtr->height - dlPtr->spaceAbove - dlPtr->spaceBelow,
+		    dlPtr->baseline - dlPtr->spaceAbove, display, (Drawable)drawable,
+		    dlPtr->y + dlPtr->spaceAbove);
+	    }
+	    #else
 	    if ((x + chunkPtr->width <= 0) || (x >= dInfoPtr->maxX)) {
 	        (*chunkPtr->displayProc)(chunkPtr, -chunkPtr->width,
 		    dlPtr->y,
 		    dlPtr->height - dlPtr->spaceAbove - dlPtr->spaceBelow,
-		    dlPtr->baseline - dlPtr->spaceAbove, display, (unsigned long)drawable,
+		    dlPtr->baseline - dlPtr->spaceAbove, display, (Drawable)drawable,
 		    dlPtr->y + dlPtr->spaceAbove);
 	    } else {
 	        (*chunkPtr->displayProc)(chunkPtr, x, dlPtr->y,
 		    dlPtr->height - dlPtr->spaceAbove - dlPtr->spaceBelow,
-		    dlPtr->baseline - dlPtr->spaceAbove, display, (unsigned long)drawable,
+		    dlPtr->baseline - dlPtr->spaceAbove, display, (Drawable)drawable,
 		    dlPtr->y + dlPtr->spaceAbove);
 	    }
+	    #endif
 	}
     }
 
 }
 
-#endif /* _WIN */
+#endif /* _WIN32 */

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-08-08 13:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-08 13:37 [PATCH] libgui: Make it compileable on windows with recent gcc versions and also on win64 Roland Schwingel
  -- strict thread matches above, loose matches on Subject: below --
2012-05-25 12:00 Roland Schwingel
2012-06-04  1:13 ` Keith Seitz
2012-03-23 10:22 Roland Schwingel
2012-05-24 21:35 ` Keith Seitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).