diff -rc make-3.80-orig/job.c make-3.80/job.c
*** make-3.80-orig/job.c	2002-08-10 03:27:17.000000000 +0200
--- make-3.80/job.c	2004-04-02 17:38:04.000000000 +0200
***************
*** 987,993 ****
       appear.  */
  
    message (0, (just_print_flag || (!(flags & COMMANDS_SILENT) && !silent_flag))
! 	   ? "%s" : (char *) 0, p);
  
    /* Tell update_goal_chain that a command has been started on behalf of
       this target.  It is important that this happens here and not in
--- 987,993 ----
       appear.  */
  
    message (0, (just_print_flag || (!(flags & COMMANDS_SILENT) && !silent_flag))
! 	   ? "\e[3s\e[a%s\e[b" : (char *) 0, p);
  
    /* Tell update_goal_chain that a command has been started on behalf of
       this target.  It is important that this happens here and not in
diff -rc make-3.80-orig/main.c make-3.80/main.c
*** make-3.80-orig/main.c	2002-08-10 03:27:17.000000000 +0200
--- make-3.80/main.c	2004-04-02 17:42:50.000000000 +0200
***************
*** 254,259 ****
--- 254,263 ----
     they appear out of date or not.  */
  
  int always_make_flag = 0;
+ 
+ int logNestingStdout = 0;
+ int logNestingStderr = 0;
+ 
  
  /* The usage output.  We write it this way to make life easier for the
     translators, especially those trying to translate to right-to-left
***************
*** 827,832 ****
--- 831,845 ----
  }
  
  
+ static void closeNesting()
+ {
+   while (logNestingStdout--)
+     printf("\e[q");
+   while (logNestingStderr--)
+     fprintf(stderr, "\e[q");
+ }
+ 
+ 
  #ifndef _AMIGA
  int
  main (argc, argv, envp)
***************
*** 854,859 ****
--- 867,874 ----
    no_default_sh_exe = 1;
  #endif
  
+   atexit(closeNesting);
+ 
    default_goal_file = 0;
    reading_file = 0;
  
***************
*** 2782,2787 ****
--- 2797,2808 ----
  
    /* Use entire sentences to give the translators a fighting chance.  */
  
+   if (entering)
+     {
+       printf("\e[p");
+       logNestingStdout++;
+     }
+   
    if (makelevel == 0)
      if (starting_directory == 0)
        if (entering)
***************
*** 2810,2813 ****
--- 2831,2840 ----
        else
          printf (_("%s[%u]: Leaving directory `%s'\n"),
                  program, makelevel, starting_directory);
+ 
+   if (!entering)
+     {
+       printf("\e[q");
+       logNestingStdout--;
+     }
  }
diff -rc make-3.80-orig/make.h make-3.80/make.h
*** make-3.80-orig/make.h	2002-09-11 18:55:44.000000000 +0200
--- make-3.80/make.h	2004-04-02 17:42:15.000000000 +0200
***************
*** 559,562 ****
--- 559,567 ----
  extern int atomic_stat PARAMS ((const char *file, struct stat *buf));
  extern struct dirent *atomic_readdir PARAMS ((DIR *dir));
  
+ 
  #endif
+ 
+ 
+ extern int logNestingStdout;
+ extern int logNestingStderr;
diff -rc make-3.80-orig/remake.c make-3.80/remake.c
*** make-3.80-orig/remake.c	2002-08-08 02:11:19.000000000 +0200
--- make-3.80/remake.c	2004-04-04 23:10:19.000000000 +0200
***************
*** 1049,1055 ****
--- 1049,1059 ----
        /* The normal case: start some commands.  */
        if (!touch_flag || file->cmds->any_recurse)
  	{
+           fprintf(stderr, "\e[pbuilding %s\n", file->name);
+           logNestingStderr++;
  	  execute_file_commands (file);
+           fprintf(stderr, "\e[q");
+           logNestingStderr--;
  	  return;
  	}
  
