diff -pruN coreutils-5.0-old/src/copy.c coreutils-5.0/src/copy.c
--- coreutils-5.0-old/src/copy.c	2003-03-11 19:02:23.000000000 +0100
+++ coreutils-5.0/src/copy.c	2003-04-27 12:06:30.000000000 +0200
@@ -219,6 +219,8 @@ copy_reg (const char *src_path, const ch
   off_t n_read_total = 0;
   int last_write_made_hole = 0;
   int make_holes = (x->sparse_mode == SPARSE_ALWAYS);
+  int t_read = 0;
+  int p_stat = 0;
 
   source_desc = open (src_path, O_RDONLY);
   if (source_desc < 0)
@@ -372,12 +374,40 @@ copy_reg (const char *src_path, const ch
       if (ip == 0)
 	{
 	  size_t n = n_read;
-	  if (full_write (dest_desc, buf, n) != n)
+ 	  int n_written = 0;
+ 	  n_written = full_write (dest_desc, buf, n_read);
+ 	  if (n_written < 0)
 	    {
 	      error (0, errno, _("writing %s"), quote (dst_path));
 	      return_val = -1;
 	      goto close_src_and_dst_desc;
 	    }
+ 	  else if (x->dotted_copy_style)
+ 	    { /* TODO: insert dotted copy style */
+ 	      int f_size = (int)sb.st_size;
+ 	      t_read += n_written;
+ 	      if ( (int)(((float)t_read / (float)f_size) * 100) > p_stat)
+ 	        {
+ 		  p_stat = (int)(((float)t_read / (float)f_size) * 100);
+ 		  if (p_stat < 100)
+ 		    {
+ 		      if (p_stat < 10)
+ 		        {
+ 		          printf("\r%s:   %i%% copied", quote (src_path), p_stat);
+ 		        }
+ 		     else
+ 		        {
+ 			  printf("\r%s:  %i%% copied", quote (src_path), p_stat);
+ 		        }
+ 		    }
+ 		  else
+ 		    {
+ 		      printf("\r%s: %i%% copied\n", quote (src_path), p_stat);
+ 		    }
+ 		  fflush(stdout);
+ 	        }
+ 	    }
+ 	
 	  last_write_made_hole = 0;
 	}
     }
diff -pruN coreutils-5.0-old/src/copy.h coreutils-5.0/src/copy.h
--- coreutils-5.0-old/src/copy.h	2003-03-26 19:46:56.000000000 +0100
+++ coreutils-5.0/src/copy.h	2003-04-27 12:03:35.000000000 +0200
@@ -61,6 +61,8 @@ enum Dereference_symlink
 struct cp_options
 {
   enum backup_type backup_type;
+  int dotted_copy_style;
+  /* If 1, shows x% copied */
 
   /* If nonzero, copy all files except (directories and, if not dereferencing
      them, symbolic links,) as if they were regular files. */
diff -pruN coreutils-5.0-old/src/cp.c coreutils-5.0/src/cp.c
--- coreutils-5.0-old/src/cp.c	2003-03-09 08:56:08.000000000 +0100
+++ coreutils-5.0/src/cp.c	2003-04-27 12:03:35.000000000 +0200
@@ -723,6 +723,7 @@ cp_option_init (struct cp_options *x)
   x->myeuid = geteuid ();
   x->move_mode = 0;
   x->one_file_system = 0;
+  x->dotted_copy_style = 0;
 
   x->preserve_ownership = 0;
   x->preserve_links = 0;
@@ -850,7 +851,7 @@ main (int argc, char **argv)
      we'll actually use backup_suffix_string.  */
   backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
 
-  while ((c = getopt_long (argc, argv, "abdfHilLprsuvxPRS:V:", long_opts, NULL))
+  while ((c = getopt_long (argc, argv, "abdDfHilLprsuvxPRS:V:", long_opts, NULL))
 	 != -1)
     {
       switch (c)
@@ -895,6 +896,10 @@ main (int argc, char **argv)
 	  x.dereference = DEREF_NEVER;
 	  break;
 
+	case 'D':
+	  x.dotted_copy_style = 1;
+	  break;
+
 	case 'f':
 	  x.unlink_dest_after_failed_open = 1;
 	  break;
