Merge Less 458 plus local patches
authorshadchin <shadchin@openbsd.org>
Fri, 25 Apr 2014 13:38:21 +0000 (13:38 +0000)
committershadchin <shadchin@openbsd.org>
Fri, 25 Apr 2014 13:38:21 +0000 (13:38 +0000)
ok guenther@, ok jmc@ for man bits

50 files changed:
usr.bin/less/NEWS
usr.bin/less/README
usr.bin/less/brac.c
usr.bin/less/ch.c
usr.bin/less/charset.c
usr.bin/less/cmd.h
usr.bin/less/cmdbuf.c
usr.bin/less/command.c
usr.bin/less/configure
usr.bin/less/cvt.c
usr.bin/less/decode.c
usr.bin/less/defines.h
usr.bin/less/defines.h.in
usr.bin/less/edit.c
usr.bin/less/filename.c
usr.bin/less/forwback.c
usr.bin/less/funcs.h
usr.bin/less/help.c
usr.bin/less/ifile.c
usr.bin/less/input.c
usr.bin/less/jump.c
usr.bin/less/less.1
usr.bin/less/less.h
usr.bin/less/less.hlp
usr.bin/less/lessecho.c
usr.bin/less/lesskey.1
usr.bin/less/lesskey.c
usr.bin/less/lesskey.h
usr.bin/less/lglob.h
usr.bin/less/line.c
usr.bin/less/linenum.c
usr.bin/less/lsystem.c
usr.bin/less/main.c
usr.bin/less/mark.c
usr.bin/less/optfunc.c
usr.bin/less/option.c
usr.bin/less/option.h
usr.bin/less/opttbl.c
usr.bin/less/os.c
usr.bin/less/output.c
usr.bin/less/pattern.c
usr.bin/less/position.c
usr.bin/less/position.h
usr.bin/less/prompt.c
usr.bin/less/screen.c
usr.bin/less/search.c
usr.bin/less/signal.c
usr.bin/less/tags.c
usr.bin/less/ttyin.c
usr.bin/less/version.c

index eb38025..e03f35a 100644 (file)
@@ -7,8 +7,53 @@
       http://www.greenwoodsoftware.com/less
   You can also download the latest version of less from there.
 
-  To report bugs, suggestions or comments, send email to 
-  bug-less@gnu.org or markn@greenwoodsoftware.com.
+  To report bugs, suggestions or comments, send email to bug-less@gnu.org.
+
+======================================================================
+
+       Major changes between "less" versions 451 and 458
+
+* Allow backslash escaping of metacharacters in LESS environment variable
+  after the --use-backslash option.
+
+* Don't quit if syntax errors are found in command line options.
+
+* Increase sizes of some internal buffers.
+
+* Fix configure bug with --with-regex=none.
+
+* Fix crash with "stty rows 0".
+
+* Fix Win32 attribute display bug.
+
+* Fix display bug when using up/down arrow on the command line.
+
+======================================================================
+
+       Major changes between "less" versions 444 and 451
+
+* Add ESC-F command to keep reading data until a pattern is found.
+
+* Use exit code of LESSOPEN script if LESSOPEN starts with "||".
+
+* When up/down arrow is used on the command line immediately after
+  typing text, the next command starting with that text is found.
+
+* Add support for GNU regex.
+
+* Add configure option --with-regex=none and fix compile errors
+  when compiling with no regex library.
+
+* Fix bugs handling SGR sequences in Win32.
+
+* Fix possible crashes caused by malformed LESSOPEN or 
+  LESSCLOSE variables.
+
+* Fix bug highlighting text which is discontiguous in the file 
+  due to backspace processing.
+
+* Fix bug in displaying status column when scrolling backwards 
+  with -J and -S in effect.
 
 ======================================================================
 
index c4cfa63..a7bdba4 100644 (file)
@@ -1,7 +1,7 @@
 
-                            Less, version 444
+                            Less, version 458
 
-    This is the distribution of less, version 444, released 09 Jun 2011.
+    This is the distribution of less, version 458, released 04 Apr 2013.
     This program is part of the GNU project (http://www.gnu.org).
 
     This program is free software.  You may redistribute it and/or
@@ -13,7 +13,7 @@
     or
     2. The Less License, in the file LICENSE.
 
-    Please report any problems to bug-less@gnu.org or markn@greenwoodsoftware.com.
+    Please report any problems to bug-less@gnu.org.
     See http://www.greenwoodsoftware.com/less for the latest info.
 
 =========================================================================
@@ -52,10 +52,11 @@ INSTALLATION (Unix systems only):
         regcomp        Use the V8-compatible regcomp.
         regcomp-local  Use Henry Spencer's V8-compatible regcomp
                        (source is supplied with less).
+        none           No regular expressions, only simple string matching.
    --with-secure
      Builds a "secure" version of less, with some features disabled
-        to prevent users from viewing other files, accessing shell
-        commands, etc.
+     to prevent users from viewing other files, accessing shell
+     commands, etc.
 
 
 3. It is a good idea to look over the generated Makefile and defines.h
@@ -88,7 +89,7 @@ INSTALLATION (Unix systems only):
    bindir and/or mandir to the appropriate directories.
 
 If you have any problems building or running "less", suggestions, 
-complaints, etc., you may mail to the author at markn@greenwoodsoftware.com.
+complaints, etc., you may mail to bug-less@gnu.org.
 
 Note to hackers: comments noting possible improvements are enclosed
 in double curly brackets {{ like this }}.
index 22c71eb..70a7771 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index 2fb4290..261668b 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -574,6 +573,8 @@ ch_length()
                return (NULL_POSITION);
        if (ignore_eoi)
                return (NULL_POSITION);
+       if (ch_flags & CH_NODATA)
+               return (0);
        return (ch_fsize);
 }
 
@@ -797,6 +798,17 @@ seekable(f)
        return (lseek(f, (off_t)1, SEEK_SET) != BAD_LSEEK);
 }
 
+/*
+ * Force EOF to be at the current read position.
+ * This is used after an ignore_eof read, during which the EOF may change.
+ */
+       public void
+ch_set_eof()
+{
+       ch_fsize = ch_fpos;
+}
+
+
 /*
  * Initialize file state for a new file.
  */
index 71ba305..79104aa 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index 4211f46..9a72160 100644 (file)
@@ -1,15 +1,14 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
-#define        MAX_USERCMD             500
+#define        MAX_USERCMD             1000
 #define        MAX_CMDLEN              16
 
 #define        A_B_LINE                2
@@ -66,6 +65,7 @@
 #define        A_NEXT_TAG              53
 #define        A_PREV_TAG              54
 #define        A_FILTER                55
+#define        A_F_UNTIL_HILITE        56
 
 #define        A_INVALID               100
 #define        A_NOACTION              101
index 93fbf11..59d1896 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -30,6 +29,7 @@ static int prompt_col;                /* Column of cursor just after prompt */
 static char *cp;               /* Pointer into cmdbuf */
 static int cmd_offset;         /* Index into cmdbuf of first displayed char */
 static int literal;            /* Next input char should not be interpreted */
+static int updown_match = -1;  /* Prefix length in up/down movement */
 
 #if TAB_COMPLETE_FILENAME
 static int cmd_complete();
@@ -122,6 +122,7 @@ cmd_reset()
        cmd_offset = 0;
        literal = 0;
        cmd_mbc_buf_len = 0;
+       updown_match = -1;
 }
 
 /*
@@ -132,6 +133,7 @@ clear_cmd()
 {
        cmd_col = prompt_col = 0;
        cmd_mbc_buf_len = 0;
+       updown_match = -1;
 }
 
 /*
@@ -510,6 +512,7 @@ cmd_ichar(cs, clen)
        /*
         * Reprint the tail of the line from the inserted char.
         */
+       updown_match = -1;
        cmd_repaint(cp);
        cmd_right();
        return (CC_OK);
@@ -553,6 +556,7 @@ cmd_erase()
        /*
         * Repaint the buffer after the erased char.
         */
+       updown_match = -1;
        cmd_repaint(cp);
        
        /*
@@ -649,6 +653,7 @@ cmd_kill()
        cmd_offset = 0;
        cmd_home();
        *cp = '\0';
+       updown_match = -1;
        cmd_repaint(cp);
 
        /*
@@ -681,12 +686,15 @@ set_mlist(mlist, cmdflags)
 #if CMD_HISTORY
 /*
  * Move up or down in the currently selected command history list.
+ * Only consider entries whose first updown_match chars are equal to
+ * cmdbuf's corresponding chars.
  */
        static int
 cmd_updown(action)
        int action;
 {
        char *s;
+       struct mlist *ml;
        
        if (curr_mlist == NULL)
        {
@@ -696,24 +704,47 @@ cmd_updown(action)
                bell();
                return (CC_OK);
        }
-       cmd_home();
-       clear_eol();
+
+       if (updown_match < 0)
+       {
+               updown_match = cp - cmdbuf;
+       }
+
        /*
-        * Move curr_mp to the next/prev entry.
+        * Find the next history entry which matches.
         */
-       if (action == EC_UP)
-               curr_mlist->curr_mp = curr_mlist->curr_mp->prev;
-       else
-               curr_mlist->curr_mp = curr_mlist->curr_mp->next;
+       for (ml = curr_mlist->curr_mp;;)
+       {
+               ml = (action == EC_UP) ? ml->prev : ml->next;
+               if (ml == curr_mlist)
+               {
+                       /*
+                        * We reached the end (or beginning) of the list.
+                        */
+                       break;
+               }
+               if (strncmp(cmdbuf, ml->string, updown_match) == 0)
+               {
+                       /*
+                        * This entry matches; stop here.
+                        * Copy the entry into cmdbuf and echo it on the screen.
+                        */
+                       curr_mlist->curr_mp = ml;
+                       s = ml->string;
+                       if (s == NULL)
+                               s = "";
+                       cmd_home();
+                       clear_eol();
+                       strlcpy(cmdbuf, s, sizeof(cmdbuf));
+                       for (cp = cmdbuf;  *cp != '\0';  )
+                               cmd_right();
+                       return (CC_OK);
+               }
+       }
        /*
-        * Copy the entry into cmdbuf and echo it on the screen.
+        * We didn't find a history entry that matches.
         */
-       s = curr_mlist->curr_mp->string;
-       if (s == NULL)
-               s = "";
-       strlcpy(cmdbuf, s, sizeof(cmdbuf));
-       for (cp = cmdbuf;  *cp != '\0';  )
-               cmd_right();
+       bell();
        return (CC_OK);
 }
 #endif
@@ -1062,7 +1093,11 @@ init_compl()
                tk_text = fcomplete(word);
        } else
        {
+#if MSDOS_COMPILER
+               char *qword = NULL;
+#else
                char *qword = shell_quote(word+1);
+#endif
                if (qword == NULL)
                        tk_text = fcomplete(word+1);
                else
@@ -1468,9 +1503,6 @@ save_cmdhist()
        FILE *f;
        int modified = 0;
 
-       filename = histfile_name();
-       if (filename == NULL)
-               return;
        if (mlist_search.modified)
                modified = 1;
 #if SHELL_ESCAPE || PIPEC
@@ -1479,6 +1511,9 @@ save_cmdhist()
 #endif
        if (!modified)
                return;
+       filename = histfile_name();
+       if (filename == NULL)
+               return;
        f = fopen(filename, "w");
        free(filename);
        if (f == NULL)
index 23acb1f..f53d7b6 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -36,6 +35,7 @@ extern int ignore_eoi;
 extern int secure;
 extern int hshift;
 extern int show_attn;
+extern POSITION highest_hilite;
 extern char *every_first_cmd;
 extern char *curr_altfilename;
 extern char version[];
@@ -106,8 +106,8 @@ cmd_exec()
        static void
 start_mca(action, prompt, mlist, cmdflags)
        int action;
-       char *prompt;
-       void *mlist;
+       constant char *prompt;
+       constant void *mlist;
        int cmdflags;
 {
        mca = action;
@@ -694,7 +694,7 @@ make_display()
        static void
 prompt()
 {
-       register char *p;
+       register constant char *p;
 
        if (ungot != NULL)
        {
@@ -972,6 +972,46 @@ multi_search(pattern, n)
        }
 }
 
+/*
+ * Forward forever, or until a highlighted line appears.
+ */
+       static int
+forw_loop(until_hilite)
+       int until_hilite;
+{
+       POSITION curr_len;
+
+       if (ch_getflags() & CH_HELPFILE)
+               return (A_NOACTION);
+
+       cmd_exec();
+       jump_forw();
+       curr_len = ch_length();
+       highest_hilite = until_hilite ? curr_len : NULL_POSITION;
+       ignore_eoi = 1;
+       while (!sigs)
+       {
+               if (until_hilite && highest_hilite > curr_len)
+               {
+                       bell();
+                       break;
+               }
+               make_display();
+               forward(1, 0, 0);
+       }
+       ignore_eoi = 0;
+       ch_set_eof();
+
+       /*
+        * This gets us back in "F mode" after processing 
+        * a non-abort signal (e.g. window-change).  
+        */
+       if (sigs && !ABORT_SIGS())
+               return (until_hilite ? A_F_UNTIL_HILITE : A_F_FOREVER);
+
+       return (A_NOACTION);
+}
+
 /*
  * Main command processor.
  * Accept and execute commands until a quit command.
@@ -990,6 +1030,7 @@ commands()
        IFILE old_ifile;
        IFILE new_ifile;
        char *tagfile;
+       int until_hilite = 0;
 
        search_type = SRCH_FORW;
        wscroll = (sc_height + 1) / 2;
@@ -1217,27 +1258,15 @@ commands()
                        /*
                         * Forward forever, ignoring EOF.
                         */
-                       if (ch_getflags() & CH_HELPFILE)
-                               break;
-                       cmd_exec();
-                       jump_forw();
-                       ignore_eoi = 1;
-                       while (!sigs)
-                       {
-                               make_display();
-                               forward(1, 0, 0);
-                       }
-                       ignore_eoi = 0;
-                       /*
-                        * This gets us back in "F mode" after processing 
-                        * a non-abort signal (e.g. window-change).  
-                        */
-                       if (sigs && !ABORT_SIGS())
-                               newaction = A_F_FOREVER;
+                       newaction = forw_loop(0);
                        if (less_is_more)
                                quit_at_eof = OPT_ON;
                        break;
 
+               case A_F_UNTIL_HILITE:
+                       newaction = forw_loop(1);
+                       break;
+
                case A_F_SCROLL:
                        /*
                         * Forward N lines 
@@ -1455,10 +1484,10 @@ commands()
                        break;
 
                case A_HELP:
-#if !SMALL
                        /*
                         * Help.
                         */
+#if !SMALL
                        if (ch_getflags() & CH_HELPFILE)
                                break;
                        if (ungot != NULL || unget_end) {
index f2a7c8c..e401d58 100644 (file)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67 for less 1.
+# Generated by GNU Autoconf 2.68 for less 1.
 #
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -89,6 +89,7 @@ fi
 IFS=" ""       $as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -214,11 +215,18 @@ IFS=$as_save_IFS
   # We cannot yet assume a decent shell, so we have to provide a
        # neutralization value for shells without unset; and this also
        # works around shells that cannot unset nonexistent variables.
+       # Preserve -v and -x to the replacement shell.
        BASH_ENV=/dev/null
        ENV=/dev/null
        (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
        export CONFIG_SHELL
-       exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+       case $- in # ((((
+         *v*x* | *x*v* ) as_opts=-vx ;;
+         *v* ) as_opts=-v ;;
+         *x* ) as_opts=-x ;;
+         * ) as_opts= ;;
+       esac
+       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -1067,7 +1075,7 @@ Try \`$0 --help' for more information"
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1281,7 +1289,7 @@ Optional Packages:
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-secure  Compile in secure mode
   --with-no-float  Do not use floating point
-  --with-regex={auto,pcre,posix,regcmp,re_comp,regcomp,regcomp-local}  Select a regular expression library  auto
+  --with-regex={auto,gnu,pcre,posix,regcmp,re_comp,regcomp,regcomp-local,none}  Select a regular expression library  auto
   --with-editor=PROGRAM   use PROGRAM as the default editor vi
 
 Some influential environment variables:
@@ -1361,7 +1369,7 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 less configure 1
-generated by GNU Autoconf 2.67
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1407,7 +1415,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1453,7 +1461,7 @@ fi
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1490,7 +1498,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1532,7 +1540,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1545,10 +1553,10 @@ fi
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval "test \"\${$3+set}\"" = set; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -1611,7 +1619,7 @@ $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -1620,7 +1628,7 @@ eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -1633,7 +1641,7 @@ ac_fn_c_check_header_compile ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1651,7 +1659,7 @@ fi
 eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -1664,7 +1672,7 @@ ac_fn_c_check_type ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -1705,7 +1713,7 @@ fi
 eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
 
@@ -1717,7 +1725,7 @@ ac_fn_c_check_func ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1772,7 +1780,7 @@ fi
 eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 cat >config.log <<_ACEOF
@@ -1780,7 +1788,7 @@ This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by less $as_me 1, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2142,7 +2150,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2182,7 +2190,7 @@ if test -z "$ac_cv_prog_CC"; then
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -2235,7 +2243,7 @@ if test -z "$CC"; then
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2275,7 +2283,7 @@ if test -z "$CC"; then
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2334,7 +2342,7 @@ if test -z "$CC"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2378,7 +2386,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -2661,7 +2669,7 @@ rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2712,7 +2720,7 @@ OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2749,7 +2757,7 @@ ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -2827,7 +2835,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -2925,7 +2933,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
 $as_echo_n "checking for library containing strerror... " >&6; }
-if test "${ac_cv_search_strerror+set}" = set; then :
+if ${ac_cv_search_strerror+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -2959,11 +2967,11 @@ for ac_lib in '' cposix; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_strerror+set}" = set; then :
+  if ${ac_cv_search_strerror+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_strerror+set}" = set; then :
+if ${ac_cv_search_strerror+:} false; then :
 
 else
   ac_cv_search_strerror=no
@@ -2991,7 +2999,7 @@ if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -3119,7 +3127,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -3182,7 +3190,7 @@ $as_echo "$ac_cv_path_GREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -3250,7 +3258,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 if test $ac_cv_c_compiler_gnu = yes; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
 $as_echo_n "checking whether $CC needs -traditional... " >&6; }
-if test "${ac_cv_prog_gcc_traditional+set}" = set; then :
+if ${ac_cv_prog_gcc_traditional+:} false; then :
   $as_echo_n "(cached) " >&6
 else
     ac_pattern="Autoconf.*'x'"
@@ -3335,7 +3343,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3422,7 +3430,7 @@ if test "$enable_largefile" != no; then
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
 $as_echo_n "checking for special C compiler options needed for large files... " >&6; }
-if test "${ac_cv_sys_largefile_CC+set}" = set; then :
+if ${ac_cv_sys_largefile_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_sys_largefile_CC=no
@@ -3473,7 +3481,7 @@ $as_echo "$ac_cv_sys_largefile_CC" >&6; }
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if test "${ac_cv_sys_file_offset_bits+set}" = set; then :
+if ${ac_cv_sys_file_offset_bits+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   while :; do
@@ -3542,7 +3550,7 @@ rm -rf conftest*
   if test $ac_cv_sys_file_offset_bits = unknown; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
-if test "${ac_cv_sys_large_files+set}" = set; then :
+if ${ac_cv_sys_large_files+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   while :; do
@@ -3615,7 +3623,7 @@ fi
 # Checks for general libraries.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgoto in -ltinfo" >&5
 $as_echo_n "checking for tgoto in -ltinfo... " >&6; }
-if test "${ac_cv_lib_tinfo_tgoto+set}" = set; then :
+if ${ac_cv_lib_tinfo_tgoto+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -3649,7 +3657,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgoto" >&5
 $as_echo "$ac_cv_lib_tinfo_tgoto" >&6; }
-if test "x$ac_cv_lib_tinfo_tgoto" = x""yes; then :
+if test "x$ac_cv_lib_tinfo_tgoto" = xyes; then :
   have_tinfo=yes
 else
   have_tinfo=no
@@ -3657,7 +3665,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -lxcurses" >&5
 $as_echo_n "checking for initscr in -lxcurses... " >&6; }
-if test "${ac_cv_lib_xcurses_initscr+set}" = set; then :
+if ${ac_cv_lib_xcurses_initscr+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -3691,7 +3699,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xcurses_initscr" >&5
 $as_echo "$ac_cv_lib_xcurses_initscr" >&6; }
-if test "x$ac_cv_lib_xcurses_initscr" = x""yes; then :
+if test "x$ac_cv_lib_xcurses_initscr" = xyes; then :
   have_xcurses=yes
 else
   have_xcurses=no
@@ -3699,7 +3707,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -lncursesw" >&5
 $as_echo_n "checking for initscr in -lncursesw... " >&6; }
-if test "${ac_cv_lib_ncursesw_initscr+set}" = set; then :
+if ${ac_cv_lib_ncursesw_initscr+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -3733,7 +3741,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_initscr" >&5
 $as_echo "$ac_cv_lib_ncursesw_initscr" >&6; }
-if test "x$ac_cv_lib_ncursesw_initscr" = x""yes; then :
+if test "x$ac_cv_lib_ncursesw_initscr" = xyes; then :
   have_ncursesw=yes
 else
   have_ncursesw=no
@@ -3741,7 +3749,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -lncurses" >&5
 $as_echo_n "checking for initscr in -lncurses... " >&6; }
-if test "${ac_cv_lib_ncurses_initscr+set}" = set; then :
+if ${ac_cv_lib_ncurses_initscr+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -3775,7 +3783,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_initscr" >&5
 $as_echo "$ac_cv_lib_ncurses_initscr" >&6; }
-if test "x$ac_cv_lib_ncurses_initscr" = x""yes; then :
+if test "x$ac_cv_lib_ncurses_initscr" = xyes; then :
   have_ncurses=yes
 else
   have_ncurses=no
@@ -3783,7 +3791,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -lcurses" >&5
 $as_echo_n "checking for initscr in -lcurses... " >&6; }
-if test "${ac_cv_lib_curses_initscr+set}" = set; then :
+if ${ac_cv_lib_curses_initscr+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -3817,7 +3825,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_initscr" >&5
 $as_echo "$ac_cv_lib_curses_initscr" >&6; }
-if test "x$ac_cv_lib_curses_initscr" = x""yes; then :
+if test "x$ac_cv_lib_curses_initscr" = xyes; then :
   have_curses=yes
 else
   have_curses=no
@@ -3825,7 +3833,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5
 $as_echo_n "checking for tgetent in -ltermcap... " >&6; }
-if test "${ac_cv_lib_termcap_tgetent+set}" = set; then :
+if ${ac_cv_lib_termcap_tgetent+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -3859,7 +3867,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5
 $as_echo "$ac_cv_lib_termcap_tgetent" >&6; }
-if test "x$ac_cv_lib_termcap_tgetent" = x""yes; then :
+if test "x$ac_cv_lib_termcap_tgetent" = xyes; then :
   have_termcap=yes
 else
   have_termcap=no
@@ -3867,7 +3875,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermlib" >&5
 $as_echo_n "checking for tgetent in -ltermlib... " >&6; }
-if test "${ac_cv_lib_termlib_tgetent+set}" = set; then :
+if ${ac_cv_lib_termlib_tgetent+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -3901,66 +3909,20 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termlib_tgetent" >&5
 $as_echo "$ac_cv_lib_termlib_tgetent" >&6; }
-if test "x$ac_cv_lib_termlib_tgetent" = x""yes; then :
+if test "x$ac_cv_lib_termlib_tgetent" = xyes; then :
   have_termlib=yes
 else
   have_termlib=no
 fi
 
-# Regular expressions (regcmp) are in -lgen on Solaris 2,
-# and in -lintl on SCO Unix.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for regcmp in -lgen" >&5
-$as_echo_n "checking for regcmp in -lgen... " >&6; }
-if test "${ac_cv_lib_gen_regcmp+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgen  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char regcmp ();
-int
-main ()
-{
-return regcmp ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_gen_regcmp=yes
-else
-  ac_cv_lib_gen_regcmp=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_regcmp" >&5
-$as_echo "$ac_cv_lib_gen_regcmp" >&6; }
-if test "x$ac_cv_lib_gen_regcmp" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBGEN 1
-_ACEOF
-
-  LIBS="-lgen $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for regcmp in -lintl" >&5
-$as_echo_n "checking for regcmp in -lintl... " >&6; }
-if test "${ac_cv_lib_intl_regcmp+set}" = set; then :
+# Regular expressions (regcmp) are in -lgen on Solaris 2, (but in libc
+# at least on Solaris 10 (2.10)) and in -lintl on SCO Unix.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing regcmp" >&5
+$as_echo_n "checking for library containing regcmp... " >&6; }
+if ${ac_cv_search_regcmp+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lintl  $LIBS"
+  ac_func_search_save_LIBS=$LIBS
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -3979,68 +3941,35 @@ return regcmp ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_intl_regcmp=yes
-else
-  ac_cv_lib_intl_regcmp=no
+for ac_lib in '' gen intl PW; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_regcmp=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_regcmp" >&5
-$as_echo "$ac_cv_lib_intl_regcmp" >&6; }
-if test "x$ac_cv_lib_intl_regcmp" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBINTL 1
-_ACEOF
-
-  LIBS="-lintl $LIBS"
-
+    conftest$ac_exeext
+  if ${ac_cv_search_regcmp+:} false; then :
+  break
 fi
+done
+if ${ac_cv_search_regcmp+:} false; then :
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for regcmp in -lPW" >&5
-$as_echo_n "checking for regcmp in -lPW... " >&6; }
-if test "${ac_cv_lib_PW_regcmp+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lPW  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char regcmp ();
-int
-main ()
-{
-return regcmp ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_PW_regcmp=yes
 else
-  ac_cv_lib_PW_regcmp=no
+  ac_cv_search_regcmp=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_PW_regcmp" >&5
-$as_echo "$ac_cv_lib_PW_regcmp" >&6; }
-if test "x$ac_cv_lib_PW_regcmp" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPW 1
-_ACEOF
-
-  LIBS="-lPW $LIBS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_regcmp" >&5
+$as_echo "$ac_cv_search_regcmp" >&6; }
+ac_res=$ac_cv_search_regcmp
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
@@ -4310,7 +4239,7 @@ LIBS="$LIBS $TERMLIBS"
 # Checks for header files.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4454,7 +4383,7 @@ done
 # Checks for typedefs, structures, and compiler characteristics.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5
 $as_echo_n "checking whether stat file-mode macros are broken... " >&6; }
-if test "${ac_cv_header_stat_broken+set}" = set; then :
+if ${ac_cv_header_stat_broken+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4496,7 +4425,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
 $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then :
+if ${ac_cv_c_const+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4575,7 +4504,7 @@ $as_echo "#define const /**/" >>confdefs.h
 fi
 
 ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
-if test "x$ac_cv_type_off_t" = x""yes; then :
+if test "x$ac_cv_type_off_t" = xyes; then :
 
 else
 
@@ -4586,7 +4515,7 @@ _ACEOF
 fi
 
 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = x""yes; then :
+if test "x$ac_cv_type_size_t" = xyes; then :
 
 else
 
@@ -4598,7 +4527,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if test "${ac_cv_header_time+set}" = set; then :
+if ${ac_cv_header_time+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4659,11 +4588,12 @@ fi
 
 
 
+
 
 
 # Checks for identifiers.
 ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
-if test "x$ac_cv_type_off_t" = x""yes; then :
+if test "x$ac_cv_type_off_t" = xyes; then :
 
 else
 
@@ -4766,7 +4696,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 # Checks for library functions.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
 $as_echo_n "checking return type of signal handlers... " >&6; }
-if test "${ac_cv_type_signal+set}" = set; then :
+if ${ac_cv_type_signal+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4894,7 +4824,7 @@ rm -f core conftest.err conftest.$ac_objext \
 
 # Some systems have termios.h but not the corresponding functions.
 ac_fn_c_check_func "$LINENO" "tcgetattr" "ac_cv_func_tcgetattr"
-if test "x$ac_cv_func_tcgetattr" = x""yes; then :
+if test "x$ac_cv_func_tcgetattr" = xyes; then :
   $as_echo "#define HAVE_TERMIOS_FUNCS 1" >>confdefs.h
 
 fi
@@ -4986,7 +4916,7 @@ rm -f core conftest.err conftest.$ac_objext \
 
 ac_fn_c_check_type "$LINENO" "sigset_t" "ac_cv_type_sigset_t" "#include <signal.h>
 "
-if test "x$ac_cv_type_sigset_t" = x""yes; then :
+if test "x$ac_cv_type_sigset_t" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_SIGSET_T 1
@@ -5258,8 +5188,7 @@ fi
 # Checks for regular expression functions.
 have_regex=no
 have_posix_regex=unknown
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for regcomp" >&5
-$as_echo_n "checking for regcomp... " >&6; }
+supported_regex=""
 
 # Select a regular expression library.
 WANT_REGEX=auto
@@ -5274,6 +5203,8 @@ if test $have_regex = no; then
 if test $WANT_REGEX = auto -o $WANT_REGEX = posix; then
 # Some versions of Solaris have a regcomp() function, but it doesn't work!
 # So we run a test program.  If we're cross-compiling, do it the old way.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POSIX regcomp" >&5
+$as_echo_n "checking for POSIX regcomp... " >&6; }
 if test "$cross_compiling" = yes; then :
   have_posix_regex=unknown
 else
@@ -5302,10 +5233,10 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 if test $have_posix_regex = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: using POSIX regcomp" >&5
-$as_echo "using POSIX regcomp" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
   $as_echo "#define HAVE_POSIX_REGCOMP 1" >>confdefs.h
-
+ supported_regex="$supported_regex posix"
   have_regex=yes
 elif test $have_posix_regex = unknown; then
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5322,10 +5253,10 @@ regex_t *r; regfree(r);
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: using POSIX regcomp" >&5
-$as_echo "using POSIX regcomp" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
   $as_echo "#define HAVE_POSIX_REGCOMP 1" >>confdefs.h
- have_regex=yes
+ have_regex=yes; supported_regex="$supported_regex posix"
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
@@ -5340,7 +5271,7 @@ if test $have_regex = no; then
 if test $WANT_REGEX = auto -o $WANT_REGEX = pcre; then
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pcre_compile in -lpcre" >&5
 $as_echo_n "checking for pcre_compile in -lpcre... " >&6; }
-if test "${ac_cv_lib_pcre_pcre_compile+set}" = set; then :
+if ${ac_cv_lib_pcre_pcre_compile+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -5374,10 +5305,55 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcre_pcre_compile" >&5
 $as_echo "$ac_cv_lib_pcre_pcre_compile" >&6; }
-if test "x$ac_cv_lib_pcre_pcre_compile" = x""yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: using pcre" >&5
-$as_echo "using pcre" >&6; }; $as_echo "#define HAVE_PCRE 1" >>confdefs.h
- LIBS="$LIBS -lpcre" have_regex=yes
+if test "x$ac_cv_lib_pcre_pcre_compile" = xyes; then :
+  $as_echo "#define HAVE_PCRE 1" >>confdefs.h
+ LIBS="$LIBS -lpcre" have_regex=yes; supported_regex="$supported_regex pcre"
+fi
+
+fi
+fi
+
+if test $have_regex = no; then
+if test $WANT_REGEX = auto -o $WANT_REGEX = gnu; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for re_compile_pattern in -lc" >&5
+$as_echo_n "checking for re_compile_pattern in -lc... " >&6; }
+if ${ac_cv_lib_c_re_compile_pattern+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lc  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char re_compile_pattern ();
+int
+main ()
+{
+return re_compile_pattern ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_c_re_compile_pattern=yes
+else
+  ac_cv_lib_c_re_compile_pattern=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_re_compile_pattern" >&5
+$as_echo "$ac_cv_lib_c_re_compile_pattern" >&6; }
+if test "x$ac_cv_lib_c_re_compile_pattern" = xyes; then :
+  $as_echo "#define HAVE_GNU_REGEX 1" >>confdefs.h
+ have_regex=yes; supported_regex="$supported_regex gnu"
 fi
 
 fi
@@ -5386,10 +5362,9 @@ fi
 if test $have_regex = no; then
 if test $WANT_REGEX = auto -o $WANT_REGEX = regcmp; then
 ac_fn_c_check_func "$LINENO" "regcmp" "ac_cv_func_regcmp"
-if test "x$ac_cv_func_regcmp" = x""yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: using regcmp" >&5
-$as_echo "using regcmp" >&6; }; $as_echo "#define HAVE_REGCMP 1" >>confdefs.h
- have_regex=yes
+if test "x$ac_cv_func_regcmp" = xyes; then :
+  $as_echo "#define HAVE_REGCMP 1" >>confdefs.h
+ have_regex=yes; supported_regex="$supported_regex regcmp"
 fi
 
 fi
@@ -5397,6 +5372,8 @@ fi
 
 if test $have_regex = no; then
 if test $WANT_REGEX = auto -o $WANT_REGEX = regcomp; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for V8 regcomp" >&5
+$as_echo_n "checking for V8 regcomp... " >&6; }
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -5410,9 +5387,12 @@ regcomp("");
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: using V8 regcomp" >&5
-$as_echo "using V8 regcomp" >&6; }; $as_echo "#define HAVE_V8_REGCOMP 1" >>confdefs.h
- have_regex=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; $as_echo "#define HAVE_V8_REGCOMP 1" >>confdefs.h
+ have_regex=yes; supported_regex="$supported_regex regcomp"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
@@ -5423,29 +5403,41 @@ if test $have_regex = no && test -f ${srcdir}/regexp.c; then
 if test $WANT_REGEX = auto -o $WANT_REGEX = regcomp-local; then
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: using V8 regcomp -- local source" >&5
 $as_echo "using V8 regcomp -- local source" >&6; }; $as_echo "#define HAVE_V8_REGCOMP 1" >>confdefs.h
- $as_echo "#define HAVE_REGEXEC2 1" >>confdefs.h
+
+supported_regex="$supported_regex regcomp-local"
+$as_echo "#define HAVE_REGEXEC2 1" >>confdefs.h
  REGEX_O='regexp.$(O)'  have_regex=yes
 fi
 fi
 
 if test $have_regex = no; then
 if test $WANT_REGEX = auto -o $WANT_REGEX = re_comp; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: using re_comp" >&5
-$as_echo "using re_comp" >&6; }; ac_fn_c_check_func "$LINENO" "re_comp" "ac_cv_func_re_comp"
-if test "x$ac_cv_func_re_comp" = x""yes; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for re_comp" >&5
+$as_echo_n "checking for re_comp... " >&6; }
+ac_fn_c_check_func "$LINENO" "re_comp" "ac_cv_func_re_comp"
+if test "x$ac_cv_func_re_comp" = xyes; then :
   $as_echo "#define HAVE_RE_COMP 1" >>confdefs.h
- have_regex=yes
+ have_regex=yes; supported_regex="$supported_regex re_comp"
 fi
 
 fi
 fi
 
 if test $have_regex = no; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot find regular expression library" >&5
-$as_echo "cannot find regular expression library" >&6; }; $as_echo "#define NO_REGEX 1" >>confdefs.h
-
+if test $WANT_REGEX = auto -o $WANT_REGEX = none; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: using no regex" >&5
+$as_echo "using no regex" >&6; }
+else
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find regular expression library" >&5
+$as_echo "$as_me: WARNING: cannot find regular expression library" >&2;}
+fi
+$as_echo "#define NO_REGEX 1" >>confdefs.h
+ supported_regex="$supported_regex none"
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: regular expression library: $supported_regex" >&5
+$as_echo "regular expression library: $supported_regex" >&6; }
+
 
 # Check whether --with-editor was given.
 if test "${with_editor+set}" = set; then :
@@ -5527,10 +5519,21 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+       cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+         mv -f confcache "$cache_file"$$ &&
+         mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+         mv -f confcache "$cache_file" ;;
+       esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -5562,7 +5565,7 @@ LTLIBOBJS=$ac_ltlibobjs
 
 
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -5663,6 +5666,7 @@ fi
 IFS=" ""       $as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5970,7 +5974,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by less $as_me 1, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -6032,7 +6036,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 less config.status 1
-configured by $0, generated by GNU Autoconf 2.67,
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -6178,9 +6182,10 @@ fi
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -6188,12 +6193,13 @@ $debug ||
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -6215,7 +6221,7 @@ else
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -6243,7 +6249,7 @@ done
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -6291,7 +6297,7 @@ t delim
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = "\a"
 
@@ -6323,7 +6329,7 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
@@ -6357,7 +6363,7 @@ fi # test -n "$CONFIG_FILES"
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -6369,8 +6375,8 @@ _ACEOF
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
     as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
@@ -6490,7 +6496,7 @@ do
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
         # (if the path is not absolute).  The absolute path cannot be DOS-style,
         # because $ac_f cannot contain `:'.
@@ -6525,7 +6531,7 @@ $as_echo "$as_me: creating $ac_file" >&6;}
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
     esac
     ;;
@@ -6656,21 +6662,22 @@ s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
 s&@INSTALL@&$ac_INSTALL&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
@@ -6681,20 +6688,20 @@ which seems to be undefined.  Please make sure it is defined" >&2;}
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
+      mv "$ac_tmp/config.h" "$ac_file" \
        || as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
  ;;
index b497f1a..d780991 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 /*
@@ -64,6 +63,7 @@ cvt_text(odst, osrc, chpos, lenp, ops)
        int ops;
 {
        char *dst;
+       char *edst = odst;
        char *src;
        register char *src_end;
        LWCHAR ch;
@@ -102,23 +102,17 @@ cvt_text(odst, osrc, chpos, lenp, ops)
 #else
                        *dst++ = (char)ch;
 #endif /* !SMALL */
-                       /*
-                        * Record the original position of the char.
-                        * But if we've already recorded a position
-                        * for this char (due to a backspace), leave
-                        * it alone; if multiple source chars map to
-                        * one destination char, we want the position
-                        * of the first one.
-                        */
-                       if (chpos != NULL && chpos[dst_pos] < 0)
+                       /* Record the original position of the char. */
+                       if (chpos != NULL)
                                chpos[dst_pos] = src_pos;
                }
+               if (dst > edst)
+                       edst = dst;
        }
-       if ((ops & CVT_CRLF) && dst > odst && dst[-1] == '\r')
-               dst--;
-       *dst = '\0';
+       if ((ops & CVT_CRLF) && edst > odst && edst[-1] == '\r')
+               edst--;
+       *edst = '\0';
        if (lenp != NULL)
-               *lenp = dst - odst;
-       if (chpos != NULL)
-               chpos[dst - odst] = src - osrc;
+               *lenp = edst - odst;
+       /* FIXME: why was this here?  if (chpos != NULL) chpos[dst - odst] = src - osrc; */
 }
index 65d65bb..6d0312d 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -79,6 +78,7 @@ static unsigned char cmdtable[] =
        'w',0,                          A_B_WINDOW,
        ESC,' ',0,                      A_FF_SCREEN,
        'F',0,                          A_F_FOREVER,
+       ESC,'F',0,                      A_F_UNTIL_HILITE,
        'R',0,                          A_FREPAINT,
        'r',0,                          A_REPAINT,
        CONTROL('R'),0,                 A_REPAINT,
index 61edcf9..963fa44 100644 (file)
 /*
  * Sizes of various buffers.
  */
+#if SMALL /* old sizes for small memory machines */
 #define        CMDBUF_SIZE     512     /* Buffer for multichar commands */
 #define        UNGOT_SIZE      100     /* Max chars to unget() */
 #define        LINEBUF_SIZE    1024    /* Max size of line in input file */
 #define        TERMSBUF_SIZE   1024    /* Buffer to hold termcap strings */
 #define        TAGLINE_SIZE    512     /* Max size of line in tags file */
 #define        TABSTOP_MAX     32      /* Max number of custom tab stops */
+#else /* more reasonable sizes for modern machines */
+#define        CMDBUF_SIZE     2048    /* Buffer for multichar commands */
+#define        UNGOT_SIZE      200     /* Max chars to unget() */
+#define        LINEBUF_SIZE    1024    /* Initial max size of line in input file */
+#define        OUTBUF_SIZE     1024    /* Output buffer */
+#define        PROMPT_SIZE     2048    /* Max size of prompt string */
+#define        TERMBUF_SIZE    2048    /* Termcap buffer for tgetent */
+#define        TERMSBUF_SIZE   1024    /* Buffer to hold termcap strings */
+#define        TAGLINE_SIZE    1024    /* Max size of line in tags file */
+#define        TABSTOP_MAX     128     /* Max number of custom tab stops */
+#endif
 
 /* Settings automatically determined by configure.  */
 
 /* Define to 1 if you have the <inttypes.h> header file. */
 #define HAVE_INTTYPES_H 1
 
-/* Define to 1 if you have the `gen' library (-lgen). */
-/* #undef HAVE_LIBGEN */
-
-/* Define to 1 if you have the `intl' library (-lintl). */
-/* #undef HAVE_LIBINTL */
-
-/* Define to 1 if you have the `PW' library (-lPW). */
-/* #undef HAVE_LIBPW */
-
 /* Define to 1 if you have the <limits.h> header file. */
 #define HAVE_LIMITS_H 1
 
index a0d085b..bfd0ab7 100644 (file)
  */
 #define        SECURE          SECURE_COMPILE
 
-/*
- * SMALL is 1 if you wish to disable a bunch of features in order to
- * build a smaller less binary.
- */
-#define        SMALL           0
-
 /*
  * SHELL_ESCAPE is 1 if you wish to allow shell escapes.
  * (This is possible only if your system supplies the system() function.)
  */
-#define        SHELL_ESCAPE    (!SECURE && !SMALL)
+#define        SHELL_ESCAPE    (!SECURE)
 
 /*
  * EXAMINE is 1 if you wish to allow examining files by name from within less.
  */
-#define        EXAMINE         (!SECURE && !SMALL)
+#define        EXAMINE         (!SECURE)
 
 /*
  * TAB_COMPLETE_FILENAME is 1 if you wish to allow the TAB key
  * to complete filenames at prompts.
  */
-#define        TAB_COMPLETE_FILENAME   (!SECURE && !SMALL)
+#define        TAB_COMPLETE_FILENAME   (!SECURE)
 
 /*
  * CMD_HISTORY is 1 if you wish to allow keys to cycle through
  * previous commands at prompts.
  */
-#define        CMD_HISTORY     (!SMALL)
+#define        CMD_HISTORY     1
 
 /*
  * HILITE_SEARCH is 1 if you wish to have search targets to be 
  * (This is possible only if your system supplies the system() function.)
  * EDIT_PGM is the name of the (default) editor to be invoked.
  */
-#define        EDITOR          (!SECURE && !SMALL)
+#define        EDITOR          (!SECURE)
 
 /*
  * TAGS is 1 if you wish to support tag files.
  */
-#define        TAGS            (!SECURE && !SMALL)
+#define        TAGS            (!SECURE)
 
 /*
  * USERFILE is 1 if you wish to allow a .less file to specify 
  * user-defined key bindings.
  */
-#define        USERFILE        (!SECURE && !SMALL)
+#define        USERFILE        (!SECURE)
 
 /*
  * GLOB is 1 if you wish to have shell metacharacters expanded in filenames.
  * This will generally work if your system provides the "popen" function
  * and the "echo" shell command.
  */
-#define        GLOB            (!SECURE && !SMALL)
+#define        GLOB            (!SECURE)
 
 /*
  * PIPEC is 1 if you wish to have the "|" command
  * which allows the user to pipe data into a shell command.
  */
-#define        PIPEC           (!SECURE && !SMALL)
+#define        PIPEC           (!SECURE)
 
 /*
  * LOGFILE is 1 if you wish to allow the -l option (to create log files).
  */
-#define        LOGFILE         (!SECURE && !SMALL)
+#define        LOGFILE         (!SECURE)
 
 /*
  * GNU_OPTIONS is 1 if you wish to support the GNU-style command
  * line options --help and --version.
  */
-#define        GNU_OPTIONS     (!SMALL)
+#define        GNU_OPTIONS     1
 
 /*
  * ONLY_RETURN is 1 if you want RETURN to be the only input which
 /*
  * Sizes of various buffers.
  */
+#if 0 /* old sizes for small memory machines */
 #define        CMDBUF_SIZE     512     /* Buffer for multichar commands */
 #define        UNGOT_SIZE      100     /* Max chars to unget() */
 #define        LINEBUF_SIZE    1024    /* Max size of line in input file */
 #define        TERMSBUF_SIZE   1024    /* Buffer to hold termcap strings */
 #define        TAGLINE_SIZE    512     /* Max size of line in tags file */
 #define        TABSTOP_MAX     32      /* Max number of custom tab stops */
+#else /* more reasonable sizes for modern machines */
+#define        CMDBUF_SIZE     2048    /* Buffer for multichar commands */
+#define        UNGOT_SIZE      200     /* Max chars to unget() */
+#define        LINEBUF_SIZE    1024    /* Initial max size of line in input file */
+#define        OUTBUF_SIZE     1024    /* Output buffer */
+#define        PROMPT_SIZE     2048    /* Max size of prompt string */
+#define        TERMBUF_SIZE    2048    /* Termcap buffer for tgetent */
+#define        TERMSBUF_SIZE   1024    /* Buffer to hold termcap strings */
+#define        TAGLINE_SIZE    1024    /* Max size of line in tags file */
+#define        TABSTOP_MAX     128     /* Max number of custom tab stops */
+#endif
 
 /* Settings automatically determined by configure.  */
 
 /* Define to 1 if you have the `fsync' function. */
 #undef HAVE_FSYNC
 
+/* GNU regex library */
+#undef HAVE_GNU_REGEX
+
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
-/* Define to 1 if you have the `gen' library (-lgen). */
-#undef HAVE_LIBGEN
-
-/* Define to 1 if you have the `intl' library (-lintl). */
-#undef HAVE_LIBINTL
-
-/* Define to 1 if you have the `PW' library (-lPW). */
-#undef HAVE_LIBPW
-
 /* Define to 1 if you have the <limits.h> header file. */
 #undef HAVE_LIMITS_H
 
index 7331315..e2b6eea 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -317,6 +316,10 @@ edit_ifile(ifile)
                 */
                __djgpp_set_ctrl_c(1);
 #endif
+       } else if (strcmp(open_filename, FAKE_EMPTYFILE) == 0)
+       {
+               f = -1;
+               chflags |= CH_NODATA;
        } else if ((parg.p_string = bad_file(open_filename)) != NULL)
        {
                /*
index 4a8c136..75297f9 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -619,6 +618,7 @@ shellcmd(cmd)
 
 #endif /* HAVE_POPEN */
 
+
 #if !SMALL
 /*
  * Expand a filename, doing any system-specific metacharacter substitutions.
@@ -812,6 +812,27 @@ lglob(filename)
 }
 #endif /* !SMALL */
 
+/*
+ * Return number of %s escapes in a string.
+ * Return a large number if there are any other % escapes besides %s.
+ */
+       static int
+num_pct_s(lessopen)
+       char *lessopen;
+{
+       int num;
+
+       for (num = 0;; num++)
+       {
+               lessopen = strchr(lessopen, '%');
+               if (lessopen == NULL)
+                       break;
+               if (*++lessopen != 's')
+                       return (999);
+       }
+       return (num);
+}
+
 /*
  * See if we should open a "replacement file" 
  * instead of the file we're about to open.
@@ -826,10 +847,9 @@ open_altfile(filename, pf, pfd)
        return (NULL);
 #else
        char *lessopen;
-       char *cmd, *cp;
+       char *cmd;
+       size_t len;
        FILE *fd;
-       size_t i, len;
-       int found;
 #if HAVE_FILENO
        int returnfd = 0;
 #endif
@@ -839,7 +859,7 @@ open_altfile(filename, pf, pfd)
        ch_ungetchar(-1);
        if ((lessopen = lgetenv("LESSOPEN")) == NULL)
                return (NULL);
-       if (*lessopen == '|')
+       while (*lessopen == '|')
        {
                /*
                 * If LESSOPEN starts with a |, it indicates 
@@ -850,7 +870,7 @@ open_altfile(filename, pf, pfd)
                return (NULL);
 #else
                lessopen++;
-               returnfd = 1;
+               returnfd++;
 #endif
        }
        if (*lessopen == '-') {
@@ -862,19 +882,15 @@ open_altfile(filename, pf, pfd)
                if (strcmp(filename, "-") == 0)
                        return (NULL);
        }
+       if (num_pct_s(lessopen) > 1)
+       {
+               error("Invalid LESSOPEN variable", NULL_PARG);
+               return (NULL);
+       }
 
-       /* strlen(filename) is guaranteed to be > 0 */
-       len = strlen(lessopen) + strlen(filename);
+       len = strlen(lessopen) + strlen(filename) + 2;
        cmd = (char *) ecalloc(len, sizeof(char));
-       for (cp = cmd, i = 0, found = 0; i < strlen(lessopen); i++) {
-               if (!found && lessopen[i] == '%' && lessopen[i + 1] == 's') {
-                       found = 1;
-                       strlcat(cmd, filename, len);
-                       cp += strlen(filename);
-                       i++;
-               } else
-                       *cp++ = lessopen[i];
-       }
+       SNPRINTF1(cmd, len, lessopen, filename);
        fd = shellcmd(cmd);
        free(cmd);
        if (fd == NULL)
@@ -899,9 +915,18 @@ open_altfile(filename, pf, pfd)
                if (read(f, &c, 1) != 1)
                {
                        /*
-                        * Pipe is empty.  This means there is no alt file.
+                        * Pipe is empty.
+                        * If more than 1 pipe char was specified,
+                        * the exit status tells whether the file itself 
+                        * is empty, or if there is no alt file.
+                        * If only one pipe char, just assume no alt file.
                         */
-                       pclose(fd);
+                       int status = pclose(fd);
+                       if (returnfd > 1 && status == 0) {
+                               *pfd = NULL;
+                               *pf = -1;
+                               return (save(FAKE_EMPTYFILE));
+                       }
                        return (NULL);
                }
                ch_ungetchar(c);
@@ -933,9 +958,8 @@ close_altfile(altfilename, filename, pipefd)
 #if HAVE_POPEN
        char *lessclose;
        FILE *fd;
-       char *cmd, *cp;
-       size_t i, len;
-       int found;
+       char *cmd;
+       size_t len;
        
        if (secure)
                return;
@@ -952,22 +976,14 @@ close_altfile(altfilename, filename, pipefd)
        }
        if ((lessclose = lgetenv("LESSCLOSE")) == NULL)
                return;
-       /* strlen(filename) is guaranteed to be > 0 */
-       len = strlen(lessclose) + strlen(filename) + strlen(altfilename);
-       cmd = (char *) ecalloc(len, sizeof(char));
-       for (cp = cmd, i = 0, found = 0; i < strlen(lessclose); i++) {
-               if (found < 2 && lessclose[i] == '%' && lessclose[i + 1] == 's') {
-                       if (++found == 1) {
-                               strlcat(cmd, filename, len);
-                               cp += strlen(filename);
-                       } else {
-                               strlcat(cmd, altfilename, len);
-                               cp += strlen(altfilename);
-                       }
-                       i++;
-               } else
-                       *cp++ = lessclose[i];
+       if (num_pct_s(lessclose) > 2) 
+       {
+               error("Invalid LESSCLOSE variable");
+               return;
        }
+       len = strlen(lessclose) + strlen(filename) + strlen(altfilename) + 2;
+       cmd = (char *) ecalloc(len, sizeof(char));
+       SNPRINTF2(cmd, len, lessclose, filename, altfilename);
        fd = shellcmd(cmd);
        free(cmd);
        if (fd != NULL)
index ac32a0b..9e2d1a1 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index 9a77b4d..84b3bac 100644 (file)
@@ -46,6 +46,7 @@
        public void ch_setbufspace ();
        public void ch_flush ();
        public int seekable ();
+       public void ch_set_eof ();
        public void ch_init ();
        public void ch_close ();
        public int ch_getflags ();
index 85b0a4a..46b8ff1 100644 (file)
@@ -6,6 +6,7 @@ constant char helpdata[] = {
 '\n',
 ' ',' ',' ',' ',' ',' ','C','o','m','m','a','n','d','s',' ','m','a','r','k','e','d',' ','w','i','t','h',' ','*',' ','m','a','y',' ','b','e',' ','p','r','e','c','e','d','e','d',' ','b','y',' ','a',' ','n','u','m','b','e','r',',',' ','_','\b','N','.','\n',
 ' ',' ',' ',' ',' ',' ','N','o','t','e','s',' ','i','n',' ','p','a','r','e','n','t','h','e','s','e','s',' ','i','n','d','i','c','a','t','e',' ','t','h','e',' ','b','e','h','a','v','i','o','r',' ','i','f',' ','_','\b','N',' ','i','s',' ','g','i','v','e','n','.','\n',
+' ',' ',' ',' ',' ',' ','A',' ','k','e','y',' ','p','r','e','c','e','d','e','d',' ','b','y',' ','a',' ','c','a','r','e','t',' ','i','n','d','i','c','a','t','e','s',' ','t','h','e',' ','C','t','r','l',' ','k','e','y',';',' ','t','h','u','s',' ','^','K',' ','i','s',' ','c','t','r','l','-','K','.','\n',
 '\n',
 ' ',' ','h',' ',' ','H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','t','h','i','s',' ','h','e','l','p','.','\n',
 ' ',' ','q',' ',' ',':','q',' ',' ','Q',' ',' ',':','Q',' ',' ','Z','Z',' ',' ',' ',' ',' ','E','x','i','t','.','\n',
@@ -43,7 +44,7 @@ constant char helpdata[] = {
 ' ',' ','E','S','C','-','u',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','U','n','d','o',' ','(','t','o','g','g','l','e',')',' ','s','e','a','r','c','h',' ','h','i','g','h','l','i','g','h','t','i','n','g','.','\n',
 ' ',' ','&','_','\b','p','_','\b','a','_','\b','t','_','\b','t','_','\b','e','_','\b','r','_','\b','n',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','D','i','s','p','l','a','y',' ','o','n','l','y',' ','m','a','t','c','h','i','n','g',' ','l','i','n','e','s','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','S','e','a','r','c','h',' ','p','a','t','t','e','r','n','s',' ','m','a','y',' ','b','e',' ','m','o','d','i','f','i','e','d',' ','b','y',' ','o','n','e',' ','o','r',' ','m','o','r','e',' ','o','f',':','\n',
+' ',' ',' ',' ',' ',' ',' ',' ','A',' ','s','e','a','r','c','h',' ','p','a','t','t','e','r','n',' ','m','a','y',' ','b','e',' ','p','r','e','c','e','d','e','d',' ','b','y',' ','o','n','e',' ','o','r',' ','m','o','r','e',' ','o','f',':','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ','^','N',' ','o','r',' ','!',' ',' ','S','e','a','r','c','h',' ','f','o','r',' ','N','O','N','-','m','a','t','c','h','i','n','g',' ','l','i','n','e','s','.','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ','^','E',' ','o','r',' ','*',' ',' ','S','e','a','r','c','h',' ','m','u','l','t','i','p','l','e',' ','f','i','l','e','s',' ','(','p','a','s','s',' ','t','h','r','u',' ','E','N','D',' ','O','F',' ','F','I','L','E',')','.','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ','^','F',' ','o','r',' ','@',' ',' ','S','t','a','r','t',' ','s','e','a','r','c','h',' ','a','t',' ','F','I','R','S','T',' ','f','i','l','e',' ','(','f','o','r',' ','/',')',' ','o','r',' ','l','a','s','t',' ','f','i','l','e',' ','(','f','o','r',' ','?',')','.','\n',
@@ -109,14 +110,14 @@ constant char helpdata[] = {
 ' ',' ',' ',' ',' ',' ',' ',' ','M','o','s','t',' ','o','p','t','i','o','n','s',' ','m','a','y',' ','b','e',' ','c','h','a','n','g','e','d',' ','e','i','t','h','e','r',' ','o','n',' ','t','h','e',' ','c','o','m','m','a','n','d',' ','l','i','n','e',',','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ','o','r',' ','f','r','o','m',' ','w','i','t','h','i','n',' ','l','e','s','s',' ','b','y',' ','u','s','i','n','g',' ','t','h','e',' ','-',' ','o','r',' ','-','-',' ','c','o','m','m','a','n','d','.','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ','O','p','t','i','o','n','s',' ','m','a','y',' ','b','e',' ','g','i','v','e','n',' ','i','n',' ','o','n','e',' ','o','f',' ','t','w','o',' ','f','o','r','m','s',':',' ','e','i','t','h','e','r',' ','a',' ','s','i','n','g','l','e','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','c','h','a','r','a','c','t','e','r',' ','p','r','e','c','e','d','e','d',' ','b','y',' ','a',' ','-',',',' ','o','r',' ','a',' ','n','a','m','e',' ','p','r','e','c','e','e','d','e','d',' ','b','y',' ','-','-','.','\n',
+' ',' ',' ',' ',' ',' ',' ',' ','c','h','a','r','a','c','t','e','r',' ','p','r','e','c','e','d','e','d',' ','b','y',' ','a',' ','-',',',' ','o','r',' ','a',' ','n','a','m','e',' ','p','r','e','c','e','d','e','d',' ','b','y',' ','-','-','.','\n',
 '\n',
 ' ',' ','-','?',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','h','e','l','p','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','h','e','l','p',' ','(','f','r','o','m',' ','c','o','m','m','a','n','d',' ','l','i','n','e',')','.','\n',
 ' ',' ','-','a',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','s','e','a','r','c','h','-','s','k','i','p','-','s','c','r','e','e','n','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','F','o','r','w','a','r','d',' ','s','e','a','r','c','h',' ','s','k','i','p','s',' ','c','u','r','r','e','n','t',' ','s','c','r','e','e','n','.','\n',
+' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','e','a','r','c','h',' ','s','k','i','p','s',' ','c','u','r','r','e','n','t',' ','s','c','r','e','e','n','.','\n',
 ' ',' ','-','A',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','S','E','A','R','C','H','-','S','K','I','P','-','S','C','R','E','E','N','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','F','o','r','w','a','r','d',' ','s','e','a','r','c','h',' ','a','l','w','a','y','s',' ','s','k','i','p','s',' ','t','a','r','g','e','t',' ','l','i','n','e','.','\n',
+' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','e','a','r','c','h',' ','s','t','a','r','t','s',' ','j','u','s','t',' ','a','f','t','e','r',' ','t','a','r','g','e','t',' ','l','i','n','e','.','\n',
 ' ',' ','-','b',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','b','u','f','f','e','r','s','=','[','_','\b','N',']','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','N','u','m','b','e','r',' ','o','f',' ','b','u','f','f','e','r','s','.','\n',
 ' ',' ','-','B',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','a','u','t','o','-','b','u','f','f','e','r','s','\n',
@@ -172,7 +173,7 @@ constant char helpdata[] = {
 ' ',' ','-','s',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','s','q','u','e','e','z','e','-','b','l','a','n','k','-','l','i','n','e','s','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','q','u','e','e','z','e',' ','m','u','l','t','i','p','l','e',' ','b','l','a','n','k',' ','l','i','n','e','s','.','\n',
 ' ',' ','-','S',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','c','h','o','p','-','l','o','n','g','-','l','i','n','e','s','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','h','o','p',' ','l','o','n','g',' ','l','i','n','e','s','.','\n',
+' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','h','o','p',' ','(','t','r','u','n','c','a','t','e',')',' ','l','o','n','g',' ','l','i','n','e','s',' ','r','a','t','h','e','r',' ','t','h','a','n',' ','w','r','a','p','p','i','n','g','.','\n',
 ' ',' ','-','t',' ','[','_','\b','t','_','\b','a','_','\b','g',']',' ',' ','.','.',' ',' ','-','-','t','a','g','=','[','_','\b','t','_','\b','a','_','\b','g',']','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','F','i','n','d',' ','a',' ','t','a','g','.','\n',
 ' ',' ','-','T',' ','[','_','\b','t','_','\b','a','_','\b','g','_','\b','s','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ','-','-','t','a','g','-','f','i','l','e','=','[','_','\b','t','_','\b','a','_','\b','g','_','\b','s','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n',
@@ -189,8 +190,6 @@ constant char helpdata[] = {
 ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','e','t',' ','t','a','b',' ','s','t','o','p','s','.','\n',
 ' ',' ','-','X',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','n','o','-','i','n','i','t','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','u','s','e',' ','t','e','r','m','c','a','p',' ','i','n','i','t','/','d','e','i','n','i','t',' ','s','t','r','i','n','g','s','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','-','-','n','o','-','k','e','y','p','a','d','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','u','s','e',' ','t','e','r','m','c','a','p',' ','k','e','y','p','a','d',' ','i','n','i','t','/','d','e','i','n','i','t',' ','s','t','r','i','n','g','s','.','\n',
 ' ',' ','-','y',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','m','a','x','-','f','o','r','w','-','s','c','r','o','l','l','=','[','_','\b','N',']','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','F','o','r','w','a','r','d',' ','s','c','r','o','l','l',' ','l','i','m','i','t','.','\n',
 ' ',' ','-','z',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','w','i','n','d','o','w','=','[','_','\b','N',']','\n',
@@ -202,7 +201,7 @@ constant char helpdata[] = {
 ' ',' ','-','#',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','s','h','i','f','t','=','[','_','\b','N',']','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','H','o','r','i','z','o','n','t','a','l',' ','s','c','r','o','l','l',' ','a','m','o','u','n','t',' ','(','0',' ','=',' ','o','n','e',' ','h','a','l','f',' ','s','c','r','e','e','n',' ','w','i','d','t','h',')','\n',
 ' ',' ',' ',' ',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','n','o','-','k','e','y','p','a','d','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','s','e','n','d',' ','k','e','y','p','a','d',' ','i','n','i','t','/','d','e','i','n','i','t',' ','s','e','q','u','e','n','c','e','.','\n',
+' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','s','e','n','d',' ','t','e','r','m','c','a','p',' ','k','e','y','p','a','d',' ','i','n','i','t','/','d','e','i','n','i','t',' ','s','t','r','i','n','g','s','.','\n',
 ' ',' ',' ',' ',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','f','o','l','l','o','w','-','n','a','m','e','\n',
 ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','T','h','e',' ','F',' ','c','o','m','m','a','n','d',' ','c','h','a','n','g','e','s',' ','f','i','l','e','s',' ','i','f',' ','t','h','e',' ','i','n','p','u','t',' ','f','i','l','e',' ','i','s',' ','r','e','n','a','m','e','d','.','\n',
 '\n',
@@ -216,20 +215,20 @@ constant char helpdata[] = {
 '\n',
 ' ','R','i','g','h','t','A','r','r','o','w',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','l',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','r','i','g','h','t',' ','o','n','e',' ','c','h','a','r','a','c','t','e','r','.','\n',
 ' ','L','e','f','t','A','r','r','o','w',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','h',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','l','e','f','t',' ','o','n','e',' ','c','h','a','r','a','c','t','e','r','.','\n',
-' ','C','N','T','L','-','R','i','g','h','t','A','r','r','o','w',' ',' ','E','S','C','-','R','i','g','h','t','A','r','r','o','w',' ',' ','E','S','C','-','w',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','r','i','g','h','t',' ','o','n','e',' ','w','o','r','d','.','\n',
-' ','C','N','T','L','-','L','e','f','t','A','r','r','o','w',' ',' ',' ','E','S','C','-','L','e','f','t','A','r','r','o','w',' ',' ',' ','E','S','C','-','b',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','l','e','f','t',' ','o','n','e',' ','w','o','r','d','.','\n',
+' ','c','t','r','l','-','R','i','g','h','t','A','r','r','o','w',' ',' ','E','S','C','-','R','i','g','h','t','A','r','r','o','w',' ',' ','E','S','C','-','w',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','r','i','g','h','t',' ','o','n','e',' ','w','o','r','d','.','\n',
+' ','c','t','r','l','-','L','e','f','t','A','r','r','o','w',' ',' ',' ','E','S','C','-','L','e','f','t','A','r','r','o','w',' ',' ',' ','E','S','C','-','b',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','l','e','f','t',' ','o','n','e',' ','w','o','r','d','.','\n',
 ' ','H','O','M','E',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','0',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','t','o',' ','s','t','a','r','t',' ','o','f',' ','l','i','n','e','.','\n',
 ' ','E','N','D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','$',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','t','o',' ','e','n','d',' ','o','f',' ','l','i','n','e','.','\n',
 ' ','B','A','C','K','S','P','A','C','E',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','c','h','a','r',' ','t','o',' ','l','e','f','t',' ','o','f',' ','c','u','r','s','o','r','.','\n',
 ' ','D','E','L','E','T','E',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','x',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','c','h','a','r',' ','u','n','d','e','r',' ','c','u','r','s','o','r','.','\n',
-' ','C','N','T','L','-','B','A','C','K','S','P','A','C','E',' ',' ',' ','E','S','C','-','B','A','C','K','S','P','A','C','E',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','w','o','r','d',' ','t','o',' ','l','e','f','t',' ','o','f',' ','c','u','r','s','o','r','.','\n',
-' ','C','N','T','L','-','D','E','L','E','T','E',' ',' ',' ',' ',' ',' ','E','S','C','-','D','E','L','E','T','E',' ',' ',' ',' ',' ',' ','E','S','C','-','X',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','w','o','r','d',' ','u','n','d','e','r',' ','c','u','r','s','o','r','.','\n',
-' ','C','N','T','L','-','U',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C',' ','(','M','S','-','D','O','S',' ','o','n','l','y',')',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','e','n','t','i','r','e',' ','l','i','n','e','.','\n',
+' ','c','t','r','l','-','B','A','C','K','S','P','A','C','E',' ',' ',' ','E','S','C','-','B','A','C','K','S','P','A','C','E',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','w','o','r','d',' ','t','o',' ','l','e','f','t',' ','o','f',' ','c','u','r','s','o','r','.','\n',
+' ','c','t','r','l','-','D','E','L','E','T','E',' ',' ',' ',' ',' ',' ','E','S','C','-','D','E','L','E','T','E',' ',' ',' ',' ',' ',' ','E','S','C','-','X',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','w','o','r','d',' ','u','n','d','e','r',' ','c','u','r','s','o','r','.','\n',
+' ','c','t','r','l','-','U',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C',' ','(','M','S','-','D','O','S',' ','o','n','l','y',')',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','e','n','t','i','r','e',' ','l','i','n','e','.','\n',
 ' ','U','p','A','r','r','o','w',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','k',' ',' ',' ',' ',' ','R','e','t','r','i','e','v','e',' ','p','r','e','v','i','o','u','s',' ','c','o','m','m','a','n','d',' ','l','i','n','e','.','\n',
 ' ','D','o','w','n','A','r','r','o','w',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','j',' ',' ',' ',' ',' ','R','e','t','r','i','e','v','e',' ','n','e','x','t',' ','c','o','m','m','a','n','d',' ','l','i','n','e','.','\n',
 ' ','T','A','B',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','o','m','p','l','e','t','e',' ','f','i','l','e','n','a','m','e',' ','&',' ','c','y','c','l','e','.','\n',
 ' ','S','H','I','F','T','-','T','A','B',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','T','A','B',' ',' ',' ','C','o','m','p','l','e','t','e',' ','f','i','l','e','n','a','m','e',' ','&',' ','r','e','v','e','r','s','e',' ','c','y','c','l','e','.','\n',
-' ','C','N','T','L','-','L',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','o','m','p','l','e','t','e',' ','f','i','l','e','n','a','m','e',',',' ','l','i','s','t',' ','a','l','l','.','\n',
+' ','c','t','r','l','-','L',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','o','m','p','l','e','t','e',' ','f','i','l','e','n','a','m','e',',',' ','l','i','s','t',' ','a','l','l','.','\n',
 '\n',
 '\n',
  0 };
index 1c748d5..918e052 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index 1a5b1f3..039518d 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -416,7 +415,7 @@ get_back_line:
                goto get_back_line;
        }
 
-       if (status_col && is_hilited(base_pos, ch_tell()-1, 1, NULL))
+       if (status_col && curr_pos > 0 && is_hilited(base_pos, curr_pos-1, 1, NULL))
                set_status_col('*');
 #endif
 
index d7ec770..075aa64 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index 321b6a4..8012613 100644 (file)
@@ -1,6 +1,6 @@
-.\"    $OpenBSD: less.1,v 1.31 2014/04/07 17:33:57 millert Exp $
+.\"    $OpenBSD: less.1,v 1.32 2014/04/25 13:38:21 shadchin Exp $
 .\"
-.\" Copyright (C) 1984-2011  Mark Nudelman
+.\" Copyright (C) 1984-2012  Mark Nudelman
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\" modification, are permitted provided that the following conditions
@@ -23,7 +23,7 @@
 .\" OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
 .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd $Mdocdate: April 7 2014 $
+.Dd $Mdocdate: April 25 2014 $
 .Dt LESS 1
 .Os
 .Sh NAME
@@ -155,6 +155,10 @@ Normally this command would be used when already at the end of the file.
 It is a way to monitor the tail of a file which is growing
 while it is being viewed.
 (The behavior is similar to the "tail -f" command.)
+.It Ic ESC-F
+Like F, but as soon as a line is found which matches
+the last search pattern, the terminal bell is rung 
+and forward scrolling stops.
 .It Ic g | < | ESC-<
 Go to line N in the file, default 1 (beginning of file).
 (Warning: this may be slow if N is large.)
@@ -514,12 +518,19 @@ If an option appears in the
 variable, it can be reset to its default value on the command line by
 beginning the command line option with "\-+".
 .Pp
-For options like -P which take a following string,
-a dollar sign ($) must be used to signal the end of the string.
+Some options like -k require a string to follow the option letter.
+The string for that option is considered to end when a dollar sign ($) is found.
 For example, to separate a prompt value from any other options
 with dollar sign between them:
 .Pp
 .Dl LESS="-Ps--More--$-C -e"
+.Pp
+If the --use-backslash option appears earlier in the options, then
+a dollar sign or backslash may be included literally in an option string
+by preceding it with a backslash.
+If the --use-backslash option is not in effect, then backslashes are
+not treated specially, and there is no way to include a dollar sign 
+in the option string.
 .Bl -tag -width XXXX
 .It Fl \&? | -help
 This option displays a summary of the commands accepted by
@@ -855,10 +866,11 @@ each type of control character).
 Thus, various display problems may result,
 such as long lines being split in the wrong place.
 .It Fl S | -chop-long-lines
-Causes lines longer than the screen width to be chopped rather than folded.
+Causes lines longer than the screen width to be
+chopped (truncated) rather than wrapped.
 That is, the portion of a long line that does not fit in
 the screen width is not shown.
-The default is to fold long lines; that is, display the remainder
+The default is to wrap long lines; that is, display the remainder
 on the next line.
 .It Fl s | -squeeze-blank-lines
 Causes consecutive blank lines to be squeezed into a single blank line.
@@ -987,6 +999,11 @@ Disables sending the keypad initialization and deinitialization strings
 to the terminal.
 This is sometimes useful if the keypad strings make the numeric
 keypad behave in an undesirable manner.
+.It Fl -use-backslash
+This option changes the interpretations of options which follow this one.
+After the --use-backslash option, any backslash in an option string is
+removed and the following character is taken literally.
+This allows a dollar sign to be included in option strings.
 .It Xo
 .Ar -cc |
 .Fl -quotes Ns = Ns Ar cc
@@ -1079,8 +1096,12 @@ Delete the word to the left of the cursor.
 Delete the word under the cursor.
 .It UPARROW [ ESC-k ]
 Retrieve the previous command line.
+If you first enter some text and then press UPARROW,
+it will retrieve the previous command which begins with that text.
 .It DOWNARROW [ ESC-j ]
 Retrieve the next command line.
+If you first enter some text and then press DOWNARROW,
+it will retrieve the next command which begins with that text.
 .It TAB
 Complete the partial filename to the left of the cursor.
 If it matches more than one filename, the first match
@@ -1271,12 +1292,33 @@ lesspipe.sh:
 #! /bin/sh
 case "$1" in
 *.Z)   uncompress -c $1  2>/dev/null
+*)     exit 1
        ;;
 esac
+exit $?
 .Ed
 .Pp
 To use this script, put it where it can be executed and set
 LESSOPEN="|lesspipe.sh %s".
+.Pp
+Note that a preprocessor cannot output an empty file, since that
+is interpreted as meaning there is no replacement, and
+the original file is used.
+To avoid this, if
+.Ev LESSOPEN
+starts with two vertical bars,
+the exit status of the script becomes meaningful.
+If the exit status is zero, the output is considered to be
+replacement text, even if it empty.
+If the exit status is nonzero, any output is ignored and the
+original file is used.
+For compatibility with previous versions of
+.Nm less ,
+if
+.Ev LESSOPEN
+starts with only one vertical bar, the exit status
+of the preprocessor is ignored.
+.Pp
 When an input pipe is used, a LESSCLOSE postprocessor can be used,
 but it is usually not necessary since there is no replacement file to clean up.
 In this case, the replacement file name passed to the LESSCLOSE
@@ -1294,7 +1336,8 @@ the preprocessor command.
 If standard input is being viewed, the input preprocessor is passed
 a file name consisting of a single dash.
 Similarly, if the first two characters of LESSOPEN are vertical bar and dash
-(|-), the input pipe is used on standard input as well as other files.
+(|-) or two vertical bars and a dash (||-),
+the input pipe is used on standard input as well as other files.
 Again, in this case the dash is not considered to be part of
 the input pipe command.
 .Sh NATIONAL CHARACTER SETS
@@ -1809,6 +1852,12 @@ Takes precedence over the number of lines specified by the TERM variable.
 (But if you have a windowing system which supports TIOCGWINSZ or WIOCGETD,
 the window system's idea of the screen size takes precedence over the
 LINES and COLUMNS environment variables.)
+.It Ev MORE
+Options which are passed to
+.Nm
+automatically when running in 
+.Nm more
+compatible mode.
 .\" .It Ev PATH
 .\" User's search path (used to find a lesskey file
 .\" on MS-DOS and OS/2 systems).
@@ -1835,9 +1884,9 @@ The flags
 .Op Fl aBbCdEFfGghIJjkLMmNOoPQqRrSTUVWwXxyz~#
 are extensions to that specification.
 .Sh AUTHORS
-.An Mark Nudelman Aq Mt markn@greenwoodsoftware.com
+.An Mark Nudelman
 .Pp
-Send bug reports or comments to the above address or to
+Send bug reports or comments to
 .Aq Mt bug\-less@gnu.org .
 .Pp
 For more information, see the less homepage at
index fe85105..c7471e1 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 #define NEWBOT 1
@@ -486,9 +485,14 @@ struct textlist
 #define        CH_KEEPOPEN     002
 #define        CH_POPENED      004
 #define        CH_HELPFILE     010
+#define        CH_NODATA       020     /* Special case for zero length files */
+
 
 #define        ch_zero()       ((POSITION)0)
 
+#define        FAKE_HELPFILE   "@/\\less/\\help/\\file/\\@"
+#define FAKE_EMPTYFILE "@/\\less/\\empty/\\file/\\@"
+
 /* Flags for cvt_text */
 #define        CVT_TO_LC       01      /* Convert upper-case to lower-case */
 #define        CVT_BS          02      /* Do backspace processing */
index 85ace92..2bc53df 100644 (file)
@@ -3,6 +3,7 @@
 
       Commands marked with * may be preceded by a number, _\bN.
       Notes in parentheses indicate the behavior if _\bN is given.
+      A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.
 
   h  H                 Display this help.
   q  :q  Q  :Q  ZZ     Exit.
@@ -40,7 +41,7 @@
   ESC-u                Undo (toggle) search highlighting.
   &_\bp_\ba_\bt_\bt_\be_\br_\bn          *  Display only matching lines
         ---------------------------------------------------
-        Search patterns may be modified by one or more of:
+        A search pattern may be preceded by one or more of:
         ^N or !  Search for NON-matching lines.
         ^E or *  Search multiple files (pass thru END OF FILE).
         ^F or @  Start search at FIRST file (for /) or last file (for ?).
   -?  ........  --help
                   Display help (from command line).
   -a  ........  --search-skip-screen
-                  Forward search skips current screen.
+                  Search skips current screen.
   -A  ........  --SEARCH-SKIP-SCREEN
-                  Forward search always skips target line.
+                  Search starts just after target line.
   -b [_\bN]  ....  --buffers=[_\bN]
                   Number of buffers.
   -B  ........  --auto-buffers
   -s  ........  --squeeze-blank-lines
                   Squeeze multiple blank lines.
   -S  ........  --chop-long-lines
-                  Chop long lines.
+                  Chop (truncate) long lines rather than wrapping.
   -t [_\bt_\ba_\bg]  ..  --tag=[_\bt_\ba_\bg]
                   Find a tag.
   -T [_\bt_\ba_\bg_\bs_\bf_\bi_\bl_\be] --tag-file=[_\bt_\ba_\bg_\bs_\bf_\bi_\bl_\be]
                   Set tab stops.
   -X  ........  --no-init
                   Don't use termcap init/deinit strings.
-                --no-keypad
-                  Don't use termcap keypad init/deinit strings.
   -y [_\bN]  ....  --max-forw-scroll=[_\bN]
                   Forward scroll limit.
   -z [_\bN]  ....  --window=[_\bN]
   -# [_\bN]  ....  --shift=[_\bN]
                   Horizontal scroll amount (0 = one half screen width)
       ........  --no-keypad
-                  Don't send keypad init/deinit sequence.
+                  Don't send termcap keypad init/deinit strings.
       ........  --follow-name
                   The F command changes files if the input file is renamed.
 
 
  RightArrow                       ESC-l     Move cursor right one character.
  LeftArrow                        ESC-h     Move cursor left one character.
CNTL-RightArrow  ESC-RightArrow  ESC-w     Move cursor right one word.
CNTL-LeftArrow   ESC-LeftArrow   ESC-b     Move cursor left one word.
ctrl-RightArrow  ESC-RightArrow  ESC-w     Move cursor right one word.
ctrl-LeftArrow   ESC-LeftArrow   ESC-b     Move cursor left one word.
  HOME                             ESC-0     Move cursor to start of line.
  END                              ESC-$     Move cursor to end of line.
  BACKSPACE                                  Delete char to left of cursor.
  DELETE                           ESC-x     Delete char under cursor.
CNTL-BACKSPACE   ESC-BACKSPACE             Delete word to left of cursor.
CNTL-DELETE      ESC-DELETE      ESC-X     Delete word under cursor.
CNTL-U           ESC (MS-DOS only)         Delete entire line.
ctrl-BACKSPACE   ESC-BACKSPACE             Delete word to left of cursor.
ctrl-DELETE      ESC-DELETE      ESC-X     Delete word under cursor.
ctrl-U           ESC (MS-DOS only)         Delete entire line.
  UpArrow                          ESC-k     Retrieve previous command line.
  DownArrow                        ESC-j     Retrieve next command line.
  TAB                                        Complete filename & cycle.
  SHIFT-TAB                        ESC-TAB   Complete filename & reverse cycle.
CNTL-L                                     Complete filename, list all.
ctrl-L                                     Complete filename, list all.
 
index 4078323..ff650bb 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -28,7 +27,7 @@
 
 #include "less.h"
 
-static char *version = "$Revision: 1.3 $";
+static char *version = "$Revision: 1.4 $";
 
 static int quote_all = 0;
 static char openquote = '"';
index 770cefa..23d7704 100644 (file)
@@ -1,6 +1,6 @@
-.\"    $OpenBSD: lesskey.1,v 1.10 2013/07/16 00:07:52 schwarze Exp $
+.\"    $OpenBSD: lesskey.1,v 1.11 2014/04/25 13:38:21 shadchin Exp $
 .\"
-.\" Copyright (C) 2000-2011  Mark Nudelman
+.\" Copyright (C) 2000-2012  Mark Nudelman
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\" modification, are permitted provided that the following conditions
@@ -22,7 +22,7 @@
 .\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 .\" OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
 .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-.Dd $Mdocdate: July 16 2013 $
+.Dd $Mdocdate: April 25 2014 $
 .Dt LESSKEY 1
 .Os
 .Sh NAME
@@ -236,6 +236,7 @@ z   forw-window
 w      back-window
 \ee\e40        forw-screen-force
 F      forw-forever
+\eeF   forw-until-hilite
 R      repaint-flush
 r      repaint
 ^R     repaint
@@ -446,9 +447,9 @@ file.
 .Sh SEE ALSO
 .Xr less 1
 .Sh AUTHORS
-.An Mark Nudelman Aq Mt markn@greenwoodsoftware.com
+.An Mark Nudelman
 .Pp
-Send bug reports or comments to the above address or to
+Send bug reports or comments to
 .Aq Mt bug\-less@gnu.org .
 .\" .Sh CAVEATS
 .\" On MS-DOS and OS/2 systems, certain keys send a sequence of characters
index 433c644..e881823 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -112,6 +111,7 @@ struct cmdname cmdnames[] =
        { "flush-repaint",        A_FREPAINT },
        { "forw-bracket",         A_F_BRACKET },
        { "forw-forever",         A_F_FOREVER },
+       { "forw-until-hilite",    A_F_UNTIL_HILITE },
        { "forw-line",            A_F_LINE },
        { "forw-line-force",      A_FF_LINE },
        { "forw-screen",          A_F_SCREEN },
@@ -451,7 +451,7 @@ tstr(pp, xlate)
                }
        case '^':
                /*
-                * Carat means CONTROL.
+                * Caret means CONTROL.
                 */
                *pp = p+2;
                buf[0] = CONTROL(p[1]);
index 9a457a9..91098a5 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index 67e2cc5..b5c3200 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index b2ea16e..0517e23 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -29,6 +28,7 @@ public int hshift;            /* Desired left-shift of output line buffer */
 public int tabstops[TABSTOP_MAX] = { 0 }; /* Custom tabstops */
 public int ntabstops = 1;      /* Number of tabstops */
 public int tabdefault = 8;     /* Default repeated tabstops */
+public POSITION highest_hilite;        /* Pos of last hilite in file found so far */
 
 static int curr;               /* Index into linebuf */
 static int column;             /* Printable length, accounting for
@@ -589,7 +589,12 @@ store_char(ch, a, rep, pos)
                         * Override the attribute passed in.
                         */
                        if (a != AT_ANSI)
+                       {
+                               if (highest_hilite != NULL_POSITION &&
+                                   pos > highest_hilite)
+                                       highest_hilite = pos;
                                a |= AT_HILITE;
+                       }
                }
        }
 #endif
@@ -638,7 +643,7 @@ store_char(ch, a, rep, pos)
                replen = utf_len(rep[0]);
 #else
                replen = 1;
-#endif
+#endif /* !SMALL */
        }
        if (curr + replen >= size_linebuf-6)
        {
index e676422..db2e922 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index 0d9a980..7662d2c 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index 082a768..7d8c9bb 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -220,6 +219,7 @@ main(argc, argv)
                argv++;
                (void) get_ifile(filename, ifile);
                ifile = prev_ifile(NULL_IFILE);
+               free(filename);
 #endif
        }
        /*
index d4caf5b..ab87a61 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -139,7 +138,7 @@ badmark(c)
 {
        return (getmark(c) == NULL);
 }
-#endif
+#endif /* PIPEC */
 
 /*
  * Set a user-defined mark.
index 7282155..d782a05 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -485,7 +484,30 @@ opt__V(type, s)
                any_display = 1;
                putstr("less ");
                putstr(version);
-               putstr("\nCopyright (C) 1984-2009 Mark Nudelman\n\n");
+               putstr(" (");
+#if HAVE_GNU_REGEX
+               putstr("GNU ");
+#endif
+#if HAVE_POSIX_REGCOMP
+               putstr("POSIX ");
+#endif
+#if HAVE_PCRE
+               putstr("PCRE ");
+#endif
+#if HAVE_RE_COMP
+               putstr("BSD ");
+#endif
+#if HAVE_REGCMP
+               putstr("V8 ");
+#endif
+#if HAVE_V8_REGCOMP
+               putstr("Spencer V8 ");
+#endif
+#if !HAVE_GNU_REGEX && !HAVE_POSIX_REGCOMP && !HAVE_PCRE && !HAVE_RE_COMP && !HAVE_REGCMP && !HAVE_V8_REGCOMP
+               putstr("no ");
+#endif
+               putstr("regular expressions)\n");
+               putstr("Copyright (C) 1984-2012 Mark Nudelman\n\n");
                putstr("less comes with NO WARRANTY, to the extent permitted by law.\n");
                putstr("For information about the terms of redistribution,\n");
                putstr("see the file named README in the less distribution.\n");
index 9c7e0b0..ae4db93 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -31,6 +30,7 @@ extern int screen_trashed;
 extern int less_is_more;
 extern int quit_at_eof;
 extern char *every_first_cmd;
+extern int opt_use_backslash;
 
 /*
  * Return a printable description of an option.
@@ -149,10 +149,13 @@ scan_option(s)
                         */
                        plusoption = TRUE;
                        s = optstring(s, &str, propt('+'), NULL);
+                       if (s == NULL)
+                               return;
                        if (*str == '+')
-                               every_first_cmd = save(++str);
+                               every_first_cmd = save(str+1);
                        else
                                ungetsc(str);
+                       free(str);
                        continue;
                case '0':  case '1':  case '2':  case '3':  case '4':
                case '5':  case '6':  case '7':  case '8':  case '9':
@@ -207,7 +210,7 @@ scan_option(s)
                                        parg.p_string = printopt;
                                        error("The %s option should not be followed by =",
                                                &parg);
-                                       quit(QUIT_ERROR);
+                                       return;
                                }
                                s++;
                        } else
@@ -229,7 +232,7 @@ scan_option(s)
                        else
                                error("There is no %s option (\"less --help\" for help)",
                                        &parg);
-                       quit(QUIT_ERROR);
+                       return;
                }
 
                str = NULL;
@@ -266,6 +269,8 @@ scan_option(s)
                        while (*s == ' ')
                                s++;
                        s = optstring(s, &str, printopt, o->odesc[1]);
+                       if (s == NULL)
+                               return;
                        break;
                case NUMBER:
                        if (*s == '\0')
@@ -281,6 +286,8 @@ scan_option(s)
                 */
                if (o->ofunc != NULL)
                        (*o->ofunc)(INIT, str);
+               if (str != NULL)
+                       free(str);
        }
 }
 
@@ -564,35 +571,33 @@ optstring(s, p_str, printopt, validchars)
        char *validchars;
 {
        register char *p;
+       register char *out;
 
        if (*s == '\0')
        {
                nostring(printopt);
-               quit(QUIT_ERROR);
+               return (NULL);
        }
-       *p_str = s;
+       /* Alloc could be more than needed, but not worth trimming. */
+       *p_str = (char *) ecalloc(strlen(s)+1, sizeof(char));
+       out = *p_str;
+
        for (p = s;  *p != '\0';  p++)
        {
-               if (*p == END_OPTION_STRING ||
-                   (validchars != NULL && strchr(validchars, *p) == NULL))
+               if (opt_use_backslash && *p == '\\' && p[1] != '\0')
                {
-                       switch (*p)
-                       {
-                       case END_OPTION_STRING:
-                       case ' ':  case '\t':  case '-':
-                               /* Replace the char with a null to terminate string. */
-                               *p++ = '\0';
-                               break;
-                       default:
-                               /* Cannot replace char; make a copy of the string. */
-                               *p_str = (char *) ecalloc(p-s+1, sizeof(char));
-                               strncpy(*p_str, s, p-s);
-                               (*p_str)[p-s] = '\0';
+                       /* Take next char literally. */
+                       ++p;
+               } else 
+               {
+                       if (*p == END_OPTION_STRING || 
+                           (validchars != NULL && strchr(validchars, *p) == NULL))
+                               /* End of option string. */
                                break;
-                       }
-                       break;
                }
+               *out++ = *p;
        }
+       *out = '\0';
        return (p);
 }
 
@@ -615,8 +620,6 @@ num_error(printopt, errp)
                parg.p_string = printopt;
                error("Number is required after %s", &parg);
        }
-       quit(QUIT_ERROR);
-       /* NOTREACHED */
        return (-1);
 }
 
index a32139e..c11ad3b 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index 30f8fdd..f36c42e 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -54,6 +53,7 @@ public int use_lessopen;      /* Use the LESSOPEN filter */
 public int quit_on_intr;       /* Quit on interrupt */
 public int follow_mode;                /* F cmd Follows file desc or file name? */
 public int oldbot;             /* Old bottom of screen behavior {{REMOVE}} */
+public int opt_use_backslash;  /* Use backslash escaping in option parsing */
 #if HILITE_SEARCH
 public int hilite_search;      /* Highlight matched search patterns? */
 #endif
@@ -118,6 +118,7 @@ static struct optname pound_optname  = { "shift",                NULL };
 static struct optname keypad_optname = { "no-keypad",            NULL };
 static struct optname oldbot_optname = { "old-bot",              NULL };
 static struct optname follow_optname = { "follow-name",          NULL };
+static struct optname use_backslash_optname = { "use-backslash", NULL };
 #else
 static struct optname fake_optname   = { "fake",                 NULL };
 #define a_optname      fake_optname
@@ -174,6 +175,7 @@ static struct optname fake_optname   = { "fake",                 NULL };
 #define keypad_optname fake_optname
 #define oldbot_optname fake_optname
 #define follow_optname fake_optname
+#define use_backslash_optname  fake_optname
 #endif
 
 
@@ -506,6 +508,14 @@ static struct loption option[] =
                        NULL
                }
        },
+       { OLETTER_NONE, &use_backslash_optname,
+               BOOL, OPT_OFF, &opt_use_backslash, NULL,
+               {
+                       "Use backslash escaping in command line parameters",
+                       "Don't use backslash escaping in command line parameters",
+                       NULL
+               }
+       },
        { '\0', NULL, NOVAR, 0, NULL, NULL, { NULL, NULL, NULL } }
 };
 
index 7060be6..a4e4216 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index a5908a1..5c93338 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -175,6 +174,7 @@ flush()
                                                 */
                                                p++;
                                                anchor = p_next = p;
+                                               at = 0;
                                                WIN32setcolors(nm_fg_color, nm_bg_color);
                                                continue;
                                        }
@@ -274,20 +274,33 @@ flush()
                                                break;
                                        if (at & 1)
                                        {
+                                               /*
+                                                * If \e[1m use defined bold
+                                                * color, else set intensity.
+                                                */
+                                               if (p[-2] == '[')
+                                               {
+#if MSDOS_COMPILER==WIN32C
+                                                       fg |= FOREGROUND_INTENSITY;
+                                                       bg |= BACKGROUND_INTENSITY;
+#else
                                                        fg = bo_fg_color;
                                                        bg = bo_bg_color;
+#endif
+                                               } else
+                                                       fg |= 8;
                                        } else if (at & 2)
                                        {
-                                                       fg = so_fg_color;
-                                                       bg = so_bg_color;
+                                               fg = so_fg_color;
+                                               bg = so_bg_color;
                                        } else if (at & 4)
                                        {
-                                                       fg = ul_fg_color;
-                                                       bg = ul_bg_color;
+                                               fg = ul_fg_color;
+                                               bg = ul_bg_color;
                                        } else if (at & 8)
                                        {
-                                                       fg = bl_fg_color;
-                                                       bg = bl_bg_color;
+                                               fg = bl_fg_color;
+                                               bg = bl_bg_color;
                                        }
                                        fg &= 0xf;
                                        bg &= 0xf;
index 32824c0..dc3ef78 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 /*
@@ -27,75 +26,92 @@ compile_pattern2(pattern, search_type, comp_pattern)
        int search_type;
        void **comp_pattern;
 {
-       if ((search_type & SRCH_NO_REGEX) == 0)
+       if (search_type & SRCH_NO_REGEX)
+               return (0);
+  {
+#if HAVE_GNU_REGEX
+       struct re_pattern_buffer *comp = (struct re_pattern_buffer *)
+               ecalloc(1, sizeof(struct re_pattern_buffer));
+       struct re_pattern_buffer **pcomp = 
+               (struct re_pattern_buffer **) comp_pattern;
+       re_set_syntax(RE_SYNTAX_POSIX_EXTENDED);
+       if (re_compile_pattern(pattern, strlen(pattern), comp))
        {
+               free(comp);
+               error("Invalid pattern", NULL_PARG);
+               return (-1);
+       }
+       if (*pcomp != NULL)
+               regfree(*pcomp);
+       *pcomp = comp;
+#endif
 #if HAVE_POSIX_REGCOMP
-               regex_t *comp = (regex_t *) ecalloc(1, sizeof(regex_t));
-               regex_t **pcomp = (regex_t **) comp_pattern;
-               if (regcomp(comp, pattern, less_is_more ? 0 : REGCOMP_FLAG))
-               {
-                       free(comp);
-                       error("Invalid pattern", NULL_PARG);
-                       return (-1);
-               }
-               if (*pcomp != NULL)
-                       regfree(*pcomp);
-               *pcomp = comp;
+       regex_t *comp = (regex_t *) ecalloc(1, sizeof(regex_t));
+       regex_t **pcomp = (regex_t **) comp_pattern;
+       if (regcomp(comp, pattern, less_is_more ? 0 : REGCOMP_FLAG))
+       {
+               free(comp);
+               error("Invalid pattern", NULL_PARG);
+               return (-1);
+       }
+       if (*pcomp != NULL)
+               regfree(*pcomp);
+       *pcomp = comp;
 #endif
 #if HAVE_PCRE
-               pcre *comp;
-               pcre **pcomp = (pcre **) comp_pattern;
-               const char *errstring;
-               int erroffset;
-               PARG parg;
-               comp = pcre_compile(pattern, 0,
-                               &errstring, &erroffset, NULL);
-               if (comp == NULL)
-               {
-                       parg.p_string = (char *) errstring;
-                       error("%s", &parg);
-                       return (-1);
-               }
-               *pcomp = comp;
+       pcre *comp;
+       pcre **pcomp = (pcre **) comp_pattern;
+       constant char *errstring;
+       int erroffset;
+       PARG parg;
+       comp = pcre_compile(pattern, 0,
+                       &errstring, &erroffset, NULL);
+       if (comp == NULL)
+       {
+               parg.p_string = (char *) errstring;
+               error("%s", &parg);
+               return (-1);
+       }
+       *pcomp = comp;
 #endif
 #if HAVE_RE_COMP
-               PARG parg;
-               int *pcomp = (int *) comp_pattern;
-               if ((parg.p_string = re_comp(pattern)) != NULL)
-               {
-                       error("%s", &parg);
-                       return (-1);
-               }
-               *pcomp = 1;
+       PARG parg;
+       int *pcomp = (int *) comp_pattern;
+       if ((parg.p_string = re_comp(pattern)) != NULL)
+       {
+               error("%s", &parg);
+               return (-1);
+       }
+       *pcomp = 1;
 #endif
 #if HAVE_REGCMP
-               char *comp;
-               char **pcomp = (char **) comp_pattern;
-               if ((comp = regcmp(pattern, 0)) == NULL)
-               {
-                       error("Invalid pattern", NULL_PARG);
-                       return (-1);
-               }
-               if (pcomp != NULL)
-                       free(*pcomp);
-               *pcomp = comp;
+       char *comp;
+       char **pcomp = (char **) comp_pattern;
+       if ((comp = regcmp(pattern, 0)) == NULL)
+       {
+               error("Invalid pattern", NULL_PARG);
+               return (-1);
+       }
+       if (pcomp != NULL)
+               free(*pcomp);
+       *pcomp = comp;
 #endif
 #if HAVE_V8_REGCOMP
-               struct regexp *comp;
-               struct regexp **pcomp = (struct regexp **) comp_pattern;
-               if ((comp = regcomp(pattern)) == NULL)
-               {
-                       /*
-                        * regcomp has already printed an error message 
-                        * via regerror().
-                        */
-                       return (-1);
-               }
-               if (*pcomp != NULL)
-                       free(*pcomp);
-               *pcomp = comp;
-#endif
+       struct regexp *comp;
+       struct regexp **pcomp = (struct regexp **) comp_pattern;
+       if ((comp = regcomp(pattern)) == NULL)
+       {
+               /*
+                * regcomp has already printed an error message 
+                * via regerror().
+                */
+               return (-1);
        }
+       if (*pcomp != NULL)
+               free(*pcomp);
+       *pcomp = comp;
+#endif
+  }
        return (0);
 }
 
@@ -131,6 +147,12 @@ compile_pattern(pattern, search_type, comp_pattern)
 uncompile_pattern(pattern)
        void **pattern;
 {
+#if HAVE_GNU_REGEX
+       struct re_pattern_buffer **pcomp = (struct re_pattern_buffer **) pattern;
+       if (*pcomp != NULL)
+               regfree(*pcomp);
+       *pcomp = NULL;
+#endif
 #if HAVE_POSIX_REGCOMP
        regex_t **pcomp = (regex_t **) pattern;
        if (*pcomp != NULL)
@@ -168,6 +190,9 @@ uncompile_pattern(pattern)
 is_null_pattern(pattern)
        void *pattern;
 {
+#if HAVE_GNU_REGEX
+       return (pattern == NULL);
+#endif
 #if HAVE_POSIX_REGCOMP
        return (pattern == NULL);
 #endif
@@ -183,9 +208,6 @@ is_null_pattern(pattern)
 #if HAVE_V8_REGCOMP
        return (pattern == NULL);
 #endif
-#if NO_REGEX
-       return (search_pattern != NULL);
-#endif
 }
 
 /*
@@ -237,6 +259,9 @@ match_pattern(pattern, tpattern, line, line_len, sp, ep, notbol, search_type)
        int search_type;
 {
        int matched;
+#if HAVE_GNU_REGEX
+       struct re_pattern_buffer *spattern = (struct re_pattern_buffer *) pattern;
+#endif
 #if HAVE_POSIX_REGCOMP
        regex_t *spattern = (regex_t *) pattern;
 #endif
@@ -253,10 +278,30 @@ match_pattern(pattern, tpattern, line, line_len, sp, ep, notbol, search_type)
        struct regexp *spattern = (struct regexp *) pattern;
 #endif
 
+#if NO_REGEX
+       search_type |= SRCH_NO_REGEX;
+#endif
        if (search_type & SRCH_NO_REGEX)
                matched = match(tpattern, strlen(tpattern), line, line_len, sp, ep);
        else
        {
+#if HAVE_GNU_REGEX
+       {
+               struct re_registers search_regs;
+               regoff_t *starts = (regoff_t *) ecalloc(1, sizeof (regoff_t));
+               regoff_t *ends = (regoff_t *) ecalloc(1, sizeof (regoff_t));
+               spattern->not_bol = notbol;
+               re_set_registers(spattern, &search_regs, 1, starts, ends);
+               matched = re_search(spattern, line, line_len, 0, line_len, &search_regs) >= 0;
+               if (matched)
+               {
+                       *sp = line + search_regs.start[0];
+                       *ep = line + search_regs.end[0];
+               }
+               free(starts);
+               free(ends);
+       }
+#endif
 #if HAVE_POSIX_REGCOMP
        {
                regmatch_t rm;
@@ -311,9 +356,6 @@ match_pattern(pattern, tpattern, line, line_len, sp, ep, notbol, search_type)
                *sp = spattern->startp[0];
                *ep = spattern->endp[0];
        }
-#endif
-#if NO_REGEX
-       matched = match(tpattern, strlen(tpattern), line, line_len, sp, ep);
 #endif
        }
        matched = (!(search_type & SRCH_NO_MATCH) && matched) ||
index 8c05c5d..b655f07 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -163,7 +162,7 @@ empty_lines(s, e)
        register int i;
 
        for (i = s;  i <= e;  i++)
-               if (table[i] != NULL_POSITION)
+               if (table[i] != NULL_POSITION && table[i] != 0)
                        return (0);
        return (1);
 }
index 146972c..3b96637 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index 6a4a56b..fc02de3 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -391,9 +390,9 @@ protochar(c, where, iseditproto)
  * where to resume parsing the string.
  * We must keep track of nested IFs and skip them properly.
  */
-       static char *
+       static constant char *
 skipcond(p)
-       register char *p;
+       register constant char *p;
 {
        register int iflevel;
 
@@ -449,9 +448,9 @@ skipcond(p)
 /*
  * Decode a char that represents a position on the screen.
  */
-       static char *
+       static constant char *
 wherechar(p, wp)
-       char *p;
+       char constant *p;
        int *wp;
 {
        switch (*p)
@@ -475,10 +474,10 @@ wherechar(p, wp)
  */
        public char *
 pr_expand(proto, maxwidth)
-       char *proto;
+       constant char *proto;
        int maxwidth;
 {
-       register char *p;
+       register constant char *p;
        register int c;
        int where;
 
index d47b035..6a5d6a7 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -804,7 +803,7 @@ scrsize()
        else if ((n = ltgetnum("li")) > 0)
                sc_height = n;
 #endif
-       else
+       if (sc_height <= 0)
                sc_height = DEF_SC_HEIGHT;
 
        if (sys_width > 0)
@@ -815,7 +814,7 @@ scrsize()
        else if ((n = ltgetnum("co")) > 0)
                sc_width = n;
 #endif
-       else
+       if (sc_width <= 0)
                sc_width = DEF_SC_WIDTH;
 }
 
index 88a2817..49c3917 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -66,6 +65,12 @@ struct pattern_info {
        char* text;
        int search_type;
 };
+
+#if NO_REGEX
+#define info_compiled(info) ((void*)0)
+#else
+#define info_compiled(info) ((info)->compiled)
+#endif
        
 static struct pattern_info search_info;
 static struct pattern_info filter_info;
@@ -98,10 +103,12 @@ set_pattern(info, pattern, search_type)
        char *pattern;
        int search_type;
 {
+#if !NO_REGEX
        if (pattern == NULL)
-               CLEAR_PATTERN(search_info.compiled);
+               CLEAR_PATTERN(info->compiled);
        else if (compile_pattern(pattern, search_type, &info->compiled) < 0)
                return -1;
+#endif
        /* Pattern compiled successfully; save the text too. */
        if (info->text != NULL)
                free(info->text);
@@ -132,7 +139,9 @@ clear_pattern(info)
        if (info->text != NULL)
                free(info->text);
        info->text = NULL;
+#if !NO_REGEX
        uncompile_pattern(&info->compiled);
+#endif
 }
 
 /*
@@ -188,9 +197,11 @@ get_cvt_ops()
 prev_pattern(info)
        struct pattern_info *info;
 {
-       if (info->search_type & SRCH_NO_REGEX)
-               return (info->text != NULL);
-       return (!is_null_pattern(info->compiled));
+#if !NO_REGEX
+       if ((info->search_type & SRCH_NO_REGEX) == 0)
+               return (!is_null_pattern(info->compiled));
+#endif
+       return (info->text != NULL);
 }
 
 #if HILITE_SEARCH
@@ -472,6 +483,47 @@ add_hilite(anchor, hl)
        ihl->hl_next = hl;
 }
 
+/*
+ * Hilight every character in a range of displayed characters.
+ */
+       static void
+create_hilites(linepos, start_index, end_index, chpos)
+       POSITION linepos;
+       int start_index;
+       int end_index;
+       int *chpos;
+{
+       struct hilite *hl;
+       int i;
+
+       /* Start the first hilite. */
+       hl = (struct hilite *) ecalloc(1, sizeof(struct hilite));
+       hl->hl_startpos = linepos + chpos[start_index];
+
+       /*
+        * Step through the displayed chars.
+        * If the source position (before cvt) of the char is one more
+        * than the source pos of the previous char (the usual case),
+        * just increase the size of the current hilite by one.
+        * Otherwise (there are backspaces or something involved),
+        * finish the current hilite and start a new one.
+        */
+       for (i = start_index+1;  i <= end_index;  i++)
+       {
+               if (chpos[i] != chpos[i-1] + 1 || i == end_index)
+               {
+                       hl->hl_endpos = linepos + chpos[i-1] + 1;
+                       add_hilite(&hilite_anchor, hl);
+                       /* Start new hilite unless this is the last char. */
+                       if (i < end_index)
+                       {
+                               hl = (struct hilite *) ecalloc(1, sizeof(struct hilite));
+                               hl->hl_startpos = linepos + chpos[i];
+                       }
+               }
+       }
+}
+
 /*
  * Make a hilite for each string in a physical line which matches 
  * the current pattern.
@@ -489,7 +541,6 @@ hilite_line(linepos, line, line_len, chpos, sp, ep, cvt_ops)
 {
        char *searchp;
        char *line_end = line + line_len;
-       struct hilite *hl;
 
        if (sp == NULL || ep == NULL)
                return;
@@ -505,13 +556,7 @@ hilite_line(linepos, line, line_len, chpos, sp, ep, cvt_ops)
         */
        searchp = line;
        do {
-               if (ep > sp)
-               {
-                       hl = (struct hilite *) ecalloc(1, sizeof(struct hilite));
-                       hl->hl_startpos = linepos + chpos[sp-line];
-                       hl->hl_endpos = linepos + chpos[ep-line];
-                       add_hilite(&hilite_anchor, hl);
-               }
+               create_hilites(linepos, sp-line, ep-line, chpos);
                /*
                 * If we matched more than zero characters,
                 * move to the first char after the string we matched.
@@ -523,7 +568,7 @@ hilite_line(linepos, line, line_len, chpos, sp, ep, cvt_ops)
                        searchp++;
                else /* end of line */
                        break;
-       } while (match_pattern(search_info.compiled, search_info.text,
+       } while (match_pattern(info_compiled(&search_info), search_info.text,
                        searchp, line_end - searchp, &sp, &ep, 1, search_info.search_type));
 }
 #endif
@@ -795,7 +840,7 @@ search_range(pos, endpos, search_type, matches, maxlines, plinepos, pendpos)
                 * If so, add an entry to the filter list.
                 */
                if ((search_type & SRCH_FIND_ALL) && prev_pattern(&filter_info)) {
-                       int line_filter = match_pattern(filter_info.compiled, filter_info.text,
+                       int line_filter = match_pattern(info_compiled(&filter_info), filter_info.text,
                                cline, line_len, &sp, &ep, 0, filter_info.search_type);
                        if (line_filter)
                        {
@@ -815,7 +860,7 @@ search_range(pos, endpos, search_type, matches, maxlines, plinepos, pendpos)
                 */
                if (prev_pattern(&search_info))
                {
-                       line_match = match_pattern(search_info.compiled, search_info.text,
+                       line_match = match_pattern(info_compiled(&search_info), search_info.text,
                                cline, line_len, &sp, &ep, 0, search_type);
                        if (line_match)
                        {
index 701c1be..b21772d 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index 3c53c13..e1beec5 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -13,6 +12,8 @@
 
 #define        WHITESP(c)      ((c)==' ' || (c)=='\t')
 
+#if TAGS
+
 public char *tags = "tags";
 
 static int total;
@@ -747,4 +748,5 @@ getentry(buf, tag, file, line)
                return (0);
        return (-1);
 }
-
+  
+#endif
index d431895..34d0ae3 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
index 2fda6e4..d3ecd14 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * Copyright (C) 1984-2011  Mark Nudelman
+ * Copyright (C) 1984-2012  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
  *
- * For more information about less, or for information on how to 
- * contact the author, see the README file.
+ * For more information, see the README file.
  */
 
 
@@ -743,6 +742,26 @@ v442  3/2/11    Fix search bug.
                 Add ctrl-G line edit command.
 v443  4/9/11    Fix Windows build.
 v444  6/8/11    Fix ungetc bug; remove vestiges of obsolete -l option.
+-----------------------------------------------------------------
+v445  10/19/11  Fix hilite bug in backwards scroll with -J.
+                Fix hilite bug with backspaces.
+                Fix bugs handling SGR sequences in Win32 (thanks to Eric Lee).
+                Add support for GNU regex (thanks to Reuben Thomas).
+v446  5/15/12   Up/down arrows in cmd editing search for matching cmd.
+v447  5/21/12   Add ESC-F command, two-pipe LESSOPEN syntax.
+v448  6/15/12   Print name of regex library in version message.
+v449  6/23/12   Allow config option --with-regex=none.
+v450  7/4/12    Fix EOF bug with ESC-F.
+v451  7/20/12   Fix typo.
+-----------------------------------------------------------------
+v452  10/19/12  Fix --with-regex=none, fix "stty 0", fix Win32.
+                Don't quit if errors in cmd line options.
+v453  10/27/12  Increase buffer sizes.
+v454  11/5/12   Fix typo.
+v455  11/5/12   Fix typo.
+v456  11/8/12   Fix option string incompatibility.
+v457  12/8/12   Use new option string syntax only after --use-backslash.
+v458  4/4/13    Fix display bug in using up/down in cmd buffer.
 */
 
-char version[] = "444";
+char version[] = "458";