diff --git a/src/tools/entab/entab.c b/src/tools/entab/entab.c
new file mode 100644
index 3b849f2..3fd2997
*** a/src/tools/entab/entab.c
--- b/src/tools/entab/entab.c
*************** main(int argc, char **argv)
*** 51,63 ****
  {
  	int			tab_size = 8,
  				min_spaces = 2,
  				protect_quotes = FALSE,
  				del_tabs = FALSE,
  				clip_lines = FALSE,
  				prv_spaces,
  				col_in_tab,
  				escaped,
! 				nxt_spaces;
  	char		in_line[BUFSIZ],
  				out_line[BUFSIZ],
  			   *src,
--- 51,66 ----
  {
  	int			tab_size = 8,
  				min_spaces = 2,
+ 				only_comments = FALSE,
  				protect_quotes = FALSE,
  				del_tabs = FALSE,
  				clip_lines = FALSE,
+ 				in_comment = FALSE,
  				prv_spaces,
  				col_in_tab,
  				escaped,
! 				nxt_spaces,
! 				leading_whitespace;
  	char		in_line[BUFSIZ],
  				out_line[BUFSIZ],
  			   *src,
*************** main(int argc, char **argv)
*** 74,80 ****
  	if (strcmp(cp, "detab") == 0)
  		del_tabs = 1;
  
! 	while ((ch = getopt(argc, argv, "cdhqs:t:")) != -1)
  		switch (ch)
  		{
  			case 'c':
--- 77,83 ----
  	if (strcmp(cp, "detab") == 0)
  		del_tabs = 1;
  
! 	while ((ch = getopt(argc, argv, "cdhoqs:t:")) != -1)
  		switch (ch)
  		{
  			case 'c':
*************** main(int argc, char **argv)
*** 83,88 ****
--- 86,94 ----
  			case 'd':
  				del_tabs = TRUE;
  				break;
+ 			case 'o':
+ 				only_comments = TRUE;
+ 				break;
  			case 'q':
  				protect_quotes = TRUE;
  				break;
*************** main(int argc, char **argv)
*** 97,102 ****
--- 103,109 ----
  				fprintf(stderr, "USAGE: %s [ -cdqst ] [file ...]\n\
  	-c (clip trailing whitespace)\n\
  	-d (delete tabs)\n\
+ 	-o (only comments)\n\
  	-q (protect quotes)\n\
  	-s minimum_spaces\n\
  	-t tab_width\n",
*************** main(int argc, char **argv)
*** 134,146 ****
  			if (escaped == FALSE)
  				quote_char = ' ';
  			escaped = FALSE;
  
  			/* process line */
  			while (*src != NUL)
  			{
  				col_in_tab++;
  				/* Is this a potential space/tab replacement? */
! 				if (quote_char == ' ' && (*src == ' ' || *src == '\t'))
  				{
  					if (*src == '\t')
  					{
--- 141,163 ----
  			if (escaped == FALSE)
  				quote_char = ' ';
  			escaped = FALSE;
+ 			leading_whitespace = TRUE;
  
  			/* process line */
  			while (*src != NUL)
  			{
  				col_in_tab++;
+ 
+ 				/* look backward so we handle slash-star-slash properly */
+ 				if (!in_comment && src > in_line &&
+ 					*(src - 1) == '/' && *src == '*')
+ 					in_comment = TRUE;
+ 				else if (in_comment && *src == '*' && *(src + 1) == '/')
+ 					in_comment = FALSE;
+ 
  				/* Is this a potential space/tab replacement? */
! 				if ((!only_comments || (in_comment && !leading_whitespace)) &&
! 					quote_char == ' ' && (*src == ' ' || *src == '\t'))
  				{
  					if (*src == '\t')
  					{
*************** main(int argc, char **argv)
*** 192,197 ****
--- 209,218 ----
  				/* Not a potential space/tab replacement */
  				else
  				{
+ 					/* allow leading stars in comments */
+ 					if (leading_whitespace && *src != ' ' && *src != '\t' &&
+ 						(!in_comment || *src != '*'))
+ 						leading_whitespace = FALSE;
  					/* output accumulated spaces */
  					output_accumulated_spaces(&prv_spaces, &dst);
  					/* This can only happen in a quote. */
