diff --git a/src/gc.c b/src/gc.c
index 40cda26e6343c08144abab8f6c3d5abf2e437dd0..c3825de50e3ffd3f348e39c11f2f34cd9351965b 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -30,7 +30,7 @@ struct callback *gc_evaluator_callback=0;
 
 #include "block_alloc.h"
 
-RCSID("$Id: gc.c,v 1.162 2001/07/01 18:17:30 mast Exp $");
+RCSID("$Id: gc.c,v 1.163 2001/07/01 21:05:08 mast Exp $");
 
 /* Run garbage collect approximately every time
  * 20 percent of all arrays, objects and programs is
@@ -95,8 +95,8 @@ RCSID("$Id: gc.c,v 1.162 2001/07/01 18:17:30 mast Exp $");
 #define GC_VERBOSE_DO(X)
 #endif
 
-INT32 num_objects = 3;		/* Account for *_empty_array. */
-INT32 num_allocs =0;
+int num_objects = 3;		/* Account for *_empty_array. */
+int num_allocs =0;
 ptrdiff_t alloc_threshold = MIN_ALLOC_THRESHOLD;
 PMOD_EXPORT int Pike_in_gc = 0;
 int gc_generation = 0;
@@ -239,9 +239,9 @@ static unsigned gc_extra_refs = 0;
 
 void dump_gc_info(void)
 {
-  fprintf(stderr,"Current number of objects: %ld\n",(long)num_objects);
-  fprintf(stderr,"Objects allocated total  : %ld\n",(long)num_allocs);
-  fprintf(stderr," threshold for next gc() : %ld\n",(long)alloc_threshold);
+  fprintf(stderr,"Current number of objects: %d\n",num_objects);
+  fprintf(stderr,"Objects allocated total  : %d\n",num_allocs);
+  fprintf(stderr," threshold for next gc() : %"PRINTPTRDIFFT"d\n",alloc_threshold);
   fprintf(stderr,"Average allocs per gc()  : %f\n",objects_alloced);
   fprintf(stderr,"Average frees per gc()   : %f\n",objects_freed);
   fprintf(stderr,"Second since last gc()   : %ld\n",
@@ -332,11 +332,11 @@ void describe_location(void *real_memblock,
     type=attempt_to_identify(memblock);
 
   if(memblock)
-    fprintf(stderr,"%*s-> from %s %p offset %ld\n",
+    fprintf(stderr,"%*s-> from %s %p offset %"PRINTPTRDIFFT"d\n",
 	    indent,"",
 	    get_name_of_type(type),
 	    memblock,
-	    DO_NOT_WARN((long)((char *)location - (char *)memblock)));
+	    (char *)location - (char *)memblock);
   else
     fprintf(stderr,"%*s-> at location %p%s\n",
 	    indent,"",
@@ -382,9 +382,8 @@ void describe_location(void *real_memblock,
 	 ptr < (char*)(p->inherits+p->num_inherits)) 
       {
 	e=((char *)ptr - (char *)(p->inherits)) / sizeof(struct inherit);
-	fprintf(stderr,"%*s  **In p->inherits[%ld] (%s)\n",indent,"",
-		DO_NOT_WARN((long)e),
-		p->inherits[e].name ? p->inherits[e].name->str : "no name");
+	fprintf(stderr,"%*s  **In p->inherits[%"PRINTPTRDIFFT"d] (%s)\n",indent,"",
+		e, p->inherits[e].name ? p->inherits[e].name->str : "no name");
 	break;
       }
 
@@ -394,9 +393,8 @@ void describe_location(void *real_memblock,
       {
 	e = ((char *)ptr - (char *)(p->constants)) /
 	  sizeof(struct program_constant);
-	fprintf(stderr,"%*s  **In p->constants[%ld] (%s)\n",indent,"",
-		DO_NOT_WARN((long)e),
-		p->constants[e].name ? p->constants[e].name->str : "no name");
+	fprintf(stderr,"%*s  **In p->constants[%"PRINTPTRDIFFT"d] (%s)\n",indent,"",
+		e, p->constants[e].name ? p->constants[e].name->str : "no name");
 	break;
       }
 
@@ -408,9 +406,8 @@ void describe_location(void *real_memblock,
 	e = ((char *)ptr - (char *)(p->identifiers)) /
 	  sizeof(struct identifier);
 
-	fprintf(stderr,"%*s  **In p->identifiers[%ld] (%s)\n",indent,"",
-		DO_NOT_WARN((long)e),
-		p->identifiers[e].name ?
+	fprintf(stderr,"%*s  **In p->identifiers[%"PRINTPTRDIFFT"d] (%s)\n",indent,"",
+		e, p->identifiers[e].name ?
 		(strlen(p->identifiers[e].name->str)<100 ? p->identifiers[e].name->str : "Name too long or already freed.."  )
 		: "no name");
 	break;
@@ -419,8 +416,8 @@ void describe_location(void *real_memblock,
 #define FOO(NTYP,TYP,NAME) \
     if(location == (void *)&p->NAME) fprintf(stderr,"%*s  **In p->" #NAME "\n",indent,""); \
     if(ptr >= (char *)p->NAME  && ptr<(char*)(p->NAME+p->PIKE_CONCAT(num_,NAME))) \
-      fprintf(stderr,"%*s  **In p->" #NAME "[%ld]\n",indent,"", \
-              PTRDIFF_T_TO_LONG(((char *)ptr - (char *)(p->NAME)) / sizeof(TYP)));
+      fprintf(stderr,"%*s  **In p->" #NAME "[%"PRINTPTRDIFFT"d]\n",indent,"", \
+              ((char *)ptr - (char *)(p->NAME)) / sizeof(TYP));
 #include "program_areas.h"
       
       break;
@@ -489,8 +486,8 @@ void describe_location(void *real_memblock,
     {
       struct array *a=(struct array *)descblock;
       struct svalue *s=(struct svalue *)location;
-      fprintf(stderr,"%*s  **In index number %ld\n",indent,"",
-	      DO_NOT_WARN((long)(s-ITEM(a))));
+      fprintf(stderr,"%*s  **In index number %"PRINTPTRDIFFT"d\n",indent,"",
+	      s-ITEM(a));
       break;
     }
 
@@ -859,8 +856,8 @@ void low_describe_something(void *a,
     case T_STRING:
     {
       struct pike_string *s=(struct pike_string *)a;
-      fprintf(stderr, "%*s**String length is %ld:\n", indent, "",
-	      DO_NOT_WARN((long)s->len));
+      fprintf(stderr, "%*s**String length is %"PRINTPTRDIFFT"d:\n",
+	      indent, "", s->len);
       if(s->len>77)
       {
 	fprintf(stderr,"%*s** \"%60s ...\"\n",indent,"",s->str);
@@ -925,7 +922,7 @@ void debug_describe_svalue(struct svalue *s)
   switch(s->type)
   {
     case T_INT:
-      fprintf(stderr,"    %ld\n",(long)s->u.integer);
+      fprintf(stderr,"    %"PRINTPIKEINT"d\n",s->u.integer);
       break;
 
     case T_FLOAT:
@@ -1698,6 +1695,7 @@ int gc_cycle_push(void *x, struct marker *m, int weak)
       }
       CYCLE_DEBUG_MSG(m, "gc_cycle_push, no live recurse");
     }
+
     else {
       /* We'll get here eventually in the normal recursion. Pop off
        * the remaining live recurse frames for the last thing. */
@@ -2105,7 +2103,7 @@ static void warn_bad_cycles()
 int do_gc(void)
 {
   double tmp;
-  int objs, pre_kill_objs;
+  ptrdiff_t objs, pre_kill_objs;
   double multiplier;
   struct array *a;
   struct multiset *l;
@@ -2209,8 +2207,9 @@ int do_gc(void)
    */
   call_callback(& gc_callbacks, (void *)0);
 
-  GC_VERBOSE_DO(fprintf(stderr, "| check: %u references checked, counted %lu weak refs\n",
-			checked, SIZE_T_TO_ULONG(gc_ext_weak_refs)));
+  GC_VERBOSE_DO(fprintf(stderr, "| check: %u references checked, "
+			"counted %"PRINTSIZET"u weak refs\n",
+			checked, gc_ext_weak_refs));
 
   Pike_in_gc=GC_PASS_MARK;
 
@@ -2242,9 +2241,9 @@ int do_gc(void)
 
   GC_VERBOSE_DO(fprintf(stderr,
 			"| mark: %u markers referenced, %u weak references freed,\n"
-			"|       %d things to free, got %lu tricky weak refs\n",
-			marked, weak_freed, delayed_freed,
-			SIZE_T_TO_ULONG(gc_ext_weak_refs)));
+			"|       %d things to free, "
+			"got %"PRINTSIZET"u tricky weak refs\n",
+			marked, weak_freed, delayed_freed, gc_ext_weak_refs));
 
   {
 #ifdef PIKE_DEBUG
@@ -2272,8 +2271,9 @@ int do_gc(void)
     if (NEXT(&rec_list) || gc_rec_last != &rec_list || gc_rec_top)
       fatal("Recurse list not empty or inconsistent after cycle check pass.\n");
     if (gc_ext_weak_refs != orig_ext_weak_refs)
-      fatal("gc_ext_weak_refs changed from %lu to %lu in cycle check pass.\n",
-	    SIZE_T_TO_ULONG(orig_ext_weak_refs), SIZE_T_TO_ULONG(gc_ext_weak_refs));
+      fatal("gc_ext_weak_refs changed from %"PRINTSIZET"u "
+	    "to %"PRINTSIZET"u in cycle check pass.\n",
+	    orig_ext_weak_refs, gc_ext_weak_refs);
 #endif
 
     GC_VERBOSE_DO(fprintf(stderr,
@@ -2301,10 +2301,11 @@ int do_gc(void)
     gc_zap_ext_weak_refs_in_programs();
     GC_VERBOSE_DO(
       fprintf(stderr,
-	      "| zap weak: freed %ld external weak refs, %lu internal still around,\n"
+	      "| zap weak: freed %"PRINTPTRDIFFT"d external weak refs, "
+	      "%"PRINTSIZET"u internal still around,\n"
 	      "|           %d more things to free\n",
-	      PTRDIFF_T_TO_LONG(to_free - gc_ext_weak_refs),
-	      SIZE_T_TO_ULONG(gc_ext_weak_refs), delayed_freed - obj_count));
+	      to_free - gc_ext_weak_refs, gc_ext_weak_refs,
+	      delayed_freed - obj_count));
   }
 
 #ifdef PIKE_DEBUG
@@ -2502,12 +2503,13 @@ int do_gc(void)
   if(GC_VERBOSE_DO(1 ||) t_flag)
   {
 #ifdef HAVE_GETHRTIME
-    fprintf(stderr,"done (freed %ld of %ld things), %ld ms.\n",
-	    (long)objs,(long)objs + num_objects,
-	    (long)((gethrtime() - gcstarttime)/1000000));
+    fprintf(stderr,
+	    "done (freed %"PRINTPTRDIFFT"d of %"PRINTPTRDIFFT"d things), %ld ms.\n",
+	    objs, objs + num_objects, (long)((gethrtime() - gcstarttime)/1000000));
 #else
-    fprintf(stderr,"done (freed %ld of %ld things)\n",
-	    (long)objs,(long)objs + num_objects);
+    fprintf(stderr,
+	    "done (freed %"PRINTPTRDIFFT"d of %"PRINTPTRDIFFT"d things)\n",
+	    objs, objs + num_objects);
 #endif
   }
 #endif