]> git.wh0rd.org Git - nano.git/commitdiff
Adding a typedef for a pointer to a function: functionptrtype.
authorBenno Schulenberg <bensberg@justemail.net>
Wed, 2 Jul 2014 08:47:09 +0000 (08:47 +0000)
committerBenno Schulenberg <bensberg@justemail.net>
Wed, 2 Jul 2014 08:47:09 +0000 (08:47 +0000)
And starting to use this to make the code a bit cleaner.

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5050 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/global.c
src/prompt.c
src/proto.h

index b5435fe3bad128b8b491b2f7d9a6b702580b2a89..276e9f150d22c2bbf915144a0eb9dad15b36dd2c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-07-02  Benno Schulenberg  <bensberg@justemail.net>
+       * src/proto.h: Add a typedef for a pointer to a function.
+       * src/global.c (func_from_key): New wrapper.
+       * src/prompt.c (get_prompt_string, do_prompt): Use the new
+       wrapper to make the code a bit cleaner.
+
 2014-07-01  Benno Schulenberg  <bensberg@justemail.net>
        * src/browser.c (do_browser), src/help.c (do_help): Make sure
        to always set 'currmenu', so that we can rely on it.
index a6610d93421b4b5e7c930b0b03ad673c0bc5f608..2f34fefb2f1f478476095a1a7a2baf5f82ea1c4c 100644 (file)
@@ -405,6 +405,17 @@ int sc_seq_or(void (*func)(void), int defaultval)
     return defaultval;
 }
 
+/* Return a pointer to the function that is bound to the given key. */
+functionptrtype func_from_key(int *kbinput)
+{
+    const sc *s = get_shortcut(kbinput);
+
+    if (s)
+       return s->scfunc;
+    else
+       return NULL;
+}
+
 /* Assign the info to the shortcut struct.
  * Assumes keystr is already assigned, naturally. */
 void assign_keyinfo(sc *s)
index 719f21541fc435290c8b8164f138623e4ff0ac51..f3511c821bcf892d082db5bd5cb8be72fee2269b 100644 (file)
@@ -721,7 +721,7 @@ void total_statusbar_refresh(void (*refresh_func)(void))
 
 /* Get a string of input at the statusbar prompt.  This should only be
  * called from do_prompt(). */
-const sc *get_prompt_string(int *actual, bool allow_tabs,
+functionptrtype get_prompt_string(int *actual, bool allow_tabs,
 #ifndef DISABLE_TABCOMP
        bool allow_files,
        bool *list,
@@ -735,7 +735,7 @@ const sc *get_prompt_string(int *actual, bool allow_tabs,
     int kbinput = ERR;
     bool ran_func, finished;
     size_t curranswer_len;
-    const sc *s;
+    functionptrtype func;
 #ifndef DISABLE_TABCOMP
     bool tabbed = FALSE;
        /* Whether we've pressed Tab. */
@@ -796,17 +796,16 @@ fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answe
        kbinput = do_statusbar_input(&ran_func, &finished, refresh_func);
        assert(statusbar_x <= strlen(answer));
 
-       s = get_shortcut(&kbinput);
+       func = func_from_key(&kbinput);
 
-       if (s)
-           if (s->scfunc == do_cancel || s->scfunc == do_enter_void)
-               break;
+       if (func == do_cancel || func == do_enter_void)
+           break;
 
 #ifndef DISABLE_TABCOMP
-       if (s && s->scfunc != do_tab)
+       if (func != do_tab)
            tabbed = FALSE;
 
-       if (s && s->scfunc == do_tab) {
+       if (func == do_tab) {
 #ifndef DISABLE_HISTORIES
            if (history_list != NULL) {
                if (last_kbinput != sc_seq_or(do_tab, NANO_CONTROL_I))
@@ -828,7 +827,7 @@ fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answe
        } else
 #endif /* !DISABLE_TABCOMP */
 #ifndef DISABLE_HISTORIES
-       if (s && s->scfunc == get_history_older_void) {
+       if (func == get_history_older_void) {
            if (history_list != NULL) {
                /* If we're scrolling up at the bottom of the history list
                 * and answer isn't blank, save answer in magichistory. */
@@ -850,7 +849,7 @@ fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answe
                 * we aren't kicked out of the statusbar prompt. */
                finished = FALSE;
            }
-       } else if (s && s->scfunc == get_history_newer_void) {
+       } else if (func == get_history_newer_void) {
            if (history_list != NULL) {
                /* Get the newer search from the history list and save it in
                 * answer.  If there is no newer search, don't do anything. */
@@ -878,7 +877,7 @@ fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answe
            }
        } else
 #endif /* !DISABLE_HISTORIES */
-       if (s && s->scfunc == do_help_void) {
+       if (func == do_help_void) {
            update_statusbar_line(answer, statusbar_x);
 
            /* This key has a shortcut-list entry when it's used to go to
@@ -919,9 +918,8 @@ fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answe
      * associated function, so reset statusbar_x and statusbar_pww.  If
      * we've finished putting in an answer, reset the statusbar cursor
      * position too. */
-    if (s) {
-       if (s->scfunc == do_cancel || s->scfunc == do_enter_void ||
-       ran_func) {
+    if (func) {
+       if (func == do_cancel || func == do_enter_void || ran_func) {
            statusbar_x = old_statusbar_x;
            statusbar_pww = old_pww;
 
@@ -935,7 +933,8 @@ fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answe
     }
 
     *actual = kbinput;
-    return s;
+
+    return func;
 }
 
 /* Ask a question on the statusbar.  The prompt will be stored in the
@@ -962,7 +961,7 @@ int do_prompt(bool allow_tabs,
 {
     va_list ap;
     int retval;
-    const sc *s;
+    functionptrtype func;
 #ifndef DISABLE_TABCOMP
     bool list = FALSE;
 #endif
@@ -982,7 +981,7 @@ int do_prompt(bool allow_tabs,
     va_end(ap);
     null_at(&prompt, actual_x(prompt, COLS - 4));
 
-    s = get_prompt_string(&retval, allow_tabs,
+    func = get_prompt_string(&retval, allow_tabs,
 #ifndef DISABLE_TABCOMP
        allow_files,
        &list,
@@ -1003,9 +1002,9 @@ int do_prompt(bool allow_tabs,
 
     /* If we left the prompt via Cancel or Enter, set the return value
      * properly. */
-    if (s && s->scfunc == do_cancel)
+    if (func == do_cancel)
        retval = -1;
-    else if (s && s->scfunc == do_enter_void)
+    else if (func == do_enter_void)
        retval = (*answer == '\0') ? -2 : 0;
 
     blank_statusbar();
index 3fa197aa6109be1f1ba8887b6bef49ad53e8297c..3cae50ea928b3602ef8f3c55f6d228dc76fa11cc 100644 (file)
@@ -139,6 +139,8 @@ extern color_pair interface_color_pair[NUMBER_OF_ELEMENTS];
 
 extern char *homedir;
 
+typedef void (*functionptrtype)(void);
+
 /* All functions in browser.c. */
 #ifndef DISABLE_BROWSER
 char *do_browser(char *path, DIR *dir);
@@ -352,6 +354,7 @@ size_t length_of_list(int menu);
 key_type strtokeytype(const char *str);
 const sc *first_sc_for(int menu, void (*func)(void));
 int sc_seq_or(void (*func)(void), int defaultval);
+functionptrtype func_from_key(int *kbinput);
 void assign_keyinfo(sc *s);
 void print_sclist(void);
 void shortcut_init(void);
@@ -522,7 +525,7 @@ void reset_statusbar_cursor(void);
 void update_statusbar_line(const char *curranswer, size_t index);
 bool need_statusbar_horizontal_update(size_t pww_save);
 void total_statusbar_refresh(void (*refresh_func)(void));
-const sc *get_prompt_string(int *value, bool allow_tabs,
+functionptrtype get_prompt_string(int *value, bool allow_tabs,
 #ifndef DISABLE_TABCOMP
        bool allow_files,
        bool *list,