diff -ruN kdrill6.5-old/grades.c kdrill6.5/grades.c
--- kdrill6.5-old/grades.c	2002-04-08 11:04:25.000000000 +0200
+++ kdrill6.5/grades.c	2008-04-28 14:10:57.000000000 +0200
@@ -11,6 +11,7 @@
 #include <Xaw/Command.h>
 #include <Xaw/Label.h>
 #include <Xaw/Form.h>
+#include <stdint.h>
 #include "defs.h"
 #include "externs.h"
 #include "game.h"
@@ -98,9 +99,10 @@
 	char statusbuff[100];
 	char statusprefix[100];
 	int grademask;
-	grademask = 1 << (int) data;
+	int intdata = (int)(intptr_t) data;
+	grademask = 1 << intdata;
 	
-	switch((int) data){
+	switch(intdata){
 		case 1:	case 2:
 		case 3:	case 4:
 		case 5: case 6:
@@ -124,8 +126,8 @@
 						
 					}
 					ReverseButton(w);
-					if((int) data <=6)
-						sprintf(statusprefix,"Grade %d unset: ",(int) data);
+					if(intdata <=6)
+						sprintf(statusprefix,"Grade %d unset: ",intdata);
 					else
 						sprintf(statusprefix,"Grade + unset: ");
 				}
@@ -134,8 +136,8 @@
 			/* nope.. turn on grade level */
 				ReverseButton(w);
 				gradelevelflags |= grademask;
-					if((int) data <=6)
-						sprintf(statusprefix,"Grade %d set: ",(int) data);
+					if(intdata <=6)
+						sprintf(statusprefix,"Grade %d set: ",intdata);
 					else
 						sprintf(statusprefix,"Grade + set: ");
 			}
diff -ruN kdrill6.5-old/kanasearch.c kdrill6.5/kanasearch.c
--- kdrill6.5-old/kanasearch.c	2004-01-26 07:57:17.000000000 +0100
+++ kdrill6.5/kanasearch.c	2008-04-28 14:04:45.000000000 +0200
@@ -227,8 +227,8 @@
 {
 	XChar2b CHAR;
 
-	CHAR.byte1 = ((int) data & 0xff00) >>8;
-	CHAR.byte2 = ((int) data & 0x00ff);
+	CHAR.byte1 = ((int)(intptr_t) data & 0xff00) >>8;
+	CHAR.byte2 = ((int)(intptr_t) data & 0x00ff);
 
 	if(((CHAR.byte1 == 0x21) && (CHAR.byte2 == 0x21))
 	   || CHAR.byte1 == 0)
@@ -261,7 +261,7 @@
 	char romajibuff[MAXROMAJI+1];
 	int kcount;
 
-	if((int)data == 2){
+	if((int)(intptr_t)data == 2){
 		/* toggle static variable */
 		popup_hirakana_mode = 1 - popup_hirakana_mode;
 
@@ -369,7 +369,7 @@
 				std_translations[max_kana][0].byte2;
 		XtAddCallback(kanawidgets[max_kana],
 			      XtNcallback, kanacallback,
-			      (XtPointer) kvalue);
+			      (XtPointer)(intptr_t) kvalue);
 		max_kana++;
 	}
 
diff -ruN kdrill6.5-old/kanjisearch.c kdrill6.5/kanjisearch.c
--- kdrill6.5-old/kanjisearch.c	2008-04-28 13:56:57.000000000 +0200
+++ kdrill6.5/kanjisearch.c	2008-04-28 14:07:24.000000000 +0200
@@ -60,7 +60,7 @@
 	int num;
 	int kcount;
 
-	num = (int)data;
+	num = (intptr_t)data;
 	
 	for(kcount=0; kcount<4; kcount++){
 		if(num == kcount)
@@ -82,7 +82,7 @@
 		return;
 	}
 	XtVaSetValues(kanjiquarters[quarter_up],
-		      XtNlabel, quarterchars[(int)data],
+		      XtNlabel, quarterchars[(int)(intptr_t)data],
 		      NULL);
 }
 
@@ -199,7 +199,7 @@
 		}
 		XtAddCallback(kanjiwidgets[kcount],
 			      XtNcallback, changequarter,
-			      (XtPointer) kcount);
+			      (XtPointer)(intptr_t) kcount);
 	}
 
 	XtVaSetValues(kanjiwidgets[10],
@@ -285,7 +285,7 @@
 	for(kcount=0; kcount<4; kcount++){
 		XtAddCallback(kanjiquarters[kcount],
 			      XtNcallback, selectquarter,
-			      (XtPointer) kcount);
+			      (XtPointer)(intptr_t) kcount);
 	}
 	XtAddCallback(search, XtNcallback, DoKanjiFind, (XtPointer) NULL);
 
diff -ruN kdrill6.5-old/learn.c kdrill6.5/learn.c
--- kdrill6.5-old/learn.c	2003-08-23 08:48:53.000000000 +0200
+++ kdrill6.5/learn.c	2008-04-28 14:13:37.000000000 +0200
@@ -155,7 +155,7 @@
 	/* Okay, the 0xff is ugly: its to avoid an irritating size-of-int
 	 * warning in casting
 	 */
-	showinorder=(Boolean)((int)client_data & 0xff);
+	showinorder=(Boolean)((int)(intptr_t)client_data & 0xff);
 	nowshowing=picktruevalue();
 	showinorder=save_show;
 	lastpicked=save_last;
diff -ruN kdrill6.5-old/mainwindow.c kdrill6.5/mainwindow.c
--- kdrill6.5-old/mainwindow.c	2003-08-23 08:26:10.000000000 +0200
+++ kdrill6.5/mainwindow.c	2008-04-28 14:11:29.000000000 +0200
@@ -12,6 +12,7 @@
 #include <Xaw/Command.h>
 #include <Xaw/Label.h>
 #include <Xaw/Form.h>
+#include <stdint.h>
 
 #include "defs.h"
 #include "game.h"
@@ -63,7 +64,7 @@
 	 * OR
 	 *   [change  kana<->english]
 	 */
-	int buttonpressed = (int) data;
+	int buttonpressed = (int)(intptr_t) data;
 #ifdef DEBUG
 	printf("button mode change: %d\n",buttonpressed);
 #endif
@@ -96,7 +97,7 @@
  */
 void ChangeQuestion(Widget w,XtPointer data,XtPointer calldata)
 {
-	int buttonpressed = (int) data;
+	int buttonpressed = (int)(intptr_t) data;
 
 #ifdef DEBUG
 	printf("changing question display\n");
@@ -170,6 +171,6 @@
  */
 void choicescallback(Widget w,XtPointer data,XtPointer calldata)
 {
-	guessvalue((int) data);
+	guessvalue((int)(intptr_t) data);
 }
 
diff -ruN kdrill6.5-old/multikanji.c kdrill6.5/multikanji.c
--- kdrill6.5-old/multikanji.c	2004-01-27 09:47:32.000000000 +0100
+++ kdrill6.5/multikanji.c	2008-04-28 14:05:51.000000000 +0200
@@ -204,7 +204,7 @@
  * Parallel function to ToggleUsefile()
  */
 void multiUcallback(Widget button, XtPointer data, XtPointer call_data){
-	TRANSLATION trans=transptrs[(int)data];
+	TRANSLATION trans=transptrs[(int)(intptr_t)data];
 	int kindex=trans_to_index(trans);
 
 	SetUseKanji(kindex,!InUsefile(kindex));
@@ -276,7 +276,7 @@
 			XtNlabel,"u",
 			NULL);
 
-		XtAddCallback(newu, XtNcallback, multiUcallback, (XtPointer)transcount);
+		XtAddCallback(newu, XtNcallback, multiUcallback, (XtPointer)(intptr_t)transcount);
 		usefiletoggles[transcount]=newu;
 
 	}
diff -ruN kdrill6.5-old/options.c kdrill6.5/options.c
--- kdrill6.5-old/options.c	2003-08-23 08:26:37.000000000 +0200
+++ kdrill6.5/options.c	2008-04-28 13:58:00.000000000 +0200
@@ -238,7 +238,7 @@
 
 	for(widgetcount=0;widgetcount<8;widgetcount++){
 		XtAddCallback(gradeButtons[widgetcount],XtNcallback,
-			      GradeCallback,(XtPointer) widgetcount);
+			      GradeCallback,(XtPointer)(intptr_t) widgetcount);
 	}
 	/* set labels properly */
 	printgrades();
diff -ruN kdrill6.5-old/skipsearch.c kdrill6.5/skipsearch.c
--- kdrill6.5-old/skipsearch.c	2005-11-03 05:33:31.000000000 +0100
+++ kdrill6.5/skipsearch.c	2008-04-28 14:13:09.000000000 +0200
@@ -101,7 +101,7 @@
 /*	int shapenum=(int)client_data;*/
 	
 	char newlabel[3];
-	sprintf(newlabel,"%1d",(int)client_data);
+	sprintf(newlabel,"%1d",(int)(intptr_t)client_data);
 	XtVaSetValues(SKIPnumberinput[1], XtNstring,   newlabel, NULL);
 }
 
@@ -114,7 +114,7 @@
 void SKIPcallbacks(Widget w,XtPointer client_data, XtPointer call_data)
 {
 	int scount;
-	int skipnum=(int)client_data;
+	int skipnum=(intptr_t)client_data;
 
 	if(skipnum==10) {
 		int s1,s2,s3;
@@ -338,7 +338,7 @@
 	for(scount=0; scount<4; scount++) {
 		XtAddCallback(SKIPcategories[scount],
 			      XtNcallback, SKIPcallbacks,
-			      (XtPointer) scount);
+			      (XtPointer)(intptr_t) scount);
 	}
 
 	XtAddCallback(SKIPshapeinput[0],XtNcallback, SKIPshapecallback,
diff -ruN kdrill6.5-old/widgets.c kdrill6.5/widgets.c
--- kdrill6.5-old/widgets.c	2006-03-05 23:08:58.000000000 +0100
+++ kdrill6.5/widgets.c	2008-04-28 13:59:10.000000000 +0200
@@ -506,7 +506,7 @@
 		XtAddEventHandler(choicesWidgets[i],ButtonPressMask,False,
 				  handle_button,NULL);
 		XtAddCallback(choicesWidgets[i],
-			      XtNcallback,choicescallback,(XtPointer) i);
+			      XtNcallback,choicescallback,(XtPointer)(intptr_t) i);
 
 	}
 	XtManageChildren(choicesWidgets,NUMBEROFCHOICES);
@@ -789,7 +789,7 @@
 			param+=1;
 			int_store = (*param)-'0';
 			GradeCallback(gradeButtons[int_store],
-				      (XtPointer) int_store,NULL);
+				      (XtPointer)(intptr_t) int_store,NULL);
 			break;
 
 		case 'T':
