From aa683853d4592e57a28dc8c65c99a265b3e945d0 Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Wed, 30 Mar 2005 18:11:59 +0000
Subject: [PATCH] in help_init(), avoid a warning when compiling with -pedantic
 by breaking overly long help text up into separate chunks, and add a few
 wording fixes to the help text as well

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2442 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog  |   4 +
 src/nano.c | 214 ++++++++++++++++++++++++++++++++---------------------
 2 files changed, 133 insertions(+), 85 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 6a7a6795..0e9d765b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -31,6 +31,10 @@ CVS code -
   help_init()
 	- When calculating allocsize, take multibyte characters into
 	  account, and keep the column number limits consistent. (DLR)
+	- Break htx up into three chunks, in case the string is too long
+	  for the compiler to handle (e.g. an ISO C89 compiler that can
+	  only handle up to 509 characters). (DLR)
+	- Minor wording fixes. (DLR)
   print1opt()
 	- Don't include longflag if HAVE_GETOPT_LONG isn't defined.
 	  Rename this function to print1opt_full(), leave out the
diff --git a/src/nano.c b/src/nano.c
index dce8e9ef..64b52fb4 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -265,7 +265,10 @@ void mouse_init(void)
 void help_init(void)
 {
     size_t allocsize = 0;	/* Space needed for help_text. */
-    const char *htx;		/* Untranslated help message. */
+    const char *htx[3];		/* Untranslated help message.  We break
+				 * it up into three chunks in case the
+				 * full string is too long for the
+				 * compiler to handle. */
     char *ptr;
     const shortcut *s;
 #ifndef NANO_SMALL
@@ -279,115 +282,151 @@ void help_init(void)
 
     /* First, set up the initial help text for the current function. */
     if (currshortcut == whereis_list || currshortcut == replace_list
-	     || currshortcut == replace_list_2)
-	htx = N_("Search Command Help Text\n\n "
-		"Enter the words or characters you would like to search "
-		"for, then hit Enter.  If there is a match for the text you "
-		"entered, the screen will be updated to the location of the "
-		"nearest match for the search string.\n\n The previous "
-		"search string will be shown in brackets after the search "
-		"prompt.  Hitting Enter without entering any text will "
-		"perform the previous search.  If you have selected text "
-		"with the mark and then search to replace, only matches in "
-		"the selected text will be replaced.\n\n The following "
-		"function keys are available in Search mode:\n\n");
-    else if (currshortcut == gotoline_list)
-	htx = N_("Go To Line Help Text\n\n "
+	     || currshortcut == replace_list_2) {
+	htx[0] = N_("Search Command Help Text\n\n "
+		"Enter the words or characters you would like to "
+		"search for, and then press Enter.  If there is a "
+		"match for the text you entered, the screen will be "
+		"updated to the location of the nearest match for the "
+		"search string.\n\n The previous search string will be "
+		"shown in brackets after the search prompt.  Hitting "
+		"Enter without entering any text will perform the "
+		"previous search.  ");
+	htx[1] = N_("If you have selected text with the mark and then "
+		"search to replace, only matches in the selected text "
+		"will be replaced.\n\n The following function keys are "
+		"available in Search mode:\n\n");
+	htx[2] = NULL;
+    } else if (currshortcut == gotoline_list) {
+	htx[0] = N_("Go To Line Help Text\n\n "
 		"Enter the line number that you wish to go to and hit "
 		"Enter.  If there are fewer lines of text than the "
-		"number you entered, you will be brought to the last line "
-		"of the file.\n\n The following function keys are "
+		"number you entered, you will be brought to the last "
+		"line of the file.\n\n The following function keys are "
 		"available in Go To Line mode:\n\n");
-    else if (currshortcut == insertfile_list)
-	htx = N_("Insert File Help Text\n\n "
-		"Type in the name of a file to be inserted into the current "
-		"file buffer at the current cursor location.\n\n "
-		"If you have compiled nano with multiple file buffer "
-		"support, and enable multiple buffers with the -F "
-		"or --multibuffer command line flags, the Meta-F toggle, or "
-		"a nanorc file, inserting a file will cause it to be "
-		"loaded into a separate buffer (use Meta-< and > to switch "
-		"between file buffers). If you need another blank buffer, "
-		"do not enter any filename, or type in a nonexistent "
-		"filename at the prompt and press Enter.\n\n The following "
+	htx[1] = NULL;
+	htx[2] = NULL;
+    } else if (currshortcut == insertfile_list) {
+	htx[0] = N_("Insert File Help Text\n\n "
+		"Type in the name of a file to be inserted into the "
+		"current file buffer at the current cursor "
+		"location.\n\n If you have compiled nano with multiple "
+		"file buffer support, and enable multiple file buffers "
+		"with the -F or --multibuffer command line flags, the "
+		"Meta-F toggle, or a nanorc file, inserting a file "
+		"will cause it to be loaded into a separate buffer "
+		"(use Meta-< and > to switch between file buffers).  ");
+	htx[1] = N_("If you need another blank buffer, do not enter "
+		"any filename, or type in a nonexistent filename at "
+		"the prompt and press Enter.\n\n The following "
 		"function keys are available in Insert File mode:\n\n");
-    else if (currshortcut == writefile_list)
-	htx = N_("Write File Help Text\n\n "
+	htx[2] = NULL;
+    } else if (currshortcut == writefile_list) {
+	htx[0] = N_("Write File Help Text\n\n "
 		"Type the name that you wish to save the current file "
-		"as and hit Enter to save the file.\n\n If you have "
+		"as and press Enter to save the file.\n\n If you have "
 		"selected text with the mark, you will be prompted to "
 		"save only the selected portion to a separate file.  To "
 		"reduce the chance of overwriting the current file with "
 		"just a portion of it, the current filename is not the "
 		"default in this mode.\n\n The following function keys "
 		"are available in Write File mode:\n\n");
+	htx[1] = NULL;
+	htx[2] = NULL;
+    }
 #ifndef DISABLE_BROWSER
-    else if (currshortcut == browser_list)
-	htx = N_("File Browser Help Text\n\n "
+    else if (currshortcut == browser_list) {
+	htx[0] = N_("File Browser Help Text\n\n "
 		"The file browser is used to visually browse the "
 		"directory structure to select a file for reading "
 		"or writing.  You may use the arrow keys or Page Up/"
 		"Down to browse through the files, and S or Enter to "
 		"choose the selected file or enter the selected "
-		"directory.  To move up one level, select the directory "
-		"called \"..\" at the top of the file list.\n\n The "
-		"following function keys are available in the file "
-		"browser:\n\n");
-    else if (currshortcut == gotodir_list)
-	htx = N_("Browser Go To Directory Help Text\n\n "
+		"directory.  To move up one level, select the "
+		"directory called \"..\" at the top of the file "
+		"list.\n\n The following function keys are available "
+		"in the file browser:\n\n");
+	htx[1] = NULL;
+	htx[2] = NULL;
+    } else if (currshortcut == gotodir_list) {
+	htx[0] = N_("Browser Go To Directory Help Text\n\n "
 		"Enter the name of the directory you would like to "
-		"browse to.\n\n If tab completion has not been disabled, "
-		"you can use the Tab key to (attempt to) automatically "
-		"complete the directory name.\n\n The following function "
-		"keys are available in Browser Go To Directory mode:\n\n");
+		"browse to.\n\n If tab completion has not been "
+		"disabled, you can use the Tab key to (attempt to) "
+		"automatically complete the directory name.\n\n The "
+		"following function keys are available in Browser Go "
+		"To Directory mode:\n\n");
+	htx[1] = NULL;
+	htx[2] = NULL;
+    }
 #endif
 #ifndef DISABLE_SPELLER
-    else if (currshortcut == spell_list)
-	htx = N_("Spell Check Help Text\n\n "
-		"The spell checker checks the spelling of all text "
-		"in the current file.  When an unknown word is "
+    else if (currshortcut == spell_list) {
+	htx[0] = N_("Spell Check Help Text\n\n "
+		"The spell checker checks the spelling of all text in "
+		"the current file.  When an unknown word is "
 		"encountered, it is highlighted and a replacement can "
 		"be edited.  It will then prompt to replace every "
-		"instance of the given misspelled word in the "
-		"current file, or, if you have selected text with the "
-		"mark, in the selected text.\n\n The following other "
-		"functions are available in Spell Check mode:\n\n");
+		"instance of the given misspelled word in the current "
+		"file, or, if you have selected text with the mark, in "
+		"the selected text.\n\n The following other functions "
+		"are available in Spell Check mode:\n\n");
+	htx[1] = NULL;
+	htx[2] = NULL;
+    }
 #endif
 #ifndef NANO_SMALL
-    else if (currshortcut == extcmd_list)
-	htx = N_("External Command Help Text\n\n "
-		"This menu allows you to insert the output of a command "
-		"run by the shell into the current buffer (or a new "
-		"buffer in multibuffer mode). If you need another blank "
-		"buffer, do not enter any command.\n\n The following keys "
-		"are available in this mode:\n\n");
+    else if (currshortcut == extcmd_list) {
+	htx[0] = N_("Execute Command Help Text\n\n "
+		"This menu allows you to insert the output of a "
+		"command run by the shell into the current buffer (or "
+		"a new buffer in multiple file buffer mode). If you "
+		"need another blank buffer, do not enter any "
+		"command.\n\n The following keys are available in "
+		"Execute Command mode:\n\n");
+	htx[1] = NULL;
+	htx[2] = NULL;
+    }
 #endif
-    else
+    else {
 	/* Default to the main help list. */
-	htx = N_(" nano help text\n\n "
-	  "The nano editor is designed to emulate the functionality and "
-	  "ease-of-use of the UW Pico text editor.  There are four main "
-	  "sections of the editor.  The top line shows the program "
-	  "version, the current filename being edited, and whether "
-	  "or not the file has been modified.  Next is the main editor "
-	  "window showing the file being edited.  The status line is "
-	  "the third line from the bottom and shows important messages.  "
-	  "The bottom two lines show the most commonly used shortcuts "
-	  "in the editor.\n\n "
-	  "The notation for shortcuts is as follows: Control-key "
-	  "sequences are notated with a caret (^) symbol and can be "
-	  "entered either by using the Control (Ctrl) key or pressing the "
-	  "Esc key twice.  Escape-key sequences are notated with the Meta "
-	  "(M) symbol and can be entered using either the Esc, Alt or "
-	  "Meta key depending on your keyboard setup.  Also, pressing Esc "
-	  "twice and then typing a three-digit decimal number from 000 to "
-	  "255 will enter the character with the corresponding value.  "
-	  "The following keystrokes are available in the main editor "
-	  "window.  Alternative keys are shown in parentheses:\n\n");
-
-    htx = _(htx);
-
-    allocsize += strlen(htx);
+	htx[0] = N_(" nano help text\n\n "
+		"The nano editor is designed to emulate the "
+		"functionality and ease-of-use of the UW Pico text "
+		"editor.  There are four main sections of the editor.  "
+		"The top line shows the program version, the current "
+		"filename being edited, and whether or not the file "
+		"has been modified.  Next is the main editor window "
+		"showing the file being edited.  The status line is "
+		"the third line from the bottom and shows important "
+		"messages.  The bottom two lines show the most "
+		"commonly used shortcuts in the editor.\n\n ");
+	htx[1] = N_("The notation for shortcuts is as follows: "
+		"Control-key sequences are notated with a caret (^) "
+		"symbol and can be entered either by using the Control "
+		"(Ctrl) key or pressing the Escape (Esc) key twice.  "
+		"Escape-key sequences are notated with the Meta (M) "
+		"symbol and can be entered using either the Esc, Alt, "
+		"or Meta key depending on your keyboard setup.  ");
+	htx[2] = N_("Also, pressing Esc twice and then typing a "
+		"three-digit decimal number from 000 to 255 will enter "
+		"the character with the corresponding value.  The "
+		"following keystrokes are available in the main editor "
+		"window.  Alternative keys are shown in "
+		"parentheses:\n\n");
+    }
+
+    htx[0] = _(htx[0]);
+    if (htx[1] != NULL)
+	htx[1] = _(htx[1]);
+    if (htx[2] != NULL)
+	htx[2] = _(htx[2]);
+
+    allocsize += strlen(htx[0]);
+    if (htx[1] != NULL)
+	allocsize += strlen(htx[1]);
+    if (htx[2] != NULL)
+	allocsize += strlen(htx[2]);
 
     /* The space needed for the shortcut lists, at most COLS characters,
      * plus '\n'. */
@@ -414,7 +453,12 @@ void help_init(void)
     help_text = charalloc(allocsize + 1);
 
     /* Now add the text we want. */
-    strcpy(help_text, htx);
+    strcpy(help_text, htx[0]);
+    if (htx[1] != NULL)
+	strcat(help_text, htx[1]);
+    if (htx[2] != NULL)
+	strcat(help_text, htx[2]);
+
     ptr = help_text + strlen(help_text);
 
     /* Now add our shortcut info.  Assume that each shortcut has, at the
-- 
GitLab