]> git.wh0rd.org Git - nano.git/commitdiff
- More cleanups with DISABLE flags, better free_shortcutage and free_toggle, and...
authorChris Allegretta <chrisa@asty.org>
Tue, 23 Apr 2002 10:56:06 +0000 (10:56 +0000)
committerChris Allegretta <chrisa@asty.org>
Tue, 23 Apr 2002 10:56:06 +0000 (10:56 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1194 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
global.c
nano.c
nano.h
proto.h
winio.c

index 29a2dc8edae4f846489934ae2baf9f00c88e0222..17820f4e3da2abef8f7c37e44e74f1a980b53487 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -15,6 +15,9 @@ CVS code -
        - Change from read() and write() to file streams by Jay Carlson.
          Allows OS to implement read and write ahead rather than making
          us do it.  Hopefully merged properly.
+       - More cleanups with DISABLE flags, better free_shortcutage and
+         free_toggle, and get rid of unnecessary variable decls with 
+         NANO_SMALL in shortcut_init() by David Benbennick.
 - configure.ac:
        - Define NDEBUG to silence asserts (David Benbennick).
 - files.c:
index f1613526e84a4b595e7739b7f838e5ddc764d295..09080adfeff5879468d16b907d077254621a55b1 100644 (file)
--- a/global.c
+++ b/global.c
@@ -21,6 +21,7 @@
 
 #include "config.h"
 
+#include <assert.h>
 #include <sys/stat.h>
 #include "nano.h"
 #include "proto.h"
@@ -132,20 +133,24 @@ regmatch_t colormatches[1];       /* Match positions for parenthetical */
 
 #endif
 
-int length_of_list(shortcut *s) 
+int length_of_list(const shortcut *s) 
 {
     int i = 0;
-    shortcut *t;
 
-    for (t = s; t != NULL; t = t->next)
+    for (; s != NULL; s = s->next)
        i++;
 
     return i;
 }
 
 /* Initialize a struct *without* our lovely braces =( */
-void sc_init_one(shortcut **shortcutage, int key, char *desc, char *help, int alt,
-                int misc1, int misc2, int view, int (*func) (void))
+static void sc_init_one(shortcut **shortcutage, int key,
+               const char *desc,
+#ifndef DISABLE_HELP
+               const char *help,
+#endif /* !DISABLE_HELP */
+               int alt, int misc1, int misc2, int view,
+               int (*func) (void))
 {
     shortcut *s;
 
@@ -161,7 +166,9 @@ void sc_init_one(shortcut **shortcutage, int key, char *desc, char *help, int al
 
     s->val = key;
     s->desc = desc;
+#ifndef DISABLE_HELP
     s->help = help;
+#endif /* !DISABLE_HELP */
     s->altval = alt;
     s->misc1 = misc1;
     s->misc2 = misc2;
@@ -171,8 +178,9 @@ void sc_init_one(shortcut **shortcutage, int key, char *desc, char *help, int al
 }
 
 #ifndef NANO_SMALL
-/* Initialize the toggles in the same manner */
-void toggle_init_one(int val, char *desc, int flag)
+/* Create one new toggle structure, at the end of the toggles
+ * linked list. */
+static void toggle_init_one(int val, const char *desc, int flag)
 {
     toggle *u;
 
@@ -191,11 +199,22 @@ void toggle_init_one(int val, char *desc, int flag)
     u->flag = flag;
     u->next = NULL;
 }
-#endif
 
-void toggle_init(void)
+/* Deallocate all of the toggles */
+static void free_toggles(void)
+{
+    toggle *pt;        /* Think "previous toggle" */
+
+    while (toggles != NULL) {
+       pt = toggles;
+       toggles = toggles->next;
+       free(pt);
+    }
+    toggles = NULL;
+}
+
+static void toggle_init(void)
 {
-#ifndef NANO_SMALL
     char *toggle_const_msg, *toggle_autoindent_msg, *toggle_suspend_msg,
        *toggle_nohelp_msg, *toggle_picomode_msg, *toggle_mouse_msg,
        *toggle_cuttoend_msg, *toggle_wrap_msg, *toggle_case_msg, 
@@ -234,6 +253,8 @@ void toggle_init(void)
     toggle_load_msg = _("Multiple file buffers");
 #endif
 
+    free_toggles();
+
     toggle_init_one(TOGGLE_CONST_KEY, toggle_const_msg, CONSTUPDATE);
     toggle_init_one(TOGGLE_AUTOINDENT_KEY, toggle_autoindent_msg, AUTOINDENT);
     toggle_init_one(TOGGLE_SUSPEND_KEY, toggle_suspend_msg, SUSPEND);
@@ -254,11 +275,28 @@ void toggle_init(void)
     toggle_init_one(TOGGLE_DOS_KEY, toggle_dos_msg, DOS_FILE);
     toggle_init_one(TOGGLE_MAC_KEY, toggle_mac_msg, MAC_FILE);
     toggle_init_one(TOGGLE_SMOOTH_KEY, toggle_smooth_msg, SMOOTHSCROLL);
+}
 #endif /* !NANO_SMALL */
+
+
+/* Deallocate the given shortcut. */
+static void free_shortcutage(shortcut **shortcutage)
+{
+    shortcut *s, *ps;
+
+    assert(shortcutage != NULL);
+    s = *shortcutage;
+    while (s != NULL) {
+       ps = s;
+       s = s->next;
+       free(ps);
+    }
+    *shortcutage = NULL;
 }
 
 void shortcut_init(int unjustify)
 {
+#ifndef DISABLE_HELP
     char *nano_help_msg = "", *nano_writeout_msg = "", *nano_exit_msg = "",
        *nano_goto_msg = "", *nano_justify_msg = "", *nano_replace_msg =
        "", *nano_insert_msg = "", *nano_whereis_msg =
@@ -278,7 +316,6 @@ void shortcut_init(int unjustify)
     char *nano_openprev_msg = "", *nano_opennext_msg = "";
 #endif
 
-#ifndef NANO_SMALL
     char *nano_tofiles_msg = "", *nano_gotodir_msg = "", *nano_case_msg =
        "", *nano_reverse_msg = "", *nano_execute_msg = "";
     char *nano_dos_msg = "", *nano_mac_msg = ""; 
@@ -342,41 +379,52 @@ void shortcut_init(int unjustify)
     nano_openprev_msg = _("Open previously loaded file");
     nano_opennext_msg = _("Open next loaded file");
 #endif
-#endif /* !NANO_SMALL */
+#endif /* !DISABLE_HELP */
 
-    if (main_list != NULL)
-       free_shortcutage(&main_list);
+    free_shortcutage(&main_list);
 
-       sc_init_one(&main_list, NANO_HELP_KEY, _("Get Help"),
-                   nano_help_msg, 0, NANO_HELP_FKEY, 0, VIEW, do_help);
+/* The following macro is to be used in calling sc_init_one.  The point is
+ * that sc_init_one takes 9 arguments, unless DISABLE_HELP is defined,
+ * when the fourth one should not be there. */
+#ifdef DISABLE_HELP
+#  define IFHELP(help, nextvar) nextvar
+#else
+#  define IFHELP(help, nextvar) help, nextvar
+#endif
+
+    sc_init_one(&main_list, NANO_HELP_KEY, _("Get Help"),
+               IFHELP(nano_help_msg,) 0, NANO_HELP_FKEY, 0, VIEW,
+               do_help);
 
 #ifdef ENABLE_MULTIBUFFER
     if (open_files != NULL && (open_files->prev || open_files->next))
        sc_init_one(&main_list, NANO_EXIT_KEY, _("Close"),
-               nano_exit_msg, 0, NANO_EXIT_FKEY, 0, VIEW, do_exit);
+               IFHELP(nano_exit_msg,) 0, NANO_EXIT_FKEY, 0, VIEW,
+               do_exit);
     else
 #endif
        sc_init_one(&main_list, NANO_EXIT_KEY, _("Exit"),
-               nano_exit_msg, 0, NANO_EXIT_FKEY, 0, VIEW, do_exit);
+               IFHELP(nano_exit_msg,) 0, NANO_EXIT_FKEY, 0, VIEW,
+               do_exit);
 
     sc_init_one(&main_list, NANO_WRITEOUT_KEY, _("WriteOut"),
-                   nano_writeout_msg,
+                   IFHELP(nano_writeout_msg,)
                    0, NANO_WRITEOUT_FKEY, 0, NOVIEW, do_writeout_void);
 
     if (ISSET(PICO_MODE))
        sc_init_one(&main_list, NANO_JUSTIFY_KEY, _("Justify"),
-                   nano_justify_msg, 0, NANO_JUSTIFY_FKEY, 0,
+                   IFHELP(nano_justify_msg,) 0, NANO_JUSTIFY_FKEY, 0,
                    NOVIEW, do_justify);
     else
 
 #ifdef ENABLE_MULTIBUFFER
        /* this is so we can view multiple files */
        sc_init_one(&main_list, NANO_INSERTFILE_KEY, _("Read File"),
-               nano_insert_msg,
+               IFHELP(nano_insert_msg,)
                0, NANO_INSERTFILE_FKEY, 0, VIEW, do_insertfile_void);
 #else
        sc_init_one(&main_list, NANO_INSERTFILE_KEY, _("Read File"),
-               nano_insert_msg,
+               IFHELP(nano_insert_msg,)
                0, NANO_INSERTFILE_FKEY, 0, NOVIEW, do_insertfile_void);
 #endif
 
@@ -385,330 +433,375 @@ void shortcut_init(int unjustify)
 #ifdef ENABLE_MULTIBUFFER
        /* this is so we can view multiple files */
        sc_init_one(&main_list, NANO_INSERTFILE_KEY, _("Read File"),
-               nano_insert_msg,
+               IFHELP(nano_insert_msg,)
                0, NANO_INSERTFILE_FKEY, 0, VIEW, do_insertfile_void);
 #else
        sc_init_one(&main_list, NANO_INSERTFILE_KEY, _("Read File"),
-               nano_insert_msg,
+               IFHELP(nano_insert_msg,)
                0, NANO_INSERTFILE_FKEY, 0, NOVIEW, do_insertfile_void);
 #endif
 
     else
        sc_init_one(&main_list, NANO_REPLACE_KEY, _("Replace"),
-                   nano_replace_msg,
+                   IFHELP(nano_replace_msg,)
                    NANO_ALT_REPLACE_KEY, NANO_REPLACE_FKEY, 0, NOVIEW, do_replace);
 
     sc_init_one(&main_list, NANO_WHEREIS_KEY, _("Where Is"),
-               nano_whereis_msg,
+               IFHELP(nano_whereis_msg,)
                0, NANO_WHEREIS_FKEY, 0, VIEW, do_search);
 
     sc_init_one(&main_list, NANO_PREVPAGE_KEY, _("Prev Page"),
-               nano_prevpage_msg,
+               IFHELP(nano_prevpage_msg,)
                0, NANO_PREVPAGE_FKEY, KEY_PPAGE, VIEW, do_page_up);
 
     sc_init_one(&main_list, NANO_NEXTPAGE_KEY, _("Next Page"),
-               nano_nextpage_msg,
+               IFHELP(nano_nextpage_msg,)
                0, NANO_NEXTPAGE_FKEY, KEY_NPAGE, VIEW, do_page_down);
 
     sc_init_one(&main_list, NANO_CUT_KEY, _("Cut Text"),
-               nano_cut_msg, 0, NANO_CUT_FKEY, 0, NOVIEW, do_cut_text);
+               IFHELP(nano_cut_msg,) 
+               0, NANO_CUT_FKEY, 0, NOVIEW, do_cut_text);
 
     if (unjustify)
        sc_init_one(&main_list, NANO_UNJUSTIFY_KEY, _("UnJustify"),
-               nano_unjustify_msg, 0, 0, 0, NOVIEW, do_uncut_text);
+               IFHELP(nano_unjustify_msg,) 
+               0, 0, 0, NOVIEW, do_uncut_text);
     else
        sc_init_one(&main_list, NANO_UNCUT_KEY, _("UnCut Txt"),
-               nano_uncut_msg,
+               IFHELP(nano_uncut_msg,)
                0, NANO_UNCUT_FKEY, 0, NOVIEW, do_uncut_text);
 
     sc_init_one(&main_list, NANO_CURSORPOS_KEY, _("Cur Pos"),
-               nano_cursorpos_msg,
+               IFHELP(nano_cursorpos_msg,)
                0, NANO_CURSORPOS_FKEY, 0, VIEW, do_cursorpos_void);
 
     sc_init_one(&main_list, NANO_SPELL_KEY, _("To Spell"),
-               nano_spell_msg, 0, NANO_SPELL_FKEY, 0, NOVIEW, do_spell);
+               IFHELP(nano_spell_msg,) 
+               0, NANO_SPELL_FKEY, 0, NOVIEW, do_spell);
 
 
     sc_init_one(&main_list, NANO_UP_KEY, _("Up"),
-               nano_up_msg, 0, KEY_UP, 0, VIEW, do_up);
+               IFHELP(nano_up_msg,) 
+               0, KEY_UP, 0, VIEW, do_up);
 
     sc_init_one(&main_list, NANO_DOWN_KEY, _("Down"),
-               nano_down_msg, 0, KEY_DOWN, 0, VIEW, do_down);
+               IFHELP(nano_down_msg,) 
+               0, KEY_DOWN, 0, VIEW, do_down);
 
     sc_init_one(&main_list, NANO_FORWARD_KEY, _("Forward"),
-               nano_forward_msg, 0, KEY_RIGHT, 0, VIEW, do_right);
+               IFHELP(nano_forward_msg,) 
+               0, KEY_RIGHT, 0, VIEW, do_right);
 
     sc_init_one(&main_list, NANO_BACK_KEY, _("Back"),
-               nano_back_msg, 0, KEY_LEFT, 0, VIEW, do_left);
+               IFHELP(nano_back_msg,) 
+               0, KEY_LEFT, 0, VIEW, do_left);
 
     sc_init_one(&main_list, NANO_HOME_KEY, _("Home"),
-               nano_home_msg, 0, KEY_HOME, 362, VIEW, do_home);
+               IFHELP(nano_home_msg,) 
+               0, KEY_HOME, 362, VIEW, do_home);
 
     sc_init_one(&main_list, NANO_END_KEY, _("End"),
-               nano_end_msg, 0, KEY_END, 385, VIEW, do_end);
+               IFHELP(nano_end_msg,) 
+               0, KEY_END, 385, VIEW, do_end);
 
     sc_init_one(&main_list, NANO_REFRESH_KEY, _("Refresh"),
-               nano_refresh_msg, 0, 0, 0, VIEW, total_refresh);
+               IFHELP(nano_refresh_msg,) 
+               0, 0, 0, VIEW, total_refresh);
 
     sc_init_one(&main_list, NANO_MARK_KEY, _("Mark Text"),
-               nano_mark_msg, NANO_ALT_MARK_KEY, 0, 0, NOVIEW, do_mark);
+               IFHELP(nano_mark_msg,) 
+               NANO_ALT_MARK_KEY, 0, 0, NOVIEW, do_mark);
 
     sc_init_one(&main_list, NANO_DELETE_KEY, _("Delete"),
-               nano_delete_msg, 0, KEY_DC,
+               IFHELP(nano_delete_msg,) 0, KEY_DC,
                NANO_CONTROL_D, NOVIEW, do_delete);
 
     sc_init_one(&main_list, NANO_BACKSPACE_KEY, _("Backspace"),
-               nano_backspace_msg, 0,
+               IFHELP(nano_backspace_msg,) 0,
                KEY_BACKSPACE, 127, NOVIEW, do_backspace);
 
     sc_init_one(&main_list, NANO_TAB_KEY, _("Tab"),
-               nano_tab_msg, 0, 0, 0, NOVIEW, do_tab);
+               IFHELP(nano_tab_msg,) 
+               0, 0, 0, NOVIEW, do_tab);
 
     if (ISSET(PICO_MODE))
        sc_init_one(&main_list, NANO_REPLACE_KEY, _("Replace"),
-                   nano_replace_msg,
+                   IFHELP(nano_replace_msg,)
                    NANO_ALT_REPLACE_KEY, NANO_REPLACE_FKEY, 0, NOVIEW, do_replace);
     else
        sc_init_one(&main_list, NANO_JUSTIFY_KEY, _("Justify"),
-                   nano_justify_msg, 0, NANO_JUSTIFY_FKEY, 0,
-                   NOVIEW, do_justify);
+                   IFHELP(nano_justify_msg,) 
+                   0, NANO_JUSTIFY_FKEY, 0, NOVIEW, do_justify);
 
     sc_init_one(&main_list, NANO_ENTER_KEY, _("Enter"),
-               nano_enter_msg,
+               IFHELP(nano_enter_msg,)
                0, KEY_ENTER, NANO_CONTROL_M, NOVIEW, do_enter_void);
 
     sc_init_one(&main_list, NANO_GOTO_KEY, _("Goto Line"),
-                   nano_goto_msg,
+                   IFHELP(nano_goto_msg,)
                    NANO_ALT_GOTO_KEY, NANO_GOTO_FKEY, 0, VIEW, do_gotoline_void);
 
 #if (!defined NANO_SMALL) && (defined HAVE_REGEX_H)
     sc_init_one(&main_list, -9, _("Find Other Bracket"),
-                   nano_bracket_msg,
+                   IFHELP(nano_bracket_msg,)
                    NANO_BRACKET_KEY, 0, 0, VIEW, do_find_bracket);
 #endif
 
 #ifdef ENABLE_MULTIBUFFER
     sc_init_one(&main_list, -9, _("Previous File"),
-                   nano_openprev_msg,
+                   IFHELP(nano_openprev_msg,)
                    NANO_OPENPREV_KEY, 0, 0, VIEW, open_prevfile_void);
     sc_init_one(&main_list, -9, _("Next File"),
-                   nano_opennext_msg,
+                   IFHELP(nano_opennext_msg,)
                    NANO_OPENNEXT_KEY, 0, 0, VIEW, open_nextfile_void);
 #endif
 
-    if (whereis_list != NULL)
-       free_shortcutage(&whereis_list);
+    free_shortcutage(&whereis_list);
 
     sc_init_one(&whereis_list, NANO_HELP_KEY,
-               _("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);
+               _("Get Help"), IFHELP(nano_help_msg,) 
+               0, 0, 0, VIEW, do_help);
 
     sc_init_one(&whereis_list, NANO_CANCEL_KEY,
-               _("Cancel"), nano_cancel_msg, 0, 0, 0, VIEW, 0);
+               _("Cancel"), IFHELP(nano_cancel_msg,) 
+               0, 0, 0, VIEW, 0);
 
     sc_init_one(&whereis_list, NANO_FIRSTLINE_KEY, _("First Line"),
-               nano_firstline_msg, 0, 0, 0, VIEW, do_first_line);
+               IFHELP(nano_firstline_msg,) 
+               0, 0, 0, VIEW, do_first_line);
 
     sc_init_one(&whereis_list, NANO_LASTLINE_KEY, _("Last Line"),
-               nano_lastline_msg, 0, 0, 0, VIEW, do_last_line);
+               IFHELP(nano_lastline_msg,) 
+               0, 0, 0, VIEW, do_last_line);
 
     sc_init_one(&whereis_list, NANO_OTHERSEARCH_KEY, _("Replace"),
-               nano_replace_msg, 0, 0, 0, VIEW, do_replace);
+               IFHELP(nano_replace_msg,) 
+               0, 0, 0, VIEW, do_replace);
 
-    sc_init_one(&whereis_list, NANO_FROMSEARCHTOGOTO_KEY,
-               _("Goto Line"), nano_goto_msg, 0, 0, 0, VIEW,
-               do_gotoline_void);
+    sc_init_one(&whereis_list, NANO_FROMSEARCHTOGOTO_KEY, _("Goto Line"), 
+               IFHELP(nano_goto_msg,) 
+               0, 0, 0, VIEW, do_gotoline_void);
 
 #ifndef NANO_SMALL
     sc_init_one(&whereis_list, TOGGLE_CASE_KEY, _("Case Sens"),
-               nano_case_msg, 0, 0, 0, VIEW, 0);
+               IFHELP(nano_case_msg,)
+               0, 0, 0, VIEW, 0);
 
     sc_init_one(&whereis_list, TOGGLE_BACKWARDS_KEY, _("Direction"),
-               nano_reverse_msg, 0, 0, 0, VIEW, 0);
+               IFHELP(nano_reverse_msg,) 
+               0, 0, 0, VIEW, 0);
 
 #ifdef HAVE_REGEX_H
     sc_init_one(&whereis_list, TOGGLE_REGEXP_KEY,
-               _("Regexp"), nano_regexp_msg, 0, 0, 0, VIEW, 0);
+               _("Regexp"), IFHELP(nano_regexp_msg,)
+               0, 0, 0, VIEW, 0);
 #endif
 #endif /* !NANO_SMALL */
 
-    if (replace_list != NULL)
-       free_shortcutage(&replace_list);
+    free_shortcutage(&replace_list);
 
     sc_init_one(&replace_list, NANO_HELP_KEY,
-               _("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);
+               _("Get Help"), IFHELP(nano_help_msg,) 
+               0, 0, 0, VIEW, do_help);
 
     sc_init_one(&replace_list, NANO_CANCEL_KEY,
-               _("Cancel"), nano_cancel_msg, 0, 0, 0, VIEW, 0);
+               _("Cancel"), IFHELP(nano_cancel_msg,) 
+               0, 0, 0, VIEW, 0);
 
     sc_init_one(&replace_list, NANO_FIRSTLINE_KEY, _("First Line"),
-               nano_firstline_msg, 0, 0, 0, VIEW, do_first_line);
+               IFHELP(nano_firstline_msg,) 
+               0, 0, 0, VIEW, do_first_line);
 
     sc_init_one(&replace_list, NANO_LASTLINE_KEY, _("Last Line"),
-               nano_lastline_msg, 0, 0, 0, VIEW, do_last_line);
+               IFHELP(nano_lastline_msg,) 
+               0, 0, 0, VIEW, do_last_line);
 
     sc_init_one(&replace_list, NANO_OTHERSEARCH_KEY, _("No Replace"),
-               nano_whereis_msg, 0, 0, 0, VIEW, do_search);
+               IFHELP(nano_whereis_msg,) 
+               0, 0, 0, VIEW, do_search);
 
     sc_init_one(&replace_list, NANO_FROMSEARCHTOGOTO_KEY,
-               _("Goto Line"), nano_goto_msg, 0, 0, 0, VIEW,
-               do_gotoline_void);
+               _("Goto Line"),  IFHELP(nano_goto_msg,) 
+               0, 0, 0, VIEW, do_gotoline_void);
 
 #ifndef NANO_SMALL
     sc_init_one(&replace_list, TOGGLE_CASE_KEY, _("Case Sens"),
-               nano_case_msg, 0, 0, 0, VIEW, 0);
+               IFHELP(nano_case_msg,) 
+               0, 0, 0, VIEW, 0);
 
     sc_init_one(&replace_list, TOGGLE_BACKWARDS_KEY, _("Direction"),
-               nano_reverse_msg, 0, 0, 0, VIEW, 0);
+               IFHELP(nano_reverse_msg,) 
+               0, 0, 0, VIEW, 0);
 
 #ifdef HAVE_REGEX_H
     sc_init_one(&replace_list, TOGGLE_REGEXP_KEY, 
-               _("Regexp"), nano_regexp_msg, 0, 0, 0, VIEW, 0);
+               _("Regexp"), IFHELP(nano_regexp_msg,) 
+               0, 0, 0, VIEW, 0);
 #endif
 #endif /* !NANO_SMALL */
 
-    if (replace_list_2 != NULL)
-       free_shortcutage(&replace_list_2);
+    free_shortcutage(&replace_list_2);
 
     sc_init_one(&replace_list_2, NANO_HELP_KEY,
-               _("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);
+               _("Get Help"), IFHELP(nano_help_msg,) 
+               0, 0, 0, VIEW, do_help);
 
     sc_init_one(&replace_list_2, NANO_CANCEL_KEY,
-               _("Cancel"), nano_cancel_msg, 0, 0, 0, VIEW, 0);
+               _("Cancel"), IFHELP(nano_cancel_msg,) 
+               0, 0, 0, VIEW, 0);
 
     sc_init_one(&replace_list_2, NANO_FIRSTLINE_KEY, _("First Line"),
-               nano_firstline_msg, 0, 0, 0, VIEW, do_first_line);
+               IFHELP(nano_firstline_msg,) 
+               0, 0, 0, VIEW, do_first_line);
 
     sc_init_one(&replace_list_2, NANO_LASTLINE_KEY, _("Last Line"),
-               nano_lastline_msg, 0, 0, 0, VIEW, do_last_line);
+               IFHELP(nano_lastline_msg,) 
+               0, 0, 0, VIEW, do_last_line);
 
-    if (goto_list != NULL)
-       free_shortcutage(&goto_list);
+    free_shortcutage(&goto_list);
 
     sc_init_one(&goto_list, NANO_HELP_KEY,
-               _("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);
+               _("Get Help"), IFHELP(nano_help_msg,) 
+               0, 0, 0, VIEW, do_help);
 
     sc_init_one(&goto_list, NANO_CANCEL_KEY, _("Cancel"),
-               nano_cancel_msg, 0, 0, 0, VIEW, 0);
+               IFHELP(nano_cancel_msg,) 
+               0, 0, 0, VIEW, 0);
 
     sc_init_one(&goto_list, NANO_FIRSTLINE_KEY, _("First Line"),
-               nano_firstline_msg, 0, 0, 0, VIEW, &do_first_line);
+               IFHELP(nano_firstline_msg,) 
+               0, 0, 0, VIEW, &do_first_line);
 
     sc_init_one(&goto_list, NANO_LASTLINE_KEY, _("Last Line"),
-               nano_lastline_msg, 0, 0, 0, VIEW, &do_last_line);
+               IFHELP(nano_lastline_msg,) 
+               0, 0, 0, VIEW, &do_last_line);
 
-    if (help_list != NULL)
-       free_shortcutage(&help_list);
+    free_shortcutage(&help_list);
 
     sc_init_one(&help_list, NANO_PREVPAGE_KEY, _("Prev Page"),
-               nano_prevpage_msg,
+               IFHELP(nano_prevpage_msg,)
                0, NANO_PREVPAGE_FKEY, KEY_PPAGE, VIEW, do_page_up);
 
     sc_init_one(&help_list, NANO_NEXTPAGE_KEY, _("Next Page"),
-               nano_nextpage_msg,
+               IFHELP(nano_nextpage_msg,)
                0, NANO_NEXTPAGE_FKEY, KEY_NPAGE, VIEW, do_page_down);
 
     sc_init_one(&help_list, NANO_EXIT_KEY, _("Exit"),
-               nano_exit_msg, 0, NANO_EXIT_FKEY, 0, VIEW, do_exit);
+               IFHELP(nano_exit_msg,)
+               0, NANO_EXIT_FKEY, 0, VIEW, do_exit);
 
-    if (writefile_list != NULL)
-       free_shortcutage(&writefile_list);
+    free_shortcutage(&writefile_list);
 
     sc_init_one(&writefile_list, NANO_HELP_KEY,
-               _("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);
+               _("Get Help"), IFHELP(nano_help_msg,) 
+               0, 0, 0, VIEW, do_help);
 
 #ifndef DISABLE_BROWSER
     sc_init_one(&writefile_list, NANO_TOFILES_KEY, _("To Files"),
-               nano_tofiles_msg, 0, 0, 0, NOVIEW, 0);
+               IFHELP(nano_tofiles_msg,) 
+               0, 0, 0, NOVIEW, 0);
 #endif
 
 #ifndef NANO_SMALL
     sc_init_one(&writefile_list, TOGGLE_DOS_KEY, 
-               _("DOS Format"), nano_dos_msg, 0, 0, 0, NOVIEW, 0);
+               _("DOS Format"), IFHELP(nano_dos_msg,) 
+               0, 0, 0, NOVIEW, 0);
 
     sc_init_one(&writefile_list, TOGGLE_MAC_KEY, 
-               _("Mac Format"), nano_mac_msg, 0, 0, 0, NOVIEW, 0);
+               _("Mac Format"), IFHELP(nano_mac_msg,) 
+               0, 0, 0, NOVIEW, 0);
 #endif
 
     sc_init_one(&writefile_list, 
                NANO_APPEND_KEY, _("Append"),
-               nano_append_msg, 0, 0, 0, NOVIEW, 0);
+               IFHELP(nano_append_msg,) 
+               0, 0, 0, NOVIEW, 0);
 
     sc_init_one(&writefile_list, 
                NANO_PREPEND_KEY, _("Prepend"),
-               nano_prepend_msg, 0, 0, 0, NOVIEW, 0);
+               IFHELP(nano_prepend_msg,) 
+               0, 0, 0, NOVIEW, 0);
 
     sc_init_one(&writefile_list, NANO_CANCEL_KEY, 
-               _("Cancel"), nano_cancel_msg, 0, 0, 0, VIEW, 0);
+               _("Cancel"), IFHELP(nano_cancel_msg,) 
+               0, 0, 0, VIEW, 0);
 
-    if (insertfile_list != NULL)
-       free_shortcutage(&insertfile_list);
+    free_shortcutage(&insertfile_list);
 
     sc_init_one(&insertfile_list, NANO_HELP_KEY,
-               _("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);
+               _("Get Help"), IFHELP(nano_help_msg,) 
+               0, 0, 0, VIEW, do_help);
 
     sc_init_one(&insertfile_list, NANO_CANCEL_KEY, _("Cancel"),
-               nano_cancel_msg, 0, 0, 0, VIEW, 0);
+               IFHELP(nano_cancel_msg,) 
+               0, 0, 0, VIEW, 0);
 
 #ifndef DISABLE_BROWSER
     sc_init_one(&insertfile_list, NANO_TOFILES_KEY, _("To Files"),
-               nano_tofiles_msg, 0, 0, 0, NOVIEW, 0);
+               IFHELP(nano_tofiles_msg,) 
+               0, 0, 0, NOVIEW, 0);
 #endif
 #ifndef NANO_SMALL
     sc_init_one(&insertfile_list, NANO_EXTCMD_KEY, _("Execute Command"),
-               nano_execute_msg, 0, 0, 0, NOVIEW, 0);
+               IFHELP(nano_execute_msg,) 
+               0, 0, 0, NOVIEW, 0);
 #endif
 
-    if (spell_list != NULL)
-       free_shortcutage(&spell_list);
+    free_shortcutage(&spell_list);
 
     sc_init_one(&spell_list, NANO_HELP_KEY,
-               _("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);
+               _("Get Help"), IFHELP(nano_help_msg,) 
+               0, 0, 0, VIEW, do_help);
 
     sc_init_one(&spell_list, NANO_CANCEL_KEY, _("Cancel"),
-               nano_cancel_msg, 0, 0, 0, VIEW, 0);
+               IFHELP(nano_cancel_msg,) 
+               0, 0, 0, VIEW, 0);
 
 #ifndef NANO_SMALL
-    if (extcmd_list != NULL)
-       free_shortcutage(&extcmd_list);
+    free_shortcutage(&extcmd_list);
 
     sc_init_one(&extcmd_list, NANO_HELP_KEY,
-               _("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);
+               _("Get Help"), IFHELP(nano_help_msg,) 
+               0, 0, 0, VIEW, do_help);
 
     sc_init_one(&extcmd_list, NANO_CANCEL_KEY, _("Cancel"),
-               nano_cancel_msg, 0, 0, 0, VIEW, 0);
+               IFHELP(nano_cancel_msg,) 
+               0, 0, 0, VIEW, 0);
 #endif
 
 #ifndef DISABLE_BROWSER
 
-    if (browser_list != NULL)
-       free_shortcutage(&browser_list);
+    free_shortcutage(&browser_list);
 
     sc_init_one(&browser_list, NANO_HELP_KEY,
-               _("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);
+               _("Get Help"), IFHELP(nano_help_msg,) 
+               0, 0, 0, VIEW, do_help);
 
     sc_init_one(&browser_list, NANO_EXIT_KEY, _("Exit"),
-               nano_exit_msg, 0, NANO_EXIT_FKEY, 0, VIEW, 0);
+               IFHELP(nano_exit_msg,) 
+               0, NANO_EXIT_FKEY, 0, VIEW, 0);
 
     sc_init_one(&browser_list, NANO_PREVPAGE_KEY, _("Prev Page"),
-               nano_prevpage_msg,
+               IFHELP(nano_prevpage_msg,)
                0, NANO_PREVPAGE_FKEY, KEY_PPAGE, VIEW, 0);
 
     sc_init_one(&browser_list, NANO_NEXTPAGE_KEY, _("Next Page"),
-               nano_nextpage_msg,
+               IFHELP(nano_nextpage_msg,)
                0, NANO_NEXTPAGE_FKEY, KEY_NPAGE, VIEW, 0);
 
     sc_init_one(&browser_list, NANO_GOTO_KEY, _("Goto"),
-               nano_gotodir_msg, NANO_ALT_GOTO_KEY, NANO_GOTO_FKEY, 0, 
-               VIEW, 0);
+               IFHELP(nano_gotodir_msg,) 
+               NANO_ALT_GOTO_KEY, NANO_GOTO_FKEY, 0, VIEW, 0);
 
-    if (gotodir_list != NULL)
-       free_shortcutage(&gotodir_list);
+    free_shortcutage(&gotodir_list);
 
     sc_init_one(&gotodir_list, NANO_HELP_KEY,
-               _("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);
+               _("Get Help"), IFHELP(nano_help_msg,) 
+               0, 0, 0, VIEW, do_help);
 
     sc_init_one(&gotodir_list, NANO_CANCEL_KEY, _("Cancel"),
-               nano_cancel_msg, 0, 0, 0, VIEW, 0);
+               IFHELP(nano_cancel_msg,) 
+               0, 0, 0, VIEW, 0);
 
 #endif
 
@@ -717,48 +810,10 @@ void shortcut_init(int unjustify)
     currshortcut = main_list;
 #endif
 
-    toggle_init();
-}
-
-/* delete the structure */
-void free_shortcutage(shortcut **shortcutage)
-{
-    shortcut *s,*ps;
-
-    s = *shortcutage;
-    if (s == NULL) {
-       return;
-    } else {
-       s = *shortcutage;
-       do {
-               ps = s;
-               s = s->next; 
-               free(ps);
-       } while (s->next != NULL);
-       free(s);
-       *shortcutage = NULL;
-    }
-}
-
 #ifndef NANO_SMALL
-/* clear the toggles */
-void free_toggles(void)
-{
-    toggle *u,*lu;
-
-    if (toggles == NULL) {
-       return;
-    } else {
-       lu = NULL;
-       for (u = toggles; u->next != NULL; u = u->next) {
-               if (lu != NULL) free(lu);
-               lu = u;
-       }
-       if (lu != NULL) free(lu);
-       if (u != NULL) free(u);
-    }
-}
+    toggle_init();
 #endif
+}
 
 /* added by SPK for memory cleanup, gracefully return our malloc()s */
 void thanks_for_all_the_fish(void) 
diff --git a/nano.c b/nano.c
index 4cae80e5fc48057d274c77c78afd99f8f27ea2c0..400e867118f866471800834dd7f53de8edfd8155 100644 (file)
--- a/nano.c
+++ b/nano.c
@@ -696,7 +696,8 @@ int no_help(void)
        return 0;
 }
 
-#if defined(DISABLE_JUSTIFY) || defined(DISABLE_SPELLER) || defined(DISABLE_HELP)
+#if defined(DISABLE_JUSTIFY) || defined(DISABLE_SPELLER) || \
+       defined(DISABLE_HELP) || defined(NANO_SMALL)
 void nano_disabled_msg(void)
 {
     statusbar("Sorry, support for this function has been disabled");
@@ -746,33 +747,36 @@ int do_enter(filestruct * inptr)
 {
     filestruct *newnode;
     char *tmp;
-#ifndef NANO_SMALL
-    char *spc;
-    int extra = 0;
-#endif
 
     newnode = make_new_node(inptr);
+    assert(current->data != NULL);
     tmp = &current->data[current_x];
-    current_x = 0;
 
 #ifndef NANO_SMALL
     /* Do auto-indenting, like the neolithic Turbo Pascal editor */
     if (ISSET(AUTOINDENT)) {
-       spc = current->data;
-       if (spc) {
-           while ((*spc == ' ') || (*spc == '\t')) {
-               extra++;
-               spc++;
-               current_x++;
-               totsize++;
-           }
-           newnode->data = charalloc(strlen(tmp) + extra + 1);
-           strncpy(newnode->data, current->data, extra);
-           strcpy(&newnode->data[extra], tmp);
+       int extra = 0;
+       char *spc = current->data;
+       while ((*spc == ' ') || (*spc == '\t')) {
+           extra++;
+           spc++;
        }
+       /* If the cursor is in the indentation, only indent to the cursor. 
+        * Ex, if cursor is at col 0, don't indent at all.
+        */
+       if (current_x < extra)
+           extra = current_x;
+       else
+           current_x = extra;
+       totsize += extra;
+
+       newnode->data = charalloc(strlen(tmp) + extra + 1);
+       strncpy(newnode->data, current->data, extra);
+       strcpy(&newnode->data[extra], tmp);
     } else 
 #endif
     {
+       current_x = 0;
        newnode->data = charalloc(strlen(tmp) + 1);
        strcpy(newnode->data, tmp);
     }
@@ -2477,7 +2481,9 @@ void help_init(void)
     int i, sofar = 0, meta_shortcut = 0, helplen;
     long allocsize = 1;                /* How much space we're gonna need for the help text */
     char buf[BUFSIZ] = "", *ptr = NULL;
+#ifndef NANO_SMALL
     toggle *t;
+#endif
     shortcut *s;
 
     helplen = length_of_list(currshortcut);
@@ -2579,12 +2585,14 @@ void help_init(void)
        s = s->next;
     }
 
+#ifndef NANO_SMALL
     /* If we're on the main list, we also allocate space for toggle help text. */
     if (currshortcut == main_list) {
        for (t = toggles; t != NULL; t = t->next)
            if (t->desc != NULL)
                allocsize += strlen(t->desc) + 30;
     }
+#endif /* !NANO_SMALL */
 
     allocsize += strlen(ptr);
 
@@ -2658,6 +2666,7 @@ void help_init(void)
        s = s->next;
     }
 
+#ifndef NANO_SMALL
     /* And the toggles... */
     if (currshortcut == main_list)
        for (t = toggles; t != NULL; t = t->next) {
@@ -2670,15 +2679,13 @@ void help_init(void)
        strcat(help_text, buf);
        strcat(help_text, "\n");
     }
-
+#endif /* !NANO_SMALL */
 }
 #endif
 
+#ifndef NANO_SMALL
 void do_toggle(toggle *which)
 {
-#ifdef NANO_SMALL
-    nano_disabled_msg();
-#else
     char *enabled = _("enabled");
     char *disabled = _("disabled");
 
@@ -2733,9 +2740,8 @@ void do_toggle(toggle *which)
        else
            statusbar("%s %s", which->desc, enabled);
     }
-
-#endif
 }
+#endif /* !NANO_SMALL */
 
 /* If the NumLock key has made the keypad go awry, print an error
    message; hopefully we can address it later. */
diff --git a/nano.h b/nano.h
index dc63563a881ef8619bd5f08de9d301e7d673f7aa..c11ba051c43848c4642f01db7b9c7de7d790f7af 100644 (file)
--- a/nano.h
+++ b/nano.h
@@ -99,14 +99,16 @@ typedef struct shortcut {
    int misc2;
    int viewok;         /* is this function legal in view mode? */
    int (*func) (void); /* Function to call when we catch this key */
-   char *desc;         /* Description, e.g. "Page Up" */
-   char *help;         /* Help file entry text */
+   const char *desc;   /* Description, e.g. "Page Up" */
+#ifndef DISABLE_HELP
+   const char *help;   /* Help file entry text */
+#endif
    struct shortcut *next;
 } shortcut;
 
 typedef struct toggle {
    int val;            /* Sequence to toggle the key.  Should only need 1 */
-   char *desc;         /* Description for when toggle is, uh, toggled,
+   const char *desc;   /* Description for when toggle is, uh, toggled,
                           e.g. "Pico Messages"; we'll append Enabled or
                           Disabled */
    int flag;           /* What flag actually gets toggled */
diff --git a/proto.h b/proto.h
index b6cff36b5ab73d8e40c80c260889b510ed90a706..6f97abf531400509862ba769869886cdede769c1 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -97,6 +97,13 @@ extern toggle *toggles;
 
 /* Programs we want available */
 
+/* public functions in global.c */
+int length_of_list(const shortcut *s);
+void shortcut_init(int unjustify);
+void thanks_for_all_the_fish(void);
+
+
+
 char *revstrstr(char *haystack, char *needle, char *rev_start);
 char *stristr(char *haystack, char *needle);
 char *revstristr(char *haystack, char *needle, char *rev_start);
@@ -122,7 +129,6 @@ int no_help(void);
 int renumber_all(void);
 int open_file(char *filename, int insert, int quiet);
 int do_insertfile(int loading_file);
-int length_of_list(shortcut *s);
 int num_of_digits(int n);
 int open_pipe(char *command);
 int read_file(FILE *f, char *filename, int quiet);
@@ -156,7 +162,6 @@ int check_wildcard_match(const char *text, const char *pattern);
 char *input_tab(char *buf, int place, int *lastWasTab, int *newplace, int *list);
 char *real_dir_from_tilde(char *buf);
 
-void shortcut_init(int unjustify);
 void signal_init(void);
 void lowercase(char *src);
 void blank_bottombars(void);
@@ -223,8 +228,6 @@ void unlink_opennode(openfilestruct * fileptr);
 
 void cut_marked_segment(filestruct * top, int top_x, filestruct * bot,
                         int bot_x, int destructive);
-void free_shortcutage(shortcut **src);
-void thanks_for_all_the_fish(void);
 
 #ifdef ENABLE_NANORC
 void do_rcfile(void);
diff --git a/winio.c b/winio.c
index 52e46f012945f173bfa59e289eeb9140009d7970..796f4b2ba14095efb07ccdb44b960d46e474c12f 100644 (file)
--- a/winio.c
+++ b/winio.c
@@ -579,7 +579,7 @@ void titlebar(char *path)
     reset_cursor();
 }
 
-void onekey(char *keystroke, char *desc, int len)
+void onekey(char *keystroke, const char *desc, int len)
 {
     int i;