diff --git a/ChangeLog b/ChangeLog
index 955a040e2c540d0953d76f5c698121d104444939..0491575537f0c1a78b4a7eb4c118f7d1e584934e 100644
--- 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
--- 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;
 
diff --git a/configure.ac b/configure.ac
index fc825dc51ecfe372644a02ea1e08c7cbe284d942..3a4f0506ca4d46d731182dcf9db5a44269b2d5fa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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
--- 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
--- 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);
diff --git a/global.c b/global.c
index ee58dcd627f77f8a565f6dcc38c9a12a8e4eb928..5ffaa9f60533f82365264e5c909c5c9d436d43a8 100644
--- 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
--- 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
--- 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
--- 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 */
@@ -71,6 +72,15 @@
 # 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
--- 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
diff --git a/rcfile.c b/rcfile.c
index 96ffa625f5b63244fe870aa8ebe865035fe5d10f..24994087490c25721970d862183b05440713daa3 100644
--- 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")
diff --git a/search.c b/search.c
index b7ebf30037c70761fe9ce674d2b0cfeed2f1381d..115b9a64ecfa0800088d776f71a38e7b86d92d71 100644
--- 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
--- a/utils.c
+++ b/utils.c
@@ -32,10 +32,8 @@
 
 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
--- 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