diff -pruN coreutils-5.93/man/cp.1 coreutils-5.93-patched/man/cp.1
--- coreutils-5.93/man/cp.1	2005-11-05 23:13:18.000000000 +0100
+++ coreutils-5.93-patched/man/cp.1	2006-01-17 14:44:28.000000000 +0100
@@ -33,6 +33,9 @@ copy contents of special files when recu
 \fB\-d\fR
 same as \fB\-\-no\-dereference\fR \fB\-\-preserve\fR=\fIlink\fR
 .TP
+\fB\-D\fR
+shows progress in % while copying
+.TP
 \fB\-f\fR, \fB\-\-force\fR
 if an existing destination file cannot be
 opened, remove it and try again
diff -pruN coreutils-5.93/man/mv.1 coreutils-5.93-patched/man/mv.1
--- coreutils-5.93/man/mv.1	2005-11-05 23:13:20.000000000 +0100
+++ coreutils-5.93-patched/man/mv.1	2006-01-17 14:43:45.000000000 +0100
@@ -24,6 +24,9 @@ make a backup of each existing destinati
 \fB\-b\fR
 like \fB\-\-backup\fR but does not accept an argument
 .TP
+\fB\-D\fR
+shows progress in % while copying (only between file-systems)
+.TP
 \fB\-f\fR, \fB\-\-force\fR
 do not prompt before overwriting
 .TP
diff -pruN coreutils-5.93/src/copy.c coreutils-5.93-patched/src/copy.c
--- coreutils-5.93/src/copy.c	2005-09-25 05:07:33.000000000 +0200
+++ coreutils-5.93-patched/src/copy.c	2006-01-17 14:45:53.000000000 +0100
@@ -222,6 +222,8 @@ copy_reg (char const *src_name, char con
   off_t n_read_total = 0;
   bool last_write_made_hole = false;
   bool make_holes = false;
+  int t_read = 0;
+  int p_stat = 0;
 
   source_desc = open (src_name, O_RDONLY | O_BINARY);
   if (source_desc < 0)
@@ -382,12 +384,40 @@ copy_reg (char const *src_name, char con
       if (ip == NULL)
 	{
 	  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_name));
 	      return_val = false;
 	      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 = false;
 	}
     }
diff -pruN coreutils-5.93/src/copy.h coreutils-5.93-patched/src/copy.h
--- coreutils-5.93/src/copy.h	2005-07-03 11:31:19.000000000 +0200
+++ coreutils-5.93-patched/src/copy.h	2006-01-17 14:43:45.000000000 +0100
@@ -82,6 +82,8 @@ enum Dereference_symlink
 struct cp_options
 {
   enum backup_type backup_type;
+  int dotted_copy_style;
+  /* If 1, shows x% copied */
 
   /* If true, copy all files except (directories and, if not dereferencing
      them, symbolic links,) as if they were regular files.  */
diff -pruN coreutils-5.93/src/cp.c coreutils-5.93-patched/src/cp.c
--- coreutils-5.93/src/cp.c	2005-09-16 09:50:33.000000000 +0200
+++ coreutils-5.93-patched/src/cp.c	2006-01-17 14:46:27.000000000 +0100
@@ -173,6 +173,9 @@ Mandatory arguments to long options are 
       --copy-contents          copy contents of special files when recursive\n\
   -d                           same as --no-dereference --preserve=link\n\
 "), stdout);
+      fputs(_("\
+  -D                           print copyprogress in %\n\
+"), stdout);
       fputs (_("\
   -f, --force                  if an existing destination file cannot be\n\
                                  opened, remove it and try again\n\
@@ -681,6 +684,7 @@ cp_option_init (struct cp_options *x)
   x->chown_privileges = chown_privileges ();
   x->move_mode = false;
   x->one_file_system = false;
+  x->dotted_copy_style = 0;
 
   x->preserve_ownership = false;
   x->preserve_links = false;
@@ -811,7 +815,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, "abdfHilLprst:uvxPRS:T",
+  while ((c = getopt_long (argc, argv, "abdfDHilLprst:uvxPRS:T",
 			   long_opts, NULL))
 	 != -1)
     {
@@ -847,6 +851,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 = true;
 	  break;
diff -pruN coreutils-5.93/src/mv.c coreutils-5.93-patched/src/mv.c
--- coreutils-5.93/src/mv.c	2005-07-03 18:49:15.000000000 +0200
+++ coreutils-5.93-patched/src/mv.c	2006-01-17 14:44:55.000000000 +0100
@@ -133,6 +133,7 @@ cp_option_init (struct cp_options *x)
   x->symbolic_link = false;
   x->set_mode = false;
   x->mode = 0;
+  x->dotted_copy_style = 0;
   x->stdin_tty = isatty (STDIN_FILENO);
 
   /* Find out the current file creation mask, to knock the right bits
@@ -311,6 +312,7 @@ Mandatory arguments to long options are 
       fputs (_("\
       --backup[=CONTROL]       make a backup of each existing destination file\n\
   -b                           like --backup but does not accept an argument\n\
+  -D                           print moveprogress in %\n\
   -f, --force                  do not prompt before overwriting\n\
   -i, --interactive            prompt before overwrite\n\
 "), stdout);
@@ -375,7 +377,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, "bfit:uvS:T", long_options, NULL))
+  while ((c = getopt_long (argc, argv, "bDfit:uvS:T", long_options, NULL))
 	 != -1)
     {
       switch (c)
@@ -385,6 +387,9 @@ main (int argc, char **argv)
 	  if (optarg)
 	    version_control_string = optarg;
 	  break;
+	case 'D':
+	  x.dotted_copy_style = 1;
+	  break;
 	case 'f':
 	  x.interactive = I_ALWAYS_YES;
 	  break;
