diff --git a/src/bin/psql/mainloop.c b/src/bin/psql/mainloop.c
new file mode 100644
index a8778a5..a3ef150
*** a/src/bin/psql/mainloop.c
--- b/src/bin/psql/mainloop.c
*************** MainLoop(FILE *source)
*** 216,236 ****
  			continue;
  		}
  
! 		/* A request for help? Be friendly and give them some guidance */
! 		if (pset.cur_cmd_interactive && query_buf->len == 0 &&
! 			pg_strncasecmp(line, "help", 4) == 0 &&
! 			(line[4] == '\0' || line[4] == ';' || isspace((unsigned char) line[4])))
  		{
! 			free(line);
! 			puts(_("You are using psql, the command-line interface to PostgreSQL."));
! 			printf(_("Type:  \\copyright for distribution terms\n"
! 					 "       \\h for help with SQL commands\n"
! 					 "       \\? for help with psql commands\n"
! 					 "       \\g or terminate with semicolon to execute query\n"
! 					 "       \\q to quit\n"));
  
! 			fflush(stdout);
! 			continue;
  		}
  
  		/* echo back if flag is set, unless interactive */
--- 216,323 ----
  			continue;
  		}
  
! 		/* Recognize "help", "quit", "exit" only in interactive mode */
! 		if (pset.cur_cmd_interactive)
  		{
! 			char	   *first_word = line;
! 			char	   *rest_of_line = NULL;
! 			bool		found_help = false;
! 			bool		found_exit_or_quit = false;
  
! 			/* Search for the words we recognize;  must be first word */
! 			if (pg_strncasecmp(first_word, "help", 4) == 0)
! 			{
! 				rest_of_line = first_word + 4;
! 				found_help = true;
! 			}
! 			else if (pg_strncasecmp(first_word, "exit", 4) == 0 ||
! 					 pg_strncasecmp(first_word, "quit", 4) == 0)
! 			{
! 				rest_of_line = first_word + 4;
! 				found_exit_or_quit = true;
! 			}
! 
! 			/*
! 			 * If we found a command word, check whether the rest of the line
! 			 * contains only whitespace plus maybe one semicolon.  If not,
! 			 * ignore the command word after all.
! 			 */
! 			if (rest_of_line != NULL)
! 			{
! 				/*
! 				 * Ignore unless rest of line is whitespace, plus maybe one
! 				 * semicolon
! 				 */
! 				while (isspace((unsigned char) *rest_of_line))
! 					++rest_of_line;
! 				if (*rest_of_line == ';')
! 					++rest_of_line;
! 				while (isspace((unsigned char) *rest_of_line))
! 					++rest_of_line;
! 				if (*rest_of_line != '\0')
! 				{
! 					found_help = false;
! 					found_exit_or_quit = false;
! 				}
! 			}
! 
! 			/*
! 			 * "help" is only a command when the query buffer is empty, but we
! 			 * emit a one-line message even when it isn't to help confused
! 			 * users.  The text is still added to the query buffer in that
! 			 * case.
! 			 */
! 			if (found_help)
! 			{
! 				if (query_buf->len != 0)
! #ifndef WIN32
! 					puts(_("Use \\? for help or press control-C to clear the input buffer."));
! #else
! 					puts(_("Use \\? for help."));
! #endif
! 				else
! 				{
! 					puts(_("You are using psql, the command-line interface to PostgreSQL."));
! 					printf(_("Type:  \\copyright for distribution terms\n"
! 							 "       \\h for help with SQL commands\n"
! 							 "       \\? for help with psql commands\n"
! 							 "       \\g or terminate with semicolon to execute query\n"
! 							 "       \\q to quit\n"));
! 					free(line);
! 					fflush(stdout);
! 					continue;
! 				}
! 			}
! 			/*
! 			 * "quit" and "exit" are only commands when the query buffer is
! 			 * empty, but we emit a one-line message even when it isn't to
! 			 * help confused users.  The text is still added to the query
! 			 * buffer in that case.
! 			 */
! 			if (found_exit_or_quit)
! 			{
! 				if (query_buf->len != 0)
! 				{
! 					if (prompt_status == PROMPT_READY ||
! 						prompt_status == PROMPT_CONTINUE ||
! 						prompt_status == PROMPT_PAREN)
! 						puts(_("Use \\q to quit."));
! 					else
! #ifndef WIN32
! 						puts(_("Use control-D to quit."));
! #else
! 						puts(_("Use control-C to quit."));
! #endif
! 				}
! 				else
! 				{
! 					/* exit app */
! 					free(line);
! 					fflush(stdout);
! 					successResult = EXIT_SUCCESS;
! 					break;
! 				}
! 			}
  		}
  
  		/* echo back if flag is set, unless interactive */
