]> git.wh0rd.org Git - nano.git/commitdiff
miscellaneous bug fixes, part 2
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Sun, 22 Dec 2002 16:30:00 +0000 (16:30 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Sun, 22 Dec 2002 16:30:00 +0000 (16:30 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1331 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

14 files changed:
ChangeLog
color.c
configure.ac
cut.c
files.c
global.c
move.c
nano.c
nano.h
proto.h
rcfile.c
search.c
utils.c
winio.c

index 955a040e2c540d0953d76f5c698121d104444939..0491575537f0c1a78b4a7eb4c118f7d1e584934e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,9 +9,72 @@ CVS code -
        - Minor cosmetic tweaks to the ngettext() macro, and fix to
          properly detect systems lacking ngettext() and correctly
          compile on them; the previous fix didn't work. (DLR)
+       - Fix problems with some code sections' not being #ifdef'ed out
+         when they should be, or being #ifdef'ed out improperly. (David
+         Benbennick and DLR)
+       - Change FOLLOW_SYMLINKS to NOFOLLOW_SYMLINKS, and rework the
+         associated logic accordingly, throughout the code. (David
+         Benbennick)
+       - Rework #ifdefs to not include mouse_init() at all if
+         DISABLE_MOUSE is defined or NCURSES_MOUSE_VERSION isn't. (DLR)
+       - For consistency, change many references of (!x) to (x == NULL)
+         and (x) to (x != NULL). (DLR)
+       - Define KEY_IC properly (and KEY_DC more portably) when slang
+         support is enabled, and remove the hack to work around the
+         former's not being defined. (David Benbennick and DLR)
 - configure.ac:
        - Added tr to ALL_LINGUAS (Jordi).
+       - Fix now inaccurate description of --enable-tiny's effects; it
+         no longer disables NLS support. (DLR)
+       - Fix typo. (David Benbennick)
+       - Check for strcasecmp() and strncasecmp(), since they are
+         apparently only standard under BSD. (DLR)
+- cut.c:
+  do_cut_text()
+       - Fix a memory corruption problem caused by accessing edittop
+         after it was freed but before it was reset to a sane value
+         from current. (David Benbennick)
+  do_uncut_text()
+       - If uncutting more than one line of unmarked text at editbot,
+         don't center the screen, since Pico doesn't. (DLR)
+- files.c:
+  read_line()
+       - Miscellaneous cleanups. (David Benbennick)
+  read_file()
+       - Miscellaneous cleanups. (David Benbennick)
+       - Fix len's being off by one when reading in Mac-format files,
+         exposed by one of David Benbennick's cleanups. (DLR)
+       - If NO_CONVERT isn't set when we first enter, and it gets set
+         while reading in the file, unset it again afterwards. (DLR)
+  add_open_file()
+       - Fix minor logic error when determining when to resave fileage
+         and filebot. (DLR)
+  write_file()
+       - Change lineswritten from a long to an int, to match
+         filestruct->lineno. (DLR; mismatch found by David Benbennick)
+  input_tab()
+       - Variable name change: matchBuf -> matchbuf. (DLR)
+  diralphasort()
+       - Remove the HAVE_STRCASECMP #ifdef block; see the changes to
+         configure.ac and nano.h for why. (DLR)
+- move.c:
+  do_page_down()
+       - If there's a page or less of text, do an edit_update() if the
+         mark is on; otherwise, the highlight won't be displayed. (DLR)
 - nano.c:
+  do_prev_word()
+       - Make the assert match that in do_next_word(). (DLR)
+  do_enter()
+       - If smooth scrolling is on, and Enter is pressed on the
+         magicline, don't center the screen. (DLR)
+  do_justify()
+       - Fix memory corruption problem triggered when edittop and
+         current->next pointed to the same value and current->next was
+         destroyed during justification. (DLR)
+       - Center the screen when justification moves the cursor entirely
+         off the bottom of the screen, instead of when it moves the
+         cursor near the bottom of the screen, to more closely match
+         Pico's behavior. (DLR)
   version()
        - Remove obsolete reference to --enable-undo. (David Benbennick)
   do_int_speller()
@@ -23,7 +86,22 @@ CVS code -
        - Programs now return char *, NULL for successful completion,
          otherwise the error string to display.  This allows us to give
          more useful feedback to the user when spell checking fails.
+  ABCD()
+       - Renamed abcd(). (DLR)
+- nano.h:
+       - Make sure NO_RCFILE and COLOR_SYNTAX aren't set to the same
+         value. (DLR; discovered by Ken Tyler)
+       - If strcasecmp() and/or strncasecmp() aren't available, use
+         strcmp() and/or strncmp instead. (DLR)
+- utils.c:
+  is_cntrl_char()
+       - Rework to fix a problem with displaying certain high-bit
+         characters. (David Benbennick; reported by Andrzej Marecki)
 - winio.c:
+  edit_refresh()
+       - Miscellaneous cleanups that fix a bug where the screen
+         isn't updated after uncutting chunks of upwardly marked cut
+         text that are over a page in length. (David Benbennick)
   do_credits()
        - Add David Benbennick to credits. (DLR)
 - nanorc.sample:
diff --git a/color.c b/color.c
index 0149d687f2811844d8db2970194f3313ded6de24..da860ce7eeab3ed7a1cbfac8e3ec55ac5659356a 100644 (file)
--- a/color.c
+++ b/color.c
@@ -78,13 +78,13 @@ void do_colorinit(void)
        defok = use_default_colors() != ERR;
 #endif
 
-       for (tmpcolor = colorstrings; tmpcolor != NULL; 
+       for (tmpcolor = colorstrings; tmpcolor != NULL;
                tmpcolor = tmpcolor->next) {
            short background = tmpcolor->bg;
 
            if (background == -1)
 #ifdef HAVE_USE_DEFAULT_COLORS
-               if (!defok)
+               if (defok == 0)
 #endif
                    background = COLOR_BLACK;
 
index fc825dc51ecfe372644a02ea1e08c7cbe284d942..3a4f0506ca4d46d731182dcf9db5a44269b2d5fa 100644 (file)
@@ -37,8 +37,7 @@ AC_ARG_ENABLE(extra,
  fi])
 
 AC_ARG_ENABLE(tiny,
-[  --enable-tiny           Disable features for the sake of size
-                          (currently disables detailed help and i18n)],
+[  --enable-tiny           Disable features for the sake of size],
 [if test x$enableval = xyes; then
     AC_DEFINE(NANO_SMALL, 1, [Define this to make the nano executable as small as possible.]) tiny_support=yes
     AC_DEFINE(DISABLE_BROWSER, 1, [Define this to disable the built-in (crappy) file browser.]) 
@@ -223,7 +222,7 @@ AC_MSG_WARN([*** Can not use slang when cross-compiling])),
     esac], [AC_MSG_RESULT(no)])
 
 dnl Checks for functions
-AC_CHECK_FUNCS(snprintf vsnprintf)
+AC_CHECK_FUNCS(snprintf vsnprintf strcasecmp strncasecmp)
 if test "x$ac_cv_func_snprintf" = "xno" -o "xac_cv_func_vsnprintf" = "xno"
 then
        AM_PATH_GLIB(1.2.4,,
@@ -284,7 +283,7 @@ if test x$slang_support != xyes; then
     AC_CHECK_LIB([$CURSES_LIB_NAME], wresize, AC_DEFINE(HAVE_WRESIZE, 1, [Define this if you have the wresize function in your ncurses-type library.]))
     AC_CHECK_LIB([$CURSES_LIB_NAME], resizeterm, AC_DEFINE(HAVE_RESIZETERM, 1, [Define this if you have the resizeterm function in your ncurses-type library.]))
 
-    # Taken from aumix (can't tell form the variable name?)
+    # Taken from aumix (can't tell from the variable name?)
     AC_CACHE_CHECK([for private member _use_keypad in WINDOW],
     aumix_cv_struct_window_usekeypad,
     [AC_TRY_COMPILE([#ifdef HAVE_NCURSES_H
diff --git a/cut.c b/cut.c
index 9b014a00e4cc1f0a47e507c1caf5545bd9d6ff47..c566dfb181a2a106d960ebe415a18f7b4dd28819 100644 (file)
--- a/cut.c
+++ b/cut.c
@@ -29,7 +29,8 @@
 #include "nano.h"
 
 static int marked_cut;         /* Is the cutbuffer from a mark? */
-static filestruct *cutbottom = NULL; /* Pointer to end of cutbuffer */
+static filestruct *cutbottom = NULL;
+                               /* Pointer to end of cutbuffer */
 
 filestruct *get_cutbottom(void)
 {
@@ -39,7 +40,7 @@ filestruct *get_cutbottom(void)
 void add_to_cutbuffer(filestruct *inptr)
 {
 #ifdef DEBUG
-    fprintf(stderr, _("add_to_cutbuffer called with inptr->data = %s\n"),
+    fprintf(stderr, _("add_to_cutbuffer() called with inptr->data = %s\n"),
            inptr->data);
 #endif
 
@@ -57,6 +58,7 @@ void add_to_cutbuffer(filestruct *inptr)
 
 #ifndef NANO_SMALL
 /* Cut a marked segment instead of a whole line.
+ *
  * The first cut character is top->data[top_x].  Unless top == bot, the
  * last cut line has length bot_x.  That is, if bot_x > 0 then we cut to
  * bot->data[bot_x - 1].
@@ -121,8 +123,8 @@ void cut_marked_segment(filestruct *top, size_t top_x, filestruct *bot,
        } else {
            totsize -= bot_x + 1;
 
-           /* Here, the remainder line might get longer, so we realloc
-              it first. */
+           /* Here, the remainder line might get longer, so we
+              realloc() it first. */
            top->data = (char *)nrealloc(top->data,
                                        sizeof(char) * newsize);
            memmove(top->data + top_x, bot->data + bot_x,
@@ -248,12 +250,11 @@ int do_cut_text(void)
        UNSET(MARK_ISSET);
 
        marked_cut = 1;
-       set_modified();
-       if (dontupdate) {
-           fix_editbot();
+       if (dontupdate)
            edit_refresh();
-       else
+       else
            edit_update(current, CENTER);
+       set_modified();
 
        return 1;
     }
@@ -291,8 +292,7 @@ int do_cut_text(void)
 int do_uncut_text(void)
 {
     filestruct *tmp = current, *fileptr = current;
-    filestruct *newbuf = NULL;
-    filestruct *newend = NULL;
+    filestruct *newbuf = NULL, *newend = NULL;
 #ifndef NANO_SMALL
     char *tmpstr, *tmpstr2;
     filestruct *hold = current;
@@ -305,7 +305,7 @@ int do_uncut_text(void)
        return 0;               /* AIEEEEEEEEEEEE */
 
 #ifndef NANO_SMALL
-    if (!marked_cut || cutbuffer->next != NULL)
+    if (marked_cut == 0 || cutbuffer->next != NULL)
 #endif
     {
        newbuf = copy_filestruct(cutbuffer);
@@ -316,7 +316,7 @@ int do_uncut_text(void)
 
     /* Hook newbuf into fileptr */
 #ifndef NANO_SMALL
-    if (marked_cut) {
+    if (marked_cut != 0) {
        int recenter_me = 0;
            /* Should we eventually use edit_update(CENTER)? */
 
@@ -329,7 +329,7 @@ int do_uncut_text(void)
            memmove(current->data + current_x + buf_len,
                        current->data + current_x, cur_len - current_x + 1);
            strncpy(current->data + current_x, cutbuffer->data, buf_len);
-               /* Use strncpy to not copy the terminal '\0'. */
+               /* Use strncpy() to not copy the terminal '\0'. */
 
            current_x += buf_len;
            totsize += buf_len;
@@ -398,8 +398,7 @@ int do_uncut_text(void)
 
        if (marked_cut == 2) {
            tmp = make_new_node(current);
-           tmp->data = charalloc(strlen(&current->data[current_x]) + 1);
-           strcpy(tmp->data, &current->data[current_x]);
+           tmp->data = mallocstrcpy(NULL, current->data + current_x);
            splice_node(current, tmp, current->next);
            null_at(&current->data, current_x);
            current = current->next;
@@ -449,7 +448,9 @@ int do_uncut_text(void)
 
     i = editbot->lineno;
     renumber(newbuf);
-    if (i < newend->lineno)
+    /* Center the screen if we've moved beyond the line numbers of both
+       the old and new editbots */
+    if (i < newend->lineno && editbot->lineno < newend->lineno)
        edit_update(fileptr, CENTER);
     else
        edit_refresh();
diff --git a/files.c b/files.c
index 2995dd0b2a8a7800fd72ca60e7ac511a0dd0ec03..719bd960e15d18921da8f2674379279d3397a3be 100644 (file)
--- a/files.c
+++ b/files.c
@@ -80,7 +80,7 @@ void new_file(void)
        this new file; without this, if nano is started without a filename
        on the command line, a new file will be created, but it will be
        given no open_files entry */
-    if (!open_files) {
+    if (open_files == NULL) {
        add_open_file(0);
        /* turn off view mode in this case; this is for consistency
           whether multibuffers are compiled in or not */
@@ -100,51 +100,47 @@ void new_file(void)
 
 filestruct *read_line(char *buf, filestruct *prev, int *line1ins, int len)
 {
-    filestruct *fileptr;
-
-    fileptr = nmalloc(sizeof(filestruct));
+    filestruct *fileptr = (filestruct *)nmalloc(sizeof(filestruct));
 
     /* nulls to newlines; len is the string's real length here */
     unsunder(buf, len);
 
-    fileptr->data = charalloc(strlen(buf) + 2);
-    strcpy(fileptr->data, buf);
+    assert(strlen(buf) == len);
+
+    fileptr->data = mallocstrcpy(NULL, buf);
 
 #ifndef NANO_SMALL
     /* If it's a DOS file (CRLF), and file conversion isn't disabled,
        strip out the CR part */
-    if (!ISSET(NO_CONVERT) && buf[strlen(buf) - 1] == '\r') {
-       fileptr->data[strlen(buf) - 1] = '\0';
+    if (!ISSET(NO_CONVERT) && len > 0 && buf[len - 1] == '\r') {
+       fileptr->data[len - 1] = '\0';
        totsize--;
 
-       if (!fileformat)
+       if (fileformat == 0)
            fileformat = 1;
     }
 #endif
 
-    if (*line1ins) {
+    if (*line1ins != 0 || fileage == NULL) {
        /* Special case, insert with cursor on 1st line. */
        fileptr->prev = NULL;
        fileptr->next = fileage;
        fileptr->lineno = 1;
-       *line1ins = 0;
-       /* If we're inserting into the first line of the file, then
-          we want to make sure that our edit buffer stays on the
-          first line (and that fileage stays up to date!) */
-       fileage = fileptr;
-       edittop = fileptr;
-    } else if (fileage == NULL) {
+       if (*line1ins != 0) {
+           *line1ins = 0;
+           /* If we're inserting into the first line of the file, then
+              we want to make sure that our edit buffer stays on the
+              first line (and that fileage stays up to date!) */
+           edittop = fileptr;
+       } else
+           filebot = fileptr;
        fileage = fileptr;
-       fileage->lineno = 1;
-       fileage->next = fileage->prev = NULL;
-       fileptr = filebot = fileage;
-    } else if (prev) {
+    } else {
+       assert(prev != NULL);
        fileptr->prev = prev;
        fileptr->next = NULL;
        fileptr->lineno = prev->lineno + 1;
        prev->next = fileptr;
-    } else {
-       die(_("read_line: not on first line and prev is NULL"));
     }
 
     return fileptr;
@@ -153,45 +149,44 @@ filestruct *read_line(char *buf, filestruct *prev, int *line1ins, int len)
 int read_file(FILE *f, const char *filename, int quiet)
 {
     int num_lines = 0, len = 0;
-    char input = 0;            /* current input character */
+    char input = '\0';                 /* current input character */
     char *buf;
     long i = 0, bufx = 128;
     filestruct *fileptr = current, *tmp = NULL;
+#ifndef NANO_SMALL
+    int old_no_convert = ISSET(NO_CONVERT);
+#endif
     int line1ins = 0;
     int input_int;
 
     buf = charalloc(bufx);
     buf[0] = '\0';
 
-    if (fileptr != NULL && fileptr->prev != NULL) {
-       fileptr = fileptr->prev;
+    if (current != NULL) {
+       if (current == fileage)
+           line1ins = 1;
+       else
+           fileptr = current->prev;
        tmp = fileptr;
-    } else if (fileptr != NULL && fileptr->prev == NULL) {
-       tmp = fileage;
-       current = fileage;
-       line1ins = 1;
     }
+
+    /* For the assertion in read_line(), it must be true that if current is
+       NULL then so is fileage. */
+    assert(current != NULL || fileage == NULL);
+
     /* Read the entire file into file struct */
     while ((input_int = getc(f)) != EOF) {
         input = (char)input_int;
 #ifndef NANO_SMALL
-       if (!ISSET(NO_CONVERT) && is_cntrl_char((int)input)
-               && input != '\t' && input != '\r' && input != '\n') {
-           /* If the file has binary chars in it, don't stupidly
-              assume it's a DOS or Mac formatted file! */
+       /* If the file has binary chars in it, don't stupidly
+          assume it's a DOS or Mac formatted file! */
+       if (!ISSET(NO_CONVERT) && is_cntrl_char((int)input) != 0
+               && input != '\t' && input != '\r' && input != '\n')
            SET(NO_CONVERT);
-       }
 #endif
 
-       /* calculate the total length of the line; it might have nulls in
-          it, so we can't just use strlen() */
-       len++;
-
        if (input == '\n') {
 
-           /* don't count the newline in the line length */
-           len--;
-
            /* read in the line properly */
            fileptr = read_line(buf, fileptr, &line1ins, len);
 
@@ -207,14 +202,13 @@ int read_file(FILE *f, const char *filename, int quiet)
        } else if (!ISSET(NO_CONVERT) && i > 0 && buf[i - 1] == '\r') {
            fileformat = 2;
 
-           /* don't count the newline in the line length */
-           len--;
-
            /* read in the line properly */
            fileptr = read_line(buf, fileptr, &line1ins, len);
 
-           /* reset the line length, in preparation for the next line */
-           len = 0;
+           /* reset the line length, in preparation for the next line;
+              since we've already read in the next character, reset it
+              to 1 instead of 0 */
+           len = 1;
 
            num_lines++;
            totsize++;
@@ -223,14 +217,18 @@ int read_file(FILE *f, const char *filename, int quiet)
            i = 1;
 #endif
        } else {
+
+           /* Calculate the total length of the line; it might have
+              nulls in it, so we can't just use strlen(). */
+           len++;
+
            /* Now we allocate a bigger buffer 128 characters at a time.
-              If we allocate a lot of space for one line, we may indeed 
+              If we allocate a lot of space for one line, we may indeed
               have to use a buffer this big later on, so we don't
               decrease it at all.  We do free it at the end, though. */
-
            if (i >= bufx - 1) {
-               buf = nrealloc(buf, bufx + 128);
                bufx += 128;
+               buf = nrealloc(buf, bufx);
            }
            buf[i] = input;
            buf[i + 1] = '\0';
@@ -239,11 +237,11 @@ int read_file(FILE *f, const char *filename, int quiet)
        totsize++;
     }
 
-    if (ferror(f)) {
-        /* This conditional duplicates previous read_byte(); behavior;
-           perhaps this could use some better handling. */
-        nperror(filename);
-    }
+    /* This conditional duplicates previous read_byte() behavior;
+       perhaps this could use some better handling. */
+    if (ferror(f))
+       nperror(filename);
+    fclose(f);
 
     /* Did we not get a newline but still have stuff to do? */
     if (len > 0) {
@@ -251,7 +249,7 @@ int read_file(FILE *f, const char *filename, int quiet)
        /* If file conversion isn't disabled, the last character in
           this file is a CR and fileformat isn't set yet, make sure
           it's set to Mac format */
-       if (!ISSET(NO_CONVERT) && buf[len - 1] == '\r' && !fileformat)
+       if (!ISSET(NO_CONVERT) && buf[len - 1] == '\r' && fileformat == 0)
            fileformat = 2;
 #endif
 
@@ -263,22 +261,29 @@ int read_file(FILE *f, const char *filename, int quiet)
        buf[0] = '\0';
     }
 #ifndef NANO_SMALL
-    else {
+    else if (!ISSET(NO_CONVERT) && input == '\r') {
        /* If file conversion isn't disabled and the last character in
           this file is a CR, read it in properly as a (Mac format)
           line */
-       if (!ISSET(NO_CONVERT) && input == '\r') {
-           buf[0] = input;
-           buf[1] = '\0';
-           len = 1;
-           fileptr = read_line(buf, fileptr, &line1ins, len);
-           num_lines++;
-           totsize++;
-           buf[0] = '\0';
-       }
+       buf[0] = input;
+       buf[1] = '\0';
+       len = 1;
+       fileptr = read_line(buf, fileptr, &line1ins, len);
+       num_lines++;
+       totsize++;
+       buf[0] = '\0';
     }
 #endif
 
+    free(buf);
+
+#ifndef NANO_SMALL
+    /* If NO_CONVERT wasn't set before we read the file, but it is now,
+       unset it again. */
+    if (!old_no_convert && ISSET(NO_CONVERT))
+       UNSET(NO_CONVERT);
+#endif
+
     /* Did we even GET a file if we don't already have one? */
     if (totsize == 0 || fileptr == NULL)
        new_file();
@@ -315,9 +320,6 @@ int read_file(FILE *f, const char *filename, int quiet)
 
     totlines += num_lines;
 
-    free(buf);
-    fclose(f);
-
     return 1;
 }
 
@@ -359,7 +361,7 @@ int open_file(const char *filename, int insert, int quiet)
        if (!quiet)
            statusbar(_("Reading File"));
        f = fdopen(fd, "rb"); /* Binary for our own line-end munging */
-       if (!f) {
+       if (f == NULL) {
            nperror("fdopen");
            return -1;
        }
@@ -409,17 +411,19 @@ int do_insertfile(int loading_file)
     char *realname = NULL;
     static char *inspath = NULL;
 
-    if (inspath == NULL)
-       inspath = mallocstrcpy(inspath, "");
+    if (inspath == NULL) {
+       inspath = charalloc(1);
+       inspath[0] = '\0';
+    }
 
     wrap_reset();
 
-#if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE)
+#if !defined(DISABLE_BROWSER) || (!defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION))
     currshortcut = insertfile_list;
 #endif
 
 #ifndef DISABLE_OPERATINGDIR
-    if (operating_dir && strcmp(operating_dir, "."))
+    if (operating_dir != NULL && strcmp(operating_dir, ".") != 0)
 #ifdef ENABLE_MULTIBUFFER 
        if (ISSET(MULTIBUFFER))
            i = statusq(1, insertfile_list, inspath, _("File to insert into new buffer [from %s] "),
@@ -454,7 +458,7 @@ int do_insertfile(int loading_file)
        if (i == NANO_TOFILES_KEY) {
            char *tmp = do_browse_from(realname);
 
-#if !defined(DISABLE_HELP) || !defined(DISABLE_MOUSE)
+#if !defined(DISABLE_HELP) || (!defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION))
            currshortcut = insertfile_list;
 #endif
 #ifdef DISABLE_TABCOMP
@@ -469,7 +473,7 @@ int do_insertfile(int loading_file)
 #endif
 
 #ifndef DISABLE_OPERATINGDIR
-       if (operating_dir && check_operating_dir(realname, 0)) {
+       if (operating_dir != NULL && check_operating_dir(realname, 0)) {
            statusbar(_("Can't insert file from outside of %s"),
                        operating_dir);
            return 0;
@@ -682,11 +686,11 @@ int add_open_file(int update)
 {
     openfilestruct *tmp;
 
-    if (!fileage || !current || !filename)
+    if (fileage == NULL || current == NULL || filename == NULL)
        return 1;
 
     /* if no entries, make the first one */
-    if (!open_files)
+    if (open_files == NULL)
        open_files = make_new_opennode(NULL);
 
     else if (!update) {
@@ -746,7 +750,7 @@ int add_open_file(int update)
     /* if we're in view mode and updating, the file contents won't
        have changed, so we won't bother resaving the filestruct
        then; otherwise, we will */
-    if (!(ISSET(VIEW_MODE) && !update)) {
+    if (!(ISSET(VIEW_MODE) || !update)) {
        /* save current file buffer */
        open_files->fileage = fileage;
        open_files->filebot = filebot;
@@ -766,7 +770,7 @@ int add_open_file(int update)
  */
 int load_open_file(void)
 {
-    if (!open_files)
+    if (open_files == NULL)
        return 1;
 
     /* set up the filename, the file buffer, the total number of lines in
@@ -827,7 +831,7 @@ int load_open_file(void)
  */
 int open_prevfile(int closing_file)
 {
-    if (!open_files)
+    if (open_files == NULL)
        return 1;
 
     /* if we're not about to close the current entry, update it before
@@ -835,7 +839,7 @@ int open_prevfile(int closing_file)
     if (!closing_file)
        add_open_file(1);
 
-    if (!open_files->prev && !open_files->next) {
+    if (open_files->prev == NULL && open_files->next == NULL) {
 
        /* only one file open */
        if (!closing_file)
@@ -843,7 +847,7 @@ int open_prevfile(int closing_file)
        return 1;
     }
 
-    if (open_files->prev) {
+    if (open_files->prev != NULL) {
        open_files = open_files->prev;
 
 #ifdef DEBUG
@@ -852,10 +856,10 @@ int open_prevfile(int closing_file)
 
     }
 
-    else if (open_files->next) {
+    else if (open_files->next != NULL) {
 
        /* if we're at the beginning, wrap around to the end */
-       while (open_files->next)
+       while (open_files->next != NULL)
            open_files = open_files->next;
 
 #ifdef DEBUG
@@ -867,7 +871,7 @@ int open_prevfile(int closing_file)
     load_open_file();
 
     statusbar(_("Switched to %s"),
-      ((open_files->filename[0] == '\0') ? "New Buffer" : open_files->filename ));
+      ((open_files->filename[0] == '\0') ? "New Buffer" : open_files->filename));
 
 #ifdef DEBUG
     dump_buffer(current);
@@ -890,7 +894,7 @@ int open_prevfile_void(void)
  */
 int open_nextfile(int closing_file)
 {
-    if (!open_files)
+    if (open_files == NULL)
        return 1;
 
     /* if we're not about to close the current entry, update it before
@@ -898,7 +902,7 @@ int open_nextfile(int closing_file)
     if (!closing_file)
        add_open_file(1);
 
-    if (!open_files->prev && !open_files->next) {
+    if (open_files->prev == NULL && open_files->next == NULL) {
 
        /* only one file open */
        if (!closing_file)
@@ -906,7 +910,7 @@ int open_nextfile(int closing_file)
        return 1;
     }
 
-    if (open_files->next) {
+    if (open_files->next != NULL) {
        open_files = open_files->next;
 
 #ifdef DEBUG
@@ -914,10 +918,10 @@ int open_nextfile(int closing_file)
 #endif
 
     }
-    else if (open_files->prev) {
+    else if (open_files->prev != NULL) {
 
        /* if we're at the end, wrap around to the beginning */
-       while (open_files->prev) {
+       while (open_files->prev != NULL) {
            open_files = open_files->prev;
 
 #ifdef DEBUG
@@ -930,7 +934,7 @@ int open_nextfile(int closing_file)
     load_open_file();
 
     statusbar(_("Switched to %s"),
-      ((open_files->filename[0] == '\0') ? "New Buffer" : open_files->filename ));
+      ((open_files->filename[0] == '\0') ? "New Buffer" : open_files->filename));
 
 #ifdef DEBUG
     dump_buffer(current);
@@ -954,7 +958,7 @@ int close_open_file(void)
 {
     openfilestruct *tmp;
 
-    if (!open_files)
+    if (open_files == NULL)
        return 1;
 
     /* make sure open_files->fileage and fileage, and open_files->filebot
@@ -1003,7 +1007,7 @@ char *get_full_path(const char *origpath)
     d_here = getcwd(NULL, 0);
 #endif
 
-    if (d_here) {
+    if (d_here != NULL) {
 
        align(&d_here);
        if (strcmp(d_here, "/")) {
@@ -1041,7 +1045,7 @@ char *get_full_path(const char *origpath)
 
        /* if we didn't find one, copy d_here into d_there; all data is
           then set up */
-       if (!last_slash)
+       if (last_slash == NULL)
            d_there = mallocstrcpy(d_there, d_here);
        else {
            /* otherwise, remove all non-path elements from d_there
@@ -1051,7 +1055,7 @@ char *get_full_path(const char *origpath)
 
            /* and remove all non-file elements from d_there_file (i. e.
               everything before and including the last slash); if we
-               have a path but no filename, don't do anything */
+              have a path but no filename, don't do anything */
            if (!path_only) {
                last_slash = strrchr(d_there_file, '/');
                last_slash++;
@@ -1074,7 +1078,7 @@ char *get_full_path(const char *origpath)
 #endif
 
                align(&d_there);
-               if (d_there) {
+               if (d_there != NULL) {
 
                    /* add a slash to d_there, unless it's "/", in which
                       case we don't need it */
@@ -1130,7 +1134,7 @@ char *check_writable_directory(const char *path)
     struct stat fileinfo;
 
     /* if get_full_path() failed, return NULL */
-    if (!full_path)
+    if (full_path == NULL)
        return NULL;
 
     /* otherwise, stat() the full path to see if it's writable by the
@@ -1170,24 +1174,24 @@ char *safe_tempnam(const char *dirname, const char *filename_prefix)
 
       /* if $TMPDIR is set and non-empty, set tempdir to it, run it through
          get_full_path(), and save the result in full_tempdir; otherwise,
-         leave full_tempdir set to to NULL */
+         leave full_tempdir set to NULL */
     TMPDIR_env = getenv("TMPDIR");
-    if (TMPDIR_env && TMPDIR_env[0] != '\0')
+    if (TMPDIR_env != NULL && TMPDIR_env[0] != '\0')
        full_tempdir = check_writable_directory(TMPDIR_env);
 
     /* if $TMPDIR is blank or isn't set, or isn't a writable
        directory, and dirname isn't NULL, try it; otherwise, leave
        full_tempdir set to NULL */
-    if (!full_tempdir && dirname)
+    if (full_tempdir == NULL && dirname != NULL)
        full_tempdir = check_writable_directory(dirname);
 
     /* if $TMPDIR is blank or isn't set, or if it isn't a writable
        directory, and dirname is NULL, try P_tmpdir instead */
-    if (!full_tempdir)
+    if (full_tempdir == NULL)
        full_tempdir = check_writable_directory(P_tmpdir);
 
     /* if P_tmpdir didn't work, use /tmp instead */
-    if (!full_tempdir) {
+    if (full_tempdir == NULL) {
        full_tempdir = charalloc(6);
        strcpy(full_tempdir, "/tmp/");
     }
@@ -1219,13 +1223,13 @@ void init_operating_dir(void)
 {
     assert(full_operating_dir == NULL);
 
-    if (!operating_dir)
+    if (operating_dir == NULL)
        return;
     full_operating_dir = get_full_path(operating_dir);
 
     /* If get_full_path() failed or the operating directory is
        inaccessible, unset operating_dir. */
-    if (!full_operating_dir || chdir(full_operating_dir) == -1) {
+    if (full_operating_dir == NULL || chdir(full_operating_dir) == -1) {
        free(full_operating_dir);
        full_operating_dir = NULL;
        free(operating_dir);
@@ -1251,11 +1255,11 @@ int check_operating_dir(const char *currpath, int allow_tabcomp)
     const char *whereami1, *whereami2 = NULL;
 
     /* if no operating directory is set, don't bother doing anything */
-    if (!operating_dir)
+    if (operating_dir == NULL)
        return 0;
 
     fullpath = get_full_path(currpath);
-    if (!fullpath)
+    if (fullpath == NULL)
        return 1;
 
     whereami1 = strstr(fullpath, full_operating_dir);
@@ -1288,14 +1292,15 @@ int check_operating_dir(const char *currpath, int allow_tabcomp)
  * append == 2 means we are prepending instead of overwriting.
  *
  * nonamechange means don't change the current filename, it is ignored
- * if tmp == 1 or if we're appending/prepending.
+ * if tmp is nonzero or if we're appending/prepending.
  */
 int write_file(const char *name, int tmp, int append, int nonamechange)
 {
     int retval = -1;
        /* Instead of returning in this function, you should always
         * merely set retval then goto cleanup_and_exit. */
-    long size, lineswritten = 0;
+    long size;
+    int lineswritten = 0;
     char *buf = NULL;
     const filestruct *fileptr;
     FILE *f;
@@ -1320,7 +1325,7 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
 #ifndef DISABLE_OPERATINGDIR
     /* If we're writing a temporary file, we're probably going outside
        the operating directory, so skip the operating directory test. */
-    if (!tmp && operating_dir && check_operating_dir(realname, 0)) {
+    if (!tmp && operating_dir != NULL && check_operating_dir(realname, 0)) {
        statusbar(_("Can't write outside of %s"), operating_dir);
        goto cleanup_and_exit;
     }
@@ -1337,7 +1342,7 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
        the file has not been modified by someone else since nano opened
        it. */
     if (ISSET(BACKUP_FILE) && !tmp && realexists == 0 &&
-           (append || ISSET(MARK_ISSET) ||
+           (append != 0 || ISSET(MARK_ISSET) ||
                originalfilestat.st_mtime == st.st_mtime)) {
        FILE *backup_file;
        char *backupname = NULL;
@@ -1351,7 +1356,7 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
 
        /* open the original file to copy to the backup */
        f = fopen(realname, "rb");
-       if (!f) {
+       if (f == NULL) {
            statusbar(_("Could not read %s for backup: %s"), realname,
                strerror(errno));
            return -1;
@@ -1362,7 +1367,7 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
 
        /* get a file descriptor for the destination backup file */
        backup_file = fopen(backupname, "wb");
-       if (!backup_file) {
+       if (backup_file == NULL) {
            statusbar(_("Couldn't write backup: %s"), strerror(errno));
            free(backupname);
            return -1;
@@ -1407,14 +1412,14 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
        goto cleanup_and_exit;
     /* NOTE: If you change this statement, you MUST CHANGE the if 
        statement below (that says:
-               if (realexists == -1 || tmp || (!ISSET(FOLLOW_SYMLINKS) &&
+               if (realexists == -1 || tmp || (ISSET(NOFOLLOW_SYMLINKS) &&
                S_ISLNK(lst.st_mode))) {
        to reflect whether or not to link/unlink/rename the file */
-    else if (append != 2 && (ISSET(FOLLOW_SYMLINKS) || !S_ISLNK(lst.st_mode) 
+    else if (append != 2 && (!ISSET(NOFOLLOW_SYMLINKS) || !S_ISLNK(lst.st_mode) 
                || tmp)) {
-       /* Use O_EXCL if tmp == 1.  This is now copied from joe, because
-          wiggy says so *shrug*. */
-       if (append)
+       /* Use O_EXCL if tmp is nonzero.  This is now copied from joe,
+          because wiggy says so *shrug*. */
+       if (append != 0)
            fd = open(realname, O_WRONLY | O_CREAT | O_APPEND, (S_IRUSR|S_IWUSR));
        else if (tmp)
            fd = open(realname, O_WRONLY | O_CREAT | O_EXCL, (S_IRUSR|S_IWUSR));
@@ -1454,7 +1459,7 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
 #endif
 
     f = fdopen(fd, append == 1 ? "ab" : "wb");
-    if (!f) {
+    if (f == NULL) {
        statusbar(_("Could not open file for writing: %s"), strerror(errno));
        goto cleanup_and_exit;
     }
@@ -1539,7 +1544,7 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
        }
     }
 
-    if (fclose(f)) {
+    if (fclose(f) != 0) {
        statusbar(_("Could not close %s: %s"), realname, strerror(errno));
        unlink(buf);
        goto cleanup_and_exit;
@@ -1551,12 +1556,12 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
        FILE *f_source, *f_dest;
        int prechar;
 
-       if ((fd_dest = open(buf, O_WRONLY | O_APPEND, (S_IRUSR|S_IWUSR))) == -1) {
+       if ((fd_dest = open(buf, O_WRONLY | O_APPEND, (S_IRUSR | S_IWUSR))) == -1) {
            statusbar(_("Could not reopen %s: %s"), buf, strerror(errno));
            goto cleanup_and_exit;
        }
        f_dest = fdopen(fd_dest, "wb");
-       if (!f_dest) {
+       if (f_dest == NULL) {
            statusbar(_("Could not reopen %s: %s"), buf, strerror(errno));
            close(fd_dest);
            goto cleanup_and_exit;
@@ -1567,7 +1572,7 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
            goto cleanup_and_exit;
        }
        f_source = fdopen(fd_source, "rb");
-       if (!f_source) {
+       if (f_source == NULL) {
            statusbar(_("Could not open %s for prepend: %s"), realname, strerror(errno));
            fclose(f_dest);
            close(fd_source);
@@ -1596,7 +1601,7 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
     }
 
     if (realexists == -1 || tmp ||
-       (!ISSET(FOLLOW_SYMLINKS) && S_ISLNK(lst.st_mode))) {
+       (ISSET(NOFOLLOW_SYMLINKS) && S_ISLNK(lst.st_mode))) {
 
        /* Use default umask as file permissions if file is a new file. */
        mask = umask(0);
@@ -1611,7 +1616,7 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
        mask = st.st_mode;
 
     if (append == 2 || 
-               (!tmp && (!ISSET(FOLLOW_SYMLINKS) && S_ISLNK(lst.st_mode)))) {
+               (!tmp && (ISSET(NOFOLLOW_SYMLINKS) && S_ISLNK(lst.st_mode)))) {
        if (unlink(realname) == -1) {
            if (errno != ENOENT) {
                statusbar(_("Could not open %s for writing: %s"),
@@ -1638,7 +1643,7 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
        statusbar(_("Could not set permissions %o on %s: %s"),
                  mask, realname, strerror(errno));
 
-    if (!tmp && !append) {
+    if (!tmp && append == 0) {
        if (!nonamechange)
            filename = mallocstrcpy(filename, realname);
 
@@ -1667,14 +1672,14 @@ int do_writeout(const char *path, int exiting, int append)
     static int did_cred = 0;
 #endif
 
-#if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE)
+#if !defined(DISABLE_BROWSER) || (!defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION))
     currshortcut = writefile_list;
 #endif
 
     answer = mallocstrcpy(answer, path);
 
     if (exiting && ISSET(TEMP_OPT)) {
-       if (filename[0]) {
+       if (filename[0] != '\0') {
            i = write_file(answer, 0, 0, 0);
            display_main_list();
            return i;
@@ -1708,7 +1713,7 @@ int do_writeout(const char *path, int exiting, int append)
            if (append == 2)
                i = statusq(1, writefile_list, "",
                    "%s%s%s", _("Prepend Selection to File"), formatstr, backupstr);
-           else if (append)
+           else if (append == 1)
                i = statusq(1, writefile_list, "",
                    "%s%s%s", _("Append Selection to File"), formatstr, backupstr);
            else
@@ -1718,7 +1723,7 @@ int do_writeout(const char *path, int exiting, int append)
            if (append == 2)
                i = statusq(1, writefile_list, answer,
                    "%s%s%s", _("File Name to Prepend to"), formatstr, backupstr);
-           else if (append)
+           else if (append == 1)
                i = statusq(1, writefile_list, answer,
                    "%s%s%s", _("File Name to Append to"), formatstr, backupstr);
            else
@@ -1729,7 +1734,7 @@ int do_writeout(const char *path, int exiting, int append)
        if (append == 2)
            i = statusq(1, writefile_list, answer,
                "%s", _("File Name to Prepend to"));
-       else if (append)
+       else if (append == 1)
            i = statusq(1, writefile_list, answer,
                "%s", _("File Name to Append to"));
        else
@@ -1767,7 +1772,7 @@ int do_writeout(const char *path, int exiting, int append)
            TOGGLE(BACKUP_FILE);
            continue;
        } else
-#endif /* ! NANO_SMALL */
+#endif /* !NANO_SMALL */
        if (i == NANO_PREPEND_KEY) {
            append = append == 2 ? 0 : 2;
            continue;
@@ -1788,7 +1793,7 @@ int do_writeout(const char *path, int exiting, int append)
            return -1;
        }
 #endif
-       if (!append && strcmp(answer, filename)) {
+       if (append == 0 && strcmp(answer, filename) != 0) {
            struct stat st;
 
            if (!stat(answer, &st)) {
@@ -1879,7 +1884,7 @@ char *real_dir_from_tilde(const char *buf)
        }
        endpwent();
 
-       if (userdata != NULL) {  /* User found */
+       if (userdata != NULL) { /* User found */
            dirtmp = charalloc(strlen(userdata->pw_dir) + strlen(buf + i) + 1);
            sprintf(dirtmp, "%s%s", userdata->pw_dir, &buf[i]);
        }
@@ -1916,8 +1921,8 @@ int append_slash_if_dir(char *buf, int *lastwastab, int *place)
 
 /*
  * These functions (username_tab_completion, cwd_tab_completion, and
- * input_tab were taken from busybox 0.46 (cmdedit.c).  Here is the notice
- * from that file:
+ * input_tab) were taken from busybox 0.46 (cmdedit.c).  Here is the
+ * notice from that file:
  *
  * Termios command line History and Editting, originally
  * intended for NetBSD sh (ash)
@@ -1935,7 +1940,7 @@ int append_slash_if_dir(char *buf, int *lastwastab, int *place)
 
 char **username_tab_completion(char *buf, int *num_matches)
 {
-    char **matches = (char **) NULL;
+    char **matches = (char **)NULL;
     char *matchline = NULL;
     struct passwd *userdata;
 
@@ -1956,8 +1961,8 @@ char **username_tab_completion(char *buf, int *num_matches)
            /* ...unless the match exists outside the operating
                directory, in which case just go to the next match */
 
-           if (operating_dir) {
-               if (check_operating_dir(userdata->pw_dir, 1))
+           if (operating_dir != NULL) {
+               if (check_operating_dir(userdata->pw_dir, 1) != 0)
                    continue;
            }
 #endif
@@ -1974,7 +1979,7 @@ char **username_tab_completion(char *buf, int *num_matches)
     }
     endpwent();
 
-    return (matches);
+    return matches;
 }
 
 /* This was originally called exe_n_cwd_tab_completion, but we're not
@@ -1983,7 +1988,7 @@ char **username_tab_completion(char *buf, int *num_matches)
 char **cwd_tab_completion(char *buf, int *num_matches)
 {
     char *dirname, *dirtmp = NULL, *tmp = NULL, *tmp2 = NULL;
-    char **matches = (char **) NULL;
+    char **matches = (char **)NULL;
     DIR *dir;
     struct dirent *next;
 
@@ -1993,7 +1998,7 @@ char **cwd_tab_completion(char *buf, int *num_matches)
     strcat(buf, "*");
 
     /* Okie, if there's a / in the buffer, strip out the directory part */
-    if (buf[0] != '\0' && strstr(buf, "/")) {
+    if (buf[0] != '\0' && strstr(buf, "/") != NULL) {
        dirname = charalloc(strlen(buf) + 1);
        tmp = buf + strlen(buf);
        while (*tmp != '/' && tmp != buf)
@@ -2035,11 +2040,11 @@ char **cwd_tab_completion(char *buf, int *num_matches)
 
 
     dir = opendir(dirname);
-    if (!dir) {
+    if (dir == NULL) {
        /* Don't print an error, just shut up and return */
        *num_matches = 0;
        beep();
-       return (matches);
+       return matches;
     }
     while ((next = readdir(dir)) != NULL) {
 
@@ -2060,7 +2065,7 @@ char **cwd_tab_completion(char *buf, int *num_matches)
               directory name to the beginning of the proposed match
               before we check it */
 
-           if (operating_dir) {
+           if (operating_dir != NULL) {
                tmp2 = charalloc(strlen(dirname) + strlen(next->d_name) + 2);
                strcpy(tmp2, dirname);
                strcat(tmp2, "/");
@@ -2085,7 +2090,7 @@ char **cwd_tab_completion(char *buf, int *num_matches)
        }
     }
 
-    return (matches);
+    return matches;
 }
 
 /* This function now has an arg which refers to how much the 
@@ -2095,7 +2100,7 @@ char *input_tab(char *buf, int place, int *lastwastab, int *newplace, int *list)
 {
     /* Do TAB completion */
     static int num_matches = 0, match_matches = 0;
-    static char **matches = (char **) NULL;
+    static char **matches = (char **)NULL;
     int pos = place, i = 0, col = 0, editline = 0;
     int longestname = 0, is_dir = 0;
     char *foo;
@@ -2103,20 +2108,20 @@ char *input_tab(char *buf, int place, int *lastwastab, int *newplace, int *list)
     *list = 0;
 
     if (*lastwastab == FALSE) {
-       char *tmp, *copyto, *matchBuf;
+       char *tmp, *copyto, *matchbuf;
 
        *lastwastab = 1;
 
        /* Make a local copy of the string -- up to the position of the
           cursor */
-       matchBuf = (char *) nmalloc((strlen(buf) + 2) * sizeof(char));
-       memset(matchBuf, '\0', (strlen(buf) + 2));
+       matchbuf = (char *)nmalloc((strlen(buf) + 2) * sizeof(char));
+       memset(matchbuf, '\0', (strlen(buf) + 2));
 
-       strncpy(matchBuf, buf, place);
-       tmp = matchBuf;
+       strncpy(matchbuf, buf, place);
+       tmp = matchbuf;
 
        /* skip any leading white space */
-       while (*tmp && isspace((int) *tmp))
+       while (*tmp && isspace((int)*tmp))
            ++tmp;
 
        /* Free up any memory already allocated */
@@ -2124,7 +2129,7 @@ char *input_tab(char *buf, int place, int *lastwastab, int *newplace, int *list)
            for (i = i; i < num_matches; i++)
                free(matches[i]);
            free(matches);
-           matches = (char **) NULL;
+           matches = (char **)NULL;
            num_matches = 0;
        }
 
@@ -2136,7 +2141,7 @@ char *input_tab(char *buf, int place, int *lastwastab, int *newplace, int *list)
           the part we're tab-completing into buf, so tab completion
           will result in buf's containing only the tab-completed
           username. */
-       if (buf[0] == '~' && !strchr(tmp, '/')) {
+       if (buf[0] == '~' && strchr(tmp, '/') == NULL) {
            buf = mallocstrcpy(buf, tmp);
            matches = username_tab_completion(tmp, &num_matches);
        }
@@ -2149,11 +2154,11 @@ char *input_tab(char *buf, int place, int *lastwastab, int *newplace, int *list)
 
        /* Try to match everything in the current working directory that
         * matches.  */
-       if (!matches)
+       if (matches == NULL)
            matches = cwd_tab_completion(tmp, &num_matches);
 
        /* Don't leak memory */
-       free(matchBuf);
+       free(matchbuf);
 
 #ifdef DEBUG
        fprintf(stderr, "%d matches found...\n", num_matches);
@@ -2168,7 +2173,7 @@ char *input_tab(char *buf, int place, int *lastwastab, int *newplace, int *list)
 
            buf = nrealloc(buf, strlen(buf) + strlen(matches[0]) + 1);
 
-           if (buf[0] != '\0' && strstr(buf, "/")) {
+           if (buf[0] != '\0' && strstr(buf, "/") != NULL) {
                for (tmp = buf + strlen(buf); *tmp != '/' && tmp != buf;
                     tmp--);
                tmp++;
@@ -2178,7 +2183,7 @@ char *input_tab(char *buf, int place, int *lastwastab, int *newplace, int *list)
            if (!strcmp(tmp, matches[0]))
                is_dir = append_slash_if_dir(buf, lastwastab, newplace);
 
-           if (is_dir)
+           if (is_dir != 0)
                break;
 
            copyto = tmp;
@@ -2205,14 +2210,14 @@ char *input_tab(char *buf, int place, int *lastwastab, int *newplace, int *list)
            /* Check to see if all matches share a beginning, and, if so,
               tack it onto buf and then beep */
 
-           if (buf[0] != '\0' && strstr(buf, "/")) {
+           if (buf[0] != '\0' && strstr(buf, "/") != NULL) {
                for (tmp = buf + strlen(buf); *tmp != '/' && tmp != buf;
                     tmp--);
                tmp++;
            } else
                tmp = buf;
 
-           for (pos = 0; *tmp == matches[0][pos] && *tmp != 0 &&
+           for (pos = 0; *tmp == matches[0][pos] && *tmp != '\0' &&
                 pos <= strlen(matches[0]); pos++)
                tmp++;
 
@@ -2244,7 +2249,7 @@ char *input_tab(char *buf, int place, int *lastwastab, int *newplace, int *list)
        /* Ok -- the last char was a TAB.  Since they
         * just hit TAB again, print a list of all the
         * available choices... */
-       if (matches && num_matches > 1) {
+       if (matches != NULL && num_matches > 1) {
 
            /* Blank the edit window, and print the matches out there */
            blank_edit();
@@ -2327,16 +2332,12 @@ int diralphasort(const void *va, const void *vb)
     int aisdir = stat(a, &fileinfo) != -1 && S_ISDIR(fileinfo.st_mode);
     int bisdir = stat(b, &fileinfo) != -1 && S_ISDIR(fileinfo.st_mode);
 
-    if (aisdir && !bisdir)
+    if (aisdir != 0 && bisdir == 0)
        return -1;
-    if (!aisdir && bisdir)
+    if (aisdir == 0 && bisdir != 0)
        return 1;
 
-#ifdef HAVE_STRCASECMP
     return strcasecmp(a, b);
-#else
-    return strcmp(a, b);
-#endif
 }
 
 /* Free our malloc()ed memory */
@@ -2397,7 +2398,7 @@ char **browser_init(const char *path, int *longest, int *numents)
     size_t path_len;
 
     dir = opendir(path);
-    if (!dir) 
+    if (dir == NULL)
        return NULL;
 
     *numents = 0;
@@ -2441,11 +2442,9 @@ char *do_browser(const char *inpath)
     int numents = 0, i = 0, j = 0, kbinput = 0, longest = 0, abort = 0;
     int col = 0, selected = 0, editline = 0, width = 0, filecols = 0;
     int lineno = 0, kb;
-    char **filelist = (char **) NULL;
-#ifndef DISABLE_MOUSE
-#ifdef NCURSES_MOUSE_VERSION
+    char **filelist = (char **)NULL;
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
     MEVENT mevent;
-#endif
 #endif
 
     assert(inpath != NULL);
@@ -2483,7 +2482,7 @@ char *do_browser(const char *inpath)
 
        blank_statusbar_refresh();
 
-#if !defined(DISABLE_HELP) || !defined(DISABLE_MOUSE)
+#if !defined(DISABLE_HELP) || (!defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION))
        currshortcut = browser_list;
 #endif
 
@@ -2497,8 +2496,7 @@ char *do_browser(const char *inpath)
 
        switch (kbinput) {
 
-#ifndef DISABLE_MOUSE
-#ifdef NCURSES_MOUSE_VERSION
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
        case KEY_MOUSE:
            if (getmouse(&mevent) == ERR)
                return retval;
@@ -2512,7 +2510,7 @@ char *do_browser(const char *inpath)
 
                /* Longest is the width of each column.  There are two
                 * spaces between each column. */
-               selected = (lineno / editwinrows) * editwinrows * width 
+               selected = (lineno / editwinrows) * editwinrows * width
                        + mevent.y * width + mevent.x / (longest + 2);
 
                /* If they clicked beyond the end of a row, select the
@@ -2530,7 +2528,6 @@ char *do_browser(const char *inpath)
                do_mouse();
 
             break;
-#endif
 #endif
        case NANO_UP_KEY:
        case KEY_UP:
@@ -2595,7 +2592,7 @@ char *do_browser(const char *inpath)
            /* Note: The case of the user's being completely outside the
               operating directory is handled elsewhere, before this
               point */
-           if (operating_dir) {
+           if (operating_dir != NULL) {
                if (check_operating_dir(path, 0)) {
                    statusbar(_("Can't visit parent in restricted mode"));
                    beep();
@@ -2658,7 +2655,7 @@ char *do_browser(const char *inpath)
            curs_set(0);
 
 #ifndef DISABLE_OPERATINGDIR
-           if (operating_dir) {
+           if (operating_dir != NULL) {
                if (check_operating_dir(answer, 0)) {
                    statusbar(_("Can't go outside of %s in restricted mode"), operating_dir);
                    break;
@@ -2705,7 +2702,7 @@ char *do_browser(const char *inpath)
 
        blank_edit();
 
-       if (width)
+       if (width != 0)
            i = width * editwinrows * ((selected / width) / editwinrows);
        else
            i = 0;
@@ -2744,7 +2741,7 @@ char *do_browser(const char *inpath)
                else if (st.st_size >= (1 << 20)) /* at least 1 meg */
                    sprintf(foo + longest - 7, "%4d MB", 
                        (int) st.st_size >>     20);
-               else /* Its more than 1 k and less than a meg */
+               else /* It's more than 1 k and less than a meg */
                    sprintf(foo + longest - 7, "%4d KB", 
                        (int) st.st_size >> 10);
            }
@@ -2800,12 +2797,12 @@ char *do_browse_from(const char *inpath)
        char *from = getcwd(NULL, 0);
 #endif
 
-       bob = do_browser(from ? from : "./");
+       bob = do_browser(from != NULL ? from : "./");
        free(from);
        return bob;
     }
 
-    /* If the string is a directory, pass do_browser that */
+    /* If the string is a directory, pass do_browser() that */
     st = filestat(inpath);
     if (S_ISDIR(st.st_mode))
        return do_browser(inpath);
index ee58dcd627f77f8a565f6dcc38c9a12a8e4eb928..5ffaa9f60533f82365264e5c909c5c9d436d43a8 100644 (file)
--- a/global.c
+++ b/global.c
@@ -111,20 +111,22 @@ shortcut *writefile_list = NULL;
 shortcut *insertfile_list = NULL;
 shortcut *help_list = NULL;
 shortcut *spell_list = NULL;
+
 #ifndef NANO_SMALL
 shortcut *extcmd_list = NULL;
 #endif
+
 #ifndef DISABLE_BROWSER
 shortcut *browser_list = NULL;
 #endif
 
 #ifdef ENABLE_COLOR
-    const colortype *colorstrings = NULL;
-    syntaxtype *syntaxes = NULL;
-    char *syntaxstr = NULL;
+const colortype *colorstrings = NULL;
+syntaxtype *syntaxes = NULL;
+char *syntaxstr = NULL;
 #endif
 
-#if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE) || !defined(DISABLE_HELP)
+#if !defined(DISABLE_BROWSER) || !defined(DISABLE_HELP) || (!defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION))
 const shortcut *currshortcut;  /* Current shortcut list we're using */
 #endif
 
@@ -207,9 +209,12 @@ void toggle_init_one(int val, const char *desc, int flag)
 void toggle_init(void)
 {
     char *toggle_const_msg, *toggle_autoindent_msg, *toggle_suspend_msg,
-       *toggle_nohelp_msg, *toggle_picomode_msg, *toggle_mouse_msg,
-       *toggle_cuttoend_msg, *toggle_noconvert_msg, *toggle_dos_msg,
-       *toggle_mac_msg, *toggle_backup_msg, *toggle_smooth_msg;
+       *toggle_nohelp_msg, *toggle_picomode_msg, *toggle_cuttoend_msg,
+       *toggle_noconvert_msg, *toggle_dos_msg, *toggle_mac_msg,
+       *toggle_backup_msg, *toggle_smooth_msg;
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
+    char *toggle_mouse_msg;
+#endif
 #ifndef DISABLE_WRAPPING
     char *toggle_wrap_msg;
 #endif
@@ -232,7 +237,9 @@ void toggle_init(void)
     toggle_suspend_msg = _("Suspend");
     toggle_nohelp_msg = _("Help mode");
     toggle_picomode_msg = _("Pico mode");
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
     toggle_mouse_msg = _("Mouse support");
+#endif
     toggle_cuttoend_msg = _("Cut to end");
     toggle_noconvert_msg = _("No conversion from DOS/Mac format");
     toggle_dos_msg = _("Writing file in DOS format");
@@ -257,7 +264,9 @@ void toggle_init(void)
 #ifndef DISABLE_WRAPPING
     toggle_init_one(TOGGLE_WRAP_KEY, toggle_wrap_msg, NO_WRAP);
 #endif
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
     toggle_init_one(TOGGLE_MOUSE_KEY, toggle_mouse_msg, USE_MOUSE);
+#endif
     toggle_init_one(TOGGLE_CUTTOEND_KEY, toggle_cuttoend_msg, CUT_TO_END);
 #ifdef ENABLE_MULTIBUFFER
     toggle_init_one(TOGGLE_LOAD_KEY, toggle_load_msg, MULTIBUFFER);
@@ -401,7 +410,7 @@ void shortcut_init(int unjustify)
                do_help);
 
 #ifdef ENABLE_MULTIBUFFER
-    if (open_files != NULL && (open_files->prev || open_files->next))
+    if (open_files != NULL && (open_files->prev != NULL || open_files->next != NULL))
        sc_init_one(&main_list, NANO_EXIT_KEY, _("Close"),
                IFHELP(nano_exit_msg, 0), NANO_EXIT_FKEY, 0, VIEW,
                do_exit);
@@ -775,7 +784,7 @@ void shortcut_init(int unjustify)
                IFHELP(nano_cancel_msg, 0), 0, 0, VIEW, 0);
 #endif
 
-#if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE) || !defined (DISABLE_HELP)
+#if !defined(DISABLE_BROWSER) || !defined(DISABLE_HELP) || (!defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION))
     currshortcut = main_list;
 #endif
 #ifndef NANO_SMALL
diff --git a/move.c b/move.c
index d0dead8d34ed5eefef60999290fe3f7ed7f45808..2807eb02fbb9fcef6ee38525860eb3429ad34e23 100644 (file)
--- a/move.c
+++ b/move.c
@@ -104,10 +104,16 @@ int do_page_down(void)
        return 0;
 
     /* AHEM, if we only have a screen or less of text, DON'T do an
-       edit_update, just move the cursor to editbot! */
+       edit_update(), just move the cursor to editbot! */
     if (edittop == fileage && editbot == filebot && totlines < editwinrows) {
        current = editbot;
        reset_cursor();
+#ifndef NANO_SMALL
+       /* ...unless marking is on, in which case we need it to update
+          the highlight. */
+       if (ISSET(MARK_ISSET))
+           edit_update(current, NONE);
+#endif
     } else if (editbot != filebot || edittop == fileage) {
        current_y = 0;
        current = editbot;
@@ -153,7 +159,8 @@ int do_up(void)
 
 /* Return value 1 means we moved down, 0 means we were already at the
  * bottom. */
-int do_down(void) {
+int do_down(void)
+{
     wrap_reset();
     UNSET(KEEP_CUTBUFFER);
     check_statblank();
@@ -211,7 +218,7 @@ int do_right(void)
 
     if (current->data[current_x] != '\0')
        current_x++;
-    else if (current->next) {
+    else if (current->next != NULL) {
        do_down();
        current_x = 0;
     }
diff --git a/nano.c b/nano.c
index dceb8db20521378fec267b0cd8f47d403a8a2f65..5012e8b5c4aaabb80cb1df21f8034d255a39d765 100644 (file)
--- a/nano.c
+++ b/nano.c
@@ -111,15 +111,15 @@ void die(const char *msg, ...)
 
 #ifdef ENABLE_MULTIBUFFER
     /* then save all of the other modified loaded files, if any */
-    if (open_files) {
+    if (open_files != NULL) {
        openfilestruct *tmp;
 
        tmp = open_files;
 
-       while (open_files->prev)
+       while (open_files->prev != NULL)
            open_files = open_files->prev;
 
-       while (open_files->next) {
+       while (open_files->next != NULL) {
 
            /* if we already saved the file above (i. e. if it was the
               currently loaded file), don't save it again */
@@ -228,17 +228,16 @@ void window_init(void)
     bottomwin = newwin(3 - no_help(), COLS, LINES - 3 + no_help(), 0);
 
 #ifdef PDCURSES
-    /* Oops, I guess we need this again.
-       Moved here so the keypad still works after a Meta-X, for example */
+    /* Oops, I guess we need this again.  Moved here so the keypad still
+       works after a Meta-X, for example */
     keypad(edit, TRUE);
     keypad(bottomwin, TRUE);
 #endif
 }
 
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
 void mouse_init(void)
 {
-#ifndef DISABLE_MOUSE
-#ifdef NCURSES_MOUSE_VERSION
     if (ISSET(USE_MOUSE)) {
        keypad_on(edit, 1);
        keypad_on(bottomwin, 1);
@@ -247,9 +246,8 @@ void mouse_init(void)
        mouseinterval(50);
     } else
        mousemask(0, NULL);
-#endif
-#endif
 }
+#endif
 
 #ifndef DISABLE_HELP
 /* This function allocates help_text, and stores the help string in it. 
@@ -651,11 +649,9 @@ void usage(void)
     print1opt("-k", "--cut", _("Let ^K cut from cursor to end of line"));
 #endif
     print1opt("-l", "--nofollow", _("Don't follow symbolic links, overwrite"));
-#ifndef DISABLE_MOUSE
-#ifdef NCURSES_MOUSE_VERSION
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
     print1opt("-m", "--mouse", _("Enable mouse"));
 #endif
-#endif
 #ifndef DISABLE_OPERATINGDIR
     print1opt(_("-o [dir]"), _("--operatingdir=[dir]"), _("Set operating directory"));
 #endif
@@ -706,7 +702,7 @@ void version(void)
 #ifdef DISABLE_JUSTIFY
     printf(" --disable-justify");
 #endif
-#ifdef DISABLE_MOUSE
+#if defined(DISABLE_MOUSE) || !defined(NCURSES_MOUSE_VERSION)
     printf(" --disable-mouse");
 #endif
 #ifndef ENABLE_NLS
@@ -769,7 +765,8 @@ static int pid;             /* This is the PID of the newly forked process
 
 RETSIGTYPE cancel_fork(int signal)
 {
-    if (kill(pid, SIGKILL)==-1) nperror("kill");
+    if (kill(pid, SIGKILL) == -1)
+       nperror("kill");
 }
 
 int open_pipe(const char *command)
@@ -780,7 +777,7 @@ int open_pipe(const char *command)
                        /* original and temporary handlers for SIGINT */
 #ifdef _POSIX_VDISABLE
     struct termios term, newterm;
-#endif   /* _POSIX_VDISABLE */
+#endif /* _POSIX_VDISABLE */
     int cancel_sigs = 0;
     /* cancel_sigs == 1 means that sigaction() failed without changing
      * the signal handlers.  cancel_sigs == 2 means the signal handler
@@ -836,11 +833,11 @@ int open_pipe(const char *command)
     /* See if the platform supports disabling individual control
      * characters. */
 #ifdef _POSIX_VDISABLE
-    if (!cancel_sigs && tcgetattr(0, &term) == -1) {
+    if (cancel_sigs == 0 && tcgetattr(0, &term) == -1) {
        cancel_sigs = 2;
        nperror("tcgetattr");
     }
-    if (!cancel_sigs) {
+    if (cancel_sigs == 0) {
        newterm = term;
        /* Grab oldterm's VINTR key :-) */
        newterm.c_cc[VINTR] = oldterm.c_cc[VINTR];
@@ -852,7 +849,7 @@ int open_pipe(const char *command)
 #endif   /* _POSIX_VDISABLE */
 
     f = fdopen(fd[0], "rb");
-    if (!f)
+    if (f == NULL)
       nperror("fdopen");
     
     read_file(f, "stdin", 0);
@@ -865,7 +862,7 @@ int open_pipe(const char *command)
        nperror("wait");
 
 #ifdef _POSIX_VDISABLE
-    if (!cancel_sigs && tcsetattr(0, TCSANOW, &term) == -1)
+    if (cancel_sigs == 0 && tcsetattr(0, TCSANOW, &term) == -1)
        nperror("tcsetattr");
 #endif   /* _POSIX_VDISABLE */
 
@@ -876,8 +873,7 @@ int open_pipe(const char *command)
 }
 #endif /* NANO_SMALL */
 
-#ifndef DISABLE_MOUSE
-#ifdef NCURSES_MOUSE_VERSION
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
 void do_mouse(void)
 {
     MEVENT mevent;
@@ -968,7 +964,6 @@ void do_mouse(void)
     }
 }
 #endif
-#endif
 
 /* The user typed a printable character; add it to the edit buffer. */
 void do_char(char ch)
@@ -1225,7 +1220,12 @@ int do_enter(void)
      *       where we think the cursor is.
      */
     if (current_y == editwinrows - 1) {
-       edit_update(current, CENTER);
+#ifndef NANO_SMALL
+       if (ISSET(SMOOTHSCROLL))
+           edit_update(current, NONE);
+       else
+#endif
+           edit_update(current, CENTER);
        reset_cursor();
     } else {
        current_y++;
@@ -1300,7 +1300,7 @@ int do_prev_word(void)
 {
     filestruct *old = current;
 
-    assert(current != NULL);
+    assert(current != NULL && current->data != NULL);
 
     /* Skip letters in this word first. */
     while (current_x >= 0 && isalnum((int)current->data[current_x]))
@@ -1529,9 +1529,9 @@ int do_wrap(filestruct *inptr)
        temp->prev = inptr;
        temp->next = inptr->next;
        temp->prev->next = temp;
-       /* If !temp->next, then temp is the last line of the file, so we
-        * must set filebot. */
-       if (temp->next)
+       /* If temp->next is NULL, then temp is the last line of the
+        * file, so we must set filebot. */
+       if (temp->next != NULL)
            temp->next->prev = temp;
        else
            filebot = temp;
@@ -1623,7 +1623,7 @@ int do_int_spell_fix(const char *word)
 
     while (1) {
        /* make sure word is still mis-spelt (i.e. when multi-errors) */
-       if (findnextstr(TRUE, FALSE, fileage, beginx_top, word) != NULL) {
+       if (findnextstr(TRUE, FALSE, fileage, beginx_top, word)) {
 
            /* find whole words only */
            if (!is_whole_word(current_x, current->data, word))
@@ -1678,8 +1678,8 @@ int do_int_spell_fix(const char *word)
     return TRUE;
 }
 
-/* Integrated spell checking using 'spell' program. 
  Return value: NULL for normal termination, otherwise the error string */
+/* Integrated spell checking using 'spell' program.  Return value: NULL
* for normal termination, otherwise the error string. */
 char *do_int_speller(char *tempfile_name)
 {
     char *read_buff, *read_buff_ptr, *read_buff_word;
@@ -1834,17 +1834,17 @@ char *do_int_speller(char *tempfile_name)
 
     }
 
-    *read_buff_ptr = (char) NULL;
+    *read_buff_ptr = (char)NULL;
     close(uniq_fd[0]);
 
     /* Process the spelling errors */
 
     read_buff_word = read_buff_ptr = read_buff;
 
-    while (*read_buff_ptr) {
+    while (*read_buff_ptr != '\0') {
 
        if ((*read_buff_ptr == '\n') || (*read_buff_ptr == '\r')) {
-           *read_buff_ptr = (char) NULL;
+           *read_buff_ptr = (char)NULL;
            if (read_buff_word != read_buff_ptr) {
                if (!do_int_spell_fix(read_buff_word)) {
                    read_buff_word = read_buff_ptr;
@@ -1883,8 +1883,8 @@ char *do_int_speller(char *tempfile_name)
     return NULL;
 }
 
-/* External spell checking.
  Return value: NULL for normal termination, otherwise the error string */
+/* External spell checking.  Return value: NULL for normal termination,
* otherwise the error string. */
 char *do_alt_speller(char *tempfile_name)
 {
     int alt_spell_status, lineno_cur = current->lineno;
@@ -1979,7 +1979,7 @@ int do_spell(void)
 {
 #ifdef DISABLE_SPELLER
     nano_disabled_msg();
-    return (TRUE);
+    return TRUE;
 #else
     char *temp, *spell_msg = _("Generic error");
 
@@ -2001,7 +2001,7 @@ int do_spell(void)
     add_open_file(1);
 #endif
 
-    if (alt_speller)
+    if (alt_speller != NULL)
        spell_msg = do_alt_speller(temp);
     else
        spell_msg = do_int_speller(temp);
@@ -2052,6 +2052,8 @@ size_t indent_length(const char *line)
  * not be whitespace. */
 int justify_format(int changes_allowed, filestruct *line, size_t skip)
 {
+    const char *punct = ".?!";
+    const char *brackets = "'\")}]>";
     char *back, *front;
 
     /* These four asserts are assumptions about the input data. */
@@ -2072,9 +2074,7 @@ int justify_format(int changes_allowed, filestruct *line, size_t skip)
            *front = ' ';
        }
        /* these tests are safe since line->data + skip is not a space */
-       if (*front == ' ' && *(front-1) == ' ') {
-           const char *brackets = _("'\")}]>");
-           const char *punct = _(".?!");
+       if (*front == ' ' && *(front - 1) == ' ') {
            const char *bob = front - 2;
 
            remove_space = 1;
@@ -2105,16 +2105,16 @@ int justify_format(int changes_allowed, filestruct *line, size_t skip)
 
     /* Remove spaces from the end of the line, except maintain 1 after a
      * sentence punctuation. */
-    while (line->data < back && *(back-1) == ' ')
+    while (line->data < back && *(back - 1) == ' ')
        back--;
     if (line->data < back && *back == ' ' &&
-           (*(back-1) == '.' || *(back-1) == '!' || *(back-1) == '?'))
+       strchr(punct, *(back - 1)) != NULL)
        back++;
     if (!changes_allowed && back != front)
        return 1;
 
     /* This assert merely documents a fact about the loop above. */
-    assert(changes_allowed || back == front);
+    assert(changes_allowed != 0 || back == front);
 
     /* Now back is the new end of line->data. */
     if (back != front) {
@@ -2364,7 +2364,7 @@ int do_justify(void)
        /* This line is part of a paragraph.  So we must search back to
         * the first line of this paragraph.  First we check items 1) and
         * 3) above. */
-       while (current->prev && quotes_match(current->data,
+       while (current->prev != NULL && quotes_match(current->data,
                        quote_len, IFREG(current->prev->data, &qreg))) {
            size_t temp_id_len =
                        indent_length(current->prev->data + quote_len);
@@ -2392,7 +2392,7 @@ int do_justify(void)
            /* There is no next paragraph, so nothing to justify. */
            if (current->next == NULL) {
                placewewant = 0;
-               if (current_y > editwinrows - 4)
+               if (current_y > editwinrows - 1)
                    edit_update(current, CENTER);
                else
                    edit_refresh();
@@ -2412,7 +2412,7 @@ int do_justify(void)
     par_len = 1;
     indent_len = indent_length(line->data + quote_len);
 
-    while (line->next && quotes_match(current->data, quote_len,
+    while (line->next != NULL && quotes_match(current->data, quote_len,
                                IFREG(line->next->data, &qreg))) {
        size_t temp_id_len = indent_length(line->next->data + quote_len);
 
@@ -2453,8 +2453,7 @@ int do_justify(void)
         * made.  If there are, we do backup_lines(), which copies the
         * original paragraph to the cutbuffer for unjustification, and
         * then calls justify_format() on the remaining lines. */
-       if (first_mod_line == NULL &&
-               justify_format(0, current, indent_len))
+       if (first_mod_line == NULL && justify_format(0, current, indent_len))
            first_mod_line = backup_lines(current, par_len, quote_len);
 
        line_len = strlen(current->data);
@@ -2557,6 +2556,11 @@ int do_justify(void)
 #endif
            if (indent_len + break_pos == next_line_len) {
                line = current->next;
+
+               /* Don't destroy edittop! */
+               if (line == edittop)
+                   edittop = current;
+
                unlink_node(line);
                delete_node(line);
                totlines--;
@@ -2588,7 +2592,7 @@ int do_justify(void)
        renumber(first_mod_line);
     }
 
-    if (current_y > editwinrows - 4)
+    if (current_y > editwinrows - 1)
        edit_update(current, CENTER);
     else
        edit_refresh();
@@ -2602,15 +2606,13 @@ int do_justify(void)
     /* Now get a keystroke and see if it's unjustify; if not, unget the
      * keystroke and return. */
 
-#ifndef DISABLE_MOUSE
-#ifdef NCURSES_MOUSE_VERSION
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
     /* If it was a mouse click, parse it with do_mouse() and it might
      * become the unjustify key.  Else give it back to the input stream. */
     if ((i = wgetch(edit)) == KEY_MOUSE)
        do_mouse();
     else
        ungetch(i);
-#endif
 #endif
 
     if ((i = wgetch(edit)) != NANO_UNJUSTIFY_KEY) {
@@ -2803,8 +2805,8 @@ RETSIGTYPE do_suspend(int signal)
     tcsetattr(0, TCSANOW, &oldterm);
 
     /* We used to re-enable the default SIG_DFL and raise SIGTSTP, but 
-       then we could be (and were) interrupted in the middle of the call.
-       So we do it the mutt way instead */
+       then we could be (and were) interrupted in the middle of the call.
+       So we do it the mutt way instead */
     kill(0, SIGSTOP);
 }
 
@@ -2833,7 +2835,7 @@ void handle_sigwinch(int s)
     int result = 0;
     struct winsize win;
 
-    if (!tty)
+    if (tty == NULL)
        return;
     fd = open(tty, O_RDWR);
     if (fd == -1)
@@ -2933,9 +2935,11 @@ void do_toggle(const toggle *which)
     case TOGGLE_SUSPEND_KEY:
        signal_init();
        break;
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
     case TOGGLE_MOUSE_KEY:
        mouse_init();
        break;
+#endif
     case TOGGLE_NOHELP_KEY:
        wclear(bottomwin);
        wrefresh(bottomwin);
@@ -2950,9 +2954,11 @@ void do_toggle(const toggle *which)
     case TOGGLE_MAC_KEY:
        UNSET(DOS_FILE);
        break;
+#ifdef ENABLE_COLOR
     case TOGGLE_SYNTAX_KEY:
        edit_refresh();
-       break;
+       break;
+#endif
     }
 
     /* We are assuming here that shortcut_init() above didn't free and
@@ -2968,21 +2974,21 @@ void do_toggle(const toggle *which)
 /* This function returns the correct keystroke, given the A,B,C or D
    input key.  This is a common sequence of many terms which send
    Esc-O-[A-D] or Esc-[-[A-D]. */
-int ABCD(int input)
+int abcd(int input)
 {
     switch (input) {
     case 'A':
     case 'a':
-       return (KEY_UP);
+       return KEY_UP;
     case 'B':
     case 'b':
-       return (KEY_DOWN);
+       return KEY_DOWN;
     case 'C':
     case 'c':
-       return (KEY_RIGHT);
+       return KEY_RIGHT;
     case 'D':
     case 'd':
-       return (KEY_LEFT);
+       return KEY_LEFT;
     default:
        return 0;
     }
@@ -3007,7 +3013,7 @@ int main(int argc, char *argv[])
 
 #ifdef HAVE_GETOPT_LONG
     int option_index = 0;
-    struct option long_options[] = {
+    const struct option long_options[] = {
        {"help", 0, 0, 'h'},
 #ifdef ENABLE_MULTIBUFFER
        {"multibuffer", 0, 0, 'F'},
@@ -3029,7 +3035,9 @@ int main(int argc, char *argv[])
 #endif
        {"const", 0, 0, 'c'},
        {"nofollow", 0, 0, 'l'},
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
        {"mouse", 0, 0, 'm'},
+#endif
 #ifndef DISABLE_OPERATINGDIR
        {"operatingdir", 1, 0, 'o'},
 #endif
@@ -3060,16 +3068,11 @@ int main(int argc, char *argv[])
     };
 #endif
 
-    /* Flag inits... */
-    SET(FOLLOW_SYMLINKS);
-
-#ifndef NANO_SMALL
 #ifdef ENABLE_NLS
     setlocale(LC_ALL, "");
     bindtextdomain(PACKAGE, LOCALEDIR);
     textdomain(PACKAGE);
 #endif
-#endif
 
 #ifdef ENABLE_NANORC
     {
@@ -3151,13 +3154,10 @@ int main(int argc, char *argv[])
            SET(NO_CONVERT);
            break;
 #endif
-       case 'Q':
 #ifndef DISABLE_JUSTIFY
+       case 'Q':
            quotestr = optarg;
            break;
-#else
-           usage();
-           exit(1);
 #endif
 #ifdef HAVE_REGEX_H
        case 'R':
@@ -3208,11 +3208,13 @@ int main(int argc, char *argv[])
            break;
 #endif
        case 'l':
-           UNSET(FOLLOW_SYMLINKS);
+           SET(NOFOLLOW_SYMLINKS);
            break;
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
        case 'm':
            SET(USE_MOUSE);
            break;
+#endif
 #ifndef DISABLE_OPERATINGDIR
        case 'o':
            operating_dir = mallocstrcpy(operating_dir, optarg);
@@ -3249,14 +3251,11 @@ int main(int argc, char *argv[])
        case 'v':
            SET(VIEW_MODE);
            break;
-       case 'w':
 #ifdef DISABLE_WRAPPING
-           usage();
-           exit(0);
-#else
+       case 'w':
            SET(NO_WRAP);
            break;
-#endif /* DISABLE_WRAPPING */
+#endif
        case 'x':
            SET(NO_HELP);
            break;
@@ -3281,8 +3280,8 @@ int main(int argc, char *argv[])
 
     /* See if we were invoked with the name "pico" */
     argv0 = strrchr(argv[0], '/');
-    if ((argv0 && strstr(argv0, "pico"))
-       || (!argv0 && strstr(argv[0], "pico")))
+    if ((argv0 != NULL && strstr(argv0, "pico") != NULL)
+       || (argv0 == NULL && strstr(argv[0], "pico") != NULL))
        SET(PICO_MODE);
 
     /* See if there's a non-option in argv (first non-option is the
@@ -3326,7 +3325,9 @@ int main(int argc, char *argv[])
 #endif
 
     window_init();
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
     mouse_init();
+#endif
 
     if (!ISSET(ALT_KEYPAD)) {
        keypad(edit, TRUE);
@@ -3374,7 +3375,7 @@ int main(int argc, char *argv[])
 
     while (1) {
 
-#if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE) || !defined(DISABLE_HELP)
+#if !defined(DISABLE_BROWSER) || !defined(DISABLE_HELP) || (!defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION))
        currshortcut = main_list;
 #endif
 
@@ -3394,7 +3395,7 @@ int main(int argc, char *argv[])
                kbinput = wgetch(edit);
                if ((kbinput <= 'D' && kbinput >= 'A') ||
                        (kbinput <= 'd' && kbinput >= 'a'))
-                   kbinput = ABCD(kbinput);
+                   kbinput = abcd(kbinput);
                else if (kbinput <= 'z' && kbinput >= 'j')
                    print_numlock_warning();
                else if (kbinput <= 'S' && kbinput >= 'P')
@@ -3513,7 +3514,7 @@ int main(int argc, char *argv[])
                case 'b':
                case 'c':
                case 'd':
-                   kbinput = ABCD(kbinput);
+                   kbinput = abcd(kbinput);
                    break;
                case 'H':
                    kbinput = KEY_HOME;
@@ -3590,7 +3591,7 @@ int main(int argc, char *argv[])
        /* Look through the main shortcut list to see if we've hit a
           shortcut key */
 
-#if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE) || !defined (DISABLE_HELP)
+#if !defined(DISABLE_BROWSER) || !defined (DISABLE_HELP) || (!defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION))
        for (s = currshortcut; s != NULL && !keyhandled; s = s->next) {
 #else
        for (s = main_list; s != NULL && !keyhandled; s = s->next) {
@@ -3628,12 +3629,8 @@ int main(int argc, char *argv[])
            keyhandled = 1;
        }
 
-#ifndef USE_SLANG
        /* Hack, make insert key do something useful, like insert file */
        if (kbinput == KEY_IC) {
-#else
-       if (0) {
-#endif
          do_insertkey:
 
 #ifdef ENABLE_MULTIBUFFER
@@ -3654,12 +3651,10 @@ int main(int argc, char *argv[])
        /* Last gasp, stuff that's not in the main lists */
        if (!keyhandled)
            switch (kbinput) {
-#ifndef DISABLE_MOUSE
-#ifdef NCURSES_MOUSE_VERSION
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
            case KEY_MOUSE:
                do_mouse();
                break;
-#endif
 #endif
 
            case 0:             /* Erg */
diff --git a/nano.h b/nano.h
index 840cb6faf54a9e837da9fe95453683dfa3533ea4..70581c56845fc530ddad49a9fd8ede1b9d2800b5 100644 (file)
--- a/nano.h
+++ b/nano.h
@@ -39,7 +39,8 @@
 
 #ifdef USE_SLANG       /* Slang support enabled */
 #include <slcurses.h>
-#define KEY_DC 0x113
+#define KEY_IC SL_KEY_IC
+#define KEY_DC SL_KEY_DELETE
 #elif defined(HAVE_NCURSES_H)
 #include <ncurses.h>
 #else /* Uh oh */
 # endif
 #endif
 
+#if !defined(HAVE_STRCASECMP) || !defined(HAVE_STRNCASECMP)
+# ifndef HAVE_STRCASECMP
+#  define strcasecmp strcmp
+# endif
+# ifndef HAVE_STRNCASECMP
+#  define strncasecmp strncmp
+# endif
+#endif
+
 /* HP-UX 10 & 11 do not seem to support KEY_HOME and KEY_END */
 #ifndef KEY_HOME
 #define KEY_HOME -1
@@ -80,7 +90,6 @@
 #define KEY_END -1
 #endif /* KEY_END */
 
-
 #define VERMSG "GNU nano " VERSION
 
 #if defined(DISABLE_WRAPPING) && defined(DISABLE_JUSTIFY)
@@ -191,7 +200,7 @@ typedef struct syntaxtype {
 #define CONSTUPDATE            (1<<4)
 #define NO_HELP                        (1<<5)
 #define PICO_MODE              (1<<6)
-#define FOLLOW_SYMLINKS                (1<<7)
+#define NOFOLLOW_SYMLINKS      (1<<7)
 #define SUSPEND                        (1<<8)
 #define NO_WRAP                        (1<<9)
 #define AUTOINDENT             (1<<10)
@@ -213,7 +222,7 @@ typedef struct syntaxtype {
 #define NO_CONVERT             (1<<26)
 #define BACKUP_FILE            (1<<27)
 #define NO_RCFILE              (1<<28)
-#define COLOR_SYNTAX           (1<<28)
+#define COLOR_SYNTAX           (1<<29)
 
 /* Control key sequences, changing these would be very very bad */
 
diff --git a/proto.h b/proto.h
index 6b14bfa6f361d47110e62d644394aaed2d5f5c29..51388a179a12f321bd0021ed71df3a940e40395d 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -33,7 +33,9 @@ extern int wrap_at;
 extern int editwinrows;
 extern int current_x, current_y, totlines;
 extern int placewewant;
+#ifndef NANO_SMALL
 extern int mark_beginx;
+#endif
 extern long totsize;
 extern int temp_opt;
 extern int wrap_at, flags, tabsize;
@@ -64,7 +66,10 @@ extern char *alt_speller;
 
 extern struct stat fileinfo;
 extern filestruct *current, *fileage, *edittop, *editbot, *filebot; 
-extern filestruct *cutbuffer, *mark_beginbuf;
+extern filestruct *cutbuffer;
+#ifndef NANO_SMALL
+extern filestruct *mark_beginbuf;
+#endif
 
 #ifdef ENABLE_MULTIBUFFER
 extern openfilestruct *open_files;
@@ -215,7 +220,9 @@ void die_too_small(void);
 void print_view_warning(void);
 void global_init(int save_cutbuffer);
 void window_init(void);
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
 void mouse_init(void);
+#endif
 #ifndef DISABLE_HELP
 void help_init(void);
 #endif
@@ -300,7 +307,7 @@ void print_numlock_warning(void);
 #ifndef NANO_SMALL
 void do_toggle(const toggle *which);
 #endif
-int ABCD(int input);
+int abcd(int input);
 
 /* Public functions in rcfile.c */
 #ifdef ENABLE_NANORC
index 96ffa625f5b63244fe870aa8ebe865035fe5d10f..24994087490c25721970d862183b05440713daa3 100644 (file)
--- a/rcfile.c
+++ b/rcfile.c
@@ -50,7 +50,7 @@ const static rcoption rcopts[] = {
     {"fill", 0},
 #endif
     {"keypad", ALT_KEYPAD},
-#ifndef DISABLE_MOUSE
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
     {"mouse", USE_MOUSE},
 #endif
 #ifdef ENABLE_MULTIBUFFER
@@ -59,7 +59,7 @@ const static rcoption rcopts[] = {
 #ifndef NANO_SMALL
     {"noconvert", NO_CONVERT},
 #endif
-    {"nofollow", FOLLOW_SYMLINKS},
+    {"nofollow", NOFOLLOW_SYMLINKS},
     {"nohelp", NO_HELP},
 #ifndef DISABLE_WRAPPING
     {"nowrap", NO_WRAP},
@@ -68,7 +68,7 @@ const static rcoption rcopts[] = {
     {"operatingdir", 0},
 #endif
     {"pico", PICO_MODE},
-#ifndef NANO_SMALL
+#ifndef DISABLE_JUSTIFY
     {"quotestr", 0},
 #endif
 #ifdef HAVE_REGEX_H
@@ -403,7 +403,7 @@ void parse_colors(char *ptr)
        else {
            if (ptr == NULL || strncasecmp(ptr, "end=", 4)) {
                rcfile_error(_
-                            ("\n\t\"start=\" requires a corresponding \"end=\""));
+                            ("\"start=\" requires a corresponding \"end=\""));
                return;
            }
 
@@ -455,7 +455,7 @@ void parse_rcfile(FILE *rcstream)
        /* Else skip to the next space */
        keyword = ptr;
        ptr = parse_next_word(ptr);
-       if (!ptr)
+       if (ptr == NULL)
            continue;
 
        /* Else try to parse the keyword */
@@ -485,7 +485,7 @@ void parse_rcfile(FILE *rcstream)
                    fprintf(stderr, _("parse_rcfile: Parsing option %s\n"),
                            rcopts[i].name);
 #endif
-                   if (set == 1 || rcopts[i].flag == FOLLOW_SYMLINKS) {
+                   if (set == 1) {
                        if (!strcasecmp(rcopts[i].name, "tabsize")
 #ifndef DISABLE_OPERATINGDIR
                                || !strcasecmp(rcopts[i].name, "operatingdir")
index b7ebf30037c70761fe9ce674d2b0cfeed2f1381d..115b9a64ecfa0800088d776f71a38e7b86d92d71 100644 (file)
--- a/search.c
+++ b/search.c
@@ -30,6 +30,9 @@
 #include "proto.h"
 #include "nano.h"
 
+static int past_editbuff;
+       /* findnextstr() is now searching lines not displayed */
+
 /* Regular expression helper functions */
 
 #ifdef HAVE_REGEX_H
@@ -101,7 +104,7 @@ int search_init(int replacing)
     search_init_globals();
 
     /* Clear the backupstring if we've changed from Pico mode to regular
-       mode */
+       mode */
     if (ISSET(CLEAR_BACKUPSTRING)) {
        free(backupstring);
        backupstring = NULL;
@@ -117,14 +120,16 @@ int search_init(int replacing)
        last_search. */
 
     if (ISSET(PICO_MODE)) {
-       if (backupstring == NULL || !strcmp(backupstring, last_search))
-           backupstring = mallocstrcpy(backupstring, "");
+       if (backupstring == NULL || !strcmp(backupstring, last_search)) {
+           backupstring = charalloc(1);
+           backupstring[0] = '\0';
+       }
     }
     else if (backupstring == NULL)
        backupstring = mallocstrcpy(backupstring, last_search);
 
     /* If using Pico messages, we do things the old fashioned way... */
-    if (ISSET(PICO_MODE) && last_search[0]) {
+    if (ISSET(PICO_MODE) && last_search[0] != '\0') {
        buf = charalloc(COLS / 3 + 7);
        /* We use COLS / 3 here because we need to see more on the line */
        sprintf(buf, " [%.*s%s]", COLS / 3, last_search,
@@ -227,9 +232,6 @@ int is_whole_word(int curr_pos, const char *datastr, const char *searchword)
        (sln == strlen(datastr) || !isalpha((int) datastr[sln]));
 }
 
-static int past_editbuff;
-       /* findnextstr() is now searching lines not displayed */
-
 filestruct *findnextstr(int quiet, int bracket_mode,
                        const filestruct *begin, int beginx,
                        const char *needle)
@@ -326,7 +328,7 @@ filestruct *findnextstr(int quiet, int bracket_mode,
            if (fileptr == edittop->prev)
                past_editbuff = 1;
 
-           /* SOF reached ?, wrap around once */
+           /* SOF reached?, wrap around once */
 /* ? */            if (fileptr == NULL) {
                if (bracket_mode)
                   return NULL;
@@ -416,8 +418,7 @@ int do_search(void)
     search_last_line = 0;
     didfind = findnextstr(FALSE, FALSE, current, current_x, answer);
 
-    if ((fileptr == current) && (fileptr_x == current_x) &&
-       didfind != NULL)
+    if ((fileptr == current) && (fileptr_x == current_x) && didfind != NULL)
        statusbar(_("This is the only occurrence"));
 
     search_abort();
@@ -451,7 +452,7 @@ int replace_regexp(char *string, int create_flag)
      * replacement using \1, \2, \3, etc. */
 
     c = last_replace;
-    while (*c) {
+    while (*c != '\0') {
        if (*c != '\\') {
            if (create_flag)
                *string++ = *c;
@@ -532,7 +533,7 @@ char *replace_line(void)
        strcat(copy, last_replace);
 #ifdef HAVE_REGEX_H
     else
-       (void) replace_regexp(copy + current_x, 1);
+       replace_regexp(copy + current_x, 1);
 #endif
 
     /* The tail of the original line */
@@ -593,7 +594,7 @@ int do_replace_loop(const char *prevanswer, const filestruct *begin,
                                FALSE, begin, *beginx, prevanswer);
 
        /* No more matches.  Done! */
-       if (!fileptr)
+       if (fileptr == NULL)
            break;
 
        /* Make sure only whole words are found */
@@ -616,7 +617,7 @@ int do_replace_loop(const char *prevanswer, const filestruct *begin,
                replaceall = 1;
 
            copy = replace_line();
-           if (!copy) {
+           if (copy == NULL) {
                statusbar(_("Replace failed: unknown subexpression!"));
                replace_abort();
                return 0;
@@ -773,7 +774,7 @@ int do_gotoline(int line, int save_pos)
 
     current_x = 0;
 
-    /* if save_pos is non-zero, don't change the cursor position when
+    /* if save_pos is nonzero, don't change the cursor position when
        updating the edit window */
     if (save_pos)
        edit_update(current, NONE);
@@ -820,7 +821,7 @@ int do_find_bracket(void)
 
     ch_under_cursor = current->data[current_x];
  
-    if ((!(pos = strchr(brackets, ch_under_cursor))) || (!((offset = pos - brackets) < 8))) {
+    if (((pos = strchr(brackets, ch_under_cursor)) == NULL) || (((offset = pos - brackets) < 8) == 0)) {
        statusbar(_("Not a bracket"));
        return 1;
     }
@@ -850,7 +851,7 @@ int do_find_bracket(void)
 
     while (1) {
        search_last_line = 0;
-       if (findnextstr(1, 1, current, current_x, regexp_pat)) {
+       if (findnextstr(1, 1, current, current_x, regexp_pat) != NULL) {
            have_past_editbuff |= past_editbuff;
            if (current->data[current_x] == ch_under_cursor)    /* found identical bracket */
                count++;
diff --git a/utils.c b/utils.c
index 6b50dd445559dfdb1ddef000f52f5fd058050d29..ce21b8ce81399b417ac77940c347e3abe2720b54 100644 (file)
--- a/utils.c
+++ b/utils.c
 
 int is_cntrl_char(int c)
 {
-    if (iscntrl(c) || ((c & 127) != 127 && iscntrl(c & 127)))
-       return 1;
-    else
-       return 0;
+    return (-128 <= c && c < -96) || (0 <= c && c < 32) ||
+               (127 <= c && c < 160);
 }
 
 int num_of_digits(int n)
@@ -120,20 +118,20 @@ const char *revstristr(const char *haystack, const char *needle,
 #endif /* !NANO_SMALL */
 
 /* This is now mutt's version (called mutt_stristr) because it doesn't
  use memory allocation to do a simple search (yuck). */
* use memory allocation to do a simple search (yuck). */
 const char *stristr(const char *haystack, const char *needle)
 {
     const char *p, *q;
 
-    if (!haystack)
+    if (haystack == NULL)
        return NULL;
-    if (!needle)  
-       return (haystack);
+    if (needle == NULL)
+       return haystack;
     
-    while (*(p = haystack)) {
-       for (q = needle; *p && *q && tolower(*p) == tolower(*q); p++, q++)
+    while (*(p = haystack) != '\0') {
+       for (q = needle; *p != 0 && *q != 0 && tolower(*p) == tolower(*q); p++, q++)
            ;
-       if (!*q)
+       if (*q == 0)
            return haystack;
        haystack++;
     }
@@ -191,7 +189,7 @@ const char *strstrwrapper(const char *haystack, const char *needle,
  * screen.  Note that nperror causes the window to flicker once. */
 void nperror(const char *s)
 {
-       /* leave ncurses mode, go to the terminal */
+    /* leave ncurses mode, go to the terminal */
     if (endwin() != ERR) {
        perror(s);              /* print the error */
        total_refresh();        /* return to ncurses and repaint */
@@ -205,14 +203,14 @@ void *nmalloc(size_t howmuch)
 
     /* Panic save? */
 
-    if (!(r = malloc(howmuch)))
+    if ((r = malloc(howmuch)) == NULL)
        die(_("nano: malloc: out of memory!"));
 
     return r;
 }
 
-/* We're going to need this too - Hopefully this will minimize
  the transition cost of moving to the appropriate function. */
+/* We're going to need this too - Hopefully this will minimize the
* transition cost of moving to the appropriate function. */
 char *charalloc(size_t howmuch)
 {
     char *r = (char *)malloc(howmuch * sizeof(char));
@@ -227,7 +225,7 @@ void *nrealloc(void *ptr, size_t howmuch)
 {
     void *r;
 
-    if (!(r = realloc(ptr, howmuch)))
+    if ((r = realloc(ptr, howmuch)) == NULL)
        die(_("nano: realloc: out of memory!"));
 
     return r;
@@ -240,10 +238,10 @@ char *mallocstrcpy(char *dest, const char *src)
     if (src == dest)
        return dest;
 
-    if (dest)
+    if (dest != NULL)
        free(dest);
 
-    if (!src)
+    if (src == NULL)
        return NULL;
 
     dest = charalloc(strlen(src) + 1);
@@ -292,7 +290,7 @@ int check_wildcard_match(const char *text, const char *pattern)
     retrypat = NULL;
     retrytext = NULL;
 
-    while (*text || *pattern) {
+    while (*text != '\0' || *pattern != '\0') {
        ch = *pattern++;
 
        switch (ch) {
@@ -346,12 +344,12 @@ int check_wildcard_match(const char *text, const char *pattern)
 
        default:
            if (*text == ch) {
-               if (*text)
+               if (*text != '\0')
                    text++;
                break;
            }
 
-           if (*text) {
+           if (*text != '\0') {
                pattern = retrypat;
                text = ++retrytext;
                break;
@@ -360,7 +358,7 @@ int check_wildcard_match(const char *text, const char *pattern)
            return FALSE;
        }
 
-       if (!pattern)
+       if (pattern == NULL)
            return FALSE;
     }
 
diff --git a/winio.c b/winio.c
index 21017b70289bab920b4d9d31933c6ec1bf3c571b..e15b4b435c09c4852f456d4e6d67e61982c6ba5d 100644 (file)
--- a/winio.c
+++ b/winio.c
@@ -210,7 +210,7 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
     else
        answer[0] = '\0';
 
-#if !defined(DISABLE_HELP) || !defined(DISABLE_MOUSE)
+#if !defined(DISABLE_HELP) || (!defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION))
     currshortcut = s;
 #endif
 
@@ -261,12 +261,10 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
        case 545:               /* Right alt again */
            break;
 #endif
-#ifndef DISABLE_MOUSE
-#ifdef NCURSES_MOUSE_VERSION
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
        case KEY_MOUSE:
            do_mouse();
            break;
-#endif
 #endif
        case NANO_HOME_KEY:
        case KEY_HOME:
@@ -515,7 +513,7 @@ void bottombars(const shortcut *s)
            s = s->next;
            if (s == NULL)
                goto break_completely_out;
-       }       
+       }
     }
 
   break_completely_out:
@@ -572,8 +570,8 @@ void reset_cursor(void)
     const filestruct *ptr = edittop;
     size_t x;
 
-    /* Yuck.  This condition can be true after open_file when opening the
-     * first file. */
+    /* Yuck.  This condition can be true after open_file() when opening
+     * the first file. */
     if (edittop == NULL)
        return;
 
@@ -640,8 +638,8 @@ void edit_add(const filestruct *fileptr, int yval, int start
                while (k < start + COLS) {
                    /* Note the fifth parameter to regexec.  It says not to
                     * match the beginning-of-line character unless
-                    * k == 0.  If regexec returns non-zero, there are
-                    * no more matches in the line. */
+                    * k == 0.  If regexec returns nonzero, there are no
+                    * more matches in the line. */
                    if (regexec(&start_regexp, &fileptr->data[k], 1,
                                &startmatch, k == 0 ? 0 : REG_NOTBOL))
                        break;
@@ -732,14 +730,12 @@ void edit_add(const filestruct *fileptr, int yval, int start
                 * fileptr and after the start.  Is there an end after
                 * the start at all?  We don't paint unterminated starts. */
                end_line = fileptr;
-               while (end_line != NULL &&
-                       regexec(&end_regexp, end_line->data, 1,
-                               &endmatch, 0))
+               while (end_line != NULL && regexec(&end_regexp, end_line->data,
+                               1, &endmatch, 0))
                    end_line = end_line->next;
 
                /* No end found, or it is too early. */
-               if (end_line == NULL ||
-                       end_line->lineno < fileptr->lineno ||
+               if (end_line == NULL || end_line->lineno < fileptr->lineno ||
                        (end_line == fileptr && endmatch.rm_eo <= start))
                    goto step_two;
 
@@ -801,9 +797,8 @@ void edit_add(const filestruct *fileptr, int yval, int start
                        /* There is no end on this line.  But we haven't
                         * yet looked for one on later lines. */
                        end_line = fileptr->next;
-                       while (end_line != NULL &&
-                               regexec(&end_regexp, end_line->data, 1,
-                               &endmatch, 0))
+                       while (end_line != NULL && regexec(&end_regexp,
+                               end_line->data, 1, &endmatch, 0))
                            end_line = end_line->next;
                        if (end_line != NULL) {
                            assert(0 <= x_start && x_start < COLS);
@@ -900,7 +895,7 @@ void update_line(filestruct *fileptr, int index)
     size_t pos;
     size_t page_start;
 
-    if (!fileptr)
+    if (fileptr == NULL)
        return;
 
     line = fileptr->lineno - edittop->lineno;
@@ -996,9 +991,6 @@ void center_cursor(void)
 /* Refresh the screen without changing the position of lines. */
 void edit_refresh(void)
 {
-    static int noloop = 0;
-    int nlines = 0, currentcheck = 0;
-
     /* Neither of these conditions should occur, but they do.  edittop is
      * NULL when you open an existing file on the command line, and
      * ENABLE_COLOR is defined.  Yuck. */
@@ -1007,40 +999,35 @@ void edit_refresh(void)
     if (edittop == NULL)
        edittop = current;
 
-    /* Don't make the cursor jump around the screen whilst updating */
-    leaveok(edit, TRUE);
-
-    editbot = edittop;
-    while (nlines < editwinrows) {
-       update_line(editbot, current_x);
-       if (editbot == current)
-           currentcheck = 1;
-
-       nlines++;
-
-       if (editbot->next == NULL)
-           break;
-       editbot = editbot->next;
-    }
-
-    /* If noloop == 1, then we already did an edit_update without finishing
-       this function.  So we don't run edit_update again */
-    if (!currentcheck && !noloop) {
-               /* Then current has run off the screen... */
+    if (current->lineno >= edittop->lineno + editwinrows)
+       /* Note that edit_update() changes edittop so that
+        * current->lineno = edittop->lineno + editwinrows / 2.  Thus
+        * when it then calls edit_refresh(), there is no danger of
+        * getting an infinite loop. */
        edit_update(current, CENTER);
-       noloop = 1;
-    } else if (noloop)
-       noloop = 0;
+    else {
+       int nlines = 0;
 
-    while (nlines < editwinrows) {
-       mvwaddstr(edit, nlines, 0, hblank);
-       nlines++;
-    }
+       /* Don't make the cursor jump around the screen whilst updating */
+       leaveok(edit, TRUE);
 
-    /* What the hell are we expecting to update the screen if this isn't 
-       here? Luck?? */
-    wrefresh(edit);
-    leaveok(edit, FALSE);
+       editbot = edittop;
+       while (nlines < editwinrows) {
+           update_line(editbot, current_x);
+           nlines++;
+           if (editbot->next == NULL)
+               break;
+           editbot = editbot->next;
+       }
+       while (nlines < editwinrows) {
+           mvwaddstr(edit, nlines, 0, hblank);
+           nlines++;
+       }
+       /* What the hell are we expecting to update the screen if this
+          isn't here?  Luck?? */
+       wrefresh(edit);
+       leaveok(edit, FALSE);
+    }
 }
 
 /*
@@ -1137,8 +1124,8 @@ int statusq(int tabs, const shortcut *s, const char *def,
 
 /*
  * Ask a simple yes/no question on the statusbar.  Returns 1 for Y, 0
- * for N, 2 for All (if all is non-zero when passed in) and -1 for
- * abort (^C).
+ * for N, 2 for All (if all is nonzero when passed in) and -1 for abort
+ * (^C).
  */
 int do_yesno(int all, int leavecursor, const char *msg, ...)
 {
@@ -1148,10 +1135,8 @@ int do_yesno(int all, int leavecursor, const char *msg, ...)
     const char *yesstr;                /* String of yes characters accepted */
     const char *nostr;         /* Same for no */
     const char *allstr;                /* And all, surprise! */
-#ifndef DISABLE_MOUSE
-#ifdef NCURSES_MOUSE_VERSION
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
     MEVENT mevent;
-#endif
 #endif
 
     /* Yes, no and all are strings of any length.  Each string consists of
@@ -1204,8 +1189,7 @@ int do_yesno(int all, int leavecursor, const char *msg, ...)
        kbinput = wgetch(edit);
 
        switch (kbinput) {
-#ifndef DISABLE_MOUSE
-#ifdef NCURSES_MOUSE_VERSION
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
        case KEY_MOUSE:
 
            /* Look ma!  We get to duplicate lots of code from do_mouse!! */
@@ -1232,7 +1216,6 @@ int do_yesno(int all, int leavecursor, const char *msg, ...)
                ungetch(yesnosquare[mevent.y][mevent.x / (COLS / 6)]);
            }
            break;
-#endif
 #endif
        case NANO_CONTROL_C:
            ok = -2;
@@ -1436,12 +1419,10 @@ int do_help(void)
        const char *ptr = help_text;
 
        switch (kbinput) {
-#ifndef DISABLE_MOUSE
-#ifdef NCURSES_MOUSE_VERSION
+#if !defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)
        case KEY_MOUSE:
            do_mouse();
            break;
-#endif
 #endif
        case 27:
            kbinput = wgetch(edit);
@@ -1562,7 +1543,7 @@ int do_help(void)
     return 1;
 }
 
-int keypad_on(WINDOW * win, int newval)
+int keypad_on(WINDOW *win, int newval)
 {
 /* This is taken right from aumix.  Don't sue me. */
 #ifdef HAVE_USEKEYPAD