Importing external/bsd/less

Change-Id: I7999b23fbef86a9a5d8d6fe4e80b9bd23d5b9d87
This commit is contained in:
Lionel Sambuc 2013-12-03 11:35:03 +01:00
parent c7d758c7f2
commit f7cf297602
100 changed files with 18009 additions and 3827 deletions

View file

@ -13,7 +13,7 @@ SUBDIR= add_route arp ash at backup btrace \
gcov-pull grep host \ gcov-pull grep host \
hostaddr ifconfig ifdef \ hostaddr ifconfig ifdef \
intr ipcrm ipcs irdpd isoread \ intr ipcrm ipcs irdpd isoread \
less loadkeys loadramdisk logger look lp \ loadkeys loadramdisk logger look lp \
lpd lspci mail MAKEDEV \ lpd lspci mail MAKEDEV \
mined \ mined \
mount mt netconf \ mount mt netconf \

View file

@ -1,5 +0,0 @@
# $NetBSD: Makefile,v 1.2 1999/03/24 09:15:20 mrg Exp $
SUBDIR=less lesskey lessecho
.include <bsd.subdir.mk>

View file

@ -1,7 +0,0 @@
# $NetBSD: Makefile.inc,v 1.3 2001/07/26 14:20:47 mrg Exp $
.if exists(${.CURDIR}/../../Makefile.inc)
.include "${.CURDIR}/../../Makefile.inc"
.endif
CWARNFLAGS+= -Wno-strict-prototypes -Wno-missing-prototypes

View file

@ -1,22 +0,0 @@
# $NetBSD: Makefile,v 1.11 2006/11/20 22:06:26 dsl Exp $
# from: @(#)Makefile 5.6 (Berkeley) 3/12/91
.ifdef SMALLPROG
CPPFLAGS+=-DSMALL
.endif
PROG= less
CPPFLAGS+=-I${.CURDIR} -I${.CURDIR}/../lesskey -DSYSDIR=\"/etc\"
SRCS= brac.c ch.c charset.c cmdbuf.c command.c decode.c edit.c \
filename.c forwback.c help.c ifile.c input.c jump.c line.c \
linenum.c lsystem.c main.c mark.c optfunc.c option.c opttbl.c \
os.c output.c position.c prompt.c screen.c search.c signal.c \
tags.c ttyin.c version.c
LDADD+= -ltermcap
DPADD+= ${LIBTERM}
MLINKS= less.1 more.1 less.1 page.1
LINKS= ${BINDIR}/less ${BINDIR}/more ${BINDIR}/less ${BINDIR}/page
.include <bsd.prog.mk>

File diff suppressed because it is too large Load diff

View file

@ -1,675 +0,0 @@
/* $NetBSD: version.c,v 1.6 2006/10/26 01:33:08 mrg Exp $ */
/*
* Copyright (C) 1984-2005 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.
*/
/*
----------------------- CHANGE HISTORY --------------------------
1/29/84 Allowed use on standard input
2/1/84 Added E, N, P commands
4/17/84 Added '=' command, 'stop' signal handling
4/20/84 Added line folding
v2 4/27/84 Fixed '=' command to use BOTTOM_PLUS_ONE,
instead of TOP, added 'p' & 'v' commands
v3 5/3/84 Added -m and -t options, '-' command
v4 5/3/84 Added LESS environment variable
v5 5/3/84 New comments, fixed '-' command slightly
v6 5/15/84 Added -Q, visual bell
v7 5/24/84 Fixed jump_back(n) bug: n should count real
lines, not folded lines. Also allow number on G command.
v8 5/30/84 Re-do -q and -Q commands
v9 9/25/84 Added "+<cmd>" argument
v10 10/10/84 Fixed bug in -b<n> argument processing
v11 10/18/84 Made error() ring bell if \n not entered.
-----------------------------------------------------------------
v12 2/13/85 Reorganized signal handling and made portable to 4.2bsd.
v13 2/16/85 Reword error message for '-' command.
v14 2/22/85 Added -bf and -bp variants of -b.
v15 2/25/85 Miscellaneous changes.
v16 3/13/85 Added -u flag for backspace processing.
v17 4/13/85 Added j and k commands, changed -t default.
v18 4/20/85 Rewrote signal handling code.
v19 5/2/85 Got rid of "verbose" eq_message().
Made search() scroll in some cases.
v20 5/21/85 Fixed screen.c ioctls for System V.
v21 5/23/85 Fixed some first_cmd bugs.
v22 5/24/85 Added support for no RECOMP nor REGCMP.
v23 5/25/85 Miscellanous changes and prettying up.
Posted to USENET.
-----------------------------------------------------------------
v24 6/3/85 Added ti,te terminal init & de-init.
(Thanks to Mike Kersenbrock)
v25 6/8/85 Added -U flag, standout mode underlining.
v26 6/9/85 Added -M flag.
Use underline termcap (us) if it exists.
v27 6/15/85 Renamed some variables to make unique in
6 chars. Minor fix to -m.
v28 6/28/85 Fixed right margin bug.
v29 6/28/85 Incorporated M.Rose's changes to signal.c
v30 6/29/85 Fixed stupid bug in argument processing.
v31 7/15/85 Added -p flag, changed repaint algorithm.
Added kludge for magic cookie terminals.
v32 7/16/85 Added cat_file if output not a tty.
v33 7/23/85 Added -e flag and EDITOR.
v34 7/26/85 Added -s flag.
v35 7/27/85 Rewrote option handling; added option.c.
v36 7/29/85 Fixed -e flag to work if not last file.
v37 8/10/85 Added -x flag.
v38 8/19/85 Changed prompting; created prompt.c.
v39 8/24/85 (Not -p) does not initially clear screen.
v40 8/26/85 Added "skipping" indicator in forw().
Posted to USENET.
-----------------------------------------------------------------
v41 9/17/85 ONLY_RETURN, control char commands,
faster search, other minor fixes.
v42 9/25/85 Added ++ command line syntax;
ch_fsize for pipes.
v43 10/15/85 Added -h flag, changed prim.c algorithms.
v44 10/16/85 Made END print in all cases of eof;
ignore SIGTTOU after receiv ing SIGTSTP.
v45 10/16/85 Never print backspaces unless -u.
v46 10/24/85 Backwards scroll in jump_loc.
v47 10/30/85 Fixed bug in edit(): *first_cmd==0
v48 11/16/85 Use TIOCSETN instead of TIOCSETP.
Added marks (m and ' commands).
Posted to USENET.
-----------------------------------------------------------------
v49 1/9/86 Fixed bug: signal didn't clear mcc.
v50 1/15/86 Added ' (quote) to gomark.
v51 1/16/86 Added + cmd, fixed problem if first_cmd
fails, made g cmd sort of "work" on pipes
ev en if bof is no longer buffered.
v52 1/17/86 Made short files work better.
v53 1/20/86 Added -P option.
v54 1/20/86 Changed help to use HELPFILE.
v55 1/23/86 Messages work better if not tty output.
v56 1/24/86 Added -l option.
v57 1/31/86 Fixed -l to get confirmation before
ov erwriting an existing file.
v58 8/28/86 Added filename globbing.
v59 9/15/86 Fixed some bugs with very long filenames.
v60 9/26/86 Incorporated changes from Leith (Casey)
Leedom for boldface and -z option.
v61 9/26/86 Got rid of annoying repaints after ! cmd.
Posted to USENET.
-----------------------------------------------------------------
v62 12/23/86 Added is_directory(); change -z default to
-1 instead of 24; cat-and-exit if -e and
file is less than a screenful.
v63 1/8/87 Fixed bug in cat-and-exit if > 1 file.
v64 1/12/87 Changed puts/putstr, putc/putchr,
getc/getchr to av oid name conflict with
stdio functions.
v65 1/26/87 Allowed '-' command to change NUMBER
v alued options (thanks to Gary Puckering)
v66 2/13/87 Fixed bug: prepaint should use force=1.
v67 2/24/87 Added !! and % expansion to ! command.
v68 2/25/87 Added SIGWINCH and TIOCGWINSZ support;
changed is_directory to bad_file.
(thanks to J. Robert Ward)
v69 2/25/87 Added SIGWIND and WIOCGETD (for Unix PC).
v70 3/13/87 Changed help cmd from 'h' to 'H'; better
error msgs in bad_file, errno_message.
v71 5/11/87 Changed -p to -c, made triple -c/-C
for clear-eol like more's -c.
v72 6/26/87 Added -E, -L, use $SHELL in lsystem().
(thanks to Stev e Spearman)
v73 6/26/87 Allow Examine "#" for previous file.
Posted to USENET 8/25/87.
-----------------------------------------------------------------
v74 9/18/87 Fix conflict in EOF symbol with stdio.h,
Make os.c more portable to BSD.
v75 9/23/87 Fix problems in get_term (thanks to
Paul Eggert); new backwards scrolling in
jump_loc (thanks to Marion Hakanson).
v76 9/23/87 Added -i flag; allow single "!" to
inv oke a shell (thanks to Franco Barber).
v77 9/24/87 Added -n flag and line number support.
v78 9/25/87 Fixed problem with prompts longer than
the screen width.
v79 9/29/87 Added the _ command.
v80 10/6/87 Allow signal to break out of linenum scan.
v81 10/6/87 Allow -b to be changed from within less.
v82 10/7/87 Add cmd_decode to use a table for key
binding (thanks to Dav id Nason).
v83 10/9/87 Allow .less file for user-defined keys.
v84 10/11/87 Fix -e/-E problems (thanks to Felix Lee).
v85 10/15/87 Search now keeps track of line numbers.
v86 10/20/87 Added -B option and autobuf; fixed
"pipe error" bug.
v87 3/1/88 Fix bug re BSD signals while reading file.
v88 3/12/88 Use new format for -P option (thanks to
der Mouse), allow "+-c" without message,
fix bug re BSD hangup.
v89 3/18/88 Turn off line numbers if linenum scan
is interrupted.
v90 3/30/88 Allow -P from within less.
v91 3/30/88 Added tags file support (new -t option)
(thanks to Brian Campbell).
v92 4/4/88 Added -+option syntax.
v93 4/11/88 Add support for slow input (thanks to
Joe Orost & apologies for taking almost
3 years to get this in!)
v94 4/11/88 Redo reading/signal stuff.
v95 4/20/88 Repaint screen better after signal.
v96 4/21/88 Add /! and ?! commands.
v97 5/17/88 Allow -l/-L from within less.
Eliminate some static arrays (use calloc).
Posted to USENET.
-----------------------------------------------------------------
v98 10/14/88 Fix incorrect calloc call; uninitialized
var in exec_mca; core dump on unknown TERM.
Make v cmd work if past last line of file.
Fix some signal bugs.
v99 10/29/88 Allow space between -X and string,
when X is a string-valued option.
v100 1/5/89 Fix globbing bug when $SHELL not set;
allow spaces after -t command.
v101 1/6/89 Fix problem with long (truncated) lines
in tags file (thanks to Neil Dixon).
v102 1/6/89 Fix bug with E# when no prev file;
allow spaces after -l command.
v103 3/14/89 Add -N, -f and -? options. Add z and w
commands. Add %L for prompt strings.
v104 3/16/89 Added EDITPROTO.
v105 3/20/89 Fix bug in find_linenum which cached
incorrectly on long lines.
v106 3/31/89 Added -k option and multiple lesskey
files.
v107 4/27/89 Add 8-bit char support and -g option.
Split option code into 3 files.
v108 5/5/89 Allocate position table dynamically
(thanks to Paul Eggert); change % command
from "percent" to vi-style brace finder.
v109 5/10/89 Added ESC-% command, split prim.c.
v110 5/24/89 Fixed bug in + option; fixed repaint bug
under Sun windows (thanks to Paul Eggert).
v111 5/25/89 Generalized # and % expansion; use
calloc for some error messages.
v112 5/30/89 Get rid of ESC-%, add {}()[] commands.
v113 5/31/89 Optimize lseeks (thanks to Paul Eggert).
v114 7/25/89 Added ESC-/ and ESC-/! commands.
v115 7/26/89 Added ESC-n command.
v116 7/31/89 Added find_pos to optimize g command.
v117 8/1/89 Change -f option to -r.
v118 8/2/89 Save positions for all previous files,
not just the immediately previous one.
v119 8/7/89 Save marks across file boundaries.
Add file handle stuff.
v120 8/11/89 Add :ta command.
v121 8/16/89 Add -f option.
v122 8/30/89 Fix performance with many buffers.
v123 8/31/89 Verbose prompts for string options.
Posted beta to USENET.
-----------------------------------------------------------------
v124 9/18/89 Reorganize search commands,
N = rev, ESC-n = span, add ESC-N.
v125 9/18/89 Fix tab bug (thanks to Alex Liu).
Fix EOF bug when both -w and -c.
v126 10/25/89 Add -j option.
v127 10/27/89 Fix problems with blank lines before BOF.
v128 10/27/89 Add %bj, etc. to prompt strings.
v129 11/3/89 Add -+,-- commands; add set-option and
unset-option to lesskey.
v130 11/6/89 Generalize A_EXTRA to string, remove
set-option, unset-option from lesskey.
v131 11/7/89 Changed name of EDITPROTO to LESSEDIT.
v132 11/8/89 Allow editing of command prefix.
v133 11/16/89 Add -y option (thanks to Jeff Sullivan).
v134 12/1/89 Glob filenames in the -l command.
v135 12/5/89 Combined {}()[] commands into one, and
added ESC-^F and ESC-^B commands.
v136 1/20/90 Added -S, -R flags. Added | command.
Added warning for binary files. (thanks
to Richard Brittain and J. Sullivan).
v137 1/21/90 Rewrote horrible pappend code.
Added * notation for hi-bit chars.
v138 1/24/90 Fix magic cookie terminal handling.
Get rid of "cleanup" loop in ch_get.
v139 1/27/90 Added MSDOS support. (many thanks
to Richard Brittain).
v140 2/7/90 Editing a new file adds it to the
command line list.
v141 2/8/90 Add edit_list for editing >1 file.
v142 2/10/90 Add :x command.
v143 2/11/90 Add * and @ modifies to search cmds.
Change ESC-/ cmd from /@* to / *.
v144 3/1/90 Messed around with ch_zero;
no real change.
v145 3/2/90 Added -R and -v/-V for MSDOS;
renamed FILENAME to avoid conflict.
v146 3/5/90 Pull cmdbuf functions out of command.c
v147 3/7/90 Implement ?@; fix multi-file edit bugs.
v148 3/29/90 Fixed bug in :e<file> then :e#.
v149 4/3/90 Change error,ierror,query to use PARG.
v150 4/6/90 Add LESS_CHARSET, LESS_CHARDEF.
v151 4/13/90 Remove -g option; clean up ispipe.
v152 4/14/90 lsystem() closes input file, for
editors which require exclusive open.
v153 4/18/90 Fix bug if SHELL unset;
fix bug in overstrike control char.
v154 4/25/90 Output to fd 2 via buffer.
v155 4/30/90 Ignore -i if uppercase in pattern
(thanks to Michael Rendell.)
v156 5/3/90 Remove scroll limits in forw() & back();
causes problems with -c.
v157 5/4/90 Forward search starts at next real line
(not screen line) after jump target.
v158 6/14/90 Added F command.
v159 7/29/90 Fix bug in exiting: output not flushed.
v160 7/29/90 Clear screen before initial output w/ -c.
v161 7/29/90 Add -T flag.
v162 8/14/90 Fix bug with +F on command line.
v163 8/21/90 Added LESSBINFMT variable.
v164 9/5/90 Added -p, LINES, COLUMNS and
unset mark ' == BOF, for 1003.2 D5.
v165 9/6/90 At EOF with -c set, don't display empty
screen when try to page forward.
v166 9/6/90 Fix G when final line in file wraps.
v167 9/11/90 Translate CR/LF -> LF for 1003.2.
v168 9/13/90 Return to curr file if "tag not found".
v169 12/12/90 G goes to EOF even if file has grown.
v170 1/17/91 Add optimization for BSD _setjmp;
fix #include ioctl.h TERMIO problem.
(thanks to Paul Eggert)
Posted to USENET.
-----------------------------------------------------------------
v171 3/6/91 Fix -? bug in get_filename.
v172 3/15/91 Fix G bug in empty file.
Fix bug with ?\n and -i and uppercase
pattern at EOF!
(thanks to Paul Eggert)
v173 3/17/91 Change N cmd to not permanently change
direction. (thanks to Brian Matthews)
v174 3/18/91 Fix bug with namelogfile not getting
cleared when change files.
v175 3/18/91 Fix bug with ++cmd on command line.
(thanks to Jim Meyering)
v176 4/2/91 Change | to not force current screen,
include marked line, start/end from
top of screen. Improve search speed.
(thanks to Don Mears)
v177 4/2/91 Add LESSHELP variable.
Fix bug with F command with -e.
Try /dev/tty for input before using fd 2.
Patches posted to USENET 4/2/91.
-----------------------------------------------------------------
v178 4/8/91 Fixed bug in globbing logfile name.
(thanks to Jim Meyering)
v179 4/9/91 Allow negative -z for screen-relative.
v180 4/9/91 Clear to eos rather than eol if "db";
don't use "sr" if "da".
(thanks to Tor Lillqvist)
v181 4/18/91 Fixed bug with "negative" chars 80 - FF.
(thanks to Benny Sander Hofmann)
v182 5/16/91 Fixed bug with attribute at EOL.
(thanks to Brian Matthews)
v183 6/1/91 Rewrite linstall to do smart config.
v184 7/11/91 Process \b in searches based on -u
rather than -i.
v185 7/11/91 -Pxxx sets short prompt; assume SIGWINCH
after a SIGSTOP. (thanks to Ken Laprade)
-----------------------------------------------------------------
v186 4/20/92 Port to MS-DOS (Microsoft C).
v187 4/23/92 Added -D option & TAB_COMPLETE_FILENAME.
v188 4/28/92 Added command line editing features.
v189 12/8/92 Fix mem overrun in anscreen.c:init;
fix edit_list to recover from bin file.
v190 2/13/93 Make TAB enter one filename at a time;
create ^L with old TAB functionality.
v191 3/10/93 Defer creating "flash" page for MS-DOS.
v192 9/6/93 Add BACK-TAB.
v193 9/17/93 Simplify binary_file handling.
v194 1/4/94 Add rudiments of alt_filename handling.
v195 1/11/94 Port back to Unix; support keypad.
-----------------------------------------------------------------
v196 6/7/94 Fix bug with bad filename; fix IFILE
type problem. (thanks to David MacKenzie)
v197 6/7/94 Fix bug with .less tables inserted wrong.
v198 6/23/94 Use autoconf installation technology.
(thanks to David MacKenzie)
v199 6/29/94 Fix MS-DOS build (thanks to Tim Wiegman).
v200 7/25/94 Clean up copyright, minor fixes.
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v201 7/27/94 Check for no memcpy; add casts to calloc;
look for regcmp in libgen.a.
(thanks to Kaveh Ghazi).
v202 7/28/94 Fix bug in edit_next/edit_prev with
non-existent files.
v203 8/2/94 Fix a variety of configuration bugs on
various systems. (thanks to Sakai
Kiyotaka, Harald Koenig, Bjorn Brox,
Teemu Rantanen, and Thorsten Lockert)
v204 8/3/94 Use strerror if available.
(thanks to J.T. Conklin)
v205 8/5/94 Fix bug in finding "me" termcap entry.
(thanks to Andreas Stolcke)
8/10/94 v205+: Change BUFSIZ to LBUFSIZE to avoid name
conflict with stdio.h.
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v206 8/10/94 Use initial_scrpos for -t to avoid
displaying first page before init().
(thanks to Dominique Petitpierre)
v207 8/12/94 Fix bug if stdout is not tty.
v208 8/16/94 Fix bug in close_altfile if goto err1
in edit_ifile. (Thanks to M.J. Hewitt)
v209 8/16/94 Change scroll to wscroll to avoid
conflict with library function.
v210 8/16/94 Fix bug with bold on 8 bit chars.
(thanks to Vitor Duarte)
v211 8/16/94 Don't quit on EOI in jump_loc / forw.
v212 8/18/94 Use time_t if available.
v213 8/20/94 Allow ospeed to be defined in termcap.h.
v214 8/20/94 Added HILITE_SEARCH, -F, ESC-u cmd.
(thanks to Paul Lew and Bob Byrnes)
v215 8/23/94 Fix -i toggle behavior.
v216 8/23/94 Process BS in all searches, not only -u.
v217 8/24/94 Added -X flag.
v218 8/24/94 Reimplement undo_search.
v219 8/24/94 Find tags marked with line number
instead of pattern.
v220 8/24/94 Stay at same position after SIG_WINCH.
v221 8/24/94 Fix bug in file percentage in big file.
v222 8/25/94 Do better if can't reopen current file.
v223 8/27/94 Support setlocale.
(thanks to Robert Joop)
v224 8/29/94 Revert v216: process BS in search
only if -u.
v225 9/6/94 Rewrite undo_search again: toggle.
v226 9/15/94 Configuration fixes.
(thanks to David MacKenzie)
v227 9/19/94 Fixed strerror config problem.
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v228 9/21/94 Fix bug in signals: repeated calls to
get_editkeys overflowed st_edittable.
v229 9/21/94 Fix "Nothing to search" error if -a
and SRCH_PAST_EOF.
v230 9/21/94 Don't print extra error msg in search
after regerror().
v231 9/22/94 Fix hilite bug if search matches 0 chars.
(thanks to John Polstra)
v232 9/23/94 Deal with weird systems that have
termios.h but not tcgetattr().
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v233 9/26/94 Use get_term() instead of pos_init() in
psignals to re-get lower_left termcap.
(Thanks to John Malecki)
v234 9/26/94 Make MIDDLE closer to middle of screen.
v235 9/27/94 Use local strchr if system doesn't have.
v236 9/28/94 Don't use libucb; use libterm if
libtermcap & libcurses doesn't work.
(Fix for Solaris; thanks to Frank Kaefer)
v237 9/30/94 Use system isupper() etc if provided.
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v238 10/6/94 Make binary non-blinking if LESSBINFMT
is set to a string without a *.
v239 10/7/94 Don't let delimit_word run back past
beginning of cmdbuf.
v240 10/10/94 Don't write into termcap buffer.
(Thanks to Benoit Speckel)
v241 10/13/94 New lesskey file format.
Don't expand filenames in search command.
v242 10/14/94 Allow lesskey specification of "literal".
v243 10/14/94 Add #stop command to lesskey.
v244 10/16/94 Add -f flag to lesskey.
v245 10/25/94 Allow TAB_COMPLETE_FILENAME to be undefd.
v246 10/27/94 Move help file to /usr/local/share.
v247 10/27/94 Add -V option.
v248 11/5/94 Add -V option to lesskey.
v249 11/5/94 Remove -f flag from lesskey; default
input file is ~/.lesskey.in, not stdin.
v250 11/7/94 Lesskey input file "-" means stdin.
v251 11/9/94 Convert cfgetospeed result to ospeed.
(Thanks to Andrew Chernov)
v252 11/16/94 Change default lesskey input file from
.lesskey.in to .lesskey.
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v253 11/21/94 Fix bug when tags file has a backslash.
v254 12/6/94 Fix -k option.
v255 12/8/94 Add #define EXAMINE to disable :e etc.
v256 12/10/94 Change highlighting: only highlite search
results (but now it is reliable).
v257 12/10/94 Add goto_line and repaint_highlight
to optimize highlight repaints.
v258 12/12/94 Fixup in hilite_line if BS_SPECIAL.
v259 12/12/94 Convert to autoconf 2.0.
v260 12/13/94 Add SECURE define.
v261 12/14/94 Use system WERASE char as EC_W_BACKSPACE.
v262 12/16/94 Add -g/-G flag and screen_hilite.
v263 12/20/94 Reimplement/optimize -G flag behavior.
v264 12/23/94 Allow EXTRA string after line-edit cmd
in lesskey file.
v265 12/24/94 Add LESSOPEN=|cmd syntax.
v266 12/26/94 Add -I flag.
v267 12/28/94 Formalize the four-byte header emitted
by a LESSOPEN pipe.
v268 12/28/94 Get rid of four-byte header.
v269 1/2/95 Close alt file before open new one.
Avoids multiple popen().
v270 1/3/95 Use VISUAL; use S_ISDIR/S_ISREG; fix
config problem with Solaris POSIX regcomp.
v271 1/4/95 Don't quit on read error.
v272 1/5/95 Get rid of -L.
v273 1/6/95 Fix ch_ungetchar bug; don't call
LESSOPEN on a pipe.
v274 1/6/95 Ported to OS/2 (thanks to Kai Uwe Rommel)
v275 1/18/95 Fix bug if toggle -G at EOF.
v276 1/30/95 Fix OS/2 version.
v277 1/31/95 Add "next" charset; don't display ^X
for X > 128.
v278 2/14/95 Change default for -G.
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v279 2/22/95 Add GNU options --help, --version.
Minor config fixes.
v280 2/24/95 Clean up calls to glob(); don't set #
if we can't open the new file.
v281 2/24/95 Repeat search should turn on hilites.
v282 3/2/95 Minor fixes.
v283 3/2/95 Fix homefile; make OS2 look in $HOME.
v284 3/2/95 Error if "v" on LESSOPENed file;
"%" figures out file size on pipe.
v285 3/7/95 Don't set # in lsystem;
lesskey try $HOME first.
v286 3/7/95 Reformat change history (too much free time?).
v287 3/8/95 Fix hilite bug if overstrike multiple chars.
v288 3/8/95 Allow lesskey to override get_editkey keys.
v289 3/9/95 Fix adj_hilite bug when line gets processed by
hilite_line more than once.
v290 3/9/95 Make configure automatically. Fix Sequent problem
with incompatible sigsetmask().
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v291 3/21/95 Add #env to lesskey. Fix MS-DOS build.
Posted to simtel.
-----------------------------------------------------------------
v292 4/24/95 Add MS-DOS support for Borland C.
Fix arrow keys in MS-DOS versions.
v293 4/28/95 Add auto-versioning stuff to make dist.
v294 5/12/95 Fix Borland build.
v295 1/20/96 Fix search on squished file; add /@@.
v296 1/23/96 Allow cmdbuf larger than screen width.
v297 1/24/96 Don't call termcap if tgetent fails;
add #defines for buffers.
v298 1/24/96 Change @@ to ^K.
Add alternate search modifiers ^N, ^F, ^E.
v299 1/25/96 Fix percent overflow in jump_percent (thanks to Brent Wiese);
don't send "ti" after shell command till RETURN pressed.
v300 1/25/96 Change -U to print tabs as ^I.
v301 1/30/96 Make hilites work in cmd F output.
v302 1/31/96 Fix cmd F to notice window-change signals.
v303 1/31/96 Add ESC-SPACE command.
v304 2/1/96 Add ^R search modifier; add LESSSECURE.
v305 2/2/96 Workaround Linux /proc kernel bug; add LESSKEY.
v306 3/16/96 Minor fixes.
v307 3/25/96 Allow cmd line arg "--"; fix DOS & OS/2 defines.h.
v308 4/4/96 Port to OS-9 (thanks to Boisy Pitre); fix -d.
v309 4/9/96 Fix OS-9 version; fix tags bug with "$".
v310 4/10/96 Get rid of HELPFILE.
v311 4/22/96 Add Windows32 support; merge doscreen.c into screen.c.
v312 4/24/96 Don't quit after "cannot reopen" error.
v313 4/25/96 Added horizontal scrolling.
v314 4/26/96 Modified -e to quit on reaching end of a squished file.
v315 4/26/96 Fix "!;TAB" bug.
v316 5/2/96 Make "|a" when (a < curr screen) go to end of curr screen.
v317 5/14/96 Various fixes for the MS-DOS and OS/2 builds.
Added ## and %% handling for filenames
v318 5/29/96 Port to OS-9 Microware compiler; minor fixes
(thanks to Martin Gregorie).
v319 7/8/96 Fix Windows port (thanks to Jeff Paquette).
v320 7/11/96 Final fixes for Windows port.
v321 7/18/96 Minor fixes.
Posted to Web page.
-----------------------------------------------------------------
v322 8/13/96 Fix bug in shell escape from help file; add support for
Microsoft Visual C under Windows; numerous small fixes.
v323 8/19/96 Fixes for Windows version (thanks to Simon Munton);
fix for Linux library weirdness (thanks to Jim Diamond);
port to DJGPP (thanks to Eli Zaretskii).
v324 8/21/96 Add support for spaces in filenames (thanks to Simon Munton).
v325 8/21/96 Add lessecho, for spaces in filenames under Unix.
v326 8/27/96 Fix DJGPP version.
v327 9/1/96 Reorganize lglob, make spaces in filenames work better in Unix.
v328 10/7/96 Append / to directory name in filename completion.
Fix MS-DOS and OS-9 versions.
v329 10/11/96 Fix more MS-DOS bugs; add LESSSEPARATOR; add -" option.
Add LESSMETACHARS, LESSMETAESCAPE.
v330 10/21/96 Minor fixes.
Posted to Web page.
-----------------------------------------------------------------
v331 4/22/97 Various Windows fixes (thanks to Gurusamy Sarathy).
v332 4/22/97 Enter filenames from cmd line into edit history.
Posted to Web page.
-----------------------------------------------------------------
v333 3/4/99 Changed -w to highlite new line after forward movement.
v334 3/9/99 Avoid overflowing prompt buffer; add %d and %D.
v335 3/20/99 Add EBCDIC support (thanks to Thomas Dorner).
Use HOMEDRIVE/HOMEPATH on Windows (thanks to Preston Bannister).
Posted to Web page.
-----------------------------------------------------------------
v336 4/8/99 Fix installation bugs.
v337 4/9/99 Fix another installation bug.
Posted to Web page.
-----------------------------------------------------------------
v338 4/13/99 Add support for long option names.
v339 4/18/99 Add \k, long option names to lesskey. Add -^P. Add :d.
v340 4/21/99 Add regexec2. Fix Windows build.
Posted to Web page.
-----------------------------------------------------------------
v341 5/6/99 Add -F option; %c & ?c prompt escapes.
(Thanks to Michele Maltoni)
v342 7/22/99 Add system-wide lesskey file; allow GPL or Less License.
v343 9/23/99 Support UTF-8 (Thanks to Robert Brady).
Add %P and ?P in prompts.
v344 10/27/99 -w highlights target line of g and p commands.
v345 10/29/99 Make -R pass thru ESC but not other control chars.
Posted to Web page.
-----------------------------------------------------------------
v346 11/4/99 Fix bugs in long option processing; R cmd should clear hilites.
Posted to Web page.
-----------------------------------------------------------------
v347 12/13/99 Fixes for DJGPP version (thanks to Eli Zaretskii).
v348 12/28/99 Fix deleting file with marks (thanks to Dimitar Jekov).
Fix color problem in DJGPP version (thanks to Eli Zaretskii).
v349 1/24/00 Fix minor DJGPP bugs; check environment vars for UTF-8;
add --with-editor (thanks to Eli, Markus Kuhn, Thomas Schoepf).
v350 3/1/00 Fix clear-while-standout bug.
v351 3/5/00 Change -M and = prompts to show top & bottom line number.
Posted to Web page.
-----------------------------------------------------------------
v352 3/8/00 Fix scan_option NULL dereference.
-----------------------------------------------------------------
v353 3/20/00 Fix SECURE compile bug, allow space after numeric option.
v354 3/23/00 Add support for PCRE; add --with-regex configure option.
-----------------------------------------------------------------
v355 6/28/00 Add -# option (thanks to Andy Levinson).
v356 7/5/00 Add -J option.
v357 7/6/00 Support sigprocmask.
-----------------------------------------------------------------
v358 7/8/00 Fix problems with #stop in lesskey file.
Posted to Web page.
-----------------------------------------------------------------
v359 9/10/00 Fixes for Win32 display problems (thanks to Maurizio Vairani).
v360 1/17/01 Move sysless to etc.
v361 12/4/01 Add IBM-1047 charset & EBCDIC fixes (thanks to Thomas Dorner).
Fix 32 bit dependencies (thanks to Paul Eggert).
Fix UTF-8 overstriking (thanks to Robert Brady).
v362 12/4/01 Make status column show search targets.
v363 12/6/01 Add --no-keypad option.
Add variable width tabstops (thanks to Peter Samuelson).
v364 12/10/01 Better handling of very long lines in input;
Fix horizontal shifting of colored text.
v365 12/11/01 Fix overstriking of tabs;
Add support for global(1) and multiple tag matches
(thanks to Shigio Yamaguchi and Tim Vanderhoek).
v366 12/11/01 Fixes for OS/2 (thanks to Kyosuke Tokoro).
v367 12/13/01 Allow -D and -x options to terminate without dollar sign;
Right/left arrow when entering N are shift cmds, not line edit.
v368 12/18/01 Update lesskey commands.
v370 12/23/01 Fix tags error messages.
Posted to Web page.
-----------------------------------------------------------------
v371 12/26/01 Fix new_file bug; use popen in Windows version;
fix some compiler warnings.
v372 12/29/01 Make -b be in units of 1K.
v373 1/14/02 Improve handling of filenames containing shell metachars.
v374 2/7/02 Fix memory leak; fix bug in -x argument parsing.
v375 4/7/02 Fix searching for SGR sequences; fix SECURE build;
add SGR support to DJGPP version (thanks to Eli Zaretskii).
v376 6/10/02 Fix bug in overstriking mulitbyte UTF-8 characters
(thanks to Jungshik Shin).
Posted to Web page.
-----------------------------------------------------------------
v377 9/10/02 Fix bug in Windows version when file contains CR;
fix bug in search highlights with -R;
make initial buffer limit really be 64K not unlimited.
v378 9/30/02 Misc bug fixes and compiler warning cleanup.
Posted to Web page.
-----------------------------------------------------------------
v379 11/23/02 Add -L option; fix bug with ctrl-K in lesskey files;
improve UTF-8 overstriking and underscore overstriking;
fix minor man page problems; change to autoconf 2.54.
v380 11/24/02 Make LINENUM same as POSITION.
v381 11/28/02 Make -N use 7 columns for line number if possible.
-----------------------------------------------------------------
v382 2/3/04 Remove copyrighted code.
-----------------------------------------------------------------
v383 2/16/04 Add history file; add -K option; improve UTF-8 handling;
fix some signed char bugs (thanks to Christian Biere);
fix some upper/lower case bugs (thanks to Bjoern Jacke);
add erase2 char (thanks to David Lawrence);
add windows charset (thanks to Dimitar Zhekov).
v384 2/20/04 Improvements in UTF-8 handling.
v385 2/23/04 Fix UTF-8 output bug.
-----------------------------------------------------------------
v386 9/13/05 Improvements to UTF-8 shift & color (thanks to Charles Levert);
protect against invalid LESSOPEN and LESSCLOSE values.
v387 9/14/05 Update Charles Levert's UTF-8 patch.
v388 9/14/05 Change history behavior; change most sprintf calls to snprintf.
v389 9/14/05 Fix copy & paste with long lines; improve performance of
expand_linebuf; fix crash in init_mlist;
v390 9/15/05 Show search matches in status column even if -G is set.
-----------------------------------------------------------------
v391 9/17/05 Fix bugs.
v392 10/14/05 Fix line wrapping bug.
v393 10/19/05 Allow multiple attributes per char; fix bold+underline bug
(thanks again to Charles Levert).
v394 11/8/05 Fix prompt bug; fix compile problem in Windows build.
*/
char version[] = "394";

View file

@ -1,100 +0,0 @@
#! /bin/sh
#
# $NetBSD: less2netbsd,v 1.8 2008/05/29 14:51:27 mrg Exp $
#
# Copyright (c) 1996, 2003 Matthew R. Green
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, 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.
# less2netbsd: convert a less source tree into a netbsd less source
# tree, under src/usr.bin/less ready for importing. note that you need
# to run ./configure to generate defines.h (a bug in less 381's configure
# wrongly does not find sigset_t on NetBSD; correct this in defines.h.)
if [ $# -ne 2 ]; then echo "less2netbsd src dest"; exit 1; fi
r=$1
d=$2/less
case "$d" in
/*)
;;
*)
d=`/bin/pwd`/$d
;;
esac
case "$r" in
/*)
;;
*)
r=`/bin/pwd`/$r
;;
esac
echo preparing directory $d
rm -rf $d
mkdir -p $d; cd $d
mkdir -p src/usr.bin/less/less src/usr.bin/less/lesskey src/usr.bin/less/lessecho
### start less ###############################
cd $r
echo less:
src="main.c screen.c brac.c ch.c charset.c cmdbuf.c command.c decode.c edit.c filename.c forwback.c help.c ifile.c input.c jump.c line.c linenum.c lsystem.c mark.c optfunc.c option.c opttbl.c os.c output.c position.c prompt.c search.c signal.c tags.c ttyin.c version.c"
src="$src charset.h cmd.h defines.h funcs.h less.h lesskey.h lglob.h option.h pckeys.h position.h regexp.h"
src="$src INSTALL LICENSE NEWS README less.nro"
pax -rvw $src $d/src/usr.bin/less/less
cd $d/src/usr.bin/less/less
mv less.nro less.1
### end less ###############################
### start lesskey ###############################
cd $r
echo lesskey:
src='lesskey.c lesskey.h lesskey.nro'
pax -rvw $src $d/src/usr.bin/less/lesskey
cd $d/src/usr.bin/less/lesskey
mv lesskey.nro lesskey.1
### end lesskey ###############################
### start lessecho ###############################
cd $r
echo lessecho:
src='lessecho.c'
pax -rvw $src $d/src/usr.bin/less/lessecho
### end lesskey ###############################
find $d -name '*.[ch]' -print | while read c; do
chmod u+w $c
done
echo done
exit 0

View file

@ -1,10 +0,0 @@
# $NetBSD: Makefile,v 1.3 2002/09/18 14:00:38 lukem Exp $
NOMAN= # defined
PROG= lessecho
SRCS= lessecho.c version.c
CPPFLAGS+=-I${.CURDIR}/../less
.PATH: ${.CURDIR}/../less
.include <bsd.prog.mk>

View file

@ -1,9 +0,0 @@
# $NetBSD: Makefile,v 1.5 1997/10/24 09:00:39 lukem Exp $
PROG= lesskey
SRCS= lesskey.c version.c
CPPFLAGS+=-I${.CURDIR}/../less
.PATH: ${.CURDIR}/../less
.include <bsd.prog.mk>

View file

@ -1,40 +0,0 @@
/*
* Copyright (C) 1984-2004 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.
*/
/*
* Format of a lesskey file:
*
* LESSKEY_MAGIC (4 bytes)
* sections...
* END_LESSKEY_MAGIC (4 bytes)
*
* Each section is:
*
* section_MAGIC (1 byte)
* section_length (2 bytes)
* key table (section_length bytes)
*/
#define C0_LESSKEY_MAGIC '\0'
#define C1_LESSKEY_MAGIC 'M'
#define C2_LESSKEY_MAGIC '+'
#define C3_LESSKEY_MAGIC 'G'
#define CMD_SECTION 'c'
#define EDIT_SECTION 'e'
#define VAR_SECTION 'v'
#define END_SECTION 'x'
#define C0_END_LESSKEY_MAGIC 'E'
#define C1_END_LESSKEY_MAGIC 'n'
#define C2_END_LESSKEY_MAGIC 'd'
/* */
#define KRADIX 64

View file

@ -2130,6 +2130,7 @@
./usr/man/man1/ld.elf_so.1 minix-sys ./usr/man/man1/ld.elf_so.1 minix-sys
./usr/man/man1/leave.1 minix-sys ./usr/man/man1/leave.1 minix-sys
./usr/man/man1/less.1 minix-sys ./usr/man/man1/less.1 minix-sys
./usr/man/man1/lessecho.1 minix-sys
./usr/man/man1/lesskey.1 minix-sys ./usr/man/man1/lesskey.1 minix-sys
./usr/man/man1/lex.1 minix-sys ./usr/man/man1/lex.1 minix-sys
./usr/man/man1/linkfarm.1 minix-sys ./usr/man/man1/linkfarm.1 minix-sys

View file

@ -2,8 +2,10 @@
.include <bsd.own.mk> .include <bsd.own.mk>
SUBDIR= byacc file flex mdocml \ SUBDIR= byacc file flex less \
libarchive libarchive mdocml \
.if (${MKATF} != "no") .if (${MKATF} != "no")
SUBDIR+= atf SUBDIR+= atf
.endif .endif

7
external/bsd/less/Makefile vendored Normal file
View file

@ -0,0 +1,7 @@
# $NetBSD: Makefile,v 1.1 2011/07/03 18:02:00 tron Exp $
.include <bsd.own.mk>
SUBDIR= bin
.include <bsd.subdir.mk>

4
external/bsd/less/Makefile.inc vendored Normal file
View file

@ -0,0 +1,4 @@
# $NetBSD: Makefile.inc,v 1.1 2011/07/03 18:02:00 tron Exp $
LESS_DISTDIR= ${NETBSDSRCDIR}/external/bsd/less/dist
.PATH: ${LESS_DISTDIR}

7
external/bsd/less/bin/Makefile vendored Normal file
View file

@ -0,0 +1,7 @@
# $NetBSD: Makefile,v 1.1 2011/07/03 18:02:01 tron Exp $
.include <bsd.own.mk>
SUBDIR= less lessecho lesskey
.include <bsd.subdir.mk>

7
external/bsd/less/bin/Makefile.inc vendored Normal file
View file

@ -0,0 +1,7 @@
# $NetBSD: Makefile.inc,v 1.1 2011/07/03 18:02:01 tron Exp $
.include "../Makefile.inc"
BINDIR= /usr/bin
CPPFLAGS+= -I${LESS_DISTDIR} -DBINDIR=\"${BINDIR}\" -DSYSDIR=\"/etc\"

20
external/bsd/less/bin/less/Makefile vendored Normal file
View file

@ -0,0 +1,20 @@
# $NetBSD: Makefile,v 1.2 2011/07/03 18:15:18 tron Exp $
.include <bsd.own.mk>
PROG= less
SRCS= main.c screen.c brac.c ch.c charset.c cmdbuf.c \
command.c cvt.c decode.c edit.c filename.c forwback.c \
help.c ifile.c input.c jump.c line.c linenum.c \
lsystem.c mark.c optfunc.c option.c opttbl.c os.c \
output.c pattern.c position.c prompt.c search.c signal.c \
tags.c ttyin.c version.c
LDADD+= -lcurses -ltermcap
DPADD+= ${LIBCURSES}
MLINKS= less.1 more.1 less.1 page.1
LINKS= ${BINDIR}/less ${BINDIR}/more ${BINDIR}/less ${BINDIR}/page
.include "bsd.prog.mk"

View file

@ -0,0 +1,9 @@
# $NetBSD: Makefile,v 1.1 2011/07/03 18:02:01 tron Exp $
.include <bsd.own.mk>
PROG= lessecho
SRCS= lessecho version.c
.include "bsd.prog.mk"

12
external/bsd/less/bin/lesskey/Makefile vendored Normal file
View file

@ -0,0 +1,12 @@
# $NetBSD: Makefile,v 1.1 2011/07/03 18:02:01 tron Exp $
.include <bsd.own.mk>
PROG= lesskey
SRCS= lesskey version.c
LDADD+= -ltermcap
DPADD+= ${LIBTERM}
.include "bsd.prog.mk"

674
external/bsd/less/dist/COPYING vendored Normal file
View file

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

View file

@ -2,7 +2,7 @@
------------ ------------
Less Less
Copyright (C) 1984-2005 Mark Nudelman Copyright (C) 1984-2011 Mark Nudelman
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions

133
external/bsd/less/dist/Makefile.aut vendored Normal file
View file

@ -0,0 +1,133 @@
# Makefile for authoring less.
EMAIL = markn@greenwoodsoftware.com
HOMEPAGE = http://www.greenwoodsoftware.com/less
SHELL = /bin/sh
RCS = rcs
NROFF = nroff -man
srcdir = .
SRC = \
main.c screen.c brac.c ch.c charset.c cmdbuf.c \
command.c cvt.c decode.c edit.c filename.c forwback.c \
help.c ifile.c input.c jump.c line.c linenum.c \
lsystem.c mark.c optfunc.c option.c opttbl.c os.c \
output.c pattern.c position.c prompt.c search.c signal.c \
tags.c ttyin.c version.c
DISTFILES_W = \
defines.ds Makefile.dsb Makefile.dsg Makefile.dsu \
defines.o2 Makefile.o2e \
defines.o9 Makefile.o9c Makefile.o9u \
defines.wn Makefile.wnm Makefile.wnb
DISTFILES = \
${SRC} regexp.c regexp.h \
COPYING INSTALL LICENSE Makefile.in Makefile.aut NEWS README \
configure configure.ac lesskey.c lessecho.c scrsize.c \
charset.h cmd.h funcs.h lglob.h less.h lesskey.h option.h \
pckeys.h pattern.h position.h \
install.sh defines.h.in mkinstalldirs \
less.nro less.man lesskey.nro lesskey.man lessecho.nro lessecho.man \
less.hlp \
mkfuncs.awk mkhelp.c \
${DISTFILES_W}
all: help.c funcs.h ${srcdir}/configure
release: .FORCE
${MAKE} -f Makefile.aut tagall
${MAKE} -f Makefile.aut all
${MAKE} -f Makefile.aut clean
${MAKE} -f Makefile.aut dist
.FORCE:
help.c: less.hlp mkhelp
-mv -f ${srcdir}/help.c ${srcdir}/help.c.old
rm -rf help.c
./mkhelp < less.hlp > help.c
if cmp -s help.c help.c.old; then mv help.c.old help.c; fi
mkhelp: mkhelp.c
${CC} -o mkhelp mkhelp.c
${srcdir}/configure: ${srcdir}/configure.ac \
${srcdir}/Makefile.in
cd ${srcdir}; autoheader; autoconf
funcs.h: ${SRC:%=${srcdir}/%}
-mv -f ${srcdir}/funcs.h ${srcdir}/funcs.h.old
awk -f ${srcdir}/mkfuncs.awk ${SRC:%=${srcdir}/%} >${srcdir}/funcs.h
if cmp -s funcs.h funcs.h.old; then mv funcs.h.old funcs.h; fi
lint:
lint -I. ${CPPFLAGS} ${SRC}
clean:
rm -f Makefile config.status config.log config.cache defines.h stamp-h \
README NEWS \
less.nro less.man lesskey.nro lesskey.man lessecho.nro lessecho.man
distclean: clean
realclean: clean
REPLACE_VERSION = \
@REL=`sed -e '/char version/!d' -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q ${srcdir}/version.c`; \
DT=`date '+%d %h %Y'`; \
echo "Stuffing version number $$REL into $@"; \
sed \
-e "s;@@VERSION@@;$$REL;" \
-e "s;@@DATE@@;$$DT;" \
-e "s;@@EMAIL@@;${EMAIL};" \
-e "s;@@HOMEPAGE@@;${HOMEPAGE};" >$@
${srcdir}/README: ${srcdir}/README.VER ${srcdir}/version.c
${REPLACE_VERSION} ${srcdir}/README.VER
${srcdir}/NEWS: ${srcdir}/NEWS.VER ${srcdir}/version.c
${REPLACE_VERSION} ${srcdir}/NEWS.VER
${srcdir}/less.nro: ${srcdir}/less.nro.VER ${srcdir}/version.c
${REPLACE_VERSION} ${srcdir}/less.nro.VER
${srcdir}/lesskey.nro: ${srcdir}/lesskey.nro.VER ${srcdir}/version.c
${REPLACE_VERSION} ${srcdir}/lesskey.nro.VER
${srcdir}/lessecho.nro: ${srcdir}/lessecho.nro.VER ${srcdir}/version.c
${REPLACE_VERSION} ${srcdir}/lessecho.nro.VER
${srcdir}/less.hlp: ${srcdir}/less.hlp.VER ${srcdir}/version.c
${REPLACE_VERSION} ${srcdir}/less.hlp.VER
${srcdir}/less.man: ${srcdir}/less.nro
${NROFF} ${srcdir}/less.nro >${srcdir}/less.man
${srcdir}/lesskey.man: ${srcdir}/lesskey.nro
${NROFF} ${srcdir}/lesskey.nro >${srcdir}/lesskey.man
${srcdir}/lessecho.man: ${srcdir}/lessecho.nro
${NROFF} ${srcdir}/lessecho.nro >${srcdir}/lessecho.man
distfiles: ${DISTFILES}
dist: ${DISTFILES}
if [ ! -d ${srcdir}/release ]; then mkdir ${srcdir}/release; fi
@cd ${srcdir}; \
REL=`sed -e '/char version/!d' -e 's/[^0-9.]*\([0-9.]*\).*/less-\1/' -e q version.c`; \
rm -rf release/$$REL; mkdir release/$$REL; \
echo "Preparing $$REL"; \
rm -rf $$REL; mkdir $$REL; \
for file in ${DISTFILES}; do \
cp -p $$file $$REL; \
chmod -w $$REL/$$file; \
done; \
cd $$REL; chmod +w ${DISTFILES_W}; cd ..; \
echo "Creating release/$$REL/$$REL.tar.gz"; \
tar -cf - $$REL | gzip -c >release/$$REL/$$REL.tar.gz; \
echo "Signing release/$$REL/$$REL.tar.gz"; \
gpg --detach-sign release/$$REL/$$REL.tar.gz; \
echo "Creating release/$$REL/$$REL.zip"; \
zip -rq release/$$REL/$$REL.zip $$REL; \
rm -rf $$REL
tagall:
@REL=`sed -e '/char version/!d' -e 's/[^0-9.]*\([0-9.]*\).*/v\1/' -e q ${srcdir}/version.c`; \
echo "tagging $$REL"; \
for f in ${srcdir}/RCS/*,v; do \
REV=`co -p $$f 2>&1 | sed -e '1d' -e '3,$$d' -e 's/revision //'`; \
${RCS} -N$$REL:$$REV $$f; \
done

51
external/bsd/less/dist/Makefile.dsb vendored Normal file
View file

@ -0,0 +1,51 @@
# Makefile for less.
# MS-DOS version (Borland C/C++ 4.02)
#### Start of system configuration section. ####
CC = bcc
LIBDIR = \bc\lib
CFLAGS = -A- -mm -O2 -w- -1- -2- -a -d -Z
LDFLAGS = -mm
LIBS =
EXT = .EXE
#### End of system configuration section. ####
# This rule allows us to supply the necessary -D options
# in addition to whatever the user asks for.
.c.obj:
$(CC) -c -I. $(CPPFLAGS) $(CFLAGS) $<
OBJ = \
main.obj screen.obj brac.obj ch.obj charset.obj cmdbuf.obj \
command.obj cvt.obj decode.obj edit.obj filename.obj forwback.obj \
help.obj ifile.obj input.obj jump.obj line.obj linenum.obj \
lsystem.obj mark.obj optfunc.obj option.obj opttbl.obj os.obj \
output.obj pattern.obj position.obj prompt.obj search.obj signal.obj \
tags.obj ttyin.obj version.obj
all: less$(EXT) lesskey$(EXT)
# This is really horrible, but the command line is too long for
# MS-DOS if we try to link $(OBJ).
less$(EXT): $(OBJ)
ren lesskey.obj lesskey.obo
$(CC) $(LDFLAGS) -e$@ *.obj $(LIBS)
ren lesskey.obo lesskey.obj
lesskey$(EXT): lesskey.obj version.obj
$(CC) $(LDFLAGS) -e$@ lesskey.obj version.obj $(LIBS)
defines.h: defines.ds
-del defines.h
-copy defines.ds defines.h
$(OBJ): less.h defines.h
clean:
-del *.obj
-del less.exe
-del lesskey.exe

92
external/bsd/less/dist/Makefile.dsg vendored Normal file
View file

@ -0,0 +1,92 @@
# Makefile for less under DJGPP v2.0 or later.
#### Start of system configuration section. ####
srcdir = .
VPATH = .
CC = gcc
INSTALL = ginstall -c
INSTALL_PROGRAM = ginstall
INSTALL_DATA = ginstall -m 644
AWK = gawk
CFLAGS = -O2 -g
CFLAGS_COMPILE_ONLY = -c
#LDFLAGS = -s
LDFLAGS = -g
O=o
LIBS =
prefix = /dev/env/DJDIR
exec_prefix = ${prefix}
bindir = ${exec_prefix}/bin
sysconfdir = ${prefix}/etc
mandir = ${prefix}/man
manext = 1
#### End of system configuration section. ####
# This rule allows us to supply the necessary -D options
# in addition to whatever the user asks for.
.c.o:
${CC} -I. ${CFLAGS_COMPILE_ONLY} -DBINDIR=\"${bindir}\" -DSYSDIR=\"${sysconfdir}\" ${CPPFLAGS} ${CFLAGS} $<
OBJ = \
main.${O} screen.${O} brac.${O} ch.${O} charset.${O} cmdbuf.${O} \
command.${O} cvt.${O} decode.${O} edit.${O} filename.${O} forwback.${O} \
help.${O} ifile.${O} input.${O} jump.${O} line.${O} linenum.${O} \
lsystem.${O} mark.${O} optfunc.${O} option.${O} opttbl.${O} os.${O} \
output.${O} pattern.${O} position.${O} prompt.${O} search.${O} signal.${O} \
tags.${O} ttyin.${O} version.${O}
all: less lesskey lessecho
less: ${OBJ}
${CC} ${LDFLAGS} -o $@ ${OBJ} ${LIBS}
lesskey: lesskey.${O} version.${O}
${CC} ${LDFLAGS} -o $@ lesskey.${O} version.${O}
lessecho: lessecho.${O} version.${O}
${CC} ${LDFLAGS} -o $@ lessecho.${O} version.${O}
defines.h: defines.ds
command.com /c copy $< $@
${OBJ}: ${srcdir}/less.h defines.h ${srcdir}/funcs.h
install: all ${srcdir}/less.man ${srcdir}/lesskey.man
${INSTALL_PROGRAM} less.exe ${bindir}/less.exe
${INSTALL_PROGRAM} lesskey.exe ${bindir}/lesskey.exe
${INSTALL_PROGRAM} lessecho.exe ${bindir}/lessecho.exe
${INSTALL_DATA} ${srcdir}/less.man ${mandir}/man${manext}/less.${manext}
${INSTALL_DATA} ${srcdir}/lesskey.man ${mandir}/man${manext}/lesskey.${manext}
info:
install-info:
dvi:
check:
installcheck:
TAGS:
etags *.c *.h
newfuncs:
command.com /c if exist funcs.h del funcs.h
${AWK} -f mkfuncs.awk ${OBJ:.${O}=.c} > funcs.h
clean:
command.com /c for %f in (*.${O} less lesskey lessecho *.exe) do if exist %f del %f
mostlyclean: clean
distclean: clean
command.com /c if not exist Makefile.dsg ren Makefile Makefile.dsg
command.com /c if not exist defines.ds ren defines.h defines.ds
command.com /c for %f in (Makefile defines.h) do if exist %f del %f
realclean: distclean
command.com /c if exist TAGS del TAGS

59
external/bsd/less/dist/Makefile.dsu vendored Normal file
View file

@ -0,0 +1,59 @@
# Makefile for less.
# MS-DOS version
#### Start of system configuration section. ####
CC = cl
# Change the following directories to match your installation.
LIBDIR = c:\msvc\lib
INCDIR = c:\msvc\include
# CFLAGS are compile-time options and LDFLAGS are link-time options. They are
# customized for MSVC 1.0 (MSC 8.0). If you have a different version of the
# compiler, you may need to change some of the options to their equivalents.
# -Ot optimize for speed
# -AL large memory model
# -Za ANSI C conformance
# -nologo suppress MSVC banners
# -onerror:noexe no .EXE file if link errors occur
CFLAGS = -Ot -AL -Za -nologo
LDFLAGS = -onerror:noexe -nologo
LIBS = $(LIBDIR)\llibce.lib $(LIBDIR)\graphics.lib
#### End of system configuration section. ####
# This rule allows us to supply the necessary -D options
# in addition to whatever the user asks for.
.c.obj:
$(CC) -c -I. -I$(INCDIR) $(CPPFLAGS) $(CFLAGS) $<
OBJ = \
main.obj screen.obj brac.obj ch.obj charset.obj cmdbuf.obj \
command.obj cvt.obj decode.obj edit.obj filename.obj forwback.obj \
help.obj ifile.obj input.obj jump.obj line.obj linenum.obj \
lsystem.obj mark.obj optfunc.obj option.obj opttbl.obj os.obj \
output.obj pattern.obj position.obj prompt.obj search.obj signal.obj \
tags.obj ttyin.obj version.obj
all: less lesskey
# This is really horrible, but the command line is too long for
# MS-DOS if we try to link $(OBJ).
less: $(OBJ)
-if exist lesskey.obj del lesskey.obj
$(CC) $(LDFLAGS) -o $@ *.obj $(LIBS)
lesskey: lesskey.obj version.obj
$(CC) $(LDFLAGS) -o $@ lesskey.obj version.obj $(LIBS)
defines.h: defines.ds
-del defines.h
-copy defines.ds defines.h
$(OBJ): less.h defines.h
clean:
-del *.obj
-del less.exe
-del lesskey.exe

122
external/bsd/less/dist/Makefile.in vendored Normal file
View file

@ -0,0 +1,122 @@
# Makefile for less.
#### Start of system configuration section. ####
srcdir = @srcdir@
VPATH = @srcdir@
CC = @CC@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
CFLAGS = @CFLAGS@
CFLAGS_COMPILE_ONLY = -c
LDFLAGS = @LDFLAGS@
CPPFLAGS = @CPPFLAGS@
EXEEXT = @EXEEXT@
O=o
LIBS = @LIBS@
prefix = @prefix@
exec_prefix = @exec_prefix@
# Where the installed binary goes.
bindir = @bindir@
binprefix =
sysconfdir = @sysconfdir@
datarootdir = @datarootdir@
mandir = @mandir@
manext = 1
manprefix =
DESTDIR =
#### End of system configuration section. ####
SHELL = /bin/sh
# This rule allows us to supply the necessary -D options
# in addition to whatever the user asks for.
.c.o:
${CC} -I. ${CFLAGS_COMPILE_ONLY} -DBINDIR=\"${bindir}\" -DSYSDIR=\"${sysconfdir}\" ${CPPFLAGS} ${CFLAGS} $<
OBJ = \
main.${O} screen.${O} brac.${O} ch.${O} charset.${O} cmdbuf.${O} \
command.${O} cvt.${O} decode.${O} edit.${O} filename.${O} forwback.${O} \
help.${O} ifile.${O} input.${O} jump.${O} line.${O} linenum.${O} \
lsystem.${O} mark.${O} optfunc.${O} option.${O} opttbl.${O} os.${O} \
output.${O} pattern.${O} position.${O} prompt.${O} search.${O} signal.${O} \
tags.${O} ttyin.${O} version.${O} @REGEX_O@
all: less$(EXEEXT) lesskey$(EXEEXT) lessecho$(EXEEXT)
less$(EXEEXT): ${OBJ}
${CC} ${LDFLAGS} -o $@ ${OBJ} ${LIBS}
lesskey$(EXEEXT): lesskey.${O} version.${O}
${CC} ${LDFLAGS} -o $@ lesskey.${O} version.${O}
lessecho$(EXEEXT): lessecho.${O} version.${O}
${CC} ${LDFLAGS} -o $@ lessecho.${O} version.${O}
${OBJ}: ${srcdir}/less.h ${srcdir}/funcs.h defines.h
install: all ${srcdir}/less.nro ${srcdir}/lesskey.nro ${srcdir}/lessecho.nro installdirs
${INSTALL_PROGRAM} less$(EXEEXT) ${DESTDIR}${bindir}/${binprefix}less$(EXEEXT)
${INSTALL_PROGRAM} lesskey$(EXEEXT) ${DESTDIR}${bindir}/${binprefix}lesskey$(EXEEXT)
${INSTALL_PROGRAM} lessecho$(EXEEXT) ${DESTDIR}${bindir}/${binprefix}lessecho$(EXEEXT)
${INSTALL_DATA} ${srcdir}/less.nro ${DESTDIR}${mandir}/man${manext}/${manprefix}less.${manext}
${INSTALL_DATA} ${srcdir}/lesskey.nro ${DESTDIR}${mandir}/man${manext}/${manprefix}lesskey.${manext}
${INSTALL_DATA} ${srcdir}/lessecho.nro ${DESTDIR}${mandir}/man${manext}/${manprefix}lessecho.${manext}
install-strip:
${MAKE} INSTALL_PROGRAM='${INSTALL_PROGRAM} -s' install
installdirs: mkinstalldirs
${srcdir}/mkinstalldirs ${DESTDIR}${bindir} ${DESTDIR}${mandir}/man${manext}
uninstall:
rm -f ${DESTDIR}${bindir}/${binprefix}less$(EXEEXT)
rm -f ${DESTDIR}${bindir}/${binprefix}lesskey$(EXEEXT)
rm -f ${DESTDIR}${bindir}/${binprefix}lessecho$(EXEEXT)
rm -f ${DESTDIR}${mandir}/man${manext}/${manprefix}less.${manext}
rm -f ${DESTDIR}${mandir}/man${manext}/${manprefix}lesskey.${manext}
rm -f ${DESTDIR}${mandir}/man${manext}/${manprefix}lessecho.${manext}
info:
install-info:
dvi:
check:
installcheck:
TAGS:
cd ${srcdir} && etags *.c *.h
# config.status might not change defines.h
# Don't rerun config.status if we just configured (so there's no stamp-h).
defines.h: stamp-h
stamp-h: defines.h.in config.status
test ! -f stamp-h || CONFIG_FILES= CONFIG_HEADERS=defines.h ./config.status
touch stamp-h
Makefile: ${srcdir}/Makefile.in config.status
CONFIG_FILES=Makefile CONFIG_HEADERS= ./config.status
config.status: ${srcdir}/configure
./config.status --recheck
${srcdir}/configure: ${srcdir}/configure.ac
cd ${srcdir}; autoheader; autoconf
clean:
rm -f *.${O} core less$(EXEEXT) lesskey$(EXEEXT) lessecho$(EXEEXT)
mostlyclean: clean
distclean: clean
rm -f Makefile config.status config.log config.cache defines.h stamp-h
realclean: distclean
rm -f TAGS

43
external/bsd/less/dist/Makefile.o2e vendored Normal file
View file

@ -0,0 +1,43 @@
# Makefile for less.
# OS/2 version, for emx+gcc compiler
#### Start of system configuration section. ####
CC = gcc -Zomf
CFLAGS = -I. -O2 -Wall
LDFLAGS = -s -Zcrtdll
LIBS = -ltermcap
O = obj
#### End of system configuration section. ####
.SUFFIXES: .c .${O}
# This rule allows us to supply the necessary -D options
# in addition to whatever the user asks for.
.c.${O}:
${CC} -c ${CPPFLAGS} ${CFLAGS} $<
OBJ = \
main.${O} screen.${O} brac.${O} ch.${O} charset.${O} cmdbuf.${O} \
command.${O} cvt.${O} decode.${O} edit.${O} filename.${O} forwback.${O} \
help.${O} ifile.${O} input.${O} jump.${O} line.${O} linenum.${O} \
lsystem.${O} mark.${O} optfunc.${O} option.${O} opttbl.${O} os.${O} \
output.${O} pattern.${O} position.${O} prompt.${O} search.${O} signal.${O} \
tags.${O} ttyin.${O} version.${O} regexp.${O}
all: less.exe lesskey.exe scrsize.exe
less.exe: ${OBJ}
${CC} ${OBJ} -o $@ ${LDFLAGS} ${LIBS}
lesskey.exe: lesskey.${O} version.${O}
${CC} lesskey.${O} version.${O} -o $@ ${LDFLAGS}
scrsize.exe: scrsize.c
${CC} ${CFLAGS} -D__ST_MT_ERRNO__ -s -Zmtd -lX11 $<
${OBJ}: defines.h less.h
defines.h: defines.o2
copy defines.o2 defines.h

47
external/bsd/less/dist/Makefile.o9c vendored Normal file
View file

@ -0,0 +1,47 @@
# Makefile for less.
# OS-9 version for Microware C 3.2.
#### Start of system configuration section. ####
CC = cc
CPPFLAGS = -D_OSK_MWC32 -DDEBUG=0 -DSTRCSPN
CFLAGS = -k=0 -v=.
CFLAGS_COMPILE_ONLY = -r
LDFLAGS = -igm=8
LIBS = -l=/dd/lib/termlib.l
O = r
#### End of system configuration section. ####
.SUFFIXES: .c .${O}
# This rule allows us to supply the necessary -D options
# in addition to whatever the user asks for.
.c.${O}:
${CC} ${CFLAGS_COMPILE_ONLY} ${CPPFLAGS} ${CFLAGS} $<
OBJ = \
main.${O} screen.${O} brac.${O} ch.${O} charset.${O} cmdbuf.${O} \
command.${O} cvt.${O} decode.${O} edit.${O} filename.${O} forwback.${O} \
help.${O} ifile.${O} input.${O} jump.${O} line.${O} linenum.${O} \
lsystem.${O} mark.${O} optfunc.${O} option.${O} opttbl.${O} os.${O} \
output.${O} pattern.${O} position.${O} prompt.${O} search.${O} signal.${O} \
tags.${O} ttyin.${O} version.${O} regexp.${O}
all: less lessecho lesskey
less: ${OBJ}
${CC} ${OBJ} -f=$@ ${LDFLAGS} ${LIBS}
lesskey: lesskey.${O} version.${O}
${CC} lesskey.${O} version.${O} -f=$@ ${LDFLAGS}
lessecho: lessecho.${O} version.${O}
${CC} lessecho.${O} version.${O} -f=$@ ${LDFLAGS}
${OBJ}: defines.h less.h
defines.h: defines.o9
copy defines.o9 defines.h -rf

43
external/bsd/less/dist/Makefile.o9u vendored Normal file
View file

@ -0,0 +1,43 @@
# Makefile for less.
# OS-9 version for Ultra C.
#### Start of system configuration section. ####
CC = cc
CPPFLAGS =
CFLAGS = -v=.
CFLAGS_COMPILE_ONLY = -eas
LDFLAGS = -olM=24k
LIBS = -ltermlib.l -lsys_clib.l -lunix.l
O = r
#### End of system configuration section. ####
.SUFFIXES: .c .${O}
# This rule allows us to supply the necessary -D options
# in addition to whatever the user asks for.
.c.${O}:
${CC} ${CFLAGS_COMPILE_ONLY} ${CPPFLAGS} ${CFLAGS} $<
OBJ = \
main.${O} screen.${O} brac.${O} ch.${O} charset.${O} cmdbuf.${O} \
command.${O} cvt.${O} decode.${O} edit.${O} filename.${O} forwback.${O} \
help.${O} ifile.${O} input.${O} jump.${O} line.${O} linenum.${O} \
lsystem.${O} mark.${O} optfunc.${O} option.${O} opttbl.${O} os.${O} \
output.${O} pattern.${O} position.${O} prompt.${O} search.${O} signal.${O} \
tags.${O} ttyin.${O} version.${O} regexp.${O}
all: less lesskey
less: ${OBJ}
${CC} ${OBJ} -f=$@ ${LDFLAGS} ${LIBS}
lesskey: lesskey.${O} version.${O}
${CC} lesskey.${O} version.${O} -f=$@ ${LDFLAGS}
${OBJ}: defines.h less.h
defines.h: defines.o9
copy defines.o9 defines.h -rf

71
external/bsd/less/dist/Makefile.wnb vendored Normal file
View file

@ -0,0 +1,71 @@
# Makefile for less.
# Windows version
# Bolarnd C++ 5.5.1 free command line tools
#### Start of system configuration section. ####
#
# Borland's make knows its own location in the
# filesystem.
#
CC = bcc32
LIBDIR = $(MAKEDIR)\..\lib
CFLAGS = -O2 -w-pro -TWC -P-c -v- -d -f- -ff- -vi
LDFLAGS = -Tpe -v- -ap -c -x -V4.0 -GF:AGGRESSIVE
LD = ilink32
LIBS = ${LIBDIR}\import32.lib ${LIBDIR}\cw32.lib
#### End of system configuration section. ####
#
# This rule allows us to supply the necessary -D options
# in addition to whatever the user asks for.
#
.c.obj:
${CC} -c -I. ${CPPFLAGS} ${CFLAGS} $<
OBJ = \
main.obj screen.obj brac.obj ch.obj charset.obj cmdbuf.obj \
command.obj cvt.obj decode.obj edit.obj filename.obj forwback.obj \
help.obj ifile.obj input.obj jump.obj line.obj linenum.obj \
lsystem.obj mark.obj optfunc.obj option.obj opttbl.obj os.obj \
output.obj pattern.obj position.obj prompt.obj search.obj signal.obj \
tags.obj ttyin.obj version.obj regexp.obj
all: less lesskey lessecho
#
# This is really horrible, but the command line is too long for
# MS-DOS if we try to link ${OBJ}.
#
less: ${OBJ}
${LD} ${LDFLAGS} ${LIBDIR}\c0x32.obj $**, $@,,${LIBS}
lesskey: lesskey.obj version.obj
${LD} ${LDFLAGS} ${LIBDIR}\c0x32.obj $**, $@,,${LIBS}
lessecho: lessecho.obj version.obj
${LD} ${LDFLAGS} ${LIBDIR}\c0x32.obj $**, $@,,${LIBS}
defines.h: defines.wn
-del defines.h
-copy defines.wn defines.h
${OBJ}: less.h defines.h funcs.h cmd.h
clean:
-del *.obj
-del *.il?
-del *.tds
-del defines.h
spotless: clean
-del less.exe
-del lesskey.exe
-del lessecho.exe
realclean: spotless
distclean: spotless

56
external/bsd/less/dist/Makefile.wnm vendored Normal file
View file

@ -0,0 +1,56 @@
# Makefile for less.
# Windows 32 Visual C++ version
#### Start of system configuration section. ####
CC = cl
# Normal flags
CFLAGS = /nologo /ML /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /c
LDFLAGS = /nologo /subsystem:console /incremental:no /machine:I386
# Debugging flags
#CFLAGS = /nologo /MDd /W3 /GX /Od /Gm /Zi /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /c
#LDFLAGS = /nologo /subsystem:console /incremental:yes /debug /machine:I386
LD = link
LIBS = user32.lib
#### End of system configuration section. ####
# This rule allows us to supply the necessary -D options
# in addition to whatever the user asks for.
.c.obj:
$(CC) $(CFLAGS) $<
OBJ = \
main.obj screen.obj brac.obj ch.obj charset.obj cmdbuf.obj \
command.obj cvt.obj decode.obj edit.obj filename.obj forwback.obj \
help.obj ifile.obj input.obj jump.obj line.obj linenum.obj \
lsystem.obj mark.obj optfunc.obj option.obj opttbl.obj os.obj \
output.obj pattern.obj position.obj prompt.obj search.obj signal.obj \
tags.obj ttyin.obj version.obj regexp.obj
all: less.exe lesskey.exe
# This is really horrible, but the command line is too long for
# MS-DOS if we try to link ${OBJ}.
less.exe: $(OBJ)
-del lesskey.obj
$(LD) $(LDFLAGS) *.obj $(LIBS) /out:$@
lesskey.exe: lesskey.obj version.obj
$(LD) $(LDFLAGS) lesskey.obj version.obj $(LIBS) /out:$@
defines.h: defines.wn
-del defines.h
-copy defines.wn defines.h
$(OBJ): less.h defines.h funcs.h cmd.h
clean:
-del *.obj
-del less.exe
-del lesskey.exe

View file

@ -7,10 +7,191 @@
http://www.greenwoodsoftware.com/less http://www.greenwoodsoftware.com/less
You can also download the latest version of less from there. You can also download the latest version of less from there.
To report bugs, suggestions or comments, send email to bug-less@gnu.org. To report bugs, suggestions or comments, send email to
bug-less@gnu.org or markn@greenwoodsoftware.com.
====================================================================== ======================================================================
Major changes between "less" versions 443 and 444
* Fix bug in unget handling that can cause strange effects on the
command line.
* Remove vestiges of obsolete -l option that can cause a crash.
======================================================================
Major changes between "less" versions 436 and 443
* Change search behavior such that when a search is given an explicit
pattern, the entire displayed screen is included in the search and
not just the portion after the target line.
* Add -A option to change search behavior to the old way: only
the portion of the screen after the target line is searched.
* Add %F formatting to prompt strings, replaced by the last component
of the input file.
* Control-G while editing a command exits the command.
* Less now exits with status 2 if control-C is pressed and -K is in effect.
* Fix "ungetc overflow" when passing long commands via the -p option.
* Fix bug in using line filtering via the & command
in combination with -i and -I.
* Fix bug in handling negative arguments to the -j option.
* Fix bug in handling %t in prompt strings.
* Improve handling of long option names.
* Improve percentage calculation for very large files.
======================================================================
Major changes between "less" versions 429 and 436
* Don't pass "-" to non-pipe LESSOPEN unless it starts with "-".
* Allow a fraction as the argument to the -# (--shift) option.
* Fix highlight bug when underlined/overstruck text matches at end of line.
* Fix non-regex searches with ctrl-R.
======================================================================
Major changes between "less" versions 424 and 429
* LESSOPEN pipe will now be used on standard input, if the LESSOPEN
environment variable begins with "|-".
* The -D option with one number now means use the normal background color.
* Don't change permissions on history file if it is not a regular file.
* Fix non-ANSI-compliant code that caused problems with some compilers.
* Fix binary file detection in UTF-8 mode.
* Fix display problems with long lines on "ignaw" terminals.
* Fix problem interrupting the line number calculation for initial prompt.
* Fix SGR emulation when dealing with multiple attributes (eg. bold+underline).
* Fix highlight bug when searching for underlined/overstruck text.
======================================================================
Major changes between "less" versions 418 and 424
* New "&" command allows filtering of lines based on a pattern.
* Status column now displays a search match, even if the matched
string is scrolled off screen because -S is in effect.
* Improve behavior of -F option.
* Allow CSI character (0x9B) to work in UTF-8 mode.
* Output carriage return at startup in case terminal doesn't default
to column 1.
* Fix bug in '' (quote, quote) command after G command.
======================================================================
Major changes between "less" versions 416 and 418
* Color escape sequences are now supported in WIN32 build.
* Makefile now uses EXEEXT feature of autoconf.
* Fix search bug when using -R and text contains ANSI color escape sequences.
* Fix crash when using -r with UTF-8 text containing 0x9B bytes.
* Fix display bug when using ' command to move less than one page forward.
* Update GPL to version 3.
======================================================================
Major changes between "less" versions 409 and 416
* New --follow-name option makes F command follow the name of a file
rather than the file descriptor if an open file is renamed.
* Make searching with -i/-I work correctly with non-ASCII text.
* Fix DJGPP build.
======================================================================
Major changes between "less" versions 406 and 409
* Support CSI escape sequences, like SGR escape sequences.
* Fix bug which caused screen to fail to repaint when window is resized.
* Fix bug in using -i and -I flags with non-ASCII text.
* Fix configure bug on systems which don't support langinfo.h.
* Fix crash when searching text containing certain invalid UTF-8 sequences.
======================================================================
Major changes between "less" versions 394 and 406
* Allow decimal point in number for % (percent) command.
* Allow decimal point in number for -j option (fraction of screen height).
* Make n command fetch previous pattern from history file on first search.
* Don't rewrite history file if it has not changed.
* Don't move to bottom of screen on first page.
* Don't output extraneous newlines, so copy & pasting lines from the
output works better.
* The -c option has been made identical with the -C option.
* Allow "/dev/null" as synomym for "-" in LESSHISTFILE to indicate
that no history file should be used.
* Search can now find text which follows a null byte, if the PCRE
library is used, or if no-regex searching (ctrl-R) is used.
* Better compatibility with POSIX more specification.
* Make -f work for directories.
* Make "t" cmd traverse tags in the correct order.
* Allow a few binary characters in the input file before warning
that the file is binary.
* Don't warn that file is binary if it merely contains ANSI color sequences
and -R is in effect.
* Update Unicode character tables.
* Support DESTDIR in Makefile.
* Fix bug when filename contains certain shell metacharacters such as "$".
* Fix bug when resizing the window while waiting for input from a pipe.
* Fix configure bugs.
======================================================================
Major changes between "less" versions 382 and 394 Major changes between "less" versions 382 and 394
@ -632,3 +813,8 @@
* Lesskey files may now include characters after the action as * Lesskey files may now include characters after the action as
extra input to be parsed after the action; for example: extra input to be parsed after the action; for example:
"toggle-option X" to toggle a specific option X. "toggle-option X" to toggle a specific option X.

View file

@ -1,26 +1,20 @@
Less, version 394 Less, version 444
This is the distribution of less, version 394, released 03 Dec 2005. This is the distribution of less, version 444, released 09 Jun 2011.
This program is part of the GNU project (http://www.gnu.org). This program is part of the GNU project (http://www.gnu.org).
This program is free software. You may redistribute it and/or This program is free software. You may redistribute it and/or
modify it under the terms of either: modify it under the terms of either:
1. The GNU General Public License, as published by the Free 1. The GNU General Public License, as published by the Free
Software Foundation; either version 2, or (at your option) any Software Foundation; either version 3, or (at your option) any
later version. A copy of this license is in the file COPYING. later version. A copy of this license is in the file COPYING.
or or
2. The Less License, in the file LICENSE. 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 or markn@greenwoodsoftware.com.
See http://www.greenwoodsoftware.com/less for the latest info. See http://www.greenwoodsoftware.com/less for the latest info.
You may also contact the author at:
Mark Nudelman
Greenwood Software
PO Box 2402
El Granada, CA 94018
USA
========================================================================= =========================================================================
@ -46,6 +40,7 @@ INSTALLATION (Unix systems only):
--with-editor=program --with-editor=program
Specifies the default editor program used by the "v" command. Specifies the default editor program used by the "v" command.
The default is "vi". The default is "vi".
--with-regex=lib --with-regex=lib
Specifies the regular expression library used by less for pattern Specifies the regular expression library used by less for pattern
matching. The default is "auto", which means the configure program matching. The default is "auto", which means the configure program
@ -62,6 +57,7 @@ INSTALLATION (Unix systems only):
to prevent users from viewing other files, accessing shell to prevent users from viewing other files, accessing shell
commands, etc. commands, etc.
3. It is a good idea to look over the generated Makefile and defines.h 3. It is a good idea to look over the generated Makefile and defines.h
and make sure they look ok. If you know of any peculiarities of and make sure they look ok. If you know of any peculiarities of
your system that configure might not have detected, you may fix the your system that configure might not have detected, you may fix the
@ -97,6 +93,10 @@ complaints, etc., you may mail to the author at markn@greenwoodsoftware.com.
Note to hackers: comments noting possible improvements are enclosed Note to hackers: comments noting possible improvements are enclosed
in double curly brackets {{ like this }}. in double curly brackets {{ like this }}.
(Note that the above note was originally written at a time when
"hackers" most commonly meant "enthusiastic and dedicated computer
programmers", not "persons who attempt to circumvent computer security".)
======================================================================= =======================================================================

View file

@ -1,7 +1,7 @@
/* $NetBSD: brac.c,v 1.6 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: brac.c,v 1.3 2011/07/03 20:14:12 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.

View file

@ -1,7 +1,7 @@
/* $NetBSD: ch.c,v 1.8 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: ch.c,v 1.3 2011/07/03 20:14:12 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -23,6 +23,12 @@
#include <windows.h> #include <windows.h>
#endif #endif
#if HAVE_STAT_INO
#include <sys/stat.h>
extern dev_t curr_dev;
extern ino_t curr_ino;
#endif
typedef POSITION BLOCKNUM; typedef POSITION BLOCKNUM;
public int ignore_eoi; public int ignore_eoi;
@ -33,20 +39,19 @@ public int ignore_eoi;
* in order from most- to least-recently used. * in order from most- to least-recently used.
* The circular list is anchored by the file state "thisfile". * The circular list is anchored by the file state "thisfile".
*/ */
struct bufnode {
struct bufnode *next, *prev;
struct bufnode *hnext, *hprev;
};
#define LBUFSIZE 8192 #define LBUFSIZE 8192
struct buf { struct buf {
struct buf *next, *prev; struct bufnode node;
struct buf *hnext, *hprev;
BLOCKNUM block; BLOCKNUM block;
unsigned int datasize; unsigned int datasize;
unsigned char data[LBUFSIZE]; unsigned char data[LBUFSIZE];
}; };
#define bufnode_buf(bn) ((struct buf *) bn)
struct buflist {
/* -- Following members must match struct buf */
struct buf *buf_next, *buf_prev;
struct buf *buf_hnext, *buf_hprev;
};
/* /*
* The file state is maintained in a filestate structure. * The file state is maintained in a filestate structure.
@ -54,8 +59,8 @@ struct buflist {
*/ */
#define BUFHASH_SIZE 64 #define BUFHASH_SIZE 64
struct filestate { struct filestate {
struct buf *buf_next, *buf_prev; struct bufnode buflist;
struct buflist hashtbl[BUFHASH_SIZE]; struct bufnode hashtbl[BUFHASH_SIZE];
int file; int file;
int flags; int flags;
POSITION fpos; POSITION fpos;
@ -65,8 +70,8 @@ struct filestate {
POSITION fsize; POSITION fsize;
}; };
#define ch_bufhead thisfile->buf_next #define ch_bufhead thisfile->buflist.next
#define ch_buftail thisfile->buf_prev #define ch_buftail thisfile->buflist.prev
#define ch_nbufs thisfile->nbufs #define ch_nbufs thisfile->nbufs
#define ch_block thisfile->block #define ch_block thisfile->block
#define ch_offset thisfile->offset #define ch_offset thisfile->offset
@ -75,23 +80,48 @@ struct filestate {
#define ch_flags thisfile->flags #define ch_flags thisfile->flags
#define ch_file thisfile->file #define ch_file thisfile->file
#define END_OF_CHAIN ((struct buf *)&thisfile->buf_next) #define END_OF_CHAIN (&thisfile->buflist)
#define END_OF_HCHAIN(h) ((struct buf *)&thisfile->hashtbl[h]) #define END_OF_HCHAIN(h) (&thisfile->hashtbl[h])
#define BUFHASH(blk) ((blk) & (BUFHASH_SIZE-1)) #define BUFHASH(blk) ((blk) & (BUFHASH_SIZE-1))
#define FOR_BUFS_IN_CHAIN(h,bp) \ /*
for (bp = thisfile->hashtbl[h].buf_hnext; \ * Macros to manipulate the list of buffers in thisfile->buflist.
bp != END_OF_HCHAIN(h); bp = bp->hnext) */
#define FOR_BUFS(bn) \
for (bn = ch_bufhead; bn != END_OF_CHAIN; bn = bn->next)
#define HASH_RM(bp) \ #define BUF_RM(bn) \
(bp)->hnext->hprev = (bp)->hprev; \ (bn)->next->prev = (bn)->prev; \
(bp)->hprev->hnext = (bp)->hnext; (bn)->prev->next = (bn)->next;
#define HASH_INS(bp,h) \ #define BUF_INS_HEAD(bn) \
(bp)->hnext = thisfile->hashtbl[h].buf_hnext; \ (bn)->next = ch_bufhead; \
(bp)->hprev = END_OF_HCHAIN(h); \ (bn)->prev = END_OF_CHAIN; \
thisfile->hashtbl[h].buf_hnext->hprev = (bp); \ ch_bufhead->prev = (bn); \
thisfile->hashtbl[h].buf_hnext = (bp); ch_bufhead = (bn);
#define BUF_INS_TAIL(bn) \
(bn)->next = END_OF_CHAIN; \
(bn)->prev = ch_buftail; \
ch_buftail->next = (bn); \
ch_buftail = (bn);
/*
* Macros to manipulate the list of buffers in thisfile->hashtbl[n].
*/
#define FOR_BUFS_IN_CHAIN(h,bn) \
for (bn = thisfile->hashtbl[h].hnext; \
bn != END_OF_HCHAIN(h); bn = bn->hnext)
#define BUF_HASH_RM(bn) \
(bn)->hnext->hprev = (bn)->hprev; \
(bn)->hprev->hnext = (bn)->hnext;
#define BUF_HASH_INS(bn,h) \
(bn)->hnext = thisfile->hashtbl[h].hnext; \
(bn)->hprev = END_OF_HCHAIN(h); \
thisfile->hashtbl[h].hnext->hprev = (bn); \
thisfile->hashtbl[h].hnext = (bn);
static struct filestate *thisfile; static struct filestate *thisfile;
static int ch_ungotchar = -1; static int ch_ungotchar = -1;
@ -100,6 +130,8 @@ static int maxbufs = -1;
extern int autobuf; extern int autobuf;
extern int sigs; extern int sigs;
extern int secure; extern int secure;
extern int screen_trashed;
extern int follow_mode;
extern constant char helpdata[]; extern constant char helpdata[];
extern constant int size_helpdata; extern constant int size_helpdata;
extern IFILE curr_ifile; extern IFILE curr_ifile;
@ -115,69 +147,84 @@ static void ch_delbufs __P((void));
/* /*
* Get the character pointed to by the read pointer. * Get the character pointed to by the read pointer.
* ch_get() is a macro which is more efficient to call
* than fch_get (the function), in the usual case
* that the block desired is at the head of the chain.
*/ */
#define ch_get() ((ch_block == ch_bufhead->block && \
ch_offset < ch_bufhead->datasize) ? \
ch_bufhead->data[ch_offset] : fch_get())
int int
fch_get() ch_get()
{ {
register struct buf *bp; register struct buf *bp;
register struct bufnode *bn;
register int n; register int n;
register int slept; register int slept;
register int h; register int h;
POSITION pos; POSITION pos;
POSITION len; POSITION len;
if (thisfile == NULL)
return (EOI);
/*
* Quick check for the common case where
* the desired char is in the head buffer.
*/
if (ch_bufhead != END_OF_CHAIN)
{
bp = bufnode_buf(ch_bufhead);
if (ch_block == bp->block && ch_offset < bp->datasize)
return bp->data[ch_offset];
}
slept = FALSE; slept = FALSE;
/* /*
* Look for a buffer holding the desired block. * Look for a buffer holding the desired block.
*/ */
h = BUFHASH(ch_block); h = BUFHASH(ch_block);
FOR_BUFS_IN_CHAIN(h, bp) FOR_BUFS_IN_CHAIN(h, bn)
{ {
bp = bufnode_buf(bn);
if (bp->block == ch_block) if (bp->block == ch_block)
{ {
if (ch_offset >= bp->datasize) if (ch_offset >= bp->datasize)
/* /*
* Need more data in this buffer. * Need more data in this buffer.
*/ */
goto read_more; break;
goto found; goto found;
} }
} }
/* if (bn == END_OF_HCHAIN(h))
* Block is not in a buffer.
* Take the least recently used buffer
* and read the desired block into it.
* If the LRU buffer has data in it,
* then maybe allocate a new buffer.
*/
if (ch_buftail == END_OF_CHAIN || ch_buftail->block != -1)
{ {
/* /*
* There is no empty buffer to use. * Block is not in a buffer.
* Allocate a new buffer if: * Take the least recently used buffer
* 1. We can't seek on this file and -b is not in effect; or * and read the desired block into it.
* 2. We haven't allocated the max buffers for this file yet. * If the LRU buffer has data in it,
* then maybe allocate a new buffer.
*/ */
if ((autobuf && !(ch_flags & CH_CANSEEK)) || if (ch_buftail == END_OF_CHAIN ||
(maxbufs < 0 || ch_nbufs < maxbufs)) bufnode_buf(ch_buftail)->block != -1)
if (ch_addbuf()) {
/* /*
* Allocation failed: turn off autobuf. * There is no empty buffer to use.
*/ * Allocate a new buffer if:
autobuf = OPT_OFF; * 1. We can't seek on this file and -b is not in effect; or
* 2. We haven't allocated the max buffers for this file yet.
*/
if ((autobuf && !(ch_flags & CH_CANSEEK)) ||
(maxbufs < 0 || ch_nbufs < maxbufs))
if (ch_addbuf())
/*
* Allocation failed: turn off autobuf.
*/
autobuf = OPT_OFF;
}
bn = ch_buftail;
bp = bufnode_buf(bn);
BUF_HASH_RM(bn); /* Remove from old hash chain. */
bp->block = ch_block;
bp->datasize = 0;
BUF_HASH_INS(bn, h); /* Insert into new hash chain. */
} }
bp = ch_buftail;
HASH_RM(bp); /* Remove from old hash chain. */
bp->block = ch_block;
bp->datasize = 0;
HASH_INS(bp, h); /* Insert into new hash chain. */
read_more: read_more:
pos = (ch_block * LBUFSIZE) + bp->datasize; pos = (ch_block * LBUFSIZE) + bp->datasize;
@ -196,7 +243,7 @@ fch_get()
*/ */
if (!(ch_flags & CH_CANSEEK)) if (!(ch_flags & CH_CANSEEK))
return ('?'); return ('?');
if (lseek(ch_file, (off_t)pos, 0) == BAD_LSEEK) if (lseek(ch_file, (off_t)pos, SEEK_SET) == BAD_LSEEK)
{ {
error("seek error", NULL_PARG); error("seek error", NULL_PARG);
clear_eol(); clear_eol();
@ -277,30 +324,45 @@ fch_get()
#endif #endif
#endif #endif
slept = TRUE; slept = TRUE;
#if HAVE_STAT_INO
if (follow_mode == FOLLOW_NAME)
{
/* See whether the file's i-number has changed.
* If so, force the file to be closed and
* reopened. */
struct stat st;
int r = stat(get_filename(curr_ifile), &st);
if (r == 0 && (st.st_ino != curr_ino ||
st.st_dev != curr_dev))
{
/* screen_trashed=2 causes
* make_display to reopen the file. */
screen_trashed = 2;
return (EOI);
}
}
#endif
} }
if (sigs) if (sigs)
return (EOI); return (EOI);
} }
found: found:
if (ch_bufhead != bp) if (ch_bufhead != bn)
{ {
/* /*
* Move the buffer to the head of the buffer chain. * Move the buffer to the head of the buffer chain.
* This orders the buffer chain, most- to least-recently used. * This orders the buffer chain, most- to least-recently used.
*/ */
bp->next->prev = bp->prev; BUF_RM(bn);
bp->prev->next = bp->next; BUF_INS_HEAD(bn);
bp->next = ch_bufhead;
bp->prev = END_OF_CHAIN;
ch_bufhead->prev = bp;
ch_bufhead = bp;
/* /*
* Move to head of hash chain too. * Move to head of hash chain too.
*/ */
HASH_RM(bp); BUF_HASH_RM(bn);
HASH_INS(bp, h); BUF_HASH_INS(bn, h);
} }
if (ch_offset >= bp->datasize) if (ch_offset >= bp->datasize)
@ -360,6 +422,7 @@ end_logfile()
sync_logfile() sync_logfile()
{ {
register struct buf *bp; register struct buf *bp;
register struct bufnode *bn;
int warned = FALSE; int warned = FALSE;
BLOCKNUM block; BLOCKNUM block;
BLOCKNUM nblocks; BLOCKNUM nblocks;
@ -367,24 +430,23 @@ sync_logfile()
nblocks = (ch_fpos + LBUFSIZE - 1) / LBUFSIZE; nblocks = (ch_fpos + LBUFSIZE - 1) / LBUFSIZE;
for (block = 0; block < nblocks; block++) for (block = 0; block < nblocks; block++)
{ {
for (bp = ch_bufhead; ; bp = bp->next) int wrote = FALSE;
FOR_BUFS(bn)
{ {
if (bp == END_OF_CHAIN) bp = bufnode_buf(bn);
{
if (!warned)
{
error("Warning: log file is incomplete",
NULL_PARG);
warned = TRUE;
}
break;
}
if (bp->block == block) if (bp->block == block)
{ {
write(logfile, (char *) bp->data, bp->datasize); write(logfile, (char *) bp->data, bp->datasize);
wrote = TRUE;
break; break;
} }
} }
if (!wrote && !warned)
{
error("Warning: log file is incomplete",
NULL_PARG);
warned = TRUE;
}
} }
} }
@ -398,11 +460,13 @@ buffered(block)
BLOCKNUM block; BLOCKNUM block;
{ {
register struct buf *bp; register struct buf *bp;
register struct bufnode *bn;
register int h; register int h;
h = BUFHASH(block); h = BUFHASH(block);
FOR_BUFS_IN_CHAIN(h, bp) FOR_BUFS_IN_CHAIN(h, bn)
{ {
bp = bufnode_buf(bn);
if (bp->block == block) if (bp->block == block)
return (TRUE); return (TRUE);
} }
@ -420,6 +484,9 @@ ch_seek(pos)
BLOCKNUM new_block; BLOCKNUM new_block;
POSITION len; POSITION len;
if (thisfile == NULL)
return (0);
len = ch_length(); len = ch_length();
if (pos < ch_zero() || (len != NULL_POSITION && pos > len)) if (pos < ch_zero() || (len != NULL_POSITION && pos > len))
return (1); return (1);
@ -454,6 +521,9 @@ ch_end_seek()
{ {
POSITION len; POSITION len;
if (thisfile == NULL)
return (0);
if (ch_flags & CH_CANSEEK) if (ch_flags & CH_CANSEEK)
ch_fsize = filesize(ch_file); ch_fsize = filesize(ch_file);
@ -478,7 +548,8 @@ ch_end_seek()
public int public int
ch_beg_seek() ch_beg_seek()
{ {
register struct buf *bp, *firstbp; register struct bufnode *bn;
register struct bufnode *firstbn;
/* /*
* Try a plain ch_seek first. * Try a plain ch_seek first.
@ -490,13 +561,15 @@ ch_beg_seek()
* Can't get to position 0. * Can't get to position 0.
* Look thru the buffers for the one closest to position 0. * Look thru the buffers for the one closest to position 0.
*/ */
firstbp = bp = ch_bufhead; firstbn = ch_bufhead;
if (bp == END_OF_CHAIN) if (firstbn == END_OF_CHAIN)
return (1); return (1);
while ((bp = bp->next) != END_OF_CHAIN) FOR_BUFS(bn)
if (bp->block < firstbp->block) {
firstbp = bp; if (bufnode_buf(bn)->block < bufnode_buf(firstbn)->block)
ch_block = firstbp->block; firstbn = bn;
}
ch_block = bufnode_buf(firstbn)->block;
ch_offset = 0; ch_offset = 0;
return (0); return (0);
} }
@ -507,6 +580,8 @@ ch_beg_seek()
public POSITION public POSITION
ch_length() ch_length()
{ {
if (thisfile == NULL)
return (NULL_POSITION);
if (ignore_eoi) if (ignore_eoi)
return (NULL_POSITION); return (NULL_POSITION);
if (ch_flags & CH_HELPFILE) if (ch_flags & CH_HELPFILE)
@ -520,6 +595,8 @@ ch_length()
public POSITION public POSITION
ch_tell() ch_tell()
{ {
if (thisfile == NULL)
return (NULL_POSITION);
return (ch_block * LBUFSIZE) + ch_offset; return (ch_block * LBUFSIZE) + ch_offset;
} }
@ -531,6 +608,8 @@ ch_forw_get()
{ {
register int c; register int c;
if (thisfile == NULL)
return (EOI);
c = ch_get(); c = ch_get();
if (c == EOI) if (c == EOI)
return (EOI); return (EOI);
@ -550,6 +629,8 @@ ch_forw_get()
public int public int
ch_back_get() ch_back_get()
{ {
if (thisfile == NULL)
return (EOI);
if (ch_offset > 0) if (ch_offset > 0)
ch_offset --; ch_offset --;
else else
@ -588,7 +669,10 @@ ch_setbufspace(bufspace)
public void public void
ch_flush() ch_flush()
{ {
register struct buf *bp; register struct bufnode *bn;
if (thisfile == NULL)
return;
if (!(ch_flags & CH_CANSEEK)) if (!(ch_flags & CH_CANSEEK))
{ {
@ -603,8 +687,10 @@ ch_flush()
/* /*
* Initialize all the buffers. * Initialize all the buffers.
*/ */
for (bp = ch_bufhead; bp != END_OF_CHAIN; bp = bp->next) FOR_BUFS(bn)
bp->block = -1; {
bufnode_buf(bn)->block = -1;
}
/* /*
* Figure out the size of the file, if we can. * Figure out the size of the file, if we can.
@ -632,7 +718,7 @@ ch_flush()
} }
#endif #endif
if (lseek(ch_file, (off_t)0, 0) == BAD_LSEEK) if (lseek(ch_file, (off_t)0, SEEK_SET) == BAD_LSEEK)
{ {
/* /*
* Warning only; even if the seek fails for some reason, * Warning only; even if the seek fails for some reason,
@ -651,6 +737,7 @@ ch_flush()
ch_addbuf() ch_addbuf()
{ {
register struct buf *bp; register struct buf *bp;
register struct bufnode *bn;
/* /*
* Allocate and initialize a new buffer and link it * Allocate and initialize a new buffer and link it
@ -661,11 +748,10 @@ ch_addbuf()
return (1); return (1);
ch_nbufs++; ch_nbufs++;
bp->block = -1; bp->block = -1;
bp->next = END_OF_CHAIN; bn = &bp->node;
bp->prev = ch_buftail;
ch_buftail->next = bp; BUF_INS_TAIL(bn);
ch_buftail = bp; BUF_HASH_INS(bn, 0);
HASH_INS(bp, 0);
return (0); return (0);
} }
@ -679,8 +765,8 @@ init_hashtbl()
for (h = 0; h < BUFHASH_SIZE; h++) for (h = 0; h < BUFHASH_SIZE; h++)
{ {
thisfile->hashtbl[h].buf_hnext = END_OF_HCHAIN(h); thisfile->hashtbl[h].hnext = END_OF_HCHAIN(h);
thisfile->hashtbl[h].buf_hprev = END_OF_HCHAIN(h); thisfile->hashtbl[h].hprev = END_OF_HCHAIN(h);
} }
} }
@ -690,14 +776,13 @@ init_hashtbl()
static void static void
ch_delbufs() ch_delbufs()
{ {
register struct buf *bp; register struct bufnode *bn;
while (ch_bufhead != END_OF_CHAIN) while (ch_bufhead != END_OF_CHAIN)
{ {
bp = ch_bufhead; bn = ch_bufhead;
bp->next->prev = bp->prev; BUF_RM(bn);
bp->prev->next = bp->next; free(bufnode_buf(bn));
free(bp);
} }
ch_nbufs = 0; ch_nbufs = 0;
init_hashtbl(); init_hashtbl();
@ -721,7 +806,7 @@ seekable(f)
return (0); return (0);
} }
#endif #endif
return (lseek(f, (off_t)1, 0) != BAD_LSEEK); return (lseek(f, (off_t)1, SEEK_SET) != BAD_LSEEK);
} }
/* /*
@ -743,7 +828,7 @@ ch_init(f, flags)
*/ */
thisfile = (struct filestate *) thisfile = (struct filestate *)
calloc(1, sizeof(struct filestate)); calloc(1, sizeof(struct filestate));
thisfile->buf_next = thisfile->buf_prev = END_OF_CHAIN; thisfile->buflist.next = thisfile->buflist.prev = END_OF_CHAIN;
thisfile->nbufs = 0; thisfile->nbufs = 0;
thisfile->flags = 0; thisfile->flags = 0;
thisfile->fpos = 0; thisfile->fpos = 0;
@ -773,6 +858,9 @@ ch_close()
{ {
int keepstate = FALSE; int keepstate = FALSE;
if (thisfile == NULL)
return;
if (ch_flags & (CH_CANSEEK|CH_POPENED|CH_HELPFILE)) if (ch_flags & (CH_CANSEEK|CH_POPENED|CH_HELPFILE))
{ {
/* /*
@ -811,6 +899,8 @@ ch_close()
public int public int
ch_getflags() ch_getflags()
{ {
if (thisfile == NULL)
return (0);
return (ch_flags); return (ch_flags);
} }
@ -819,6 +909,7 @@ ch_getflags()
ch_dump(struct filestate *fs) ch_dump(struct filestate *fs)
{ {
struct buf *bp; struct buf *bp;
struct bufnode *bn;
unsigned char *s; unsigned char *s;
if (fs == NULL) if (fs == NULL)
@ -830,8 +921,9 @@ ch_dump(struct filestate *fs)
fs->file, fs->flags, fs->fpos, fs->file, fs->flags, fs->fpos,
fs->fsize, fs->block, fs->offset); fs->fsize, fs->block, fs->offset);
printf(" %d bufs:\n", fs->nbufs); printf(" %d bufs:\n", fs->nbufs);
for (bp = fs->buf_next; bp != (struct buf *)fs; bp = bp->next) for (bn = fs->next; bn != &fs->buflist; bn = bn->next)
{ {
bp = bufnode_buf(bn);
printf("%x: blk %x, size %x \"", printf("%x: blk %x, size %x \"",
bp, bp->block, bp->datasize); bp, bp->block, bp->datasize);
for (s = bp->data; s < bp->data + 30; s++) for (s = bp->data; s < bp->data + 30; s++)

1178
external/bsd/less/dist/charset.c vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,7 @@
/* $NetBSD: charset.h,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/* /*
* Copyright (C) 2005 Mark Nudelman * Copyright (C) 2005-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.

View file

@ -1,5 +1,7 @@
/* $NetBSD: cmd.h,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -65,6 +67,7 @@
#define A_REMOVE_FILE 52 #define A_REMOVE_FILE 52
#define A_NEXT_TAG 53 #define A_NEXT_TAG 53
#define A_PREV_TAG 54 #define A_PREV_TAG 54
#define A_FILTER 55
#define A_INVALID 100 #define A_INVALID 100
#define A_NOACTION 101 #define A_NOACTION 101
@ -97,6 +100,7 @@
#define EC_F_COMPLETE 17 #define EC_F_COMPLETE 17
#define EC_B_COMPLETE 18 #define EC_B_COMPLETE 18
#define EC_LITERAL 19 #define EC_LITERAL 19
#define EC_ABORT 20
#define EC_NOACTION 101 #define EC_NOACTION 101
#define EC_UINVALID 102 #define EC_UINVALID 102

View file

@ -1,7 +1,7 @@
/* $NetBSD: cmdbuf.c,v 1.7 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: cmdbuf.c,v 1.3 2011/07/03 20:14:12 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -22,6 +22,9 @@
#if HAVE_STAT #if HAVE_STAT
#include <sys/stat.h> #include <sys/stat.h>
#endif #endif
#if HAVE_ERRNO_H
#include <errno.h>
#endif
extern int sc_width; extern int sc_width;
extern int utf_mode; extern int utf_mode;
@ -86,22 +89,23 @@ struct mlist
struct mlist *prev; struct mlist *prev;
struct mlist *curr_mp; struct mlist *curr_mp;
char *string; char *string;
int modified;
}; };
/* /*
* These are the various command histories that exist. * These are the various command histories that exist.
*/ */
struct mlist mlist_search = struct mlist mlist_search =
{ &mlist_search, &mlist_search, &mlist_search, NULL }; { &mlist_search, &mlist_search, &mlist_search, NULL, 0 };
public void * constant ml_search = (void *) &mlist_search; public void * constant ml_search = (void *) &mlist_search;
struct mlist mlist_examine = struct mlist mlist_examine =
{ &mlist_examine, &mlist_examine, &mlist_examine, NULL }; { &mlist_examine, &mlist_examine, &mlist_examine, NULL, 0 };
public void * constant ml_examine = (void *) &mlist_examine; public void * constant ml_examine = (void *) &mlist_examine;
#if SHELL_ESCAPE || PIPEC #if SHELL_ESCAPE || PIPEC
struct mlist mlist_shell = struct mlist mlist_shell =
{ &mlist_shell, &mlist_shell, &mlist_shell, NULL }; { &mlist_shell, &mlist_shell, &mlist_shell, NULL, 0 };
public void * constant ml_shell = (void *) &mlist_shell; public void * constant ml_shell = (void *) &mlist_shell;
#endif #endif
@ -142,12 +146,11 @@ cmd_reset()
} }
/* /*
* Clear command line on display. * Clear command line.
*/ */
public void public void
clear_cmd() clear_cmd()
{ {
clear_bot();
cmd_col = prompt_col = 0; cmd_col = prompt_col = 0;
cmd_mbc_buf_len = 0; cmd_mbc_buf_len = 0;
} }
@ -680,12 +683,14 @@ set_mlist(mlist, cmdflags)
void *mlist; void *mlist;
int cmdflags; int cmdflags;
{ {
#if CMD_HISTORY
curr_mlist = (struct mlist *) mlist; curr_mlist = (struct mlist *) mlist;
curr_cmdflags = cmdflags; curr_cmdflags = cmdflags;
/* Make sure the next up-arrow moves to the last string in the mlist. */ /* Make sure the next up-arrow moves to the last string in the mlist. */
if (curr_mlist != NULL) if (curr_mlist != NULL)
curr_mlist->curr_mp = curr_mlist; curr_mlist->curr_mp = curr_mlist;
#endif
} }
#if CMD_HISTORY #if CMD_HISTORY
@ -785,6 +790,7 @@ cmd_accept()
if (curr_mlist == NULL) if (curr_mlist == NULL)
return; return;
cmd_addhist(curr_mlist, cmdbuf); cmd_addhist(curr_mlist, cmdbuf);
curr_mlist->modified = 1;
#endif #endif
} }
@ -872,6 +878,10 @@ cmd_edit(c)
case EC_LINEKILL: case EC_LINEKILL:
not_in_completion(); not_in_completion();
return (cmd_kill()); return (cmd_kill());
case EC_ABORT:
not_in_completion();
(void) cmd_kill();
return (CC_QUIT);
case EC_W_BACKSPACE: case EC_W_BACKSPACE:
not_in_completion(); not_in_completion();
return (cmd_werase()); return (cmd_werase());
@ -1293,13 +1303,21 @@ cmd_char(c)
* Return the number currently in the command buffer. * Return the number currently in the command buffer.
*/ */
public LINENUM public LINENUM
cmd_int() cmd_int(frac)
long *frac;
{ {
register char *p; char *p;
LINENUM n = 0; LINENUM n = 0;
int err;
for (p = cmdbuf; *p != '\0'; p++) for (p = cmdbuf; *p >= '0' && *p <= '9'; p++)
n = (10 * n) + (*p - '0'); n = (n * 10) + (*p - '0');
*frac = 0;
if (*p++ == '.')
{
*frac = getfraction(&p, NULL, &err);
/* {{ do something if err is set? }} */
}
return (n); return (n);
} }
@ -1312,6 +1330,19 @@ get_cmdbuf()
return (cmdbuf); return (cmdbuf);
} }
#if CMD_HISTORY
/*
* Return the last (most recent) string in the current command history.
*/
public char *
cmd_lastpattern()
{
if (curr_mlist == NULL)
return (NULL);
return (curr_mlist->curr_mp->prev->string);
}
#endif
#if CMD_HISTORY #if CMD_HISTORY
/* /*
* Get the name of the history file. * Get the name of the history file.
@ -1327,7 +1358,7 @@ histfile_name()
name = lgetenv("LESSHISTFILE"); name = lgetenv("LESSHISTFILE");
if (name != NULL && *name != '\0') if (name != NULL && *name != '\0')
{ {
if (strcmp(name, "-") == 0) if (strcmp(name, "-") == 0 || strcmp(name, "/dev/null") == 0)
/* $LESSHISTFILE == "-" means don't use a history file. */ /* $LESSHISTFILE == "-" means don't use a history file. */
return (NULL); return (NULL);
return (save(name)); return (save(name));
@ -1362,10 +1393,20 @@ init_cmdhist()
char *filename; char *filename;
FILE *f; FILE *f;
char *p; char *p;
#ifdef HAVE_STAT
struct stat st;
#endif
filename = histfile_name(); filename = histfile_name();
if (filename == NULL) if (filename == NULL)
return; return;
#ifdef HAVE_STAT
/* ignore devices/fifos; allow symlinks */
if (stat(filename, &st) < 0)
return;
if (!S_ISREG(st.st_mode))
return;
#endif
f = fopen(filename, "r"); f = fopen(filename, "r");
free(filename); free(filename);
if (f == NULL) if (f == NULL)
@ -1388,11 +1429,14 @@ init_cmdhist()
} }
if (strcmp(line, HISTFILE_SEARCH_SECTION) == 0) if (strcmp(line, HISTFILE_SEARCH_SECTION) == 0)
ml = &mlist_search; ml = &mlist_search;
#if SHELL_ESCAPE || PIPEC
else if (strcmp(line, HISTFILE_SHELL_SECTION) == 0) else if (strcmp(line, HISTFILE_SHELL_SECTION) == 0)
{
#if SHELL_ESCAPE || PIPEC
ml = &mlist_shell; ml = &mlist_shell;
#else
ml = NULL;
#endif #endif
else if (*line == '"') } else if (*line == '"')
{ {
if (ml != NULL) if (ml != NULL)
cmd_addhist(ml, line+1); cmd_addhist(ml, line+1);
@ -1442,17 +1486,37 @@ save_cmdhist()
#if CMD_HISTORY #if CMD_HISTORY
char *filename; char *filename;
FILE *f; FILE *f;
int modified = 0;
filename = histfile_name(); filename = histfile_name();
if (filename == NULL) if (filename == NULL)
return; return;
if (mlist_search.modified)
modified = 1;
#if SHELL_ESCAPE || PIPEC
if (mlist_shell.modified)
modified = 1;
#endif
if (!modified)
return;
f = fopen(filename, "w"); f = fopen(filename, "w");
free(filename); free(filename);
if (f == NULL) if (f == NULL)
return; return;
#if HAVE_FCHMOD #if HAVE_FCHMOD
{
/* Make history file readable only by owner. */ /* Make history file readable only by owner. */
fchmod(fileno(f), 0600); int do_chmod = 1;
#if HAVE_STAT
struct stat statbuf;
int r = fstat(fileno(f), &statbuf);
if (r < 0 || !S_ISREG(statbuf.st_mode))
/* Don't chmod if not a regular file. */
do_chmod = 0;
#endif
if (do_chmod)
fchmod(fileno(f), 0600);
}
#endif #endif
fprintf(f, "%s\n", HISTFILE_FIRST_LINE); fprintf(f, "%s\n", HISTFILE_FIRST_LINE);

File diff suppressed because it is too large Load diff

6740
external/bsd/less/dist/configure vendored Executable file

File diff suppressed because it is too large Load diff

666
external/bsd/less/dist/configure.ac vendored Normal file
View file

@ -0,0 +1,666 @@
# Process this file with autoconf to produce a configure script.
# Copyright (C) 1984-2011 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.
# Autoconf initialization.
AC_INIT(less, 1)
AC_CONFIG_SRCDIR([forwback.c])
AC_CONFIG_HEADER([defines.h])
# Checks for programs.
AC_PROG_CC
AC_ISC_POSIX
AC_PROG_GCC_TRADITIONAL
AC_PROG_INSTALL
# Checks for compilation model.
AC_SYS_LARGEFILE
# Checks for general libraries.
AC_CHECK_LIB(tinfo, tgoto, [have_tinfo=yes], [have_tinfo=no])
AC_CHECK_LIB(xcurses, initscr, [have_xcurses=yes], [have_xcurses=no])
AC_CHECK_LIB(ncursesw, initscr, [have_ncursesw=yes], [have_ncursesw=no])
AC_CHECK_LIB(ncurses, initscr, [have_ncurses=yes], [have_ncurses=no])
AC_CHECK_LIB(curses, initscr, [have_curses=yes], [have_curses=no])
AC_CHECK_LIB(termcap, tgetent, [have_termcap=yes], [have_termcap=no])
AC_CHECK_LIB(termlib, tgetent, [have_termlib=yes], [have_termlib=no])
# Regular expressions (regcmp) are in -lgen on Solaris 2,
# and in -lintl on SCO Unix.
AC_CHECK_LIB(gen, regcmp)
AC_CHECK_LIB(intl, regcmp)
AC_CHECK_LIB(PW, regcmp)
# Checks for terminal libraries
AC_MSG_CHECKING([for working terminal libraries])
TERMLIBS=
# Check for systems where curses is broken.
curses_broken=0
if test x`uname -s` = "xHP-UX" >/dev/null 2>&1; then
if test x`uname -r` = "xB.11.00" >/dev/null 2>&1; then
curses_broken=1
fi
if test x`uname -r` = "xB.11.11" >/dev/null 2>&1; then
curses_broken=1
fi
fi
if test $curses_broken = 0; then
# -- Try tinfo.
if test "x$TERMLIBS" = x; then
if test $have_tinfo = yes; then
TERMLIBS="-ltinfo"
SAVE_LIBS=$LIBS
LIBS="$LIBS $TERMLIBS"
AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
[termok=yes], [termok=no])
LIBS=$SAVE_LIBS
if test $termok = no; then TERMLIBS=""; fi
fi
fi
# -- Try xcurses.
if test "x$TERMLIBS" = x; then
if test $have_xcurses = yes; then
TERMLIBS="-lxcurses"
SAVE_LIBS=$LIBS
LIBS="$LIBS $TERMLIBS"
AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
[termok=yes], [termok=no])
LIBS=$SAVE_LIBS
if test $termok = no; then TERMLIBS=""; fi
fi
fi
# -- Try ncursesw.
if test "x$TERMLIBS" = x; then
if test $have_ncursesw = yes; then
TERMLIBS="-lncursesw"
SAVE_LIBS=$LIBS
LIBS="$LIBS $TERMLIBS"
AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
[termok=yes], [termok=no])
LIBS=$SAVE_LIBS
if test $termok = no; then TERMLIBS=""; fi
fi
fi
# -- Try ncurses.
if test "x$TERMLIBS" = x; then
if test $have_ncurses = yes; then
TERMLIBS="-lncurses"
SAVE_LIBS=$LIBS
LIBS="$LIBS $TERMLIBS"
AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
[termok=yes], [termok=no])
LIBS=$SAVE_LIBS
if test $termok = no; then TERMLIBS=""; fi
fi
fi
# -- Try curses.
if test "x$TERMLIBS" = x; then
if test $have_curses = yes; then
TERMLIBS="-lcurses"
SAVE_LIBS=$LIBS
LIBS="$LIBS $TERMLIBS"
AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
[termok=yes], [termok=no])
LIBS=$SAVE_LIBS
if test $termok = no; then TERMLIBS=""; fi
fi
fi
# -- Try curses & termcap.
if test "x$TERMLIBS" = x; then
if test $have_curses = yes; then
if test $have_termcap = yes; then
TERMLIBS="-lcurses -ltermcap"
SAVE_LIBS=$LIBS
LIBS="$LIBS $TERMLIBS"
AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
[termok=yes], [termok=no])
LIBS=$SAVE_LIBS
if test $termok = no; then TERMLIBS=""; fi
fi
fi
fi
fi
# -- Try termcap.
if test "x$TERMLIBS" = x; then
if test $have_termcap = yes; then
TERMLIBS="-ltermcap"
SAVE_LIBS=$LIBS
LIBS="$LIBS $TERMLIBS"
AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
[termok=yes], [termok=no])
LIBS=$SAVE_LIBS
if test $termok = no; then TERMLIBS=""; fi
fi
fi
# -- Try termlib.
if test "x$TERMLIBS" = x; then
if test $have_termlib = yes; then
TERMLIBS="-lcurses -ltermlib"
SAVE_LIBS=$LIBS
LIBS="$LIBS $TERMLIBS"
AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
[termok=yes], [termok=no])
LIBS=$SAVE_LIBS
if test $termok = no; then TERMLIBS=""; fi
fi
fi
if test "x$TERMLIBS" = x; then
AC_MSG_RESULT(Cannot find terminal libraries - configure failed)
exit 1
fi
AC_MSG_RESULT(using $TERMLIBS)
LIBS="$LIBS $TERMLIBS"
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([ctype.h errno.h fcntl.h limits.h stdio.h stdlib.h string.h termcap.h termio.h termios.h time.h unistd.h values.h sys/ioctl.h sys/stream.h wctype.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STAT
AC_C_CONST
AC_TYPE_OFF_T
AC_TYPE_SIZE_T
AC_HEADER_TIME
# Autoheader templates for symbols defined later by AC_DEFINE.
AH_TEMPLATE([HAVE_POSIX_REGCOMP],
[POSIX regcomp() and regex.h])
AH_TEMPLATE([HAVE_PCRE],
[PCRE (Perl-compatible regular expression) library])
AH_TEMPLATE([HAVE_RE_COMP],
[BSD re_comp()])
AH_TEMPLATE([HAVE_REGCMP],
[System V regcmp()])
AH_TEMPLATE([HAVE_V8_REGCOMP],
[Henry Spencer V8 regcomp() and regexp.h])
AH_TEMPLATE([NO_REGEX],
[pattern matching is supported, but without metacharacters.])
AH_TEMPLATE([HAVE_REGEXEC2],
[])
AH_TEMPLATE([HAVE_VOID],
[Define HAVE_VOID if your compiler supports the "void" type.])
AH_TEMPLATE([HAVE_FLOAT],
[Define HAVE_FLOAT if your compiler supports the "double" type.])
AH_TEMPLATE([HAVE_CONST],
[Define HAVE_CONST if your compiler supports the "const" modifier.])
AH_TEMPLATE([HAVE_STAT_INO],
[Define HAVE_STAT_INO if your struct stat has st_ino and st_dev.])
AH_TEMPLATE([HAVE_TIME_T],
[Define HAVE_TIME_T if your system supports the "time_t" type.])
AH_TEMPLATE([HAVE_STRERROR],
[Define HAVE_STRERROR if you have the strerror() function.])
AH_TEMPLATE([HAVE_FILENO],
[Define HAVE_FILENO if you have the fileno() macro.])
AH_TEMPLATE([HAVE_ERRNO],
[Define HAVE_ERRNO if you have the errno variable.])
AH_TEMPLATE([MUST_DEFINE_ERRNO],
[Define MUST_DEFINE_ERRNO if you have errno but it is not define in errno.h.])
AH_TEMPLATE([HAVE_SYS_ERRLIST],
[Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable.])
AH_TEMPLATE([HAVE_OSPEED],
[Define HAVE_OSPEED if your termcap library has the ospeed variable.])
AH_TEMPLATE([MUST_DEFINE_OSPEED],
[Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined in termcap.h.])
AH_TEMPLATE([HAVE_LOCALE],
[Define HAVE_LOCALE if you have locale.h and setlocale.])
AH_TEMPLATE([HAVE_TERMIOS_FUNCS],
[Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr.])
AH_TEMPLATE([HAVE_UPPER_LOWER],
[Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower.])
AH_TEMPLATE([HAVE_WCTYPE],
[Define HAVE_WCTYPE if you have iswupper, iswlower, towupper, towlower.])
AH_TEMPLATE([HAVE_SIGSET_T],
[Define HAVE_SIGSET_T you have the sigset_t type.])
AH_TEMPLATE([HAVE_SIGEMPTYSET],
[Define HAVE_SIGEMPTYSET if you have the sigemptyset macro.])
AH_TEMPLATE([EDIT_PGM],
[Define EDIT_PGM to your editor.])
AH_TEMPLATE([SECURE_COMPILE],
[Define SECURE_COMPILE=1 to build a secure version of less.])
# Checks for identifiers.
AC_TYPE_OFF_T
AC_MSG_CHECKING(for void)
AC_TRY_COMPILE(, [void *foo = 0;],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_VOID)], [AC_MSG_RESULT(no)])
AC_MSG_CHECKING(for const)
AC_TRY_COMPILE(, [const int foo = 0;],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CONST)], [AC_MSG_RESULT(no)])
AC_MSG_CHECKING(for time_t)
AC_TRY_COMPILE([#include <time.h>], [time_t t = 0;],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_TIME_T)], [AC_MSG_RESULT(no)])
AC_MSG_CHECKING(for st_ino in struct stat)
AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/stat.h>],
[struct stat s; dev_t dev = s.st_dev; ino_t ino = s.st_ino;],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STAT_INO)], [AC_MSG_RESULT(no)])
# Checks for library functions.
AC_TYPE_SIGNAL
AC_CHECK_FUNCS([fsync popen _setjmp sigprocmask sigsetmask snprintf stat system fchmod])
# AC_CHECK_FUNCS may not work for inline functions, so test these separately.
AC_MSG_CHECKING(for memcpy)
AC_TRY_LINK([
#if HAVE_STRING_H
#include <string.h>
#endif], [memcpy(0,0,0);],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MEMCPY)], [AC_MSG_RESULT(no)])
AC_MSG_CHECKING(for strchr)
AC_TRY_LINK([
#if HAVE_STRING_H
#include <string.h>
#endif], [strchr("x",'x');],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRCHR)], [AC_MSG_RESULT(no)])
AC_MSG_CHECKING(for strstr)
AC_TRY_LINK([
#if HAVE_STRING_H
#include <string.h>
#endif], [strstr("x","x");],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRSTR)], [AC_MSG_RESULT(no)])
# Some systems have termios.h but not the corresponding functions.
AC_CHECK_FUNC(tcgetattr, AC_DEFINE(HAVE_TERMIOS_FUNCS))
AC_MSG_CHECKING(for fileno)
AC_TRY_LINK([
#if HAVE_STDIO_H
#include <stdio.h>
#endif], [static int x; x = fileno(stdin);],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FILENO)], [AC_MSG_RESULT(no)])
AC_MSG_CHECKING(for strerror)
AC_TRY_LINK([
#if HAVE_STDIO_H
#include <stdio.h>
#endif
#if HAVE_STRING_H
#include <string.h>
#endif
#if HAVE_ERRNO_H
#include <errno.h>
#endif], [static char *x; x = strerror(0);],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRERROR)], [AC_MSG_RESULT(no)])
AC_MSG_CHECKING(for sys_errlist)
AC_TRY_LINK(, [extern char *sys_errlist[]; static char **x; x = sys_errlist;],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_ERRLIST)], [AC_MSG_RESULT(no)])
AC_CHECK_TYPES([sigset_t],,,[#include <signal.h>])
AC_MSG_CHECKING(for sigemptyset)
AC_TRY_LINK([
#include <signal.h>
], [sigset_t s; sigemptyset(&s);],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SIGEMPTYSET)], [AC_MSG_RESULT(no)])
have_errno=no
AC_MSG_CHECKING(for errno)
AC_TRY_LINK([
#if HAVE_ERRNO_H
#include <errno.h>
#endif], [static int x; x = errno;],
[AC_MSG_RESULT(yes - in errno.h); AC_DEFINE(HAVE_ERRNO) have_errno=yes])
if test $have_errno = no; then
AC_TRY_LINK([
#if HAVE_ERRNO_H
#include <errno.h>
#endif], [extern int errno; static int x; x = errno;],
[AC_MSG_RESULT(yes - must define); AC_DEFINE(HAVE_ERRNO) AC_DEFINE(MUST_DEFINE_ERRNO)],
[AC_MSG_RESULT(no)])
fi
AC_MSG_CHECKING(for locale)
AC_TRY_LINK([#include <locale.h>
#include <ctype.h>
#include <langinfo.h>], [setlocale(LC_CTYPE,""); isprint(0); iscntrl(0);],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_LOCALE)], [AC_MSG_RESULT(no)])
AC_MSG_CHECKING(for ctype functions)
AC_TRY_LINK([
#if HAVE_CTYPE_H
#include <ctype.h>
#endif], [static int x; x = isupper(x); x = tolower(x); x = toupper(x);],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UPPER_LOWER)], [AC_MSG_RESULT(no)])
AC_MSG_CHECKING(for wctype functions)
AC_TRY_LINK([#include <wctype.h>], [iswlower(0); iswupper(0); towlower(0); towupper(0);],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_WCTYPE)], [AC_MSG_RESULT(no)])
# Checks for external variable ospeed in the termcap library.
have_ospeed=no
AC_MSG_CHECKING(termcap for ospeed)
AC_TRY_LINK([
#include <sys/types.h>
#if HAVE_TERMIOS_H
#include <termios.h>
#endif
#if HAVE_TERMCAP_H
#include <termcap.h>
#endif], [ospeed = 0;],
[AC_MSG_RESULT(yes - in termcap.h); AC_DEFINE(HAVE_OSPEED) have_ospeed=yes])
if test $have_ospeed = no; then
AC_TRY_LINK(, [extern short ospeed; ospeed = 0;],
[AC_MSG_RESULT(yes - must define); AC_DEFINE(HAVE_OSPEED) AC_DEFINE(MUST_DEFINE_OSPEED)],
[AC_MSG_RESULT(no)])
fi
# Compile in secure mode?
AC_ARG_WITH(secure,
[ --with-secure Compile in secure mode],
AC_DEFINE(SECURE_COMPILE, 1), AC_DEFINE(SECURE_COMPILE, 0))
# Should we use floating point?
AC_MSG_CHECKING(for floating point)
AC_ARG_WITH(no-float,
[ --with-no-float Do not use floating point],
WANT_NO_FLOAT=1, WANT_NO_FLOAT=0)
if test $WANT_NO_FLOAT = 0; then
AC_TRY_LINK(, [double f1 = 12.5; double f2 = f1*f1/2.5;],
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT)], [AC_MSG_RESULT(no)])
else
AC_MSG_RESULT(disabled by user)
fi
# Checks for regular expression functions.
have_regex=no
have_posix_regex=unknown
AC_MSG_CHECKING(for regcomp)
# Select a regular expression library.
WANT_REGEX=auto
AC_ARG_WITH(regex,
[ --with-regex={auto,pcre,posix,regcmp,re_comp,regcomp,regcomp-local} Select a regular expression library [auto]],
WANT_REGEX="$withval")
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.
AC_TRY_RUN([
#include <sys/types.h>
#include <regex.h>
main() { regex_t r; regmatch_t rm; char *text = "xabcy";
if (regcomp(&r, "abc", 0)) exit(1);
if (regexec(&r, text, 1, &rm, 0)) exit(1);
#ifndef __WATCOMC__
if (rm.rm_so != 1) exit(1); /* check for correct offset */
#else
if (rm.rm_sp != text + 1) exit(1); /* check for correct offset */
#endif
exit(0); }],
have_posix_regex=yes, have_posix_regex=no, have_posix_regex=unknown)
if test $have_posix_regex = yes; then
AC_MSG_RESULT(using POSIX regcomp)
AC_DEFINE(HAVE_POSIX_REGCOMP)
have_regex=yes
elif test $have_posix_regex = unknown; then
AC_TRY_LINK([
#include <sys/types.h>
#include <regex.h>],
[regex_t *r; regfree(r);],
AC_MSG_RESULT(using POSIX regcomp)
AC_DEFINE(HAVE_POSIX_REGCOMP) have_regex=yes)
else
AC_MSG_RESULT(no)
fi
fi
fi
if test $have_regex = no; then
if test $WANT_REGEX = auto -o $WANT_REGEX = pcre; then
AC_CHECK_LIB(pcre, pcre_compile,
[AC_MSG_RESULT(using pcre); AC_DEFINE(HAVE_PCRE) LIBS="$LIBS -lpcre" have_regex=yes], [])
fi
fi
if test $have_regex = no; then
if test $WANT_REGEX = auto -o $WANT_REGEX = regcmp; then
AC_CHECK_FUNC(regcmp,
AC_MSG_RESULT(using regcmp); AC_DEFINE(HAVE_REGCMP) have_regex=yes)
fi
fi
if test $have_regex = no; then
if test $WANT_REGEX = auto -o $WANT_REGEX = regcomp; then
AC_TRY_LINK([
#include "regexp.h"], [regcomp("");],
AC_MSG_RESULT(using V8 regcomp); AC_DEFINE(HAVE_V8_REGCOMP) have_regex=yes)
fi
fi
if test $have_regex = no && test -f ${srcdir}/regexp.c; then
if test $WANT_REGEX = auto -o $WANT_REGEX = regcomp-local; then
AC_MSG_RESULT(using V8 regcomp -- local source); AC_DEFINE(HAVE_V8_REGCOMP) AC_DEFINE(HAVE_REGEXEC2) REGEX_O='regexp.$(O)' AC_SUBST(REGEX_O) have_regex=yes
fi
fi
if test $have_regex = no; then
if test $WANT_REGEX = auto -o $WANT_REGEX = re_comp; then
AC_MSG_RESULT(using re_comp); AC_CHECK_FUNC(re_comp, AC_DEFINE(HAVE_RE_COMP) have_regex=yes)
fi
fi
if test $have_regex = no; then
AC_MSG_RESULT(cannot find regular expression library); AC_DEFINE(NO_REGEX)
fi
AC_ARG_WITH(editor,
[ --with-editor=PROGRAM use PROGRAM as the default editor [vi]],
AC_DEFINE_UNQUOTED(EDIT_PGM, "$withval"), AC_DEFINE(EDIT_PGM, "vi"))
AH_TOP([
/* Unix definition file for less. -*- C -*-
*
* This file has 3 sections:
* User preferences.
* Settings always true on Unix.
* Settings automatically determined by configure.
*
* * * * * * WARNING * * * * * *
* If you edit defines.h by hand, do "touch stamp-h" before you run make
* so config.status doesn't overwrite your changes.
*/
/* User preferences. */
/*
* SECURE is 1 if you wish to disable a bunch of features in order to
* be safe to run by unprivileged users.
* SECURE_COMPILE is set by the --with-secure configure option.
*/
#define SECURE SECURE_COMPILE
/*
* 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)
/*
* EXAMINE is 1 if you wish to allow examining files by name from within less.
*/
#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)
/*
* CMD_HISTORY is 1 if you wish to allow keys to cycle through
* previous commands at prompts.
*/
#define CMD_HISTORY 1
/*
* HILITE_SEARCH is 1 if you wish to have search targets to be
* displayed in standout mode.
*/
#define HILITE_SEARCH 1
/*
* EDITOR is 1 if you wish to allow editor invocation (the "v" command).
* (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)
/*
* TAGS is 1 if you wish to support tag files.
*/
#define TAGS (!SECURE)
/*
* USERFILE is 1 if you wish to allow a .less file to specify
* user-defined key bindings.
*/
#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)
/*
* PIPEC is 1 if you wish to have the "|" command
* which allows the user to pipe data into a shell command.
*/
#define PIPEC (!SECURE)
/*
* LOGFILE is 1 if you wish to allow the -l option (to create log files).
*/
#define LOGFILE (!SECURE)
/*
* GNU_OPTIONS is 1 if you wish to support the GNU-style command
* line options --help and --version.
*/
#define GNU_OPTIONS 1
/*
* ONLY_RETURN is 1 if you want RETURN to be the only input which
* will continue past an error message.
* Otherwise, any key will continue past an error message.
*/
#define ONLY_RETURN 0
/*
* LESSKEYFILE is the filename of the default lesskey output file
* (in the HOME directory).
* LESSKEYFILE_SYS is the filename of the system-wide lesskey output file.
* DEF_LESSKEYINFILE is the filename of the default lesskey input
* (in the HOME directory).
* LESSHISTFILE is the filename of the history file
* (in the HOME directory).
*/
#define LESSKEYFILE ".less"
#define LESSKEYFILE_SYS SYSDIR "/sysless"
#define DEF_LESSKEYINFILE ".lesskey"
#define LESSHISTFILE ".lesshst"
/* Settings always true on Unix. */
/*
* Define MSDOS_COMPILER if compiling under Microsoft C.
*/
#define MSDOS_COMPILER 0
/*
* Pathname separator character.
*/
#define PATHNAME_SEP "/"
/*
* The value returned from tgetent on success.
* Some HP-UX systems return 0 on success.
*/
#define TGETENT_OK 1
/*
* HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
*/
#define HAVE_SYS_TYPES_H 1
/*
* Define if you have the <sgstat.h> header file.
*/
#undef HAVE_SGSTAT_H
/*
* HAVE_PERROR is 1 if your system has the perror() call.
* (Actually, if it has sys_errlist, sys_nerr and errno.)
*/
#define HAVE_PERROR 1
/*
* HAVE_TIME is 1 if your system has the time() call.
*/
#define HAVE_TIME 1
/*
* HAVE_SHELL is 1 if your system supports a SHELL command interpreter.
*/
#define HAVE_SHELL 1
/*
* Default shell metacharacters and meta-escape character.
*/
#define DEF_METACHARS "; *?\t\n'\"()<>[]|&^`#\\$%=~"
#define DEF_METAESCAPE "\\"
/*
* HAVE_DUP is 1 if your system has the dup() call.
*/
#define HAVE_DUP 1
/* Define to 1 if you have the memcpy() function. */
#define HAVE_MEMCPY 1
/* Define to 1 if you have the strchr() function. */
#define HAVE_STRCHR 1
/* Define to 1 if you have the strstr() function. */
#define HAVE_STRSTR 1
/*
* Sizes of various buffers.
*/
#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 OUTBUF_SIZE 1024 /* Output buffer */
#define PROMPT_SIZE 200 /* 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 512 /* Max size of line in tags file */
#define TABSTOP_MAX 32 /* Max number of custom tab stops */
/* Settings automatically determined by configure. */
])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

122
external/bsd/less/dist/cvt.c vendored Normal file
View file

@ -0,0 +1,122 @@
/* $NetBSD: cvt.c,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/*
* Copyright (C) 1984-2011 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.
*/
/*
* Routines to convert text in various ways. Used by search.
*/
#include "less.h"
#include "charset.h"
extern int utf_mode;
/*
* Get the length of a buffer needed to convert a string.
*/
public int
cvt_length(len, ops)
int len;
int ops;
{
if (utf_mode)
/*
* Just copying a string in UTF-8 mode can cause it to grow
* in length.
* Four output bytes for one input byte is the worst case.
*/
len *= 4;
return (len + 1);
}
/*
* Allocate a chpos array for use by cvt_text.
*/
public int *
cvt_alloc_chpos(len)
int len;
{
int i;
int *chpos = (int *) ecalloc(sizeof(int), len);
/* Initialize all entries to an invalid position. */
for (i = 0; i < len; i++)
chpos[i] = -1;
return (chpos);
}
/*
* Convert text. Perform the transformations specified by ops.
* Returns converted text in odst. The original offset of each
* odst character (when it was in osrc) is returned in the chpos array.
*/
public void
cvt_text(odst, osrc, chpos, lenp, ops)
char *odst;
char *osrc;
int *chpos;
int *lenp;
int ops;
{
char *dst;
char *src;
register char *src_end;
LWCHAR ch;
if (lenp != NULL)
src_end = osrc + *lenp;
else
src_end = osrc + strlen(osrc);
for (src = osrc, dst = odst; src < src_end; )
{
int src_pos = src - osrc;
int dst_pos = dst - odst;
ch = step_char(&src, +1, src_end);
if ((ops & CVT_BS) && ch == '\b' && dst > odst)
{
/* Delete backspace and preceding char. */
do {
dst--;
} while (dst > odst &&
!IS_ASCII_OCTET(*dst) && !IS_UTF8_LEAD(*dst));
} else if ((ops & CVT_ANSI) && IS_CSI_START(ch))
{
/* Skip to end of ANSI escape sequence. */
src++; /* skip the CSI start char */
while (src < src_end)
if (!is_ansi_middle(*src++))
break;
} else
{
/* Just copy the char to the destination buffer. */
if ((ops & CVT_TO_LC) && IS_UPPER(ch))
ch = TO_LOWER(ch);
put_wchar(&dst, ch);
/*
* 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)
chpos[dst_pos] = src_pos;
}
}
if ((ops & CVT_CRLF) && dst > odst && dst[-1] == '\r')
dst--;
*dst = '\0';
if (lenp != NULL)
*lenp = dst - odst;
if (chpos != NULL)
chpos[dst - odst] = src - osrc;
}

View file

@ -1,7 +1,7 @@
/* $NetBSD: decode.c,v 1.8 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: decode.c,v 1.3 2011/07/03 20:14:12 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -122,6 +122,7 @@ static unsigned char cmdtable[] =
'7',0, A_DIGIT, '7',0, A_DIGIT,
'8',0, A_DIGIT, '8',0, A_DIGIT,
'9',0, A_DIGIT, '9',0, A_DIGIT,
'.',0, A_DIGIT,
'=',0, A_STAT, '=',0, A_STAT,
CONTROL('G'),0, A_STAT, CONTROL('G'),0, A_STAT,
@ -134,6 +135,7 @@ static unsigned char cmdtable[] =
ESC,'n',0, A_T_AGAIN_SEARCH, ESC,'n',0, A_T_AGAIN_SEARCH,
'N',0, A_REVERSE_SEARCH, 'N',0, A_REVERSE_SEARCH,
ESC,'N',0, A_T_REVERSE_SEARCH, ESC,'N',0, A_T_REVERSE_SEARCH,
'&',0, A_FILTER,
'm',0, A_SETMARK, 'm',0, A_SETMARK,
'\'',0, A_GOMARK, '\'',0, A_GOMARK,
CONTROL('X'),CONTROL('X'),0, A_GOMARK, CONTROL('X'),CONTROL('X'),0, A_GOMARK,
@ -202,6 +204,7 @@ static unsigned char edittable[] =
SK(SK_UP_ARROW),0, EC_UP, /* UPARROW */ SK(SK_UP_ARROW),0, EC_UP, /* UPARROW */
ESC,'j',0, EC_DOWN, /* ESC j */ ESC,'j',0, EC_DOWN, /* ESC j */
SK(SK_DOWN_ARROW),0, EC_DOWN, /* DOWNARROW */ SK(SK_DOWN_ARROW),0, EC_DOWN, /* DOWNARROW */
CONTROL('G'),0, EC_ABORT, /* CTRL-G */
}; };
/* /*
@ -688,7 +691,7 @@ lesskey(filename, sysvar)
close(f); close(f);
return (-1); return (-1);
} }
if (lseek(f, (off_t)0, 0) == BAD_LSEEK) if (lseek(f, (off_t)0, SEEK_SET) == BAD_LSEEK)
{ {
free(buf); free(buf);
close(f); close(f);

400
external/bsd/less/dist/defines.ds vendored Normal file
View file

@ -0,0 +1,400 @@
/*
* Copyright (C) 1984-2011 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.
*/
/* DOS definition file for less. */
/*
* This file has 2 sections:
* User preferences.
* Settings always true for MS-DOS systems.
*/
/* User preferences. */
/*
* SECURE is 1 if you wish to disable a bunch of features in order to
* be safe to run by unprivileged users.
*/
#define SECURE 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)
/*
* EXAMINE is 1 if you wish to allow examining files by name from within less.
*/
#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)
/*
* CMD_HISTORY is 1 if you wish to allow keys to cycle through
* previous commands at prompts.
*/
#define CMD_HISTORY 1
/*
* HILITE_SEARCH is 1 if you wish to have search targets to be
* displayed in standout mode.
*/
#define HILITE_SEARCH 1
/*
* EDITOR is 1 if you wish to allow editor invocation (the "v" command).
* (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)
#define EDIT_PGM "vi"
/*
* TAGS is 1 if you wish to support tag files.
*/
#define TAGS (!SECURE)
/*
* USERFILE is 1 if you wish to allow a .less file to specify
* user-defined key bindings.
*/
#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.
*/
#ifdef __DJGPP__
#define GLOB (!SECURE)
#else
#define GLOB 0
#endif
/*
* PIPEC is 1 if you wish to have the "|" command
* which allows the user to pipe data into a shell command.
*/
#ifdef __DJGPP__
#define PIPEC (!SECURE)
#else
#define PIPEC 0
#endif
/*
* LOGFILE is 1 if you wish to allow the -l option (to create log files).
*/
#define LOGFILE (!SECURE)
/*
* GNU_OPTIONS is 1 if you wish to support the GNU-style command
* line options --help and --version.
*/
#define GNU_OPTIONS 1
/*
* ONLY_RETURN is 1 if you want RETURN to be the only input which
* will continue past an error message.
* Otherwise, any key will continue past an error message.
*/
#define ONLY_RETURN 0
/*
* LESSKEYFILE is the filename of the default lesskey output file
* (in the HOME directory).
* LESSKEYFILE_SYS is the filename of the system-wide lesskey output file.
* DEF_LESSKEYINFILE is the filename of the default lesskey input
* (in the HOME directory).
* LESSHISTFILE is the filename of the history file
* (in the HOME directory).
*/
#define LESSKEYFILE "_less"
#define LESSKEYFILE_SYS "c:\\_sysless"
#define DEF_LESSKEYINFILE "_lesskey"
#define LESSHISTFILE "_lesshst"
/* Settings always true for MS-DOS systems. */
/*
* Define MSDOS_COMPILER if compiling for MS-DOS.
*/
#ifdef __DJGPP__
#define MSDOS_COMPILER DJGPPC
#else
#ifdef __BORLANDC__
#define MSDOS_COMPILER BORLANDC
#else
#define MSDOS_COMPILER MSOFTC
#endif
#endif
/*
* Pathname separator character.
*/
#define PATHNAME_SEP "\\"
/*
* HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
*/
#define HAVE_SYS_TYPES_H 1
/*
* Define if you have the <sgstat.h> header file.
*/
#define HAVE_SGSTAT_H 0
/*
* HAVE_PERROR is 1 if your system has the perror() call.
* (Actually, if it has sys_errlist, sys_nerr and errno.)
*/
#define HAVE_PERROR 1
/*
* HAVE_TIME is 1 if your system has the time() call.
*/
#define HAVE_TIME 1
/*
* HAVE_SHELL is 1 if your system supports a SHELL command interpreter.
*/
#define HAVE_SHELL 0
/*
* Default shell metacharacters and meta-escape character.
*/
#define DEF_METACHARS "; *?\t\n'\"()<>|&"
#define DEF_METAESCAPE ""
/*
* HAVE_DUP is 1 if your system has the dup() call.
*/
#define HAVE_DUP 1
/*
* Sizes of various buffers.
*/
#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 OUTBUF_SIZE 1024 /* Output buffer */
#define PROMPT_SIZE 200 /* 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 512 /* Max size of line in tags file */
#define TABSTOP_MAX 32 /* Max number of custom tab stops */
/* Define to `long' if <sys/types.h> doesn't define. */
#if MSDOS_COMPILER==BORLANDC
#define off_t long
#endif
/* Define if you need to in order for stat and other things to work. */
/* #undef _POSIX_SOURCE */
/* Define as the return type of signal handlers (int or void). */
#define RETSIGTYPE void
/*
* Regular expression library.
* Define exactly one of the following to be 1:
* HAVE_POSIX_REGCOMP: POSIX regcomp() and regex.h
* HAVE_RE_COMP: BSD re_comp()
* HAVE_REGCMP: System V regcmp()
* HAVE_V8_REGCOMP: Henry Spencer V8 regcomp() and regexp.h
* NO_REGEX: pattern matching is supported, but without metacharacters.
*/
/* #undef HAVE_POSIX_REGCOMP */
/* #undef HAVE_RE_COMP */
/* #undef HAVE_REGCMP */
/* #undef HAVE_V8_REGCOMP */
#if MSDOS_COMPILER==DJGPPC
#define HAVE_POSIX_REGCOMP 1
#else
#define NO_REGEX 1
#endif
/* Define HAVE_VOID if your compiler supports the "void" type. */
#define HAVE_VOID 1
/* Define HAVE_CONST if your compiler supports the "const" modifier. */
#define HAVE_CONST 1
/* Define HAVE_TIME_T if your system supports the "time_t" type. */
#define HAVE_TIME_T 1
/* Define HAVE_STRERROR if you have the strerror() function. */
#define HAVE_STRERROR 1
/* Define HAVE_FILENO if you have the fileno() macro. */
#define HAVE_FILENO 1
/* Define HAVE_ERRNO if you have the errno variable */
/* Define MUST_DEFINE_ERRNO if you have errno but it is not defined
* in errno.h */
#if MSDOS_COMPILER==MSOFTC || MSDOS_COMPILER==DJGPPC
#define HAVE_ERRNO 1
#define MUST_DEFINE_ERRNO 0
#else
#define HAVE_ERRNO 1
#define MUST_DEFINE_ERRNO 1
#endif
/* Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable */
#define HAVE_SYS_ERRLIST 1
/* Define HAVE_OSPEED if your termcap library has the ospeed variable */
/* Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined
* in termcap.h. */
#define HAVE_OSPEED 0
#define MUST_DEFINE_OSPEED 0
/* Define HAVE_LOCALE if you have locale.h and setlocale. */
#define HAVE_LOCALE 0
/* Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr */
#define HAVE_TERMIOS_FUNCS 0
/* Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower */
#define HAVE_UPPER_LOWER 1
/* Define if you have the _setjmp function. */
#if MSDOS_COMPILER==MSOFTC || MSDOS_COMPILER==DJGPPC
#define HAVE__SETJMP 0
#else
#define HAVE__SETJMP 1
#endif
/* Define if you have the memcpy function. */
#define HAVE_MEMCPY 1
/* Define if you have the popen function. */
#if MSDOS_COMPILER==DJGPPC
#define HAVE_POPEN 1
#else
#define HAVE_POPEN 0
#endif
/* Define if you have the sigsetmask function. */
#define HAVE_SIGSETMASK 0
/* Define if you have the sigprocmask function. */
#define HAVE_SIGPROCMASK 0
/* Define if you have the sigset_t type and sigemptyset macro */
#define HAVE_SIGSET_T 0
#define HAVE_SIGEMPTYSET 0
/* Define if you have the stat function. */
#define HAVE_STAT 1
/* Define if you have the strchr function. */
#define HAVE_STRCHR 1
/* Define if you have the system function. */
#define HAVE_SYSTEM 1
/* Define if you have the snprintf function. */
#define HAVE_SNPRINTF 0
/* Define if you have the <ctype.h> header file. */
#define HAVE_CTYPE_H 1
/* Define if you have the <wctype.h> header file. */
#define HAVE_WCTYPE_H 0
/* Define if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1
/* Define if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define if you have the <stdio.h> header file. */
#define HAVE_STDIO_H 1
/* Define if you have the <stdlib> header file. */
#define HAVE_STDLIB_H 1
/* Define if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 0
/* Define if you have the <sys/ptem.h> header file. */
#define HAVE_SYS_PTEM_H 0
/* Define if you have the <sys/stream.h> header file. */
#define HAVE_SYS_STREAM_H 0
/* Define if you have the <termcap.h> header file. */
#define HAVE_TERMCAP_H 0
/* Define if you have the <termio.h> header file. */
#define HAVE_TERMIO_H 0
/* Define if you have the <termios.h> header file. */
#define HAVE_TERMIOS_H 0
/* Define if you have the <time.h> header file. */
#define HAVE_TIME_H 1
/* Define if you have the <unistd.h> header file. */
#if MSDOS_COMPILER==DJGPPC
#define HAVE_UNISTD_H 1
#else
#define HAVE_UNISTD_H 0
#endif
/* Define if you have the <values.h> header file. */
#if MSDOS_COMPILER==MSOFTC
#define HAVE_VALUES_H 0
#else
#define HAVE_VALUES_H 1
#endif
#if MSDOS_COMPILER == MSOFTC && _MSC_VER >= 700
/*
* The names of these things changed in Microsoft C version 7.0.
*/
#define videoconfig _videoconfig
#define rccoord _rccoord
#define O_RDONLY _O_RDONLY
#define O_WRONLY _O_WRONLY
#define O_APPEND _O_APPEND
#define O_BINARY _O_BINARY
#define O_TEXT _O_TEXT
#define find_t _find_t
#define stat _stat
#define S_IFMT _S_IFMT
#define S_IFDIR _S_IFDIR
#define S_IFREG _S_IFREG
#define dup _dup
#define open _open
#define lseek _lseek
#define write _write
#define creat _creat
#define fstat _fstat
#define isatty _isatty
#define close _close
#define read _read
#define ungetch _ungetch
#define kbhit _kbhit
#define getch _getch
#endif

View file

@ -1,6 +1,6 @@
/* $NetBSD: defines.h,v 1.7 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: defines.h,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/* defines.h. Generated by configure. */ /* defines.h. Generated from defines.h.in by configure. */
/* defines.h.in. Generated from configure.ac by autoheader. */ /* defines.h.in. Generated from configure.ac by autoheader. */
@ -130,6 +130,12 @@
*/ */
#define PATHNAME_SEP "/" #define PATHNAME_SEP "/"
/*
* The value returned from tgetent on success.
* Some HP-UX systems return 0 on success.
*/
#define TGETENT_OK 1
/* /*
* HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>. * HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
*/ */
@ -159,7 +165,7 @@
/* /*
* Default shell metacharacters and meta-escape character. * Default shell metacharacters and meta-escape character.
*/ */
#define DEF_METACHARS "; *?\t\n'\"()<>[]|&^`#\\" #define DEF_METACHARS "; *?\t\n'\"()<>[]|&^`#\\$%=~"
#define DEF_METAESCAPE "\\" #define DEF_METAESCAPE "\\"
/* /*
@ -167,6 +173,15 @@
*/ */
#define HAVE_DUP 1 #define HAVE_DUP 1
/* Define to 1 if you have the memcpy() function. */
#define HAVE_MEMCPY 1
/* Define to 1 if you have the strchr() function. */
#define HAVE_STRCHR 1
/* Define to 1 if you have the strstr() function. */
#define HAVE_STRSTR 1
/* /*
* Sizes of various buffers. * Sizes of various buffers.
*/ */
@ -207,6 +222,9 @@
/* Define HAVE_FILENO if you have the fileno() macro. */ /* Define HAVE_FILENO if you have the fileno() macro. */
#define HAVE_FILENO 1 #define HAVE_FILENO 1
/* Define HAVE_FLOAT if your compiler supports the "double" type. */
#define HAVE_FLOAT 1
/* Define to 1 if you have the `fsync' function. */ /* Define to 1 if you have the `fsync' function. */
#define HAVE_FSYNC 1 #define HAVE_FSYNC 1
@ -226,16 +244,13 @@
#define HAVE_LIMITS_H 1 #define HAVE_LIMITS_H 1
/* Define HAVE_LOCALE if you have locale.h and setlocale. */ /* Define HAVE_LOCALE if you have locale.h and setlocale. */
#define HAVE_LOCALE 0 #define HAVE_LOCALE 1
/* Define to 1 if you have the `memcpy' function. */
#define HAVE_MEMCPY 1
/* Define to 1 if you have the <memory.h> header file. */ /* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1 #define HAVE_MEMORY_H 1
/* Define HAVE_OSPEED if your termcap library has the ospeed variable. */ /* Define HAVE_OSPEED if your termcap library has the ospeed variable. */
#define HAVE_OSPEED 0 #define HAVE_OSPEED 1
/* PCRE (Perl-compatible regular expression) library */ /* PCRE (Perl-compatible regular expression) library */
/* #undef HAVE_PCRE */ /* #undef HAVE_PCRE */
@ -264,7 +279,7 @@
/* Define to 1 if you have the `sigsetmask' function. */ /* Define to 1 if you have the `sigsetmask' function. */
#define HAVE_SIGSETMASK 1 #define HAVE_SIGSETMASK 1
/* Define HAVE_SIGSET_T you have the sigset_t type. */ /* Define to 1 if the system has the type `sigset_t'. */
#define HAVE_SIGSET_T 1 #define HAVE_SIGSET_T 1
/* Define to 1 if you have the `snprintf' function. */ /* Define to 1 if you have the `snprintf' function. */
@ -273,6 +288,9 @@
/* Define to 1 if you have the `stat' function. */ /* Define to 1 if you have the `stat' function. */
#define HAVE_STAT 1 #define HAVE_STAT 1
/* Define HAVE_STAT_INO if your struct stat has st_ino and st_dev. */
#define HAVE_STAT_INO 1
/* Define to 1 if you have the <stdint.h> header file. */ /* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1 #define HAVE_STDINT_H 1
@ -282,9 +300,6 @@
/* Define to 1 if you have the <stdlib.h> header file. */ /* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1 #define HAVE_STDLIB_H 1
/* Define to 1 if you have the `strchr' function. */
#define HAVE_STRCHR 1
/* Define HAVE_STRERROR if you have the strerror() function. */ /* Define HAVE_STRERROR if you have the strerror() function. */
#define HAVE_STRERROR 1 #define HAVE_STRERROR 1
@ -294,9 +309,6 @@
/* Define to 1 if you have the <string.h> header file. */ /* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1 #define HAVE_STRING_H 1
/* Define to 1 if you have the `strstr' function. */
#define HAVE_STRSTR 1
/* Define to 1 if you have the `system' function. */ /* Define to 1 if you have the `system' function. */
#define HAVE_SYSTEM 1 #define HAVE_SYSTEM 1
@ -306,9 +318,6 @@
/* Define to 1 if you have the <sys/ioctl.h> header file. */ /* Define to 1 if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 1 #define HAVE_SYS_IOCTL_H 1
/* Define to 1 if you have the <sys/ptem.h> header file. */
/* #undef HAVE_SYS_PTEM_H */
/* Define to 1 if you have the <sys/stat.h> header file. */ /* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1 #define HAVE_SYS_STAT_H 1
@ -351,6 +360,12 @@
/* Define HAVE_VOID if your compiler supports the "void" type. */ /* Define HAVE_VOID if your compiler supports the "void" type. */
#define HAVE_VOID 1 #define HAVE_VOID 1
/* Define HAVE_WCTYPE if you have iswupper, iswlower, towupper, towlower. */
#define HAVE_WCTYPE 1
/* Define to 1 if you have the <wctype.h> header file. */
#define HAVE_WCTYPE_H 1
/* Define to 1 if you have the `_setjmp' function. */ /* Define to 1 if you have the `_setjmp' function. */
#define HAVE__SETJMP 1 #define HAVE__SETJMP 1
@ -377,6 +392,9 @@
/* Define to the one symbol short name of this package. */ /* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "less" #define PACKAGE_TARNAME "less"
/* Define to the home page for this package. */
#define PACKAGE_URL ""
/* Define to the version of this package. */ /* Define to the version of this package. */
#define PACKAGE_VERSION "1" #define PACKAGE_VERSION "1"
@ -404,8 +422,8 @@
/* Define to empty if `const' does not conform to ANSI C. */ /* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */ /* #undef const */
/* Define to `long' if <sys/types.h> does not define. */ /* Define to `long int' if <sys/types.h> does not define. */
/* #undef off_t */ /* #undef off_t */
/* Define to `unsigned' if <sys/types.h> does not define. */ /* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef size_t */ /* #undef size_t */

426
external/bsd/less/dist/defines.h.in vendored Normal file
View file

@ -0,0 +1,426 @@
/* defines.h.in. Generated from configure.ac by autoheader. */
/* Unix definition file for less. -*- C -*-
*
* This file has 3 sections:
* User preferences.
* Settings always true on Unix.
* Settings automatically determined by configure.
*
* * * * * * WARNING * * * * * *
* If you edit defines.h by hand, do "touch stamp-h" before you run make
* so config.status doesn't overwrite your changes.
*/
/* User preferences. */
/*
* SECURE is 1 if you wish to disable a bunch of features in order to
* be safe to run by unprivileged users.
* SECURE_COMPILE is set by the --with-secure configure option.
*/
#define SECURE SECURE_COMPILE
/*
* 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)
/*
* EXAMINE is 1 if you wish to allow examining files by name from within less.
*/
#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)
/*
* CMD_HISTORY is 1 if you wish to allow keys to cycle through
* previous commands at prompts.
*/
#define CMD_HISTORY 1
/*
* HILITE_SEARCH is 1 if you wish to have search targets to be
* displayed in standout mode.
*/
#define HILITE_SEARCH 1
/*
* EDITOR is 1 if you wish to allow editor invocation (the "v" command).
* (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)
/*
* TAGS is 1 if you wish to support tag files.
*/
#define TAGS (!SECURE)
/*
* USERFILE is 1 if you wish to allow a .less file to specify
* user-defined key bindings.
*/
#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)
/*
* PIPEC is 1 if you wish to have the "|" command
* which allows the user to pipe data into a shell command.
*/
#define PIPEC (!SECURE)
/*
* LOGFILE is 1 if you wish to allow the -l option (to create log files).
*/
#define LOGFILE (!SECURE)
/*
* GNU_OPTIONS is 1 if you wish to support the GNU-style command
* line options --help and --version.
*/
#define GNU_OPTIONS 1
/*
* ONLY_RETURN is 1 if you want RETURN to be the only input which
* will continue past an error message.
* Otherwise, any key will continue past an error message.
*/
#define ONLY_RETURN 0
/*
* LESSKEYFILE is the filename of the default lesskey output file
* (in the HOME directory).
* LESSKEYFILE_SYS is the filename of the system-wide lesskey output file.
* DEF_LESSKEYINFILE is the filename of the default lesskey input
* (in the HOME directory).
* LESSHISTFILE is the filename of the history file
* (in the HOME directory).
*/
#define LESSKEYFILE ".less"
#define LESSKEYFILE_SYS SYSDIR "/sysless"
#define DEF_LESSKEYINFILE ".lesskey"
#define LESSHISTFILE ".lesshst"
/* Settings always true on Unix. */
/*
* Define MSDOS_COMPILER if compiling under Microsoft C.
*/
#define MSDOS_COMPILER 0
/*
* Pathname separator character.
*/
#define PATHNAME_SEP "/"
/*
* The value returned from tgetent on success.
* Some HP-UX systems return 0 on success.
*/
#define TGETENT_OK 1
/*
* HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
*/
#define HAVE_SYS_TYPES_H 1
/*
* Define if you have the <sgstat.h> header file.
*/
#undef HAVE_SGSTAT_H
/*
* HAVE_PERROR is 1 if your system has the perror() call.
* (Actually, if it has sys_errlist, sys_nerr and errno.)
*/
#define HAVE_PERROR 1
/*
* HAVE_TIME is 1 if your system has the time() call.
*/
#define HAVE_TIME 1
/*
* HAVE_SHELL is 1 if your system supports a SHELL command interpreter.
*/
#define HAVE_SHELL 1
/*
* Default shell metacharacters and meta-escape character.
*/
#define DEF_METACHARS "; *?\t\n'\"()<>[]|&^`#\\$%=~"
#define DEF_METAESCAPE "\\"
/*
* HAVE_DUP is 1 if your system has the dup() call.
*/
#define HAVE_DUP 1
/* Define to 1 if you have the memcpy() function. */
#define HAVE_MEMCPY 1
/* Define to 1 if you have the strchr() function. */
#define HAVE_STRCHR 1
/* Define to 1 if you have the strstr() function. */
#define HAVE_STRSTR 1
/*
* Sizes of various buffers.
*/
#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 OUTBUF_SIZE 1024 /* Output buffer */
#define PROMPT_SIZE 200 /* 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 512 /* Max size of line in tags file */
#define TABSTOP_MAX 32 /* Max number of custom tab stops */
/* Settings automatically determined by configure. */
/* Define EDIT_PGM to your editor. */
#undef EDIT_PGM
/* Define HAVE_CONST if your compiler supports the "const" modifier. */
#undef HAVE_CONST
/* Define to 1 if you have the <ctype.h> header file. */
#undef HAVE_CTYPE_H
/* Define HAVE_ERRNO if you have the errno variable. */
#undef HAVE_ERRNO
/* Define to 1 if you have the <errno.h> header file. */
#undef HAVE_ERRNO_H
/* Define to 1 if you have the `fchmod' function. */
#undef HAVE_FCHMOD
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
/* Define HAVE_FILENO if you have the fileno() macro. */
#undef HAVE_FILENO
/* Define HAVE_FLOAT if your compiler supports the "double" type. */
#undef HAVE_FLOAT
/* Define to 1 if you have the `fsync' function. */
#undef HAVE_FSYNC
/* 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
/* Define HAVE_LOCALE if you have locale.h and setlocale. */
#undef HAVE_LOCALE
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define HAVE_OSPEED if your termcap library has the ospeed variable. */
#undef HAVE_OSPEED
/* PCRE (Perl-compatible regular expression) library */
#undef HAVE_PCRE
/* Define to 1 if you have the `popen' function. */
#undef HAVE_POPEN
/* POSIX regcomp() and regex.h */
#undef HAVE_POSIX_REGCOMP
/* System V regcmp() */
#undef HAVE_REGCMP
/* */
#undef HAVE_REGEXEC2
/* BSD re_comp() */
#undef HAVE_RE_COMP
/* Define HAVE_SIGEMPTYSET if you have the sigemptyset macro. */
#undef HAVE_SIGEMPTYSET
/* Define to 1 if you have the `sigprocmask' function. */
#undef HAVE_SIGPROCMASK
/* Define to 1 if you have the `sigsetmask' function. */
#undef HAVE_SIGSETMASK
/* Define to 1 if the system has the type `sigset_t'. */
#undef HAVE_SIGSET_T
/* Define to 1 if you have the `snprintf' function. */
#undef HAVE_SNPRINTF
/* Define to 1 if you have the `stat' function. */
#undef HAVE_STAT
/* Define HAVE_STAT_INO if your struct stat has st_ino and st_dev. */
#undef HAVE_STAT_INO
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdio.h> header file. */
#undef HAVE_STDIO_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define HAVE_STRERROR if you have the strerror() function. */
#undef HAVE_STRERROR
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the `system' function. */
#undef HAVE_SYSTEM
/* Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable. */
#undef HAVE_SYS_ERRLIST
/* Define to 1 if you have the <sys/ioctl.h> header file. */
#undef HAVE_SYS_IOCTL_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/stream.h> header file. */
#undef HAVE_SYS_STREAM_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <termcap.h> header file. */
#undef HAVE_TERMCAP_H
/* Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr. */
#undef HAVE_TERMIOS_FUNCS
/* Define to 1 if you have the <termios.h> header file. */
#undef HAVE_TERMIOS_H
/* Define to 1 if you have the <termio.h> header file. */
#undef HAVE_TERMIO_H
/* Define to 1 if you have the <time.h> header file. */
#undef HAVE_TIME_H
/* Define HAVE_TIME_T if your system supports the "time_t" type. */
#undef HAVE_TIME_T
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower. */
#undef HAVE_UPPER_LOWER
/* Henry Spencer V8 regcomp() and regexp.h */
#undef HAVE_V8_REGCOMP
/* Define to 1 if you have the <values.h> header file. */
#undef HAVE_VALUES_H
/* Define HAVE_VOID if your compiler supports the "void" type. */
#undef HAVE_VOID
/* Define HAVE_WCTYPE if you have iswupper, iswlower, towupper, towlower. */
#undef HAVE_WCTYPE
/* Define to 1 if you have the <wctype.h> header file. */
#undef HAVE_WCTYPE_H
/* Define to 1 if you have the `_setjmp' function. */
#undef HAVE__SETJMP
/* Define MUST_DEFINE_ERRNO if you have errno but it is not define in errno.h.
*/
#undef MUST_DEFINE_ERRNO
/* Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined in
termcap.h. */
#undef MUST_DEFINE_OSPEED
/* pattern matching is supported, but without metacharacters. */
#undef NO_REGEX
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the home page for this package. */
#undef PACKAGE_URL
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define as the return type of signal handlers (`int' or `void'). */
#undef RETSIGTYPE
/* Define SECURE_COMPILE=1 to build a secure version of less. */
#undef SECURE_COMPILE
/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
#undef STAT_MACROS_BROKEN
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME
/* Number of bits in a file offset, on hosts where this is settable. */
#undef _FILE_OFFSET_BITS
/* Define for large files, on AIX-style hosts. */
#undef _LARGE_FILES
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
/* Define to `long int' if <sys/types.h> does not define. */
#undef off_t
/* Define to `unsigned int' if <sys/types.h> does not define. */
#undef size_t

328
external/bsd/less/dist/defines.o2 vendored Normal file
View file

@ -0,0 +1,328 @@
/*
* Copyright (C) 1984-2011 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.
*/
/* OS/2 definition file for less. */
/*
* This file has 2 sections:
* User preferences.
* Settings always true for the emx compiler for OS/2 systems.
*/
/* User preferences. */
/*
* SECURE is 1 if you wish to disable a bunch of features in order to
* be safe to run by unprivileged users.
*/
#define SECURE 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)
/*
* EXAMINE is 1 if you wish to allow examining files by name from within less.
*/
#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)
/*
* CMD_HISTORY is 1 if you wish to allow keys to cycle through
* previous commands at prompts.
*/
#define CMD_HISTORY 1
/*
* HILITE_SEARCH is 1 if you wish to have search targets to be
* displayed in standout mode.
*/
#define HILITE_SEARCH 1
/*
* EDITOR is 1 if you wish to allow editor invocation (the "v" command).
* (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)
#define EDIT_PGM "vi"
/*
* TAGS is 1 if you wish to support tag files.
*/
#define TAGS (!SECURE)
/*
* USERFILE is 1 if you wish to allow a .less file to specify
* user-defined key bindings.
*/
#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)
/*
* PIPEC is 1 if you wish to have the "|" command
* which allows the user to pipe data into a shell command.
*/
#define PIPEC (!SECURE)
/*
* LOGFILE is 1 if you wish to allow the -l option (to create log files).
*/
#define LOGFILE (!SECURE)
/*
* GNU_OPTIONS is 1 if you wish to support the GNU-style command
* line options --help and --version.
*/
#define GNU_OPTIONS 1
/*
* ONLY_RETURN is 1 if you want RETURN to be the only input which
* will continue past an error message.
* Otherwise, any key will continue past an error message.
*/
#define ONLY_RETURN 0
/*
* LESSKEYFILE is the filename of the default lesskey output file
* (in the HOME directory).
* LESSKEYFILE_SYS is the filename of the system-wide lesskey output file.
* DEF_LESSKEYINFILE is the filename of the default lesskey input
* (in the HOME directory).
* LESSHISTFILE is the filename of the history file
* (in the HOME directory).
*/
#define LESSKEYFILE "less.ini"
#define LESSKEYFILE_SYS "C:\\sysless.ini"
#define DEF_LESSKEYINFILE "lesskey.ini"
#define LESSHISTFILE "lesshst.ini"
/* Settings always true for the emx compiler for OS/2 systems. */
#define OS2 1
/*
* Pathname separator character.
*/
#define PATHNAME_SEP "\\"
/*
* HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
*/
#define HAVE_SYS_TYPES_H 1
/*
* Define if you have the <sgstat.h> header file.
*/
#define HAVE_SGSTAT_H 0
/*
* HAVE_PERROR is 1 if your system has the perror() call.
* (Actually, if it has sys_errlist, sys_nerr and errno.)
*/
#define HAVE_PERROR 1
/*
* HAVE_TIME is 1 if your system has the time() call.
*/
#define HAVE_TIME 1
/*
* HAVE_SHELL is 1 if your system supports a SHELL command interpreter.
*/
#define HAVE_SHELL 0
/*
* Default shell metacharacters and meta-escape character.
*/
#define DEF_METACHARS "; *?\t\n'\"()<>|&"
#define DEF_METAESCAPE ""
/*
* HAVE_DUP is 1 if your system has the dup() call.
*/
#define HAVE_DUP 1
/*
* Sizes of various buffers.
*/
#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 OUTBUF_SIZE 1024 /* Output buffer */
#define PROMPT_SIZE 200 /* 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 512 /* Max size of line in tags file */
#define TABSTOP_MAX 32 /* Max number of custom tab stops */
/* Define to `long' if <sys/types.h> doesn't define. */
/* #define off_t long */
/* Define if you need to in order for stat and other things to work. */
/* #undef _POSIX_SOURCE */
/* Define as the return type of signal handlers (int or void). */
#define RETSIGTYPE void
/*
* Regular expression library.
* Define exactly one of the following to be 1:
* HAVE_POSIX_REGCOMP: POSIX regcomp() and regex.h
* HAVE_RE_COMP: BSD re_comp()
* HAVE_REGCMP: System V regcmp()
* HAVE_V8_REGCOMP: Henry Spencer V8 regcomp() and regexp.h
* NO_REGEX: pattern matching is supported, but without metacharacters.
*/
/* #undef HAVE_POSIX_REGCOMP */
/* #undef HAVE_RE_COMP */
/* #undef HAVE_REGCMP */
#define HAVE_V8_REGCOMP 1
/* #undef NO_REGEX */
#define HAVE_REGEXEC2 1
/* Define HAVE_VOID if your compiler supports the "void" type. */
#define HAVE_VOID 1
/* Define HAVE_CONST if your compiler supports the "const" modifier. */
#define HAVE_CONST 1
/* Define HAVE_TIME_T if your system supports the "time_t" type. */
#define HAVE_TIME_T 1
/* Define HAVE_STRERROR if you have the strerror() function. */
#define HAVE_STRERROR 1
/* Define HAVE_FILENO if you have the fileno() macro. */
#define HAVE_FILENO 1
/* Define HAVE_ERRNO if you have the errno variable */
/* Define MUST_DEFINE_ERRNO if you have errno but it is not define
* in errno.h */
#define HAVE_ERRNO 1
/* #undef MUST_DEFINE_ERRNO */
/* Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable */
#define HAVE_SYS_ERRLIST 1
/* Define HAVE_OSPEED if your termcap library has the ospeed variable */
#define HAVE_OSPEED 1
/* Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined
* in termcap.h. */
#define MUST_DEFINE_OSPEED 0
/* Define HAVE_LOCALE if you have locale.h and setlocale. */
#define HAVE_LOCALE 1
/* Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr */
#define HAVE_TERMIOS_FUNCS 1
/* Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower */
#define HAVE_UPPER_LOWER 1
/* Define if you have the _setjmp function. */
#define HAVE__SETJMP 0
/* Define if you have the memcpy function. */
#define HAVE_MEMCPY 1
/* Define if you have the popen function. */
#define HAVE_POPEN 1
/* Define if you have the sigsetmask function. */
#define HAVE_SIGSETMASK 0
/* Define if you have the sigprocmask function. */
#define HAVE_SIGPROCMASK 1
/* Define if you have the sigset_t type and sigemptyset macro */
#define HAVE_SIGSET_T 1
#define HAVE_SIGEMPTYSET 1
/* Define if you have the stat function. */
#define HAVE_STAT 1
/* Define if you have the strchr function. */
#define HAVE_STRCHR 1
/* Define if you have the strstr function. */
#define HAVE_STRSTR 1
/* Define if you have the system function. */
#define HAVE_SYSTEM 1
/* Define if you have the snprintf function. */
#define HAVE_SNPRINTF 0
/* Define if you have the <ctype.h> header file. */
#define HAVE_CTYPE_H 1
/* Define if you have the <wctype.h> header file. */
#define HAVE_WCTYPE_H 0
/* Define if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1
/* Define if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define if you have the <stdio.h> header file. */
#define HAVE_STDIO_H 1
/* Define if you have the <stdlib> header file. */
#define HAVE_STDLIB_H 1
/* Define if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 1
/* Define if you have the <sys/ptem.h> header file. */
#define HAVE_SYS_PTEM_H 0
/* Define if you have the <sys/stream.h> header file. */
#define HAVE_SYS_STREAM_H 0
/* Define if you have the <termcap.h> header file. */
#define HAVE_TERMCAP_H 1
/* Define if you have the <termio.h> header file. */
#define HAVE_TERMIO_H 1
/* Define if you have the <termios.h> header file. */
#define HAVE_TERMIOS_H 1
/* Define if you have the <time.h> header file. */
#define HAVE_TIME_H 1
/* Define if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Define if you have the <values.h> header file. */
#define HAVE_VALUES_H 0

340
external/bsd/less/dist/defines.o9 vendored Normal file
View file

@ -0,0 +1,340 @@
/*
* Copyright (C) 1984-2011 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.
*/
/* OS/9 definition file for less. */
/*
* This file has 2 sections:
* User preferences.
* Settings always true for OS-9 systems.
*/
/* User preferences. */
/*
* SECURE is 1 if you wish to disable a bunch of features in order to
* be safe to run by unprivileged users.
*/
#define SECURE 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)
/*
* EXAMINE is 1 if you wish to allow examining files by name from within less.
*/
#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 1
/*
* CMD_HISTORY is 1 if you wish to allow keys to cycle through
* previous commands at prompts.
*/
#define CMD_HISTORY 1
/*
* HILITE_SEARCH is 1 if you wish to have search targets to be
* displayed in standout mode.
*/
#define HILITE_SEARCH 1
/*
* EDITOR is 1 if you wish to allow editor invocation (the "v" command).
* (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)
#define EDIT_PGM "umacs"
/*
* TAGS is 1 if you wish to support tag files.
*/
#define TAGS (!SECURE)
/*
* USERFILE is 1 if you wish to allow a .less file to specify
* user-defined key bindings.
*/
#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)
/*
* PIPEC is 1 if you wish to have the "|" command
* which allows the user to pipe data into a shell command.
*/
#define PIPEC (!SECURE)
/*
* LOGFILE is 1 if you wish to allow the -l option (to create log files).
*/
#define LOGFILE (!SECURE)
/*
* GNU_OPTIONS is 1 if you wish to support the GNU-style command
* line options --help and --version.
*/
#define GNU_OPTIONS 1
/*
* ONLY_RETURN is 1 if you want RETURN to be the only input which
* will continue past an error message.
* Otherwise, any key will continue past an error message.
*/
#define ONLY_RETURN 0
/*
* LESSKEYFILE is the filename of the default lesskey output file
* (in the HOME directory).
* LESSKEYFILE_SYS is the filename of the system-wide lesskey output file.
* DEF_LESSKEYINFILE is the filename of the default lesskey input
* (in the HOME directory).
* LESSHISTFILE is the filename of the history file
* (in the HOME directory).
*/
#define LESSKEYFILE ".less"
#define LESSKEYFILE_SYS "/.sysless"
#define DEF_LESSKEYINFILE ".lesskey"
#define LESSHISTFILE ".lesshst"
/* Settings always true for OS-9. */
/* This is not needed; it is defined by the compiler. */
/* #define _OSK 1 */
#define OS2 0
#define MSDOS_COMPILER 0
/*
* Pathname separator character.
*/
#define PATHNAME_SEP "/"
/*
* HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
*/
#define HAVE_SYS_TYPES_H 0
/*
* Define if you have the <sgstat.h> header file.
*/
#define HAVE_SGSTAT_H 1
/*
* HAVE_PERROR is 1 if your system has the perror() call.
* (Actually, if it has sys_errlist, sys_nerr and errno.)
*/
#if _OSK_MWC32
#define HAVE_PERROR 0
#else
#define HAVE_PERROR 1
#endif
/*
* HAVE_TIME is 1 if your system has the time() call.
*/
#define HAVE_TIME 1
/*
* HAVE_SHELL is 1 if your system supports a SHELL command interpreter.
*/
#define HAVE_SHELL 0
/*
* Default shell metacharacters and meta-escape character.
*/
#define DEF_METACHARS "; \t\n'\"()<>|&^`#\\"
#define DEF_METAESCAPE "\\"
/*
* HAVE_DUP is 1 if your system has the dup() call.
*/
#define HAVE_DUP 0
/*
* Sizes of various buffers.
*/
#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 OUTBUF_SIZE 1024 /* Output buffer */
#define PROMPT_SIZE 200 /* 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 512 /* Max size of line in tags file */
#define TABSTOP_MAX 32 /* Max number of custom tab stops */
/* Define to `long' if <sys/types.h> doesn't define. */
#define off_t long
/* Define if you need to in order for stat and other things to work. */
#define _POSIX_SOURCE 0
/* Define as the return type of signal handlers (int or void). */
#if _OSK_MWC32
#define RETSIGTYPE int
#else
#define RETSIGTYPE void
#endif
/*
* Regular expression library.
* Define exactly one of the following to be 1:
* HAVE_POSIX_REGCOMP: POSIX regcomp() and regex.h
* HAVE_RE_COMP: BSD re_comp()
* HAVE_REGCMP: System V regcmp()
* HAVE_V8_REGCOMP: Henry Spencer V8 regcomp() and regexp.h
* NO_REGEX: pattern matching is supported, but without metacharacters.
*/
#define HAVE_POSIX_REGCOMP 0
#define HAVE_RE_COMP 0
#define HAVE_REGCMP 0
#define HAVE_V8_REGCOMP 1
#define NO_REGEX 0
#define HAVE_REGEXEC2 1
/* Define HAVE_VOID if your compiler supports the "void" type. */
#define HAVE_VOID 1
/* Define HAVE_CONST if your compiler supports the "const" modifier. */
#define HAVE_CONST 0
/* Define HAVE_TIME_T if your system supports the "time_t" type. */
#define HAVE_TIME_T 1
/* Define HAVE_STRERROR if you have the strerror() function. */
#define HAVE_STRERROR 0
/* Define HAVE_FILENO if you have the fileno() macro. */
#define HAVE_FILENO 1
/* Define HAVE_ERRNO if you have the errno variable */
/* Define MUST_DEFINE_ERRNO if you have errno but it is not define
* in errno.h */
#define HAVE_ERRNO 1
#define MUST_DEFINE_ERRNO 0
/* Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable */
#define HAVE_SYS_ERRLIST 0
/* Define HAVE_OSPEED if your termcap library has the ospeed variable */
/* Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined
* in termcap.h. */
#define HAVE_OSPEED 0
#define MUST_DEFINE_OSPEED 0
/* Define HAVE_LOCALE if you have locale.h and setlocale. */
#define HAVE_LOCALE 0
/* Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr */
#define HAVE_TERMIOS_FUNCS 0
/* Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower */
#define HAVE_UPPER_LOWER 1
/* Define if you have the _setjmp function. */
#define HAVE__SETJMP 1
/* Define if you have the memcpy function. */
#define HAVE_MEMCPY 1
/* Define if you have the popen function. */
#define HAVE_POPEN 1
/* Define if you have the sigsetmask function. */
#define HAVE_SIGSETMASK 0
/* Define if you have the sigprocmask function. */
#define HAVE_SIGPROCMASK 0
/* Define if you have the sigset_t type and sigemptyset macro */
#define HAVE_SIGSET_T 0
#define HAVE_SIGEMPTYSET 0
/* Define if you have the stat function. */
#define HAVE_STAT 0
/* Define if you have the strchr function. */
#define HAVE_STRCHR 0
/* Define if you have the system function. */
#define HAVE_SYSTEM 1
/* Define if you have the snprintf function. */
#define HAVE_SNPRINTF 0
/* Define if you have the <ctype.h> header file. */
#define HAVE_CTYPE_H 1
/* Define if you have the <wctype.h> header file. */
#define HAVE_WCTYPE_H 0
/* Define if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1
/* Define if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 0
/* Define if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 0
/* Define if you have the <stdio.h> header file. */
#define HAVE_STDIO_H 1
/* Define if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define if you have the <stdlib> header file. */
#if _OSK_MWC32
#define HAVE_STDLIB_H 0
#else
#define HAVE_STDLIB_H 1
#endif
/* Define if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 0
/* Define if you have the <sys/ptem.h> header file. */
#define HAVE_SYS_PTEM_H 0
/* Define if you have the <sys/stream.h> header file. */
#define HAVE_SYS_STREAM_H 0
/* Define if you have the <termcap.h> header file. */
#define HAVE_TERMCAP_H 1
/* Define if you have the <termio.h> header file. */
#define HAVE_TERMIO_H 0
/* Define if you have the <termios.h> header file. */
#define HAVE_TERMIOS_H 0
/* Define if you have the <time.h> header file. */
#define HAVE_TIME_H 1
/* Define if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 0
/* Define if you have the <values.h> header file. */
#define HAVE_VALUES_H 0

339
external/bsd/less/dist/defines.wn vendored Normal file
View file

@ -0,0 +1,339 @@
/*
* Copyright (C) 1984-2011 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.
*/
/* Windows definition file for less. */
/*
* This file has 2 sections:
* User preferences.
* Settings always true for Windows systems.
*/
/* User preferences. */
/*
* SECURE is 1 if you wish to disable a bunch of features in order to
* be safe to run by unprivileged users.
*/
#define SECURE 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)
/*
* EXAMINE is 1 if you wish to allow examining files by name from within less.
*/
#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)
/*
* CMD_HISTORY is 1 if you wish to allow keys to cycle through
* previous commands at prompts.
*/
#define CMD_HISTORY 1
/*
* HILITE_SEARCH is 1 if you wish to have search targets to be
* displayed in standout mode.
*/
#define HILITE_SEARCH 1
/*
* EDITOR is 1 if you wish to allow editor invocation (the "v" command).
* (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)
#define EDIT_PGM "edit"
/*
* TAGS is 1 if you wish to support tag files.
*/
#define TAGS (!SECURE)
/*
* USERFILE is 1 if you wish to allow a .less file to specify
* user-defined key bindings.
*/
#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 0
/*
* PIPEC is 1 if you wish to have the "|" command
* which allows the user to pipe data into a shell command.
*/
#define PIPEC 1
/*
* LOGFILE is 1 if you wish to allow the -l option (to create log files).
*/
#define LOGFILE (!SECURE)
/*
* GNU_OPTIONS is 1 if you wish to support the GNU-style command
* line options --help and --version.
*/
#define GNU_OPTIONS 1
/*
* ONLY_RETURN is 1 if you want RETURN to be the only input which
* will continue past an error message.
* Otherwise, any key will continue past an error message.
*/
#define ONLY_RETURN 0
/*
* LESSKEYFILE is the filename of the default lesskey output file
* (in the HOME directory).
* LESSKEYFILE_SYS is the filename of the system-wide lesskey output file.
* DEF_LESSKEYINFILE is the filename of the default lesskey input
* (in the HOME directory).
* LESSHISTFILE is the filename of the history file
* (in the HOME directory).
*/
#define LESSKEYFILE "_less"
#define LESSKEYFILE_SYS "c:\\_sysless"
#define DEF_LESSKEYINFILE "_lesskey"
#define LESSHISTFILE "_lesshst"
/* Settings always true for Windows systems. */
#define MSDOS_COMPILER WIN32C
/*
* Pathname separator character.
*/
#define PATHNAME_SEP "\\"
/*
* HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
*/
#define HAVE_SYS_TYPES_H 1
/*
* Define if you have the <sgstat.h> header file.
*/
#define HAVE_SGSTAT_H 0
/*
* HAVE_PERROR is 1 if your system has the perror() call.
* (Actually, if it has sys_errlist, sys_nerr and errno.)
*/
#define HAVE_PERROR 1
/*
* HAVE_TIME is 1 if your system has the time() call.
*/
#define HAVE_TIME 1
/*
* HAVE_SHELL is 1 if your system supports a SHELL command interpreter.
*/
#define HAVE_SHELL 0
/*
* Default shell metacharacters and meta-escape character.
*/
#define DEF_METACHARS "; *?\t\n'\"()<>|&"
#define DEF_METAESCAPE ""
/*
* HAVE_DUP is 1 if your system has the dup() call.
*/
#define HAVE_DUP 1
/*
* Sizes of various buffers.
*/
#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 OUTBUF_SIZE 1024 /* Output buffer */
#define PROMPT_SIZE 200 /* 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 512 /* Max size of line in tags file */
#define TABSTOP_MAX 32 /* Max number of custom tab stops */
/* Define to `long' if <sys/types.h> doesn't define. */
/* #define off_t long */
/* Define if you need to in order for stat and other things to work. */
/* #undef _POSIX_SOURCE */
/* Define as the return type of signal handlers (int or void). */
#define RETSIGTYPE void
/*
* Regular expression library.
* Define exactly one of the following to be 1:
* HAVE_POSIX_REGCOMP: POSIX regcomp() and regex.h
* HAVE_RE_COMP: BSD re_comp()
* HAVE_REGCMP: System V regcmp()
* HAVE_V8_REGCOMP: Henry Spencer V8 regcomp() and regexp.h
* NO_REGEX: pattern matching is supported, but without metacharacters.
*/
/* #undef HAVE_POSIX_REGCOMP */
/* #undef HAVE_RE_COMP */
/* #undef HAVE_REGCMP */
#define HAVE_V8_REGCOMP 1
/* #undef NO_REGEX */
#define HAVE_REGEXEC2 1
/* Define HAVE_VOID if your compiler supports the "void" type. */
#define HAVE_VOID 1
/* Define HAVE_CONST if your compiler supports the "const" modifier. */
#define HAVE_CONST 1
/* Define HAVE_TIME_T if your system supports the "time_t" type. */
#define HAVE_TIME_T 1
/* Define HAVE_STRERROR if you have the strerror() function. */
#define HAVE_STRERROR 1
/* Define HAVE_FILENO if you have the fileno() macro. */
#define HAVE_FILENO 1
/* Define HAVE_ERRNO if you have the errno variable */
/* Define MUST_DEFINE_ERRNO if you have errno but it is not define
* in errno.h */
#define HAVE_ERRNO 1
#define MUST_DEFINE_ERRNO 1
/* Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable */
#define HAVE_SYS_ERRLIST 1
/* Define HAVE_OSPEED if your termcap library has the ospeed variable */
#define HAVE_OSPEED 0
/* Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined
* in termcap.h. */
#define MUST_DEFINE_OSPEED 0
/* Define HAVE_LOCALE if you have locale.h and setlocale. */
#define HAVE_LOCALE 0
/* Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr */
#define HAVE_TERMIOS_FUNCS 0
/* Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower */
#define HAVE_UPPER_LOWER 1
/* Define if you have the _setjmp function. */
#define HAVE__SETJMP 1
/* Define if you have the memcpy function. */
#define HAVE_MEMCPY 1
/* Define if you have the popen function. */
#define HAVE_POPEN 1
/* Define if you have the sigsetmask function. */
#define HAVE_SIGSETMASK 0
/* Define if you have the sigprocmask function. */
#define HAVE_SIGPROCMASK 0
/* Define if you have the sigset_t type and sigemptyset macro */
#define HAVE_SIGSET_T 0
#define HAVE_SIGEMPTYSET 0
/* Define if you have the stat function. */
#define HAVE_STAT 1
/* Define if you have the strchr function. */
#define HAVE_STRCHR 1
/* Define if you have the system function. */
#define HAVE_SYSTEM 1
/* Define if you have the snprintf function. */
#define HAVE_SNPRINTF 1
/* Define if you have the <ctype.h> header file. */
#define HAVE_CTYPE_H 1
/* Define if you have the <wctype.h> header file. */
#define HAVE_WCTYPE_H 1
/* Define if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1
/* Define if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define HAVE_FLOAT if your compiler supports the "double" type. */
#define HAVE_FLOAT 1
/* Define if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define if you have the <stdio.h> header file. */
#define HAVE_STDIO_H 1
/* Define if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define if you have the <stdlib> header file. */
#define HAVE_STDLIB_H 1
/* Define if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 0
/* Define if you have the <sys/ptem.h> header file. */
#define HAVE_SYS_PTEM_H 0
/* Define if you have the <sys/stream.h> header file. */
#define HAVE_SYS_STREAM_H 0
/* Define if you have the <termcap.h> header file. */
#define HAVE_TERMCAP_H 0
/* Define if you have the <termio.h> header file. */
#define HAVE_TERMIO_H 0
/* Define if you have the <termios.h> header file. */
#define HAVE_TERMIOS_H 0
/* Define if you have the <time.h> header file. */
#define HAVE_TIME_H 1
/* Define if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 0
/* Define if you have the <values.h> header file. */
#ifdef _MSC_VER
#define HAVE_VALUES_H 0
#else
#define HAVE_VALUES_H 1
#endif
#define popen _popen
#define pclose _pclose
#define snprintf _snprintf
#pragma warning(disable:4996)

View file

@ -1,7 +1,7 @@
/* $NetBSD: edit.c,v 1.9 2008/02/16 07:20:54 matt Exp $ */ /* $NetBSD: edit.c,v 1.3 2011/07/03 20:14:12 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -12,6 +12,9 @@
#include "less.h" #include "less.h"
#if HAVE_STAT
#include <sys/stat.h>
#endif
public int fd0 = 0; public int fd0 = 0;
@ -38,6 +41,11 @@ extern int force_logfile;
extern char *namelogfile; extern char *namelogfile;
#endif #endif
#if HAVE_STAT_INO
public dev_t curr_dev;
public ino_t curr_ino;
#endif
char *curr_altfilename = NULL; char *curr_altfilename = NULL;
static void *curr_altpipe; static void *curr_altpipe;
@ -185,6 +193,9 @@ close_file()
curr_altfilename = NULL; curr_altfilename = NULL;
} }
curr_ifile = NULL_IFILE; curr_ifile = NULL_IFILE;
#if HAVE_STAT_INO
curr_ino = curr_dev = 0;
#endif
} }
/* /*
@ -367,7 +378,6 @@ edit_ifile(ifile)
} }
} }
} }
free(qopen_filename);
/* /*
* Get the new ifile. * Get the new ifile.
@ -391,11 +401,24 @@ edit_ifile(ifile)
#if LOGFILE #if LOGFILE
if (namelogfile != NULL && is_tty) if (namelogfile != NULL && is_tty)
use_logfile(namelogfile); use_logfile(namelogfile);
#endif
#if HAVE_STAT_INO
/* Remember the i-number and device of the opened file. */
{
struct stat statbuf;
int r = stat(qopen_filename, &statbuf);
if (r == 0)
{
curr_ino = statbuf.st_ino;
curr_dev = statbuf.st_dev;
}
}
#endif #endif
if (every_first_cmd != NULL) if (every_first_cmd != NULL)
ungetsc(every_first_cmd); ungetsc(every_first_cmd);
} }
free(qopen_filename);
no_display = !any_display; no_display = !any_display;
flush(); flush();
any_display = TRUE; any_display = TRUE;
@ -664,6 +687,14 @@ reedit_ifile(save_ifile)
quit(QUIT_ERROR); quit(QUIT_ERROR);
} }
public void
reopen_curr_ifile()
{
IFILE save_ifile = save_curr_ifile();
close_file();
reedit_ifile(save_ifile);
}
/* /*
* Edit standard input. * Edit standard input.
*/ */
@ -755,7 +786,7 @@ loop:
* Append: open the file and seek to the end. * Append: open the file and seek to the end.
*/ */
logfile = open(filename, OPEN_APPEND); logfile = open(filename, OPEN_APPEND);
if (lseek(logfile, (off_t)0, 2) == BAD_LSEEK) if (lseek(logfile, (off_t)0, SEEK_END) == BAD_LSEEK)
{ {
close(logfile); close(logfile);
logfile = -1; logfile = -1;

View file

@ -1,7 +1,7 @@
/* $NetBSD: filename.c,v 1.7 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: filename.c,v 1.3 2011/07/03 20:14:12 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -53,6 +53,8 @@
extern int force_open; extern int force_open;
extern int secure; extern int secure;
extern int use_lessopen; extern int use_lessopen;
extern int ctldisp;
extern int utf_mode;
extern IFILE curr_ifile; extern IFILE curr_ifile;
extern IFILE old_ifile; extern IFILE old_ifile;
#if SPACES_IN_FILENAMES #if SPACES_IN_FILENAMES
@ -406,6 +408,7 @@ fexpand(s)
return (e); return (e);
} }
#if TAB_COMPLETE_FILENAME #if TAB_COMPLETE_FILENAME
/* /*
@ -476,19 +479,34 @@ fcomplete(s)
bin_file(f) bin_file(f)
int f; int f;
{ {
int i;
int n; int n;
unsigned char data[64]; int bin_count = 0;
char data[256];
char* p;
char* pend;
if (!seekable(f)) if (!seekable(f))
return (0); return (0);
if (lseek(f, (off_t)0, 0) == BAD_LSEEK) if (lseek(f, (off_t)0, SEEK_SET) == BAD_LSEEK)
return (0); return (0);
n = read(f, data, sizeof(data)); n = read(f, data, sizeof(data));
for (i = 0; i < n; i++) pend = &data[n];
if (binary_char(data[i])) for (p = data; p < pend; )
return (1); {
return (0); LWCHAR c = step_char(&p, +1, pend);
if (ctldisp == OPT_ONPLUS && IS_CSI_START(c))
{
do {
c = step_char(&p, +1, pend);
} while (p < pend && is_ansi_middle(c));
} else if (binary_char(c))
bin_count++;
}
/*
* Call it a binary file if there are more than 5 binary characters
* in the first 256 bytes of the file.
*/
return (bin_count > 5);
} }
/* /*
@ -500,7 +518,7 @@ seek_filesize(f)
{ {
off_t spos; off_t spos;
spos = lseek(f, (off_t)0, 2); spos = lseek(f, (off_t)0, SEEK_END);
if (spos == BAD_LSEEK) if (spos == BAD_LSEEK)
return (NULL_POSITION); return (NULL_POSITION);
return ((POSITION) spos); return ((POSITION) spos);
@ -822,22 +840,29 @@ open_altfile(filename, pf, pfd)
ch_ungetchar(-1); ch_ungetchar(-1);
if ((lessopen = lgetenv("LESSOPEN")) == NULL) if ((lessopen = lgetenv("LESSOPEN")) == NULL)
return (NULL); return (NULL);
if (strcmp(filename, "-") == 0)
return (NULL);
if (*lessopen == '|') if (*lessopen == '|')
{ {
/* /*
* If LESSOPEN starts with a |, it indicates * If LESSOPEN starts with a |, it indicates
* a "pipe preprocessor". * a "pipe preprocessor".
*/ */
#if HAVE_FILENO #if !HAVE_FILENO
lessopen++;
returnfd = 1;
#else
error("LESSOPEN pipe is not supported", NULL_PARG); error("LESSOPEN pipe is not supported", NULL_PARG);
return (NULL); return (NULL);
#else
lessopen++;
returnfd = 1;
#endif #endif
} }
if (*lessopen == '-') {
/*
* Lessopen preprocessor will accept "-" as a filename.
*/
lessopen++;
} else {
if (strcmp(filename, "-") == 0)
return (NULL);
}
len = strlen(lessopen) + strlen(filename) + 2; len = strlen(lessopen) + strlen(filename) + 2;
cmd = (char *) ecalloc(len, sizeof(char)); cmd = (char *) ecalloc(len, sizeof(char));
@ -974,7 +999,7 @@ bad_file(filename)
register char *m = NULL; register char *m = NULL;
filename = shell_unquote(filename); filename = shell_unquote(filename);
if (is_dir(filename)) if (!force_open && is_dir(filename))
{ {
static char is_a_dir[] = " is a directory"; static char is_a_dir[] = " is a directory";
@ -1041,3 +1066,22 @@ shell_coption()
{ {
return ("-c"); return ("-c");
} }
/*
* Return last component of a pathname.
*/
public char *
last_component(name)
char *name;
{
char *slash;
for (slash = name + strlen(name); slash > name; )
{
--slash;
if (*slash == *PATHNAME_SEP || *slash == '/')
return (slash + 1);
}
return (name);
}

View file

@ -1,7 +1,7 @@
/* $NetBSD: forwback.c,v 1.10 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: forwback.c,v 1.3 2011/07/03 20:14:12 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -19,16 +19,15 @@
#include "less.h" #include "less.h"
#include "position.h" #include "position.h"
public int hit_eof; /* Keeps track of how many times we hit end of file */
public int screen_trashed; public int screen_trashed;
public int squished; public int squished;
public int no_back_scroll = 0; public int no_back_scroll = 0;
public int forw_prompt;
extern int sigs; extern int sigs;
extern int top_scroll; extern int top_scroll;
extern int quiet; extern int quiet;
extern int sc_width, sc_height; extern int sc_width, sc_height;
extern int quit_at_eof;
extern int more_mode; extern int more_mode;
extern int plusoption; extern int plusoption;
extern int forw_scroll; extern int forw_scroll;
@ -36,13 +35,13 @@ extern int back_scroll;
extern int ignore_eoi; extern int ignore_eoi;
extern int clear_bg; extern int clear_bg;
extern int final_attr; extern int final_attr;
extern int oldbot;
#if TAGS #if TAGS
extern char *tagoption; extern char *tagoption;
#endif #endif
static void eof_bell __P((void)); static void eof_bell __P((void));
static void eof_check __P((void)); static void eof_check __P((void));
static void squish_check __P((void));
/* /*
* Sound the bell to indicate user is trying to move past end of file. * Sound the bell to indicate user is trying to move past end of file.
@ -57,25 +56,47 @@ eof_bell()
} }
/* /*
* Check to see if the end of file is currently "displayed". * Check to see if the end of file is currently displayed.
*/ */
static void public int
eof_check() eof_displayed()
{ {
POSITION pos; POSITION pos;
if (ignore_eoi) if (ignore_eoi)
return; return (0);
if (ABORT_SIGS())
return; if (ch_length() == NULL_POSITION)
/*
* If the file length is not known,
* we can't possibly be displaying EOF.
*/
return (0);
/* /*
* If the bottom line is empty, we are at EOF. * If the bottom line is empty, we are at EOF.
* If the bottom line ends at the file length, * If the bottom line ends at the file length,
* we must be just at EOF. * we must be just at EOF.
*/ */
pos = position(BOTTOM_PLUS_ONE); pos = position(BOTTOM_PLUS_ONE);
if (pos == NULL_POSITION || pos == ch_length()) return (pos == NULL_POSITION || pos == ch_length());
hit_eof++; }
/*
* Check to see if the entire file is currently displayed.
*/
public int
entire_file_displayed()
{
POSITION pos;
/* Make sure last line of file is displayed. */
if (!eof_displayed())
return (0);
/* Make sure first line of file is displayed. */
pos = position(0);
return (pos == NULL_POSITION || pos == 0);
} }
/* /*
@ -84,7 +105,7 @@ eof_check()
* of the screen; this can happen when we display a short file * of the screen; this can happen when we display a short file
* for the first time. * for the first time.
*/ */
static void public void
squish_check() squish_check()
{ {
if (!squished) if (!squished)
@ -142,16 +163,8 @@ forw(n, pos, force, only_last, nblank)
pos_clear(); pos_clear();
add_forw_pos(pos); add_forw_pos(pos);
force = 1; force = 1;
if (more_mode == 0) clear();
{ home();
if (top_scroll == OPT_ONPLUS ||
(first_time && top_scroll != OPT_ON))
clear();
home();
}
} else
{
clear_bot();
} }
if (pos != position(BOTTOM_PLUS_ONE) || empty_screen()) if (pos != position(BOTTOM_PLUS_ONE) || empty_screen())
@ -166,8 +179,7 @@ forw(n, pos, force, only_last, nblank)
force = 1; force = 1;
if (top_scroll) if (top_scroll)
{ {
if (top_scroll == OPT_ONPLUS) clear();
clear();
home(); home();
} else if (!first_time) } else if (!first_time)
{ {
@ -242,9 +254,16 @@ forw(n, pos, force, only_last, nblank)
squished = 1; squished = 1;
continue; continue;
} }
if (top_scroll == OPT_ON)
clear_eol();
put_line(); put_line();
#if 0
/* {{
* Can't call clear_eol here. The cursor might be at end of line
* on an ignaw terminal, so clear_eol would clear the last char
* of the current line instead of all of the next line.
* If we really need to do this on clear_bg terminals, we need
* to find a better way.
* }}
*/
if (clear_bg && apply_at_specials(final_attr) != AT_NORMAL) if (clear_bg && apply_at_specials(final_attr) != AT_NORMAL)
{ {
/* /*
@ -256,14 +275,10 @@ forw(n, pos, force, only_last, nblank)
*/ */
clear_eol(); clear_eol();
} }
#endif
forw_prompt = 1;
} }
if (ignore_eoi)
hit_eof = 0;
else if (eof && !ABORT_SIGS())
hit_eof++;
else
eof_check();
if (nlines == 0) if (nlines == 0)
eof_bell(); eof_bell();
else if (do_repaint) else if (do_repaint)
@ -287,7 +302,6 @@ back(n, pos, force, only_last)
squish_check(); squish_check();
do_repaint = (n > get_back_scroll() || (only_last && n > sc_height-1)); do_repaint = (n > get_back_scroll() || (only_last && n > sc_height-1));
hit_eof = 0;
while (--n >= 0) while (--n >= 0)
{ {
/* /*
@ -316,11 +330,12 @@ back(n, pos, force, only_last)
} }
} }
eof_check();
if (nlines == 0) if (nlines == 0)
eof_bell(); eof_bell();
else if (do_repaint) else if (do_repaint)
repaint(); repaint();
else if (!oldbot)
lower_left();
(void) currline(BOTTOM); (void) currline(BOTTOM);
} }
@ -336,7 +351,7 @@ forward(n, force, only_last)
{ {
POSITION pos; POSITION pos;
if (quit_at_eof && hit_eof && !(ch_getflags() & CH_HELPFILE)) if (get_quit_at_eof() && eof_displayed() && !(ch_getflags() & CH_HELPFILE))
{ {
/* /*
* If the -e flag is set and we're trying to go * If the -e flag is set and we're trying to go
@ -370,7 +385,6 @@ forward(n, force, only_last)
} else } else
{ {
eof_bell(); eof_bell();
hit_eof++;
return; return;
} }
} }

View file

@ -1,4 +1,4 @@
/* $NetBSD: funcs.h,v 1.9 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: funcs.h,v 1.3 2011/07/03 20:14:12 tron Exp $ */
public char * save (); public char * save ();
public VOID_POINTER ecalloc (); public VOID_POINTER ecalloc ();
@ -16,6 +16,7 @@
public void remove_top (); public void remove_top ();
public void win32_scroll_up (); public void win32_scroll_up ();
public void lower_left (); public void lower_left ();
public void line_left ();
public void check_winch (); public void check_winch ();
public void goto_line (); public void goto_line ();
public void vbell (); public void vbell ();
@ -31,6 +32,8 @@
public void backspace (); public void backspace ();
public void putbs (); public void putbs ();
public char WIN32getch (); public char WIN32getch ();
public void WIN32setcolors ();
public void WIN32textout ();
public void match_brac (); public void match_brac ();
public void ch_ungetchar (); public void ch_ungetchar ();
public void end_logfile (); public void end_logfile ();
@ -57,6 +60,7 @@
public int utf_len (); public int utf_len ();
public int is_utf8_well_formed (); public int is_utf8_well_formed ();
public LWCHAR get_wchar (); public LWCHAR get_wchar ();
public void put_wchar ();
public LWCHAR step_char (); public LWCHAR step_char ();
public int is_composing_char (); public int is_composing_char ();
public int is_ubin_char (); public int is_ubin_char ();
@ -72,6 +76,7 @@
public int cmd_char (); public int cmd_char ();
public LINENUM cmd_int (); public LINENUM cmd_int ();
public char * get_cmdbuf (); public char * get_cmdbuf ();
public char * cmd_lastpattern ();
public void init_cmdhist (); public void init_cmdhist ();
public void save_cmdhist (); public void save_cmdhist ();
public int in_mca (); public int in_mca ();
@ -80,6 +85,9 @@
public void ungetcc (); public void ungetcc ();
public void ungetsc (); public void ungetsc ();
public void commands (); public void commands ();
public int cvt_length ();
public int * cvt_alloc_chpos ();
public void cvt_text ();
public void init_cmds (); public void init_cmds ();
public void add_fcmd_table (); public void add_fcmd_table ();
public void add_ecmd_table (); public void add_ecmd_table ();
@ -103,6 +111,7 @@
public IFILE save_curr_ifile (); public IFILE save_curr_ifile ();
public void unsave_ifile (); public void unsave_ifile ();
public void reedit_ifile (); public void reedit_ifile ();
public void reopen_curr_ifile ();
public int edit_stdin (); public int edit_stdin ();
public void cat_file (); public void cat_file ();
public void use_logfile (); public void use_logfile ();
@ -120,6 +129,10 @@
public char * bad_file (); public char * bad_file ();
public POSITION filesize (); public POSITION filesize ();
public char * shell_coption (); public char * shell_coption ();
public char * last_component ();
public int eof_displayed ();
public int entire_file_displayed ();
public void squish_check ();
public void forw (); public void forw ();
public void back (); public void back ();
public void forward (); public void forward ();
@ -161,6 +174,7 @@
public int pappend (); public int pappend ();
public int pflushmbc (); public int pflushmbc ();
public void pdone (); public void pdone ();
public void set_status_col ();
public int gline (); public int gline ();
public void null_line (); public void null_line ();
public POSITION forw_raw_line (); public POSITION forw_raw_line ();
@ -182,7 +196,10 @@
public void unmark (); public void unmark ();
public void opt_o (); public void opt_o ();
public void opt__O (); public void opt__O ();
public void opt_l (); public void opt_j ();
public void calc_jump_sline ();
public void opt_shift ();
public void calc_shift_count ();
public void opt_k (); public void opt_k ();
public void opt_t (); public void opt_t ();
public void opt__T (); public void opt__T ();
@ -196,13 +213,16 @@
public void opt_quote (); public void opt_quote ();
public void opt_query (); public void opt_query ();
public int get_swindow (); public int get_swindow ();
public char * propt ();
public void scan_option (); public void scan_option ();
public void toggle_option (); public void toggle_option ();
public int single_char_option (); public int opt_has_param ();
public char * opt_prompt (); public char * opt_prompt ();
public int isoptpending (); public int isoptpending ();
public void nopendopt (); public void nopendopt ();
public int getnum (); public int getnum ();
public long getfraction ();
public int get_quit_at_eof ();
public void init_option (); public void init_option ();
public struct loption * findopt (); public struct loption * findopt ();
public struct loption * findopt_name (); public struct loption * findopt_name ();
@ -221,6 +241,10 @@
public void error (); public void error ();
public void ierror (); public void ierror ();
public int query (); public int query ();
public int compile_pattern ();
public void uncompile_pattern ();
public int is_null_pattern ();
public int match_pattern ();
public POSITION position (); public POSITION position ();
public void add_forw_pos (); public void add_forw_pos ();
public void add_back_pos (); public void add_back_pos ();
@ -236,15 +260,21 @@
public char * eq_message (); public char * eq_message ();
public char * pr_string (); public char * pr_string ();
public char * wait_message (); public char * wait_message ();
public void init_search ();
public void repaint_hilite (); public void repaint_hilite ();
public void clear_attn (); public void clear_attn ();
public void undo_search (); public void undo_search ();
public void clr_hlist ();
public void clr_hilite (); public void clr_hilite ();
public void clr_filter ();
public int is_filtered ();
public int is_hilited (); public int is_hilited ();
public void chg_caseless (); public void chg_caseless ();
public void chg_hilite (); public void chg_hilite ();
public int search (); public int search ();
public void prep_hilite (); public void prep_hilite ();
public void set_filter_pattern ();
public int is_filtering ();
public RETSIGTYPE winch (); public RETSIGTYPE winch ();
public RETSIGTYPE winch (); public RETSIGTYPE winch ();
public void init_signals (); public void init_signals ();

View file

@ -1,4 +1,4 @@
/* $NetBSD: help.c,v 1.6 2006/11/20 22:06:26 dsl Exp $ */ /* $NetBSD: help.c,v 1.3 2011/07/03 20:14:12 tron Exp $ */
/* This file was generated by mkhelp from less.hlp */ /* This file was generated by mkhelp from less.hlp */
#include "less.h" #include "less.h"
@ -46,6 +46,7 @@ constant char helpdata[] = {
' ',' ','E','S','C','-','n',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','R','e','p','e','a','t',' ','p','r','e','v','i','o','u','s',' ','s','e','a','r','c','h',',',' ','s','p','a','n','n','i','n','g',' ','f','i','l','e','s','.','\n', ' ',' ','E','S','C','-','n',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','R','e','p','e','a','t',' ','p','r','e','v','i','o','u','s',' ','s','e','a','r','c','h',',',' ','s','p','a','n','n','i','n','g',' ','f','i','l','e','s','.','\n',
' ',' ','E','S','C','-','N',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','R','e','p','e','a','t',' ','p','r','e','v','i','o','u','s',' ','s','e','a','r','c','h',',',' ','r','e','v','e','r','s','e',' ','d','i','r','.',' ','&',' ','s','p','a','n','n','i','n','g',' ','f','i','l','e','s','.','\n', ' ',' ','E','S','C','-','N',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','R','e','p','e','a','t',' ','p','r','e','v','i','o','u','s',' ','s','e','a','r','c','h',',',' ','r','e','v','e','r','s','e',' ','d','i','r','.',' ','&',' ','s','p','a','n','n','i','n','g',' ','f','i','l','e','s','.','\n',
' ',' ','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', ' ',' ','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', ' ',' ',' ',' ',' ',' ',' ',' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\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', ' ',' ',' ',' ',' ',' ',' ',' ','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',
' ',' ',' ',' ',' ',' ',' ',' ','^','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', ' ',' ',' ',' ',' ',' ',' ',' ','^','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',
@ -53,7 +54,6 @@ constant char helpdata[] = {
' ',' ',' ',' ',' ',' ',' ',' ','^','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', ' ',' ',' ',' ',' ',' ',' ',' ','^','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',
' ',' ',' ',' ',' ',' ',' ',' ','^','K',' ',' ',' ',' ',' ',' ',' ','H','i','g','h','l','i','g','h','t',' ','m','a','t','c','h','e','s',',',' ','b','u','t',' ','d','o','n','\'','t',' ','m','o','v','e',' ','(','K','E','E','P',' ','p','o','s','i','t','i','o','n',')','.','\n', ' ',' ',' ',' ',' ',' ',' ',' ','^','K',' ',' ',' ',' ',' ',' ',' ','H','i','g','h','l','i','g','h','t',' ','m','a','t','c','h','e','s',',',' ','b','u','t',' ','d','o','n','\'','t',' ','m','o','v','e',' ','(','K','E','E','P',' ','p','o','s','i','t','i','o','n',')','.','\n',
' ',' ',' ',' ',' ',' ',' ',' ','^','R',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','u','s','e',' ','R','E','G','U','L','A','R',' ','E','X','P','R','E','S','S','I','O','N','S','.','\n', ' ',' ',' ',' ',' ',' ',' ',' ','^','R',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','u','s','e',' ','R','E','G','U','L','A','R',' ','E','X','P','R','E','S','S','I','O','N','S','.','\n',
' ',' ',' ',' ',' ',' ',' ',' ','*',' ','a','n','d',' ','@',' ','m','o','d','i','f','i','e','r','s',' ','a','r','e',' ','r','e','c','o','g','n','i','z','e','d',' ','i','n',' ','l','e','s','s',' ','m','o','d','e',' ','o','n','l','y','.','\n',
' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n', ' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
'\n', '\n',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','J','\b','J','U','\b','U','M','\b','M','P','\b','P','I','\b','I','N','\b','N','G','\b','G','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','J','\b','J','U','\b','U','M','\b','M','P','\b','P','I','\b','I','N','\b','N','G','\b','G','\n',
@ -120,12 +120,14 @@ constant char helpdata[] = {
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','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', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','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', ' ',' ','-','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', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','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',
' ',' ','-','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',
' ',' ','-','b',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','b','u','f','f','e','r','s','=','[','_','\b','N',']','\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', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','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', ' ',' ','-','B',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','a','u','t','o','-','b','u','f','f','e','r','s','\n',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','a','u','t','o','m','a','t','i','c','a','l','l','y',' ','a','l','l','o','c','a','t','e',' ','b','u','f','f','e','r','s',' ','f','o','r',' ','p','i','p','e','s','.','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','a','u','t','o','m','a','t','i','c','a','l','l','y',' ','a','l','l','o','c','a','t','e',' ','b','u','f','f','e','r','s',' ','f','o','r',' ','p','i','p','e','s','.','\n',
' ',' ','-','c',' ',' ','-','C',' ',' ','.','.','.','.',' ',' ','-','-','c','l','e','a','r','-','s','c','r','e','e','n',' ',' ','-','-','C','L','E','A','R','-','S','C','R','E','E','N','\n', ' ',' ','-','c',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','c','l','e','a','r','-','s','c','r','e','e','n','\n',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','R','e','p','a','i','n','t',' ','b','y',' ','s','c','r','o','l','l','i','n','g','/','c','l','e','a','r','i','n','g','.','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','R','e','p','a','i','n','t',' ','b','y',' ','c','l','e','a','r','i','n','g',' ','r','a','t','h','e','r',' ','t','h','a','n',' ','s','c','r','o','l','l','i','n','g','.','\n',
' ',' ','-','d',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','d','u','m','b','\n', ' ',' ','-','d',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','d','u','m','b','\n',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','u','m','b',' ','t','e','r','m','i','n','a','l','.','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','u','m','b',' ','t','e','r','m','i','n','a','l','.','\n',
' ',' ','-','D',' ','[','_','\b','x','_','\b','n','_','\b','.','_','\b','n',']',' ',' ','.',' ',' ','-','-','c','o','l','o','r','=','_','\b','x','_','\b','n','_','\b','.','_','\b','n','\n', ' ',' ','-','D',' ','[','_','\b','x','_','\b','n','_','\b','.','_','\b','n',']',' ',' ','.',' ',' ','-','-','c','o','l','o','r','=','_','\b','x','_','\b','n','_','\b','.','_','\b','n','\n',
@ -152,12 +154,14 @@ constant char helpdata[] = {
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','a',' ','s','t','a','t','u','s',' ','c','o','l','u','m','n',' ','a','t',' ','l','e','f','t',' ','e','d','g','e',' ','o','f',' ','s','c','r','e','e','n','.','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','a',' ','s','t','a','t','u','s',' ','c','o','l','u','m','n',' ','a','t',' ','l','e','f','t',' ','e','d','g','e',' ','o','f',' ','s','c','r','e','e','n','.','\n',
' ',' ','-','k',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','l','e','s','s','k','e','y','-','f','i','l','e','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n', ' ',' ','-','k',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','l','e','s','s','k','e','y','-','f','i','l','e','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','U','s','e',' ','a',' ','l','e','s','s','k','e','y',' ','f','i','l','e','.','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','U','s','e',' ','a',' ','l','e','s','s','k','e','y',' ','f','i','l','e','.','\n',
' ',' ','-','K',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','-','-','q','u','i','t','-','o','n','-','i','n','t','r','\n',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','x','i','t',' ','l','e','s','s',' ','i','n',' ','r','e','s','p','o','n','s','e',' ','t','o',' ','c','t','r','l','-','C','.','\n',
' ',' ','-','L',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','n','o','-','l','e','s','s','o','p','e','n','\n', ' ',' ','-','L',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','n','o','-','l','e','s','s','o','p','e','n','\n',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','I','g','n','o','r','e',' ','t','h','e',' ','L','E','S','S','O','P','E','N',' ','e','n','v','i','r','o','n','m','e','n','t',' ','v','a','r','i','a','b','l','e','.','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','I','g','n','o','r','e',' ','t','h','e',' ','L','E','S','S','O','P','E','N',' ','e','n','v','i','r','o','n','m','e','n','t',' ','v','a','r','i','a','b','l','e','.','\n',
' ',' ','-','m',' ',' ','-','M',' ',' ','.','.','.','.',' ',' ','-','-','l','o','n','g','-','p','r','o','m','p','t',' ',' ','-','-','L','O','N','G','-','P','R','O','M','P','T','\n', ' ',' ','-','m',' ',' ','-','M',' ',' ','.','.','.','.',' ',' ','-','-','l','o','n','g','-','p','r','o','m','p','t',' ',' ','-','-','L','O','N','G','-','P','R','O','M','P','T','\n',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','e','t',' ','p','r','o','m','p','t',' ','s','t','y','l','e','.','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','e','t',' ','p','r','o','m','p','t',' ','s','t','y','l','e','.','\n',
' ',' ','-','n',' ',' ','-','N',' ',' ','.','.','.','.',' ',' ','-','-','l','i','n','e','-','n','u','m','b','e','r','s',' ',' ','-','-','L','I','N','E','-','N','U','M','B','E','R','S','\n', ' ',' ','-','n',' ',' ','-','N',' ',' ','.','.','.','.',' ',' ','-','-','l','i','n','e','-','n','u','m','b','e','r','s',' ',' ','-','-','L','I','N','E','-','N','U','M','B','E','R','S','\n',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','U','s','e',' ','l','i','n','e',' ','n','u','m','b','e','r','s','.','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','u','s','e',' ','l','i','n','e',' ','n','u','m','b','e','r','s','.','\n',
' ',' ','-','o',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','l','o','g','-','f','i','l','e','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n', ' ',' ','-','o',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','l','o','g','-','f','i','l','e','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','o','p','y',' ','t','o',' ','l','o','g',' ','f','i','l','e',' ','(','s','t','a','n','d','a','r','d',' ','i','n','p','u','t',' ','o','n','l','y',')','.','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','o','p','y',' ','t','o',' ','l','o','g',' ','f','i','l','e',' ','(','s','t','a','n','d','a','r','d',' ','i','n','p','u','t',' ','o','n','l','y',')','.','\n',
' ',' ','-','O',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','L','O','G','-','F','I','L','E','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n', ' ',' ','-','O',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','L','O','G','-','F','I','L','E','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n',
@ -202,6 +206,11 @@ constant char helpdata[] = {
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','d','i','s','p','l','a','y',' ','t','i','l','d','e','s',' ','a','f','t','e','r',' ','e','n','d',' ','o','f',' ','f','i','l','e','.','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','d','i','s','p','l','a','y',' ','t','i','l','d','e','s',' ','a','f','t','e','r',' ','e','n','d',' ','o','f',' ','f','i','l','e','.','\n',
' ',' ','-','#',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','s','h','i','f','t','=','[','_','\b','N',']','\n', ' ',' ','-','#',' ','[','_','\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', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','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',
' ',' ',' ',' ',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','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',
'\n', '\n',
' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n', ' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
'\n', '\n',
@ -226,6 +235,7 @@ constant char helpdata[] = {
' ','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', ' ','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', ' ','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','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',
'\n',
'\n', '\n',
0 }; 0 };
#endif #endif

View file

@ -1,7 +1,7 @@
/* $NetBSD: ifile.c,v 1.6 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: ifile.c,v 1.3 2011/07/03 20:14:12 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.

View file

@ -1,5 +1,7 @@
/* $NetBSD: input.c,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -53,13 +55,14 @@ forw_line(curr_pos)
int endline; int endline;
int backchars; int backchars;
get_forw_line:
if (curr_pos == NULL_POSITION) if (curr_pos == NULL_POSITION)
{ {
null_line(); null_line();
return (NULL_POSITION); return (NULL_POSITION);
} }
#if HILITE_SEARCH #if HILITE_SEARCH
if (hilite_search == OPT_ONPLUS || status_col) if (hilite_search == OPT_ONPLUS || is_filtering() || status_col)
/* /*
* If we are ignoring EOI (command F), only prepare * If we are ignoring EOI (command F), only prepare
* one line ahead, to avoid getting stuck waiting for * one line ahead, to avoid getting stuck waiting for
@ -76,6 +79,9 @@ forw_line(curr_pos)
return (NULL_POSITION); return (NULL_POSITION);
} }
/*
* Step back to the beginning of the line.
*/
base_pos = curr_pos; base_pos = curr_pos;
for (;;) for (;;)
{ {
@ -95,10 +101,14 @@ forw_line(curr_pos)
--base_pos; --base_pos;
} }
/*
* Read forward again to the position we should start at.
*/
prewind(); prewind();
plinenum(base_pos); plinenum(base_pos);
(void) ch_seek(base_pos); (void) ch_seek(base_pos);
while (base_pos < curr_pos) new_pos = base_pos;
while (new_pos < curr_pos)
{ {
if (ABORT_SIGS()) if (ABORT_SIGS())
{ {
@ -106,12 +116,12 @@ forw_line(curr_pos)
return (NULL_POSITION); return (NULL_POSITION);
} }
c = ch_forw_get(); c = ch_forw_get();
backchars = pappend(c, base_pos); backchars = pappend(c, new_pos);
base_pos++; new_pos++;
if (backchars > 0) if (backchars > 0)
{ {
pshift_all(); pshift_all();
base_pos -= backchars; new_pos -= backchars;
while (--backchars >= 0) while (--backchars >= 0)
(void) ch_back_get(); (void) ch_back_get();
} }
@ -119,6 +129,9 @@ forw_line(curr_pos)
(void) pflushmbc(); (void) pflushmbc();
pshift_all(); pshift_all();
/*
* Read the first character to display.
*/
c = ch_forw_get(); c = ch_forw_get();
if (c == EOI) if (c == EOI)
{ {
@ -127,6 +140,9 @@ forw_line(curr_pos)
} }
blankline = (c == '\n' || c == '\r'); blankline = (c == '\n' || c == '\r');
/*
* Read each character in the line and append to the line buffer.
*/
for (;;) for (;;)
{ {
if (ABORT_SIGS()) if (ABORT_SIGS())
@ -167,6 +183,11 @@ forw_line(curr_pos)
{ {
do do
{ {
if (ABORT_SIGS())
{
null_line();
return (NULL_POSITION);
}
c = ch_forw_get(); c = ch_forw_get();
} while (c != '\n' && c != EOI); } while (c != '\n' && c != EOI);
new_pos = ch_tell(); new_pos = ch_tell();
@ -181,7 +202,23 @@ forw_line(curr_pos)
} }
c = ch_forw_get(); c = ch_forw_get();
} }
pdone(endline);
pdone(endline, 1);
#if HILITE_SEARCH
if (is_filtered(base_pos))
{
/*
* We don't want to display this line.
* Get the next line.
*/
curr_pos = new_pos;
goto get_forw_line;
}
if (status_col && is_hilited(base_pos, ch_tell()-1, 1, NULL))
set_status_col('*');
#endif
if (squeeze && blankline) if (squeeze && blankline)
{ {
@ -215,18 +252,19 @@ forw_line(curr_pos)
back_line(curr_pos) back_line(curr_pos)
POSITION curr_pos; POSITION curr_pos;
{ {
POSITION new_pos, begin_new_pos; POSITION new_pos, begin_new_pos, base_pos;
int c; int c;
int endline; int endline;
int backchars; int backchars;
get_back_line:
if (curr_pos == NULL_POSITION || curr_pos <= ch_zero()) if (curr_pos == NULL_POSITION || curr_pos <= ch_zero())
{ {
null_line(); null_line();
return (NULL_POSITION); return (NULL_POSITION);
} }
#if HILITE_SEARCH #if HILITE_SEARCH
if (hilite_search == OPT_ONPLUS || status_col) if (hilite_search == OPT_ONPLUS || is_filtering() || status_col)
prep_hilite((curr_pos < 3*size_linebuf) ? prep_hilite((curr_pos < 3*size_linebuf) ?
0 : curr_pos - 3*size_linebuf, curr_pos, -1); 0 : curr_pos - 3*size_linebuf, curr_pos, -1);
#endif #endif
@ -241,9 +279,9 @@ back_line(curr_pos)
/* /*
* Find out if the "current" line was blank. * Find out if the "current" line was blank.
*/ */
(void) ch_forw_get(); /* Skip the newline */ (void) ch_forw_get(); /* Skip the newline */
c = ch_forw_get(); /* First char of "current" line */ c = ch_forw_get(); /* First char of "current" line */
(void) ch_back_get(); /* Restore our position */ (void) ch_back_get(); /* Restore our position */
(void) ch_back_get(); (void) ch_back_get();
if (c == '\n' || c == '\r') if (c == '\n' || c == '\r')
@ -285,7 +323,7 @@ back_line(curr_pos)
* This is the newline ending the previous line. * This is the newline ending the previous line.
* We have hit the beginning of the line. * We have hit the beginning of the line.
*/ */
new_pos = ch_tell() + 1; base_pos = ch_tell() + 1;
break; break;
} }
if (c == EOI) if (c == EOI)
@ -295,7 +333,7 @@ back_line(curr_pos)
* This must be the first line in the file. * This must be the first line in the file.
* This must, of course, be the beginning of the line. * This must, of course, be the beginning of the line.
*/ */
new_pos = ch_tell(); base_pos = ch_tell();
break; break;
} }
} }
@ -309,6 +347,7 @@ back_line(curr_pos)
* are much longer than the screen width, * are much longer than the screen width,
* but I don't know of any better way. }} * but I don't know of any better way. }}
*/ */
new_pos = base_pos;
if (ch_seek(new_pos)) if (ch_seek(new_pos))
{ {
null_line(); null_line();
@ -366,7 +405,22 @@ back_line(curr_pos)
} }
} while (new_pos < curr_pos); } while (new_pos < curr_pos);
pdone(endline); pdone(endline, 0);
#if HILITE_SEARCH
if (is_filtered(base_pos))
{
/*
* We don't want to display this line.
* Get the previous line.
*/
curr_pos = begin_new_pos;
goto get_back_line;
}
if (status_col && is_hilited(base_pos, ch_tell()-1, 1, NULL))
set_status_col('*');
#endif
return (begin_new_pos); return (begin_new_pos);
} }

119
external/bsd/less/dist/install.sh vendored Normal file
View file

@ -0,0 +1,119 @@
#!/bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5; it is not part of GNU.
#
# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $
#
# This script is compatible with the BSD install script, but was written
# from scratch.
#
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
instcmd="$mvprog"
chmodcmd=""
chowncmd=""
chgrpcmd=""
stripcmd=""
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=""
dst=""
while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
shift
continue;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
-s) stripcmd="$stripprog"
shift
continue;;
*) if [ x"$src" = x ]
then
src=$1
else
dst=$1
fi
shift
continue;;
esac
done
if [ x"$src" = x ]
then
echo "install: no input file specified"
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
exit 1
fi
# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ]
then
dst="$dst"/`basename $src`
fi
# Make a temp file name in the proper directory.
dstdir=`dirname $dst`
dsttmp=$dstdir/_inst.$$_
# Move or copy the file name to the temp name
$doit $instcmd $src $dsttmp
# and set any options; do chmod last to preserve setuid bits
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi
# Now rename the file to the real destination.
$doit $rmcmd $dst
$doit $mvcmd $dsttmp $dst
exit 0

View file

@ -1,5 +1,7 @@
/* $NetBSD: jump.c,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -16,7 +18,6 @@
#include "less.h" #include "less.h"
#include "position.h" #include "position.h"
extern int hit_eof;
extern int jump_sline; extern int jump_sline;
extern int squished; extern int squished;
extern int screen_trashed; extern int screen_trashed;
@ -31,22 +32,35 @@ extern int top_scroll;
jump_forw() jump_forw()
{ {
POSITION pos; POSITION pos;
POSITION end_pos;
if (ch_end_seek()) if (ch_end_seek())
{ {
error("Cannot seek to end of file", NULL_PARG); error("Cannot seek to end of file", NULL_PARG);
return; return;
} }
/*
* Note; lastmark will be called later by jump_loc, but it fails
* because the position table has been cleared by pos_clear below.
* So call it here before calling pos_clear.
*/
lastmark();
/* /*
* Position the last line in the file at the last screen line. * Position the last line in the file at the last screen line.
* Go back one line from the end of the file * Go back one line from the end of the file
* to get to the beginning of the last line. * to get to the beginning of the last line.
*/ */
pos = back_line(ch_tell()); pos_clear();
end_pos = ch_tell();
pos = back_line(end_pos);
if (pos == NULL_POSITION) if (pos == NULL_POSITION)
jump_loc((POSITION)0, sc_height-1); jump_loc((POSITION)0, sc_height-1);
else else
{
jump_loc(pos, sc_height-1); jump_loc(pos, sc_height-1);
if (position(sc_height-1) != end_pos)
repaint();
}
} }
/* /*
@ -102,8 +116,9 @@ repaint()
* Jump to a specified percentage into the file. * Jump to a specified percentage into the file.
*/ */
public void public void
jump_percent(percent) jump_percent(percent, fraction)
int percent; int percent;
long fraction;
{ {
POSITION pos, len; POSITION pos, len;
@ -121,7 +136,7 @@ jump_percent(percent)
error("Don't know length of file", NULL_PARG); error("Don't know length of file", NULL_PARG);
return; return;
} }
pos = percent_pos(len, percent); pos = percent_pos(len, percent, fraction);
if (pos >= len) if (pos >= len)
pos = len-1; pos = len-1;
@ -186,8 +201,10 @@ jump_loc(pos, sline)
forw(nline, position(BOTTOM_PLUS_ONE), 1, 0, 0); forw(nline, position(BOTTOM_PLUS_ONE), 1, 0, 0);
else else
back(-nline, position(TOP), 1, 0); back(-nline, position(TOP), 1, 0);
#if HILITE_SEARCH
if (show_attn) if (show_attn)
repaint_hilite(1); repaint_hilite(1);
#endif
return; return;
} }
@ -225,8 +242,10 @@ jump_loc(pos, sline)
* that we can just scroll there after all. * that we can just scroll there after all.
*/ */
forw(sc_height-sline+nline-1, bpos, 1, 0, 0); forw(sc_height-sline+nline-1, bpos, 1, 0, 0);
#if HILITE_SEARCH
if (show_attn) if (show_attn)
repaint_hilite(1); repaint_hilite(1);
#endif
return; return;
} }
pos = back_line(pos); pos = back_line(pos);
@ -242,7 +261,6 @@ jump_loc(pos, sline)
} }
} }
lastmark(); lastmark();
hit_eof = 0;
squished = 0; squished = 0;
screen_trashed = 0; screen_trashed = 0;
forw(sc_height-1, pos, 1, 0, sline-nline); forw(sc_height-1, pos, 1, 0, sline-nline);
@ -274,13 +292,15 @@ jump_loc(pos, sline)
* that we can just scroll there after all. * that we can just scroll there after all.
*/ */
back(nline+1, tpos, 1, 0); back(nline+1, tpos, 1, 0);
#if HILITE_SEARCH
if (show_attn) if (show_attn)
repaint_hilite(1); repaint_hilite(1);
#endif
return; return;
} }
} }
lastmark(); lastmark();
if (top_scroll != OPT_ON) if (!top_scroll)
clear(); clear();
else else
home(); home();

View file

@ -1,8 +1,6 @@
.\" $NetBSD: less.1,v 1.17 2006/12/17 16:16:53 jmmv Exp $ .TH LESS 1 "Version 444: 09 Jun 2011"
.\"
.TH LESS 1 "Version 394: 03 Dec 2005"
.SH NAME .SH NAME
less \- opposite of more (a filter for browsing text files) less \- opposite of more
.SH SYNOPSIS .SH SYNOPSIS
.B "less \-?" .B "less \-?"
.br .br
@ -12,7 +10,7 @@ less \- opposite of more (a filter for browsing text files)
.br .br
.B "less \-\-version" .B "less \-\-version"
.br .br
.B "less [\-[+]aBcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]" .B "less [\-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]"
.br .br
.B " [\-b \fIspace\fP] [\-h \fIlines\fP] [\-j \fIline\fP] [\-k \fIkeyfile\fP]" .B " [\-b \fIspace\fP] [\-h \fIlines\fP] [\-j \fIline\fP] [\-k \fIkeyfile\fP]"
.br .br
@ -22,43 +20,20 @@ less \- opposite of more (a filter for browsing text files)
.br .br
.B " [\-# \fIshift\fP] [+[+]\fIcmd\fP] [\-\-] [\fIfilename\fP]..." .B " [\-# \fIshift\fP] [+[+]\fIcmd\fP] [\-\-] [\fIfilename\fP]..."
.br .br
.B "more [options]"
.br
.B "page [options]"
.br
(See the OPTIONS section for alternate option syntax with long option names.) (See the OPTIONS section for alternate option syntax with long option names.)
.SH DESCRIPTION .SH DESCRIPTION
.I Less .I Less
is a program similar to is a program similar to
.I more .I more
(1), a filter that shows text one page at a time. (1), but which allows backward movement
In NetBSD the two utilities are implemented by the same binary but they in the file as well as forward movement.
expose slightly different behavior. Also,
Their differences are detailed below:
.IP \(bu 4
.I less
allows backward movement in the file as well as forward movement.
.IP \(bu 4
.I less .I less
does not have to read the entire input file before starting, does not have to read the entire input file before starting,
so with large input files it starts up faster than text editors like so with large input files it starts up faster than text editors like
.I vi .I vi
(1). (1).
.IP \(bu 4
.I more
ignores * and @ in search commands.
.IP \(bu 4
.I less
does not clear the screen or squish it to the bottom, for the first
page, or when exiting.
.IP \(bu 4
.I more
sets the -E -m -G -f flags automatically.
.IP \(bu 4
.I more
uses $MORE instead of $LESS for extra options.
.PP
.I Less .I Less
uses termcap (or terminfo on some systems), uses termcap (or terminfo on some systems),
so it can run on a variety of terminals. so it can run on a variety of terminals.
@ -90,7 +65,7 @@ Like SPACE, but if N is specified, it becomes the new window size.
.IP "ESC-SPACE" .IP "ESC-SPACE"
Like SPACE, but scrolls a full screenful, even if it reaches Like SPACE, but scrolls a full screenful, even if it reaches
end-of-file in the process. end-of-file in the process.
.IP "RETURN or ^N or e or ^E or j or ^J" .IP "ENTER or RETURN or ^N or e or ^E or j or ^J"
Scroll forward N lines, default 1. Scroll forward N lines, default 1.
The entire N lines are displayed, even if N is more than the screen size. The entire N lines are displayed, even if N is more than the screen size.
.IP "d or ^D" .IP "d or ^D"
@ -134,17 +109,19 @@ 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 It is a way to monitor the tail of a file which is growing
while it is being viewed. while it is being viewed.
(The behavior is similar to the "tail \-f" command.) (The behavior is similar to the "tail \-f" command.)
.IP "g or \*[Lt] or ESC-\*[Lt]" .IP "g or < or ESC-<"
Go to line N in the file, default 1 (beginning of file). Go to line N in the file, default 1 (beginning of file).
(Warning: this may be slow if N is large.) (Warning: this may be slow if N is large.)
.IP "G or \*[Gt] or ESC-\*[Gt]" .IP "G or > or ESC->"
Go to line N in the file, default the end of the file. Go to line N in the file, default the end of the file.
(Warning: this may be slow if N is large, (Warning: this may be slow if N is large,
or if N is not specified and or if N is not specified and
standard input, rather than a file, is being read.) standard input, rather than a file, is being read.)
.IP "p or %" .IP "p or %"
Go to a position N percent into the file. Go to a position N percent into the file.
N should be between 0 and 100. N should be between 0 and 100, and may contain a decimal point.
.IP "P"
Go to the line containing byte offset N in the file.
.IP "{" .IP "{"
If a left curly bracket appears in the top line displayed If a left curly bracket appears in the top line displayed
on the screen, on the screen,
@ -173,14 +150,14 @@ Like }, but applies to square brackets rather than curly brackets.
Followed by two characters, Followed by two characters,
acts like {, but uses the two characters as open and close brackets, acts like {, but uses the two characters as open and close brackets,
respectively. respectively.
For example, "ESC ^F \*[Lt] \*[Gt]" could be used to For example, "ESC ^F < >" could be used to
go forward to the \*[Gt] which matches the \*[Lt] in the top displayed line. go forward to the > which matches the < in the top displayed line.
.IP "ESC-^B" .IP "ESC-^B"
Followed by two characters, Followed by two characters,
acts like }, but uses the two characters as open and close brackets, acts like }, but uses the two characters as open and close brackets,
respectively. respectively.
For example, "ESC ^B \*[Lt] \*[Gt]" could be used to For example, "ESC ^B < >" could be used to
go backward to the \*[Lt] which matches the \*[Gt] in the bottom displayed line. go backward to the < which matches the > in the bottom displayed line.
.IP m .IP m
Followed by any lowercase letter, Followed by any lowercase letter,
marks the current position with that letter. marks the current position with that letter.
@ -199,10 +176,9 @@ Same as single quote.
.IP /pattern .IP /pattern
Search forward in the file for the N-th line containing the pattern. Search forward in the file for the N-th line containing the pattern.
N defaults to 1. N defaults to 1.
When invoked as less, the pattern is an extended regular expression. The pattern is a regular expression, as recognized by
Otherwise, the pattern is a basic regular expression, as recognized by the regular expression library supplied by your system.
.I ed. The search starts at the first line displayed
The search starts at the second line displayed
(but see the \-a and \-j options, which change this). (but see the \-a and \-j options, which change this).
.sp .sp
Certain characters are special Certain characters are special
@ -216,13 +192,11 @@ Search multiple files.
That is, if the search reaches the END of the current file That is, if the search reaches the END of the current file
without finding a match, without finding a match,
the search continues in the next file in the command line list. the search continues in the next file in the command line list.
The * modifier is available when invoked as less only.
.IP "^F or @" .IP "^F or @"
Begin the search at the first line of the FIRST file Begin the search at the first line of the FIRST file
in the command line list, in the command line list,
regardless of what is currently displayed on the screen regardless of what is currently displayed on the screen
or the settings of the \-a or \-j options. or the settings of the \-a or \-j options.
The @ modifier is available when invoked as less only.
.IP "^K" .IP "^K"
Highlight any text which matches the pattern on the current screen, Highlight any text which matches the pattern on the current screen,
but don't move to the first match (KEEP current position). but don't move to the first match (KEEP current position).
@ -282,6 +256,23 @@ turn highlighting back on.
Any search command will also turn highlighting back on. Any search command will also turn highlighting back on.
(Highlighting can also be disabled by toggling the \-G option; (Highlighting can also be disabled by toggling the \-G option;
in that case search commands do not turn highlighting back on.) in that case search commands do not turn highlighting back on.)
.IP "&pattern"
Display only lines which match the pattern;
lines which do not match the pattern are not displayed.
If pattern is empty (if you type & immediately followed by ENTER),
any filtering is turned off, and all lines are displayed.
While filtering is in effect, an ampersand is displayed at the
beginning of the prompt,
as a reminder that some lines in the file may be hidden.
.sp
Certain characters are special as in the / command:
.RS
.IP "^N or !"
Display only lines which do NOT match the pattern.
.IP "^R"
Don't interpret regular expression metacharacters;
that is, do a simple textual comparison.
.RE
.IP ":e [filename]" .IP ":e [filename]"
Examine a new file. Examine a new file.
If the filename is missing, the "current" file (see the :n and :p commands If the filename is missing, the "current" file (see the :n and :p commands
@ -342,7 +333,7 @@ the current setting is printed and nothing is changed.
.IP \-\- .IP \-\-
Like the \- command, but takes a long option name (see OPTIONS below) Like the \- command, but takes a long option name (see OPTIONS below)
rather than a single option letter. rather than a single option letter.
You must press RETURN after typing the option name. You must press ENTER or RETURN after typing the option name.
A ^P immediately after the second dash suppresses printing of a A ^P immediately after the second dash suppresses printing of a
message describing the new setting, as in the \- command. message describing the new setting, as in the \- command.
.IP \-+ .IP \-+
@ -372,7 +363,7 @@ The setting of the option is not changed.
(Double underscore.) (Double underscore.)
Like the _ (underscore) command, but takes a long option name Like the _ (underscore) command, but takes a long option name
rather than a single option letter. rather than a single option letter.
You must press RETURN after typing the option name. You must press ENTER or RETURN after typing the option name.
.IP +cmd .IP +cmd
Causes the specified cmd to be executed each time a new file is examined. Causes the specified cmd to be executed each time a new file is examined.
For example, +G causes For example, +G causes
@ -407,13 +398,13 @@ A pound sign (#) is replaced by the name of the previously examined file.
On Unix systems, the shell is taken from the environment variable SHELL, On Unix systems, the shell is taken from the environment variable SHELL,
or defaults to "sh". or defaults to "sh".
On MS-DOS and OS/2 systems, the shell is the normal command processor. On MS-DOS and OS/2 systems, the shell is the normal command processor.
.IP "| \*[Lt]m\*[Gt] shell-command" .IP "| <m> shell-command"
\*[Lt]m\*[Gt] represents any mark letter. <m> represents any mark letter.
Pipes a section of the input file to the given shell command. Pipes a section of the input file to the given shell command.
The section of the file to be piped is between the first line on The section of the file to be piped is between the first line on
the current screen and the position marked by the letter. the current screen and the position marked by the letter.
\*[Lt]m\*[Gt] may also be ^ or $ to indicate beginning or end of file respectively. <m> may also be ^ or $ to indicate beginning or end of file respectively.
If \*[Lt]m\*[Gt] is . or newline, the current screen is piped. If <m> is . or newline, the current screen is piped.
.IP "s filename" .IP "s filename"
Save the input to a file. Save the input to a file.
This only works if the input is a pipe, not an ordinary file. This only works if the input is a pipe, not an ordinary file.
@ -474,11 +465,24 @@ This option displays a summary of the commands accepted by
(Depending on how your shell interprets the question mark, (Depending on how your shell interprets the question mark,
it may be necessary to quote the question mark, thus: "\-\e?".) it may be necessary to quote the question mark, thus: "\-\e?".)
.IP "\-a or \-\-search-skip-screen" .IP "\-a or \-\-search-skip-screen"
Causes searches to start after the last line By default, forward searches start at the top of the displayed screen
displayed on the screen, and backwards searches start at the bottom of the displayed screen
(except for repeated searches invoked by the n or N commands,
which start after or before the "target" line respectively;
see the \-j option for more about the target line).
The \-a option causes forward searches to instead start at
the bottom of the screen
and backward searches to start at the top of the screen,
thus skipping all lines displayed on the screen. thus skipping all lines displayed on the screen.
By default, searches start at the second line on the screen .IP "\-A or \-\-SEARCH-SKIP-SCREEN"
(or after the last found line; see the \-j option). Causes all forward searches (not just non-repeated searches)
to start just after the target line, and all backward searches
to start just before the target line.
Thus, forward searches will skip part of the displayed screen
(from the first line up to and including the target line).
Similarly backwards searches will skip the displayed screen
from the last line up to and including the target line.
This was the default behavior in less versions prior to 441.
.IP "\-b\fIn\fP or \-\-buffers=\fIn\fP" .IP "\-b\fIn\fP or \-\-buffers=\fIn\fP"
Specifies the amount of buffer space Specifies the amount of buffer space
.I less .I less
@ -488,7 +492,7 @@ By default 64K of buffer space is used for each file
The \-b option specifies instead that \fIn\fP kilobytes of The \-b option specifies instead that \fIn\fP kilobytes of
buffer space should be used for each file. buffer space should be used for each file.
If \fIn\fP is \-1, buffer space is unlimited; that is, If \fIn\fP is \-1, buffer space is unlimited; that is,
the entire file is read into memory. the entire file can be read into memory.
.IP "\-B or \-\-auto-buffers" .IP "\-B or \-\-auto-buffers"
By default, when data is read from a pipe, By default, when data is read from a pipe,
buffers are allocated automatically as needed. buffers are allocated automatically as needed.
@ -499,27 +503,21 @@ so that only 64K
(or the amount of space specified by the \-b option) (or the amount of space specified by the \-b option)
is used for the pipe. is used for the pipe.
Warning: use of \-B can result in erroneous display, since only the Warning: use of \-B can result in erroneous display, since only the
most recently viewed part of the file is kept in memory; most recently viewed part of the piped data is kept in memory;
any earlier data is lost. any earlier data is lost.
.IP "\-c or \-\-clear-screen" .IP "\-c or \-\-clear-screen"
Causes full screen repaints to be painted from the top line down. Causes full screen repaints to be painted from the top line down.
By default, By default,
full screen repaints are done by scrolling from the bottom of the screen. full screen repaints are done by scrolling from the bottom of the screen.
.IP "\-C or \-\-CLEAR-SCREEN" .IP "\-C or \-\-CLEAR-SCREEN"
The \-C option is like \-c, but the screen is cleared before it is repainted. Same as \-c, for compatibility with older versions of
.IP "\-d .I less.
The -d option causes the default prompt to include the basic directions .IP "\-d or \-\-dumb"
``[Press space to continue, 'q' to quit.]''. The -d The \-d option suppresses the error message
option also causes the message ``[Press 'h' for instructions.]'' to be
displayed when an invalid command is entered (normally, the bell is
rung). This option is useful in environments where users may not be
experienced with pagers.
.IP \-\-dumb"
The \-\-dumb option suppresses the error message
normally displayed if the terminal is dumb; normally displayed if the terminal is dumb;
that is, lacks some important capability, that is, lacks some important capability,
such as the ability to clear the screen or scroll backward. such as the ability to clear the screen or scroll backward.
The \-\-dumb option does not otherwise change the behavior of The \-d option does not otherwise change the behavior of
.I less .I less
on a dumb terminal. on a dumb terminal.
.IP "\-D\fBx\fP\fIcolor\fP or \-\-color=\fBx\fP\fIcolor\fP" .IP "\-D\fBx\fP\fIcolor\fP or \-\-color=\fBx\fP\fIcolor\fP"
@ -530,7 +528,9 @@ being set: n=normal, s=standout, d=bold, u=underlined, k=blink.
\fIcolor\fP is a pair of numbers separated by a period. \fIcolor\fP is a pair of numbers separated by a period.
The first number selects the foreground color and the second selects The first number selects the foreground color and the second selects
the background color of the text. the background color of the text.
A single number \fIN\fP is the same as \fIN.0\fP. A single number \fIN\fP is the same as \fIN.M\fP,
where \fIM\fP is the normal background color.
.IP "\-e or \-\-quit-at-eof" .IP "\-e or \-\-quit-at-eof"
Causes Causes
.I less .I less
@ -550,6 +550,8 @@ Also suppresses the warning message when a binary file is opened.
By default, By default,
.I less .I less
will refuse to open non-regular files. will refuse to open non-regular files.
Note that some operating systems will not allow directories
to be read, even if \-f is set.
.IP "\-F or \-\-quit-if-one-screen" .IP "\-F or \-\-quit-if-one-screen"
Causes Causes
.I less .I less
@ -585,18 +587,26 @@ the pattern contains uppercase letters.
.IP "\-j\fIn\fP or \-\-jump-target=\fIn\fP" .IP "\-j\fIn\fP or \-\-jump-target=\fIn\fP"
Specifies a line on the screen where the "target" line Specifies a line on the screen where the "target" line
is to be positioned. is to be positioned.
A target line is the object of a text search, The target line is the line specified by any command to
tag search, jump to a line number, search for a pattern, jump to a line number,
jump to a file percentage, or jump to a marked position. jump to a file percentage or jump to a tag.
The screen line is specified by a number: the top line on the screen The screen line may be specified by a number: the top line on the screen
is 1, the next is 2, and so on. is 1, the next is 2, and so on.
The number may be negative to specify a line relative to the bottom The number may be negative to specify a line relative to the bottom
of the screen: the bottom line on the screen is \-1, the second of the screen: the bottom line on the screen is \-1, the second
to the bottom is \-2, and so on. to the bottom is \-2, and so on.
If the \-j option is used, searches begin at the line immediately Alternately, the screen line may be specified as a fraction of the height
after the target line. of the screen, starting with a decimal point: .5 is in the middle of the
screen, .3 is three tenths down from the first line, and so on.
If the line is specified as a fraction, the actual line number
is recalculated if the terminal window is resized, so that the
target line remains at the specified fraction of the screen height.
If any form of the \-j option is used,
forward searches begin at the line immediately after the target line,
and backward searches begin at the target line,
unless changed by \-a or \-A.
For example, if "\-j4" is used, the target line is the For example, if "\-j4" is used, the target line is the
fourth line on the screen, so searches begin at the fifth line fourth line on the screen, so forward searches begin at the fifth line
on the screen. on the screen.
.IP "\-J or \-\-status-column" .IP "\-J or \-\-status-column"
Displays a status column at the left edge of the screen. Displays a status column at the left edge of the screen.
@ -617,10 +627,13 @@ file.
.IP "\-K or \-\-quit-on-intr" .IP "\-K or \-\-quit-on-intr"
Causes Causes
.I less .I less
to exit immediately when an interrupt character (usually ^C) is typed. to exit immediately (with status 2)
when an interrupt character (usually ^C) is typed.
Normally, an interrupt character causes Normally, an interrupt character causes
.I less .I less
to stop whatever it is doing and return to its command prompt. to stop whatever it is doing and return to its command prompt.
Note that use of this option makes it impossible to return to the
command prompt from the "F" command.
.IP "\-L or \-\-no-lessopen" .IP "\-L or \-\-no-lessopen"
Ignore the LESSOPEN environment variable Ignore the LESSOPEN environment variable
(see the INPUT PREPROCESSOR section below). (see the INPUT PREPROCESSOR section below).
@ -823,11 +836,6 @@ Disables sending the termcap initialization and deinitialization strings
to the terminal. to the terminal.
This is sometimes desirable if the deinitialization string does This is sometimes desirable if the deinitialization string does
something unnecessary, like clearing the screen. something unnecessary, like clearing the screen.
.IP "\-\-no-keypad"
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.
.IP "\-y\fIn\fP or \-\-max-forw-scroll=\fIn\fP" .IP "\-y\fIn\fP or \-\-max-forw-scroll=\fIn\fP"
Specifies a maximum number of lines to scroll forward. Specifies a maximum number of lines to scroll forward.
If it is necessary to scroll forward more than \fIn\fP lines, If it is necessary to scroll forward more than \fIn\fP lines,
@ -839,7 +847,7 @@ By default, any forward movement causes scrolling.
Changes the default scrolling window size to \fIn\fP lines. Changes the default scrolling window size to \fIn\fP lines.
The default is one screenful. The default is one screenful.
The z and w commands can also be used to change the window size. The z and w commands can also be used to change the window size.
The "z" may be omitted for compatibility with The "z" may be omitted for compatibility with some versions of
.I more. .I more.
If the number If the number
.I n .I n
@ -871,6 +879,31 @@ Specifies the default number of positions to scroll horizontally
in the RIGHTARROW and LEFTARROW commands. in the RIGHTARROW and LEFTARROW commands.
If the number specified is zero, it sets the default number of If the number specified is zero, it sets the default number of
positions to one half of the screen width. positions to one half of the screen width.
Alternately, the number may be specified as a fraction of the width
of the screen, starting with a decimal point: .5 is half of the
screen width, .3 is three tenths of the screen width, and so on.
If the number is specified as a fraction, the actual number of
scroll positions is recalculated if the terminal window is resized,
so that the actual scroll remains at the specified fraction
of the screen width.
.IP "\-\-no-keypad"
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.
.IP "\-\-follow-name"
Normally, if the input file is renamed while an F command is executing,
.I less
will continue to display the contents of the original file despite
its name change.
If \-\-follow-name is specified, during an F command
.I less
will periodically attempt to reopen the file by name.
If the reopen succeeds and the file is a different file from the original
(which means that a new file has been created
with the same name as the original (now renamed) file),
.I less
will display the contents of that new file.
.IP \-\- .IP \-\-
A command line argument of "\-\-" marks the end of option arguments. A command line argument of "\-\-" marks the end of option arguments.
Any arguments following this are interpreted as filenames. Any arguments following this are interpreted as filenames.
@ -883,7 +916,7 @@ For example, +G tells
.I less .I less
to start at the end of the file rather than the beginning, to start at the end of the file rather than the beginning,
and +/xyz tells it to start at the first occurrence of "xyz" in the file. and +/xyz tells it to start at the first occurrence of "xyz" in the file.
As a special case, +\*[Lt]number\*[Gt] acts like +\*[Lt]number\*[Gt]g; As a special case, +<number> acts like +<number>g;
that is, it starts the display at the specified line number that is, it starts the display at the specified line number
(however, see the caveat under the "g" command above). (however, see the caveat under the "g" command above).
If the option starts with ++, the initial command applies to If the option starts with ++, the initial command applies to
@ -898,7 +931,8 @@ or the pattern for a search command),
certain keys can be used to manipulate the command line. certain keys can be used to manipulate the command line.
Most commands have an alternate form in [ brackets ] which can be used if Most commands have an alternate form in [ brackets ] which can be used if
a key does not exist on a particular keyboard. a key does not exist on a particular keyboard.
(The bracketed forms do not work in the MS-DOS version.) (Note that the forms beginning with ESC do not work
in some MS-DOS and Windows systems because ESC is the line erase character.)
Any of these special keys may be entered literally by preceding Any of these special keys may be entered literally by preceding
it with the "literal" character, either ^V or ^A. it with the "literal" character, either ^V or ^A.
A backslash itself may also be entered literally by entering two backslashes. A backslash itself may also be entered literally by entering two backslashes.
@ -951,6 +985,8 @@ Delete the entire command line,
or cancel the command if the command line is empty. or cancel the command if the command line is empty.
If you have changed your line-kill character in Unix to something If you have changed your line-kill character in Unix to something
other than ^U, that character is used instead of ^U. other than ^U, that character is used instead of ^U.
.IP "^G"
Delete the entire command line and return to the main prompt.
.SH "KEY BINDINGS" .SH "KEY BINDINGS"
You may define your own You may define your own
@ -1000,8 +1036,7 @@ uses that as the name of the system-wide lesskey file.
Otherwise, Otherwise,
.I less .I less
looks in a standard place for the system-wide lesskey file: looks in a standard place for the system-wide lesskey file:
On NetBSD, the system-wide lesskey file is in /etc/sysless. On Unix systems, the system-wide lesskey file is /usr/local/etc/sysless.
On other Unix systems, the system-wide lesskey file is /usr/local/etc/sysless.
(However, if (However, if
.I less .I less
was built with a different sysconf directory than /usr/local/etc, was built with a different sysconf directory than /usr/local/etc,
@ -1066,7 +1101,7 @@ lessopen.sh:
.br .br
case "$1" in case "$1" in
.br .br
*.Z) uncompress \-c $1 \*[Gt]/tmp/less.$$ 2\*[Gt]/dev/null *.Z) uncompress -\c $1 >/tmp/less.$$ 2>/dev/null
.br .br
if [ \-s /tmp/less.$$ ]; then if [ \-s /tmp/less.$$ ]; then
.br .br
@ -1135,6 +1170,22 @@ but it is usually not necessary since there is no replacement file
to clean up. to clean up.
In this case, the replacement file name passed to the LESSCLOSE In this case, the replacement file name passed to the LESSCLOSE
postprocessor is "\-". postprocessor is "\-".
.PP
For compatibility with previous versions of
.I less,
the input preprocessor or pipe is not used if
.I less
is viewing standard input.
However, if the first character of LESSOPEN is a dash (\-),
the input preprocessor is used on standard input as well as other files.
In this case, the dash is not considered to be part of
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.
Again, in this case the dash is not considered to be part of
the input pipe command.
.SH "NATIONAL CHARACTER SETS" .SH "NATIONAL CHARACTER SETS"
There are three types of characters in the input file: There are three types of characters in the input file:
@ -1178,10 +1229,12 @@ Selects a Russian character set.
Selects a character set appropriate for NeXT computers. Selects a character set appropriate for NeXT computers.
.IP utf-8 .IP utf-8
Selects the UTF-8 encoding of the ISO 10646 character set. Selects the UTF-8 encoding of the ISO 10646 character set.
UTF-8 is special in that it supports multi-byte characters in the input file.
It is the only character set that supports multi-byte characters.
.IP windows .IP windows
Selects a character set appropriate for Microsoft Windows (cp 1251). Selects a character set appropriate for Microsoft Windows (cp 1251).
.PP .PP
In special cases, it may be desired to tailor In rare cases, it may be desired to tailor
.I less .I less
to use a character set other than the ones definable by LESSCHARSET. to use a character set other than the ones definable by LESSCHARSET.
In this case, the environment variable LESSCHARDEF can be used In this case, the environment variable LESSCHARDEF can be used
@ -1223,7 +1276,7 @@ to each of the possible values for LESSCHARSET:
.PP .PP
If neither LESSCHARSET nor LESSCHARDEF is set, If neither LESSCHARSET nor LESSCHARDEF is set,
but any of the strings "UTF-8", "UTF8", "utf-8" or "utf8" but any of the strings "UTF-8", "UTF8", "utf-8" or "utf8"
is found in the LC_ALL, LC_TYPE or LANG is found in the LC_ALL, LC_CTYPE or LANG
environment variables, then the default character set is utf-8. environment variables, then the default character set is utf-8.
.PP .PP
If that string is not found, but your system supports the If that string is not found, but your system supports the
@ -1254,8 +1307,7 @@ The remainder of LESSBINFMT is a string which may include one
printf-style escape sequence (a % followed by x, X, o, d, etc.). printf-style escape sequence (a % followed by x, X, o, d, etc.).
For example, if LESSBINFMT is "*u[%x]", binary characters For example, if LESSBINFMT is "*u[%x]", binary characters
are displayed in underlined hexadecimal surrounded by brackets. are displayed in underlined hexadecimal surrounded by brackets.
The default if no LESSBINFMT is specified is "*s\*[Lt]%X\*[Gt]". The default if no LESSBINFMT is specified is "*s<%02X>".
The default if no LESSBINFMT is specified is "*s\*[Lt]%02X\*[Gt]".
Warning: the result of expanding the character via LESSBINFMT must Warning: the result of expanding the character via LESSBINFMT must
be less than 31 characters. be less than 31 characters.
.PP .PP
@ -1263,7 +1315,7 @@ When the character set is utf-8, the LESSUTFBINFMT environment variable
acts similarly to LESSBINFMT but it applies to Unicode code points acts similarly to LESSBINFMT but it applies to Unicode code points
that were successfully decoded but are unsuitable for display (e.g., that were successfully decoded but are unsuitable for display (e.g.,
unassigned code points). unassigned code points).
Its default value is "\*[Lt]U+%04lX\*[Gt]". Its default value is "<U+%04lX>".
Note that LESSUTFBINFMT and LESSBINFMT share their display attribute Note that LESSUTFBINFMT and LESSBINFMT share their display attribute
setting ("*x") so specifying one will affect both; setting ("*x") so specifying one will affect both;
LESSUTFBINFMT is read after LESSBINFMT so its setting, if any, LESSUTFBINFMT is read after LESSBINFMT so its setting, if any,
@ -1311,6 +1363,8 @@ or the EDITOR environment variable if VISUAL is not defined).
See the discussion of the LESSEDIT feature below. See the discussion of the LESSEDIT feature below.
.IP "%f" .IP "%f"
Replaced by the name of the current input file. Replaced by the name of the current input file.
.IP "%F"
Replaced by the last component of the name of the current input file.
.IP "%i" .IP "%i"
Replaced by the index of the current file in the list of Replaced by the index of the current file in the list of
input files. input files.
@ -1480,6 +1534,36 @@ filename completion (TAB, ^L)
.PP .PP
Less can also be compiled to be permanently in "secure" mode. Less can also be compiled to be permanently in "secure" mode.
.SH "COMPATIBILITY WITH MORE"
If the environment variable LESS_IS_MORE is set to 1,
or if the program is invoked via a file link named "more",
.I less
behaves (mostly) in conformance with the POSIX "more" command specification.
In this mode, less behaves differently in these ways:
.PP
The \-e option works differently.
If the \-e option is not set,
.I less
behaves as if the \-E option were set.
If the \-e option is set,
.I less
behaves as if the \-e and \-F options were set.
.PP
The \-m option works differently.
If the \-m option is not set, the medium prompt is used,
and it is prefixed with the string "--More--".
If the \-m option is set, the short prompt is used.
.PP
The \-n option acts like the \-z option.
The normal behavior of the \-n option is unavailable in this mode.
.PP
The parameter to the \-p option is taken to be a
.I less
command rather than a search pattern.
.PP
The LESS environment variable is ignored,
and the MORE environment variable is used in its place.
.SH "ENVIRONMENT VARIABLES" .SH "ENVIRONMENT VARIABLES"
Environment variables may be specified either in the system environment Environment variables may be specified either in the system environment
as usual, or in a as usual, or in a
@ -1545,7 +1629,7 @@ Normally should be set to "global" if your system has the
Name of the history file used to remember search commands and Name of the history file used to remember search commands and
shell commands between invocations of shell commands between invocations of
.I less. .I less.
If set to "\-", a history file is not used. If set to "\-" or "/dev/null", a history file is not used.
The default is "$HOME/.lesshst" on Unix systems, "$HOME/_lesshst" on The default is "$HOME/.lesshst" on Unix systems, "$HOME/_lesshst" on
DOS and Windows systems, or "$HOME/lesshst.ini" or "$INIT/lesshst.ini" DOS and Windows systems, or "$HOME/lesshst.ini" or "$INIT/lesshst.ini"
on OS/2 systems. on OS/2 systems.
@ -1572,12 +1656,20 @@ See discussion under SECURITY.
String to be appended to a directory name in filename completion. String to be appended to a directory name in filename completion.
.IP LESSUTFBINFMT .IP LESSUTFBINFMT
Format for displaying non-printable Unicode code points. Format for displaying non-printable Unicode code points.
.IP LESS_IS_MORE
Emulate the
.I more
(1) command.
.IP LINES .IP LINES
Sets the number of lines on the screen. Sets the number of lines on the screen.
Takes precedence over the number of lines specified by the TERM variable. Takes precedence over the number of lines specified by the TERM variable.
(But if you have a windowing system which supports TIOCGWINSZ or WIOCGETD, (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 the window system's idea of the screen size takes precedence over the
LINES and COLUMNS environment variables.) LINES and COLUMNS environment variables.)
.IP MORE
Options which are passed to
.I more
automatically.
.IP PATH .IP PATH
User's search path (used to find a lesskey file User's search path (used to find a lesskey file
on MS-DOS and OS/2 systems). on MS-DOS and OS/2 systems).
@ -1593,47 +1685,8 @@ The name of the editor (used for the v command).
.SH "SEE ALSO" .SH "SEE ALSO"
lesskey(1) lesskey(1)
.SH WARNINGS
The = command and prompts (unless changed by \-P)
report the line numbers of the lines at the top and bottom of the screen,
but the byte and percent of the line after the one at the bottom of the screen.
.PP
If the :e command is used to name more than one file,
and one of the named files has been viewed previously,
the new files may be entered into the list in an unexpected order.
.PP
On certain older terminals (the so-called "magic cookie" terminals),
search highlighting will cause an erroneous display.
On such terminals, search highlighting is disabled by default
to avoid possible problems.
.PP
In certain cases, when search highlighting is enabled and
a search pattern begins with a ^,
more text than the matching string may be highlighted.
(This problem does not occur when less is compiled to use the POSIX
regular expression package.)
.PP
When viewing text containing ANSI color escape sequences using the \-R option,
searching will not find text containing an embedded escape sequence.
Also, search highlighting may change the color of some of the text
which follows the highlighted text.
.PP
On some systems,
.I setlocale
claims that ASCII characters 0 thru 31 are control characters
rather than binary characters.
This causes
.I less
to treat some binary files as ordinary, non-binary files.
To workaround this problem, set the environment variable
LESSCHARSET to "ascii" (or whatever character set is appropriate).
.PP
This manual is too long.
.PP
See http://www.greenwoodsoftware.com/less for the list of known bugs in all versions of less.
.SH COPYRIGHT .SH COPYRIGHT
Copyright (C) 1984-2005 Mark Nudelman Copyright (C) 1984-2011 Mark Nudelman
.PP .PP
less is part of the GNU project and is free software. less is part of the GNU project and is free software.
You can redistribute it and/or modify it You can redistribute it and/or modify it
@ -1656,8 +1709,12 @@ See the GNU General Public License for more details.
.SH AUTHOR .SH AUTHOR
.PP .PP
Mark Nudelman \*[Lt]markn@greenwoodsoftware.com\*[Gt] Mark Nudelman <markn@greenwoodsoftware.com>
.br .br
Send bug reports or comments to the above address or to bug-less@gnu.org. Send bug reports or comments to the above address or to bug-less@gnu.org.
.br .br
For more information, see the less homepage at http://www.greenwoodsoftware.com/less. See http://www.greenwoodsoftware.com/less/bugs.html for the latest list of known bugs in less.
.br
For more information, see the less homepage at
.br
http://www.greenwoodsoftware.com/less.

View file

@ -1,7 +1,7 @@
/* $NetBSD: less.h,v 1.9 2008/02/16 07:20:54 matt Exp $ */ /* $NetBSD: less.h,v 1.3 2011/07/03 20:14:12 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -10,6 +10,7 @@
* contact the author, see the README file. * contact the author, see the README file.
*/ */
#define NEWBOT 1
/* /*
* Standard include file for "less". * Standard include file for "less".
@ -72,6 +73,9 @@
#if HAVE_CTYPE_H #if HAVE_CTYPE_H
#include <ctype.h> #include <ctype.h>
#endif #endif
#if HAVE_WCTYPE_H
#include <wctype.h>
#endif
#if HAVE_LIMITS_H #if HAVE_LIMITS_H
#include <limits.h> #include <limits.h>
#endif #endif
@ -126,16 +130,23 @@ void free();
#undef IS_SPACE #undef IS_SPACE
#undef IS_DIGIT #undef IS_DIGIT
#if !HAVE_UPPER_LOWER #if HAVE_WCTYPE
#define IS_UPPER(c) ASCII_IS_UPPER(c) #define IS_UPPER(c) iswupper(c)
#define IS_LOWER(c) ASCII_IS_LOWER(c) #define IS_LOWER(c) iswlower(c)
#define TO_UPPER(c) ASCII_TO_UPPER(c) #define TO_UPPER(c) towupper(c)
#define TO_LOWER(c) ASCII_TO_LOWER(c) #define TO_LOWER(c) towlower(c)
#else #else
#if HAVE_UPPER_LOWER
#define IS_UPPER(c) isupper((unsigned char) (c)) #define IS_UPPER(c) isupper((unsigned char) (c))
#define IS_LOWER(c) islower((unsigned char) (c)) #define IS_LOWER(c) islower((unsigned char) (c))
#define TO_UPPER(c) toupper((unsigned char) (c)) #define TO_UPPER(c) toupper((unsigned char) (c))
#define TO_LOWER(c) tolower((unsigned char) (c)) #define TO_LOWER(c) tolower((unsigned char) (c))
#else
#define IS_UPPER(c) ASCII_IS_UPPER(c)
#define IS_LOWER(c) ASCII_IS_LOWER(c)
#define TO_UPPER(c) ASCII_TO_UPPER(c)
#define TO_LOWER(c) ASCII_TO_LOWER(c)
#endif
#endif #endif
#ifdef isspace #ifdef isspace
@ -150,6 +161,8 @@ void free();
#define IS_DIGIT(c) ((c) >= '0' && (c) <= '9') #define IS_DIGIT(c) ((c) >= '0' && (c) <= '9')
#endif #endif
#define IS_CSI_START(c) (((LWCHAR)(c)) == ESC || (((LWCHAR)(c)) == CSI))
#ifndef NULL #ifndef NULL
#define NULL 0 #define NULL 0
#endif #endif
@ -186,6 +199,13 @@ void free();
#define BAD_LSEEK ((off_t)-1) #define BAD_LSEEK ((off_t)-1)
#ifndef SEEK_SET
#define SEEK_SET 0
#endif
#ifndef SEEK_END
#define SEEK_END 2
#endif
#ifndef CHAR_BIT #ifndef CHAR_BIT
#define CHAR_BIT 8 #define CHAR_BIT 8
#endif #endif
@ -297,6 +317,10 @@ struct textlist
#define READ_INTR (-2) #define READ_INTR (-2)
/* A fraction is represented by an int n; the fraction is n/NUM_FRAC_DENOM */
#define NUM_FRAC_DENOM 1000000
#define NUM_LOG_FRAC_DENOM 6
/* How quiet should we be? */ /* How quiet should we be? */
#define NOT_QUIET 0 /* Ring bell at eof and for errors */ #define NOT_QUIET 0 /* Ring bell at eof and for errors */
#define LITTLE_QUIET 1 /* Ring bell only for errors */ #define LITTLE_QUIET 1 /* Ring bell only for errors */
@ -313,14 +337,16 @@ struct textlist
#define BS_CONTROL 2 /* \b treated as control char; prints as ^H */ #define BS_CONTROL 2 /* \b treated as control char; prints as ^H */
/* How should we search? */ /* How should we search? */
#define SRCH_FORW (1 << 0) /* Search forward from current position */ #define SRCH_FORW (1 << 0) /* Search forward from current position */
#define SRCH_BACK (1 << 1) /* Search backward from current position */ #define SRCH_BACK (1 << 1) /* Search backward from current position */
#define SRCH_NO_MOVE (1 << 2) /* Highlight, but don't move */ #define SRCH_NO_MOVE (1 << 2) /* Highlight, but don't move */
#define SRCH_FIND_ALL (1 << 4) /* Find and highlight all matches */ #define SRCH_FIND_ALL (1 << 4) /* Find and highlight all matches */
#define SRCH_NO_MATCH (1 << 8) /* Search for non-matching lines */ #define SRCH_NO_MATCH (1 << 8) /* Search for non-matching lines */
#define SRCH_PAST_EOF (1 << 9) /* Search past end-of-file, into next file */ #define SRCH_PAST_EOF (1 << 9) /* Search past end-of-file, into next file */
#define SRCH_FIRST_FILE (1 << 10) /* Search starting at the first file */ #define SRCH_FIRST_FILE (1 << 10) /* Search starting at the first file */
#define SRCH_NO_REGEX (1 << 12) /* Don't use regular expressions */ #define SRCH_NO_REGEX (1 << 12) /* Don't use regular expressions */
#define SRCH_FILTER (1 << 13) /* Search is for '&' (filter) command */
#define SRCH_AFTER_TARGET (1 << 14) /* Start search after the target line */
#define SRCH_REVERSE(t) (((t) & SRCH_FORW) ? \ #define SRCH_REVERSE(t) (((t) & SRCH_FORW) ? \
(((t) & ~SRCH_FORW) | SRCH_BACK) : \ (((t) & ~SRCH_FORW) | SRCH_BACK) : \
@ -421,6 +447,7 @@ struct textlist
#endif /* IS_EBCDIC_HOST */ #endif /* IS_EBCDIC_HOST */
#define ESC CONTROL('[') #define ESC CONTROL('[')
#define CSI ((unsigned char)'\233')
#if _OSK_MWC32 #if _OSK_MWC32
#define LSIGNAL(sig,func) os9_signal(sig,func) #define LSIGNAL(sig,func) os9_signal(sig,func)
@ -449,8 +476,12 @@ struct textlist
#define QUIT_OK 0 #define QUIT_OK 0
#define QUIT_ERROR 1 #define QUIT_ERROR 1
#define QUIT_INTERRUPT 2
#define QUIT_SAVED_STATUS (-1) #define QUIT_SAVED_STATUS (-1)
#define FOLLOW_DESC 0
#define FOLLOW_NAME 1
/* filestate flags */ /* filestate flags */
#define CH_CANSEEK 001 #define CH_CANSEEK 001
#define CH_KEEPOPEN 002 #define CH_KEEPOPEN 002
@ -461,6 +492,12 @@ struct textlist
#define FAKE_HELPFILE "@/\\less/\\help/\\file/\\@" #define FAKE_HELPFILE "@/\\less/\\help/\\file/\\@"
/* Flags for cvt_text */
#define CVT_TO_LC 01 /* Convert upper-case to lower-case */
#define CVT_BS 02 /* Do backspace processing */
#define CVT_CRLF 04 /* Remove CR after LF */
#define CVT_ANSI 010 /* Remove ANSI escape sequences */
#include "funcs.h" #include "funcs.h"
/* Functions not included in funcs.h */ /* Functions not included in funcs.h */

231
external/bsd/less/dist/less.hlp vendored Normal file
View file

@ -0,0 +1,231 @@
SSUUMMMMAARRYY OOFF LLEESSSS CCOOMMMMAANNDDSS
Commands marked with * may be preceded by a number, _N.
Notes in parentheses indicate the behavior if _N is given.
h H Display this help.
q :q Q :Q ZZ Exit.
---------------------------------------------------------------------------
MMOOVVIINNGG
e ^E j ^N CR * Forward one line (or _N lines).
y ^Y k ^K ^P * Backward one line (or _N lines).
f ^F ^V SPACE * Forward one window (or _N lines).
b ^B ESC-v * Backward one window (or _N lines).
z * Forward one window (and set window to _N).
w * Backward one window (and set window to _N).
ESC-SPACE * Forward one window, but don't stop at end-of-file.
d ^D * Forward one half-window (and set half-window to _N).
u ^U * Backward one half-window (and set half-window to _N).
ESC-) RightArrow * Left one half screen width (or _N positions).
ESC-( LeftArrow * Right one half screen width (or _N positions).
F Forward forever; like "tail -f".
r ^R ^L Repaint screen.
R Repaint screen, discarding buffered input.
---------------------------------------------------
Default "window" is the screen height.
Default "half-window" is half of the screen height.
---------------------------------------------------------------------------
SSEEAARRCCHHIINNGG
/_p_a_t_t_e_r_n * Search forward for (_N-th) matching line.
?_p_a_t_t_e_r_n * Search backward for (_N-th) matching line.
n * Repeat previous search (for _N-th occurrence).
N * Repeat previous search in reverse direction.
ESC-n * Repeat previous search, spanning files.
ESC-N * Repeat previous search, reverse dir. & spanning files.
ESC-u Undo (toggle) search highlighting.
&_p_a_t_t_e_r_n * Display only matching lines
---------------------------------------------------
Search patterns may be modified 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 ?).
^K Highlight matches, but don't move (KEEP position).
^R Don't use REGULAR EXPRESSIONS.
---------------------------------------------------------------------------
JJUUMMPPIINNGG
g < ESC-< * Go to first line in file (or line _N).
G > ESC-> * Go to last line in file (or line _N).
p % * Go to beginning of file (or _N percent into file).
t * Go to the (_N-th) next tag.
T * Go to the (_N-th) previous tag.
{ ( [ * Find close bracket } ) ].
} ) ] * Find open bracket { ( [.
ESC-^F _<_c_1_> _<_c_2_> * Find close bracket _<_c_2_>.
ESC-^B _<_c_1_> _<_c_2_> * Find open bracket _<_c_1_>
---------------------------------------------------
Each "find close bracket" command goes forward to the close bracket
matching the (_N-th) open bracket in the top line.
Each "find open bracket" command goes backward to the open bracket
matching the (_N-th) close bracket in the bottom line.
m_<_l_e_t_t_e_r_> Mark the current position with <letter>.
'_<_l_e_t_t_e_r_> Go to a previously marked position.
'' Go to the previous position.
^X^X Same as '.
---------------------------------------------------
A mark is any upper-case or lower-case letter.
Certain marks are predefined:
^ means beginning of the file
$ means end of the file
---------------------------------------------------------------------------
CCHHAANNGGIINNGG FFIILLEESS
:e [_f_i_l_e] Examine a new file.
^X^V Same as :e.
:n * Examine the (_N-th) next file from the command line.
:p * Examine the (_N-th) previous file from the command line.
:x * Examine the first (or _N-th) file from the command line.
:d Delete the current file from the command line list.
= ^G :f Print current file name.
---------------------------------------------------------------------------
MMIISSCCEELLLLAANNEEOOUUSS CCOOMMMMAANNDDSS
-_<_f_l_a_g_> Toggle a command line option [see OPTIONS below].
--_<_n_a_m_e_> Toggle a command line option, by name.
__<_f_l_a_g_> Display the setting of a command line option.
___<_n_a_m_e_> Display the setting of an option, by name.
+_c_m_d Execute the less cmd each time a new file is examined.
!_c_o_m_m_a_n_d Execute the shell command with $SHELL.
|XX_c_o_m_m_a_n_d Pipe file between current pos & mark XX to shell command.
v Edit the current file with $VISUAL or $EDITOR.
V Print version number of "less".
---------------------------------------------------------------------------
OOPPTTIIOONNSS
Most options may be changed either on the command line,
or from within less by using the - or -- command.
Options may be given in one of two forms: either a single
character preceded by a -, or a name preceeded by --.
-? ........ --help
Display help (from command line).
-a ........ --search-skip-screen
Forward search skips current screen.
-A ........ --SEARCH-SKIP-SCREEN
Forward search always skips target line.
-b [_N] .... --buffers=[_N]
Number of buffers.
-B ........ --auto-buffers
Don't automatically allocate buffers for pipes.
-c ........ --clear-screen
Repaint by clearing rather than scrolling.
-d ........ --dumb
Dumb terminal.
-D [_x_n_._n] . --color=_x_n_._n
Set screen colors. (MS-DOS only)
-e -E .... --quit-at-eof --QUIT-AT-EOF
Quit at end of file.
-f ........ --force
Force open non-regular files.
-F ........ --quit-if-one-screen
Quit if entire file fits on first screen.
-g ........ --hilite-search
Highlight only last match for searches.
-G ........ --HILITE-SEARCH
Don't highlight any matches for searches.
-h [_N] .... --max-back-scroll=[_N]
Backward scroll limit.
-i ........ --ignore-case
Ignore case in searches that do not contain uppercase.
-I ........ --IGNORE-CASE
Ignore case in all searches.
-j [_N] .... --jump-target=[_N]
Screen position of target lines.
-J ........ --status-column
Display a status column at left edge of screen.
-k [_f_i_l_e] . --lesskey-file=[_f_i_l_e]
Use a lesskey file.
-K --quit-on-intr
Exit less in response to ctrl-C.
-L ........ --no-lessopen
Ignore the LESSOPEN environment variable.
-m -M .... --long-prompt --LONG-PROMPT
Set prompt style.
-n -N .... --line-numbers --LINE-NUMBERS
Don't use line numbers.
-o [_f_i_l_e] . --log-file=[_f_i_l_e]
Copy to log file (standard input only).
-O [_f_i_l_e] . --LOG-FILE=[_f_i_l_e]
Copy to log file (unconditionally overwrite).
-p [_p_a_t_t_e_r_n] --pattern=[_p_a_t_t_e_r_n]
Start at pattern (from command line).
-P [_p_r_o_m_p_t] --prompt=[_p_r_o_m_p_t]
Define new prompt.
-q -Q .... --quiet --QUIET --silent --SILENT
Quiet the terminal bell.
-r -R .... --raw-control-chars --RAW-CONTROL-CHARS
Output "raw" control characters.
-s ........ --squeeze-blank-lines
Squeeze multiple blank lines.
-S ........ --chop-long-lines
Chop long lines.
-t [_t_a_g] .. --tag=[_t_a_g]
Find a tag.
-T [_t_a_g_s_f_i_l_e] --tag-file=[_t_a_g_s_f_i_l_e]
Use an alternate tags file.
-u -U .... --underline-special --UNDERLINE-SPECIAL
Change handling of backspaces.
-V ........ --version
Display the version number of "less".
-w ........ --hilite-unread
Highlight first new line after forward-screen.
-W ........ --HILITE-UNREAD
Highlight first new line after any forward movement.
-x [_N[,...]] --tabs=[_N[,...]]
Set tab stops.
-X ........ --no-init
Don't use termcap init/deinit strings.
--no-keypad
Don't use termcap keypad init/deinit strings.
-y [_N] .... --max-forw-scroll=[_N]
Forward scroll limit.
-z [_N] .... --window=[_N]
Set size of window.
-" [_c[_c]] . --quotes=[_c[_c]]
Set shell quote characters.
-~ ........ --tilde
Don't display tildes after end of file.
-# [_N] .... --shift=[_N]
Horizontal scroll amount (0 = one half screen width)
........ --no-keypad
Don't send keypad init/deinit sequence.
........ --follow-name
The F command changes files if the input file is renamed.
---------------------------------------------------------------------------
LLIINNEE EEDDIITTIINNGG
These keys can be used to edit text being entered
on the "command line" at the bottom of the screen.
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.
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.
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.

47
external/bsd/less/dist/lessecho.1 vendored Normal file
View file

@ -0,0 +1,47 @@
.TH LESSECHO 1 "Version 444: 09 Jun 2011"
.SH NAME
lessecho \- expand metacharacters
.SH SYNOPSIS
.B lessecho
.I "[-ox] [-cx] [-pn] [-dn] [-mx] [-nn] [-ex] [-a] file ..."
.SH "DESCRIPTION"
.I lessecho
is a program that simply echos its arguments on standard output.
But any argument containing spaces is enclosed in quotes.
.SH OPTIONS
A summary of options is included below.
.TP
.B \-ox
Specifies "x" to be the open quote character.
.TP
.B \-cx
Specifies "x" to be the close quote character.
.TP
.B \-pn
Specifies "n" to be the open quote character, as an integer.
.TP
.B \-dn
Specifies "n" to be the close quote character, as an integer.
.TP
.B \-mx
Specifies "x" to be a metachar.
.TP
.B \-nn
Specifies "n" to be a metachar, as an integer.
.TP
.B \-ex
Specifies "x" to be the escape char for metachars.
.TP
.B \-fn
Specifies "n" to be the escape char for metachars, as an integer.
.TP
.B \-a
Specifies that all arguments are to be quoted.
The default is that only arguments containing spaces are quoted.
.SH "SEE ALSO"
less(1)
.SH AUTHOR
This manual page was written by Thomas Schoepf <schoepf@debian.org>,
for the Debian GNU/Linux system (but may be used by others).
.PP
Send bug reports or comments to bug-less@gnu.org.

View file

@ -1,7 +1,7 @@
/* $NetBSD: lessecho.c,v 1.6 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: lessecho.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -30,7 +30,7 @@
#include "less.h" #include "less.h"
static char *version = "$Revision: 1.6 $"; static char *version = "$Revision: 1.3 $";
static int quote_all = 0; static int quote_all = 0;
static char openquote = '"'; static char openquote = '"';

View file

@ -1,6 +1,4 @@
.\" $NetBSD: lesskey.1,v 1.9 2006/10/26 01:33:08 mrg Exp $ .TH LESSKEY 1 "Version 444: 09 Jun 2011"
.\"
.TH LESSKEY 1 "Version 394: 03 Dec 2005"
.SH NAME .SH NAME
lesskey \- specify key bindings for less lesskey \- specify key bindings for less
.SH SYNOPSIS .SH SYNOPSIS
@ -15,7 +13,7 @@ lesskey \- specify key bindings for less
.I Lesskey .I Lesskey
is used to specify a set of key bindings to be used by is used to specify a set of key bindings to be used by
.I less. .I less.
The input file is a text file which describes the key bindings, The input file is a text file which describes the key bindings.
If the input file is "-", standard input is read. If the input file is "-", standard input is read.
If no input file is specified, a standard filename is used If no input file is specified, a standard filename is used
as the name of the input file, which depends on the system being used: as the name of the input file, which depends on the system being used:
@ -66,7 +64,7 @@ If the command section is the first section in the file,
this line may be omitted. this line may be omitted.
The command section consists of lines of the form: The command section consists of lines of the form:
.sp .sp
\fIstring\fP \*[Lt]whitespace\*[Gt] \fIaction\fP [extra-string] \*[Lt]newline\*[Gt] \fIstring\fP <whitespace> \fIaction\fP [extra-string] <newline>
.sp .sp
Whitespace is any sequence of one or more spaces and/or tabs. Whitespace is any sequence of one or more spaces and/or tabs.
The \fIstring\fP is the command key(s) which invoke the action. The \fIstring\fP is the command key(s) which invoke the action.
@ -171,8 +169,8 @@ default command keys used by less:
\eeu undo-hilite \eeu undo-hilite
g goto-line g goto-line
\ekh goto-line \ekh goto-line
\*[Lt] goto-line < goto-line
\ee\*[Lt] goto-line \ee< goto-line
p percent p percent
% percent % percent
\ee[ left-scroll \ee[ left-scroll
@ -188,8 +186,8 @@ default command keys used by less:
\ee^F forw-bracket \ee^F forw-bracket
\ee^B back-bracket \ee^B back-bracket
G goto-end G goto-end
\ee\*[Gt] goto-end \ee> goto-end
\*[Gt] goto-end > goto-end
\eke goto-end \eke goto-end
= status = status
^G status ^G status
@ -202,6 +200,7 @@ default command keys used by less:
\een repeat-search-all \een repeat-search-all
N reverse-search N reverse-search
\eeN reverse-search-all \eeN reverse-search-all
& filter
m set-mark m set-mark
' goto-mark ' goto-mark
^X^X goto-mark ^X^X goto-mark
@ -312,6 +311,7 @@ default line-editing keys used by less:
\eek up \eek up
\eku up \eku up
\eej down \eej down
^G abort
.fi .fi
.sp .sp
@ -350,17 +350,12 @@ is run, and specifies the character set to be "latin1":
less(1) less(1)
.SH WARNINGS .SH WARNINGS
It is not possible to specify special keys, such as uparrow,
in a keyboard-independent manner.
The only way to specify such keys is to specify the escape sequence
which a particular keyboard sends when such a key is pressed.
.PP
On MS-DOS and OS/2 systems, certain keys send a sequence of characters On MS-DOS and OS/2 systems, certain keys send a sequence of characters
which start with a NUL character (0). which start with a NUL character (0).
This NUL character should be represented as \e340 in a lesskey file. This NUL character should be represented as \e340 in a lesskey file.
.SH COPYRIGHT .SH COPYRIGHT
Copyright (C) 2004 Mark Nudelman Copyright (C) 2000-2011 Mark Nudelman
.PP .PP
lesskey is part of the GNU project and is free software; lesskey is part of the GNU project and is free software;
you can redistribute it and/or modify it you can redistribute it and/or modify it
@ -380,7 +375,7 @@ Suite 330, Boston, MA 02111-1307, USA.
.SH AUTHOR .SH AUTHOR
.PP .PP
Mark Nudelman \*[Lt]markn@greenwoodsoftware.com\*[Gt] Mark Nudelman <markn@greenwoodsoftware.com>
.br .br
Send bug reports or comments to the above address or to bug-less@gnu.org. Send bug reports or comments to the above address or to bug-less@gnu.org.

View file

@ -1,7 +1,7 @@
/* $NetBSD: lesskey.c,v 1.9 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: lesskey.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -95,63 +95,64 @@ struct cmdname
struct cmdname cmdnames[] = struct cmdname cmdnames[] =
{ {
{ "back-bracket", A_B_BRACKET }, { "back-bracket", A_B_BRACKET },
{ "back-line", A_B_LINE }, { "back-line", A_B_LINE },
{ "back-line-force", A_BF_LINE }, { "back-line-force", A_BF_LINE },
{ "back-screen", A_B_SCREEN }, { "back-screen", A_B_SCREEN },
{ "back-scroll", A_B_SCROLL }, { "back-scroll", A_B_SCROLL },
{ "back-search", A_B_SEARCH }, { "back-search", A_B_SEARCH },
{ "back-window", A_B_WINDOW }, { "back-window", A_B_WINDOW },
{ "debug", A_DEBUG }, { "debug", A_DEBUG },
{ "digit", A_DIGIT }, { "digit", A_DIGIT },
{ "display-flag", A_DISP_OPTION }, { "display-flag", A_DISP_OPTION },
{ "display-option", A_DISP_OPTION }, { "display-option", A_DISP_OPTION },
{ "end", A_GOEND }, { "end", A_GOEND },
{ "examine", A_EXAMINE }, { "examine", A_EXAMINE },
{ "first-cmd", A_FIRSTCMD }, { "filter", A_FILTER },
{ "firstcmd", A_FIRSTCMD }, { "first-cmd", A_FIRSTCMD },
{ "flush-repaint", A_FREPAINT }, { "firstcmd", A_FIRSTCMD },
{ "forw-bracket", A_F_BRACKET }, { "flush-repaint", A_FREPAINT },
{ "forw-forever", A_F_FOREVER }, { "forw-bracket", A_F_BRACKET },
{ "forw-line", A_F_LINE }, { "forw-forever", A_F_FOREVER },
{ "forw-line-force", A_FF_LINE }, { "forw-line", A_F_LINE },
{ "forw-screen", A_F_SCREEN }, { "forw-line-force", A_FF_LINE },
{ "forw-screen-force", A_FF_SCREEN }, { "forw-screen", A_F_SCREEN },
{ "forw-scroll", A_F_SCROLL }, { "forw-screen-force", A_FF_SCREEN },
{ "forw-search", A_F_SEARCH }, { "forw-scroll", A_F_SCROLL },
{ "forw-window", A_F_WINDOW }, { "forw-search", A_F_SEARCH },
{ "goto-end", A_GOEND }, { "forw-window", A_F_WINDOW },
{ "goto-line", A_GOLINE }, { "goto-end", A_GOEND },
{ "goto-mark", A_GOMARK }, { "goto-line", A_GOLINE },
{ "help", A_HELP }, { "goto-mark", A_GOMARK },
{ "index-file", A_INDEX_FILE }, { "help", A_HELP },
{ "invalid", A_UINVALID }, { "index-file", A_INDEX_FILE },
{ "left-scroll", A_LSHIFT }, { "invalid", A_UINVALID },
{ "next-file", A_NEXT_FILE }, { "left-scroll", A_LSHIFT },
{ "next-tag", A_NEXT_TAG }, { "next-file", A_NEXT_FILE },
{ "noaction", A_NOACTION }, { "next-tag", A_NEXT_TAG },
{ "percent", A_PERCENT }, { "noaction", A_NOACTION },
{ "pipe", A_PIPE }, { "percent", A_PERCENT },
{ "prev-file", A_PREV_FILE }, { "pipe", A_PIPE },
{ "prev-tag", A_PREV_TAG }, { "prev-file", A_PREV_FILE },
{ "quit", A_QUIT }, { "prev-tag", A_PREV_TAG },
{ "remove-file", A_REMOVE_FILE }, { "quit", A_QUIT },
{ "repaint", A_REPAINT }, { "remove-file", A_REMOVE_FILE },
{ "repaint-flush", A_FREPAINT }, { "repaint", A_REPAINT },
{ "repeat-search", A_AGAIN_SEARCH }, { "repaint-flush", A_FREPAINT },
{ "repeat-search-all", A_T_AGAIN_SEARCH }, { "repeat-search", A_AGAIN_SEARCH },
{ "reverse-search", A_REVERSE_SEARCH }, { "repeat-search-all", A_T_AGAIN_SEARCH },
{ "reverse-search-all", A_T_REVERSE_SEARCH }, { "reverse-search", A_REVERSE_SEARCH },
{ "right-scroll", A_RSHIFT }, { "reverse-search-all", A_T_REVERSE_SEARCH },
{ "set-mark", A_SETMARK }, { "right-scroll", A_RSHIFT },
{ "shell", A_SHELL }, { "set-mark", A_SETMARK },
{ "status", A_STAT }, { "shell", A_SHELL },
{ "toggle-flag", A_OPT_TOGGLE }, { "status", A_STAT },
{ "toggle-option", A_OPT_TOGGLE }, { "toggle-flag", A_OPT_TOGGLE },
{ "undo-hilite", A_UNDO_SEARCH }, { "toggle-option", A_OPT_TOGGLE },
{ "version", A_VERSION }, { "undo-hilite", A_UNDO_SEARCH },
{ "visual", A_VISUAL }, { "version", A_VERSION },
{ NULL, 0 } { "visual", A_VISUAL },
{ NULL, 0 }
}; };
struct cmdname editnames[] = struct cmdname editnames[] =
@ -167,6 +168,7 @@ struct cmdname editnames[] =
{ "insert", EC_INSERT }, { "insert", EC_INSERT },
{ "invalid", EC_UINVALID }, { "invalid", EC_UINVALID },
{ "kill-line", EC_LINEKILL }, { "kill-line", EC_LINEKILL },
{ "abort", EC_ABORT },
{ "left", EC_LEFT }, { "left", EC_LEFT },
{ "literal", EC_LITERAL }, { "literal", EC_LITERAL },
{ "right", EC_RIGHT }, { "right", EC_RIGHT },
@ -543,7 +545,7 @@ add_cmd_str(s)
control_line(s) control_line(s)
char *s; char *s;
{ {
#define PREFIX(str,pat) (strncmp(str,pat,strlen(pat)-1) == 0) #define PREFIX(str,pat) (strncmp(str,pat,strlen(pat)) == 0)
if (PREFIX(s, "#line-edit")) if (PREFIX(s, "#line-edit"))
{ {

View file

@ -1,5 +1,7 @@
/* $NetBSD: lesskey.h,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.

View file

@ -1,5 +1,7 @@
/* $NetBSD: lglob.h,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.

View file

@ -1,7 +1,7 @@
/* $NetBSD: line.c,v 1.11 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: line.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -37,7 +37,6 @@ static int overstrike; /* Next char should overstrike previous char */
static int last_overstrike = AT_NORMAL; static int last_overstrike = AT_NORMAL;
static int is_null_line; /* There is no current line */ static int is_null_line; /* There is no current line */
static int lmargin; /* Left margin */ static int lmargin; /* Left margin */
static int line_matches; /* Number of search matches in this line */
static char pendc; static char pendc;
static POSITION pendpos; static POSITION pendpos;
static char *end_ansi_chars; static char *end_ansi_chars;
@ -162,9 +161,6 @@ prewind()
lmargin = 0; lmargin = 0;
if (status_col) if (status_col)
lmargin += 1; lmargin += 1;
#if HILITE_SEARCH
line_matches = 0;
#endif
} }
/* /*
@ -268,7 +264,7 @@ pshift(shift)
while (shifted <= shift && from < curr) while (shifted <= shift && from < curr)
{ {
c = linebuf[from]; c = linebuf[from];
if (c == ESC && ctldisp == OPT_ONPLUS) if (ctldisp == OPT_ONPLUS && IS_CSI_START(c))
{ {
/* Keep cumulative effect. */ /* Keep cumulative effect. */
linebuf[to] = c; linebuf[to] = c;
@ -523,7 +519,7 @@ in_ansi_esc_seq()
for (p = &linebuf[curr]; p > linebuf; ) for (p = &linebuf[curr]; p > linebuf; )
{ {
LWCHAR ch = step_char(&p, -1, linebuf); LWCHAR ch = step_char(&p, -1, linebuf);
if (ch == ESC) if (IS_CSI_START(ch))
return (1); return (1);
if (!is_ansi_middle(ch)) if (!is_ansi_middle(ch))
return (0); return (0);
@ -592,7 +588,6 @@ store_char(ch, a, rep, pos)
if (a != AT_ANSI) if (a != AT_ANSI)
a |= AT_HILITE; a |= AT_HILITE;
} }
line_matches += matches;
} }
#endif #endif
@ -600,15 +595,18 @@ store_char(ch, a, rep, pos)
{ {
if (!is_ansi_end(ch) && !is_ansi_middle(ch)) { if (!is_ansi_end(ch) && !is_ansi_middle(ch)) {
/* Remove whole unrecognized sequence. */ /* Remove whole unrecognized sequence. */
char *p = &linebuf[curr];
LWCHAR bch;
do { do {
--curr; bch = step_char(&p, -1, linebuf);
} while (linebuf[curr] != ESC); } while (p > linebuf && !IS_CSI_START(bch));
curr = p - linebuf;
return 0; return 0;
} }
a = AT_ANSI; /* Will force re-AT_'ing around it. */ a = AT_ANSI; /* Will force re-AT_'ing around it. */
w = 0; w = 0;
} }
else if (ctldisp == OPT_ONPLUS && ch == ESC) else if (ctldisp == OPT_ONPLUS && IS_CSI_START(ch))
{ {
a = AT_ANSI; /* Will force re-AT_'ing around it. */ a = AT_ANSI; /* Will force re-AT_'ing around it. */
w = 0; w = 0;
@ -942,7 +940,7 @@ do_append(ch, rep, pos)
} else if ((!utf_mode || is_ascii_char(ch)) && control_char((char)ch)) } else if ((!utf_mode || is_ascii_char(ch)) && control_char((char)ch))
{ {
do_control_char: do_control_char:
if (ctldisp == OPT_ON || (ctldisp == OPT_ONPLUS && ch == ESC)) if (ctldisp == OPT_ON || (ctldisp == OPT_ONPLUS && IS_CSI_START(ch)))
{ {
/* /*
* Output as a normal character. * Output as a normal character.
@ -992,8 +990,9 @@ pflushmbc()
* Terminate the line in the line buffer. * Terminate the line in the line buffer.
*/ */
public void public void
pdone(endline) pdone(endline, forw)
int endline; int endline;
int forw;
{ {
(void) pflushmbc(); (void) pflushmbc();
@ -1025,23 +1024,56 @@ pdone(endline)
/* /*
* Add a newline if necessary, * Add a newline if necessary,
* and append a '\0' to the end of the line. * and append a '\0' to the end of the line.
* We output a newline if we're not at the right edge of the screen,
* or if the terminal doesn't auto wrap,
* or if this is really the end of the line AND the terminal ignores
* a newline at the right edge.
* (In the last case we don't want to output a newline if the terminal
* doesn't ignore it since that would produce an extra blank line.
* But we do want to output a newline if the terminal ignores it in case
* the next line is blank. In that case the single newline output for
* that blank line would be ignored!)
*/ */
if (column < sc_width || !auto_wrap || ignaw || ctldisp == OPT_ON) if (column < sc_width || !auto_wrap || (endline && ignaw) || ctldisp == OPT_ON)
{ {
linebuf[curr] = '\n'; linebuf[curr] = '\n';
attr[curr] = AT_NORMAL; attr[curr] = AT_NORMAL;
curr++; curr++;
} }
else if (ignaw && column >= sc_width && forw)
{
/*
* Terminals with "ignaw" don't wrap until they *really* need
* to, i.e. when the character *after* the last one to fit on a
* line is output. But they are too hard to deal with when they
* get in the state where a full screen width of characters
* have been output but the cursor is sitting on the right edge
* instead of at the start of the next line.
* So we nudge them into wrapping by outputting a space
* character plus a backspace. But do this only if moving
* forward; if we're moving backward and drawing this line at
* the top of the screen, the space would overwrite the first
* char on the next line. We don't need to do this "nudge"
* at the top of the screen anyway.
*/
linebuf[curr] = ' ';
attr[curr++] = AT_NORMAL;
linebuf[curr] = '\b';
attr[curr++] = AT_NORMAL;
}
linebuf[curr] = '\0'; linebuf[curr] = '\0';
attr[curr] = AT_NORMAL; attr[curr] = AT_NORMAL;
}
#if HILITE_SEARCH /*
if (status_col && line_matches > 0) *
{ */
linebuf[0] = '*'; public void
attr[0] = AT_NORMAL|AT_HILITE; set_status_col(c)
} char c;
#endif {
linebuf[0] = c;
attr[0] = AT_NORMAL|AT_HILITE;
} }
/* /*
@ -1094,9 +1126,10 @@ null_line()
* {{ This is supposed to be more efficient than forw_line(). }} * {{ This is supposed to be more efficient than forw_line(). }}
*/ */
public POSITION public POSITION
forw_raw_line(curr_pos, linep) forw_raw_line(curr_pos, linep, line_lenp)
POSITION curr_pos; POSITION curr_pos;
char **linep; char **linep;
int *line_lenp;
{ {
register int n; register int n;
register int c; register int c;
@ -1132,6 +1165,8 @@ forw_raw_line(curr_pos, linep)
linebuf[n] = '\0'; linebuf[n] = '\0';
if (linep != NULL) if (linep != NULL)
*linep = linebuf; *linep = linebuf;
if (line_lenp != NULL)
*line_lenp = n;
return (new_pos); return (new_pos);
} }
@ -1140,9 +1175,10 @@ forw_raw_line(curr_pos, linep)
* {{ This is supposed to be more efficient than back_line(). }} * {{ This is supposed to be more efficient than back_line(). }}
*/ */
public POSITION public POSITION
back_raw_line(curr_pos, linep) back_raw_line(curr_pos, linep, line_lenp)
POSITION curr_pos; POSITION curr_pos;
char **linep; char **linep;
int *line_lenp;
{ {
register int n; register int n;
register int c; register int c;
@ -1203,5 +1239,7 @@ back_raw_line(curr_pos, linep)
} }
if (linep != NULL) if (linep != NULL)
*linep = &linebuf[n]; *linep = &linebuf[n];
if (line_lenp != NULL)
*line_lenp = size_linebuf - 1 - n;
return (new_pos); return (new_pos);
} }

View file

@ -1,7 +1,7 @@
/* $NetBSD: linenum.c,v 1.8 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: linenum.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -58,12 +58,10 @@ struct linenum_info
* when we have a new one to insert and the table is full. * when we have a new one to insert and the table is full.
*/ */
#define NPOOL 50 /* Size of line number pool */ #define NPOOL 200 /* Size of line number pool */
#define LONGTIME (2) /* In seconds */ #define LONGTIME (2) /* In seconds */
public int lnloop = 0; /* Are we in the line num loop? */
static struct linenum_info anchor; /* Anchor of the list */ static struct linenum_info anchor; /* Anchor of the list */
static struct linenum_info *freelist; /* Anchor of the unused entries */ static struct linenum_info *freelist; /* Anchor of the unused entries */
static struct linenum_info pool[NPOOL]; /* The pool itself */ static struct linenum_info pool[NPOOL]; /* The pool itself */
@ -72,6 +70,7 @@ static struct linenum_info *spare; /* We always keep one spare entry */
extern int linenums; extern int linenums;
extern int sigs; extern int sigs;
extern int sc_height; extern int sc_height;
extern int screen_trashed;
static void calcgap __P((struct linenum_info *)); static void calcgap __P((struct linenum_info *));
static void longloopmessage __P((void)); static void longloopmessage __P((void));
@ -220,12 +219,6 @@ add_lnum(linenum, pos)
longloopmessage() longloopmessage()
{ {
ierror("Calculating line numbers", NULL_PARG); ierror("Calculating line numbers", NULL_PARG);
/*
* Set the lnloop flag here, so if the user interrupts while
* we are calculating line numbers, the signal handler will
* turn off line numbers (linenums=0).
*/
lnloop = 1;
} }
static int loopcount; static int loopcount;
@ -255,6 +248,22 @@ longish()
#endif #endif
} }
/*
* Turn off line numbers because the user has interrupted
* a lengthy line number calculation.
*/
static void
abort_long()
{
if (linenums == OPT_ONPLUS)
/*
* We were displaying line numbers, so need to repaint.
*/
screen_trashed = 1;
linenums = 0;
error("Line numbers turned off", NULL_PARG);
}
/* /*
* Find the line number associated with a given position. * Find the line number associated with a given position.
* Return 0 if we can't figure it out. * Return 0 if we can't figure it out.
@ -320,12 +329,15 @@ find_linenum(pos)
/* /*
* Allow a signal to abort this loop. * Allow a signal to abort this loop.
*/ */
cpos = forw_raw_line(cpos, (char **)NULL); cpos = forw_raw_line(cpos, (char **)NULL, (int *)NULL);
if (ABORT_SIGS() || cpos == NULL_POSITION) if (ABORT_SIGS()) {
abort_long();
return (0);
}
if (cpos == NULL_POSITION)
return (0); return (0);
longish(); longish();
} }
lnloop = 0;
/* /*
* We might as well cache it. * We might as well cache it.
*/ */
@ -349,12 +361,15 @@ find_linenum(pos)
/* /*
* Allow a signal to abort this loop. * Allow a signal to abort this loop.
*/ */
cpos = back_raw_line(cpos, (char **)NULL); cpos = back_raw_line(cpos, (char **)NULL, (int *)NULL);
if (ABORT_SIGS() || cpos == NULL_POSITION) if (ABORT_SIGS()) {
abort_long();
return (0);
}
if (cpos == NULL_POSITION)
return (0); return (0);
longish(); longish();
} }
lnloop = 0;
/* /*
* We might as well cache it. * We might as well cache it.
*/ */
@ -404,8 +419,10 @@ find_pos(linenum)
/* /*
* Allow a signal to abort this loop. * Allow a signal to abort this loop.
*/ */
cpos = forw_raw_line(cpos, (char **)NULL); cpos = forw_raw_line(cpos, (char **)NULL, (int *)NULL);
if (ABORT_SIGS() || cpos == NULL_POSITION) if (ABORT_SIGS())
return (NULL_POSITION);
if (cpos == NULL_POSITION)
return (NULL_POSITION); return (NULL_POSITION);
} }
} else } else
@ -420,8 +437,10 @@ find_pos(linenum)
/* /*
* Allow a signal to abort this loop. * Allow a signal to abort this loop.
*/ */
cpos = back_raw_line(cpos, (char **)NULL); cpos = back_raw_line(cpos, (char **)NULL, (int *)NULL);
if (ABORT_SIGS() || cpos == NULL_POSITION) if (ABORT_SIGS())
return (NULL_POSITION);
if (cpos == NULL_POSITION)
return (NULL_POSITION); return (NULL_POSITION);
} }
} }

View file

@ -1,7 +1,7 @@
/* $NetBSD: lsystem.c,v 1.8 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: lsystem.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -51,7 +51,7 @@ lsystem(cmd, donemsg)
register char *p; register char *p;
#endif #endif
IFILE save_ifile; IFILE save_ifile;
#if MSDOS_COMPILER #if MSDOS_COMPILER && MSDOS_COMPILER!=WIN32C
char cwd[FILENAME_MAX+1]; char cwd[FILENAME_MAX+1];
#endif #endif
@ -70,6 +70,10 @@ lsystem(cmd, donemsg)
} }
#if MSDOS_COMPILER #if MSDOS_COMPILER
#if MSDOS_COMPILER==WIN32C
if (*cmd == '\0')
cmd = getenv("COMSPEC");
#else
/* /*
* Working directory is global on MSDOS. * Working directory is global on MSDOS.
* The child might change the working directory, so we * The child might change the working directory, so we
@ -78,6 +82,7 @@ lsystem(cmd, donemsg)
* try to "reedit_ifile" it. * try to "reedit_ifile" it.
*/ */
getcwd(cwd, FILENAME_MAX); getcwd(cwd, FILENAME_MAX);
#endif
#endif #endif
/* /*
@ -194,7 +199,7 @@ lsystem(cmd, donemsg)
init(); init();
screen_trashed = 1; screen_trashed = 1;
#if MSDOS_COMPILER #if MSDOS_COMPILER && MSDOS_COMPILER!=WIN32C
/* /*
* Restore the previous directory (possibly * Restore the previous directory (possibly
* changed by the child program we just ran). * changed by the child program we just ran).

View file

@ -1,7 +1,7 @@
/* $NetBSD: main.c,v 1.14 2008/08/28 07:20:20 mrg Exp $ */ /* $NetBSD: main.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -57,8 +57,11 @@ extern int jump_sline;
static char consoleTitle[256]; static char consoleTitle[256];
#endif #endif
extern int less_is_more;
extern int missing_cap; extern int missing_cap;
extern int know_dumb; extern int know_dumb;
extern int quit_if_one_screen;
extern int pr_type;
/* /*
@ -117,20 +120,27 @@ main(argc, argv)
is_tty = isatty(1); is_tty = isatty(1);
get_term(); get_term();
init_cmds(); init_cmds();
init_prompt();
init_charset(); init_charset();
init_line(); init_line();
init_cmdhist(); init_cmdhist();
init_option(); init_option();
init_search();
if (more_mode) { /*
scan_option("-E"); * If the name of the executable program is "more",
scan_option("-m"); * act like LESS_IS_MORE is set.
scan_option("-G"); */
scan_option("-f"); for (s = progname + strlen(progname); s > progname; s--)
s = lgetenv("MORE"); {
} else if (s[-1] == PATHNAME_SEP[0])
s = lgetenv("LESS"); break;
}
if (strcmp(s, "more") == 0)
less_is_more = 1;
init_prompt();
s = lgetenv(less_is_more ? "MORE" : "LESS");
if (s != NULL) if (s != NULL)
scan_option(save(s)); scan_option(save(s));
@ -155,6 +165,9 @@ main(argc, argv)
quit(QUIT_OK); quit(QUIT_OK);
} }
if (less_is_more && get_quit_at_eof())
quit_if_one_screen = TRUE;
#if EDITOR #if EDITOR
editor = lgetenv("VISUAL"); editor = lgetenv("VISUAL");
if (editor == NULL || *editor == '\0') if (editor == NULL || *editor == '\0')
@ -399,7 +412,7 @@ quit(status)
*/ */
close(2); close(2);
#endif #endif
#if WIN32 #ifdef WIN32
SetConsoleTitle(consoleTitle); SetConsoleTitle(consoleTitle);
#endif #endif
close_getchr(); close_getchr();

View file

@ -1,7 +1,7 @@
/* $NetBSD: mark.c,v 1.6 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: mark.c,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.

9
external/bsd/less/dist/mkfuncs.awk vendored Normal file
View file

@ -0,0 +1,9 @@
BEGIN { FS="("; state = 0 }
/^ public/ { ftype = $0; state = 1 }
{ if (state == 1)
state = 2
else if (state == 2)
{ print ftype,$1,"();"; state = 0 }
}

71
external/bsd/less/dist/mkhelp.c vendored Normal file
View file

@ -0,0 +1,71 @@
/* $NetBSD: mkhelp.c,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/*
* Copyright (C) 1984-2011 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.
*/
/*
* Silly little program to generate the help.c source file
* from the less.hlp text file.
* help.c just contains a char array whose contents are
* the contents of less.hlp.
*/
#include <stdio.h>
int
main(argc, argv)
int argc;
char *argv[];
{
int ch;
int prevch;
printf("/* This file was generated by mkhelp from less.hlp */\n");
printf("#include \"less.h\"\n");
printf("constant char helpdata[] = {\n");
ch = 0;
while (prevch = ch, (ch = getchar()) != EOF)
{
switch (ch)
{
case '\'':
printf("'\\'',");
break;
case '\\':
printf("'\\\\',");
break;
case '\b':
printf("'\\b',");
break;
case '\t':
printf("'\\t',");
break;
case '\n':
if (prevch != '\r')
printf("'\\n',\n");
break;
case '\r':
if (prevch != '\n')
printf("'\\n',\n");
break;
default:
if (ch >= ' ' && ch < 0x7f)
printf("'%c',", ch);
else
printf("0x%02x,", ch);
break;
}
}
/* Add an extra null char to avoid having a trailing comma. */
printf(" 0 };\n");
printf("constant int size_helpdata = sizeof(helpdata) - 1;\n");
return (0);
}

32
external/bsd/less/dist/mkinstalldirs vendored Normal file
View file

@ -0,0 +1,32 @@
#!/bin/sh
# mkinstalldirs --- make directory hierarchy
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
# Created: 1993-05-16
# Last modified: 1994-03-25
# Public domain
errstatus=0
for file in ${1+"$@"} ; do
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
shift
pathcomp=
for d in ${1+"$@"} ; do
pathcomp="$pathcomp$d"
case "$pathcomp" in
-* ) pathcomp=./$pathcomp ;;
esac
if test ! -d "$pathcomp"; then
echo "mkdir $pathcomp" 1>&2
mkdir "$pathcomp" || errstatus=$?
fi
pathcomp="$pathcomp/"
done
done
exit $errstatus
# mkinstalldirs ends here

View file

@ -1,5 +1,7 @@
/* $NetBSD: optfunc.c,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -33,19 +35,24 @@ extern int bufspace;
extern int pr_type; extern int pr_type;
extern int plusoption; extern int plusoption;
extern int swindow; extern int swindow;
extern int sc_width;
extern int sc_height; extern int sc_height;
extern int secure; extern int secure;
extern int dohelp; extern int dohelp;
extern int any_display; extern int any_display;
extern int less_is_more;
extern char openquote; extern char openquote;
extern char closequote; extern char closequote;
extern char constant *prproto[]; extern char *prproto[];
extern char constant *eqproto; extern char *eqproto;
extern char constant *hproto; extern char *hproto;
extern char constant *wproto; extern char *wproto;
extern IFILE curr_ifile; extern IFILE curr_ifile;
extern char version[]; extern char version[];
extern int jump_sline;
extern int jump_sline_fraction;
extern int shift_count;
extern int shift_count_fraction;
extern int less_is_more;
#if LOGFILE #if LOGFILE
extern char *namelogfile; extern char *namelogfile;
extern int force_logfile; extern int force_logfile;
@ -54,7 +61,6 @@ extern int logfile;
#if TAGS #if TAGS
public char *tagoption = NULL; public char *tagoption = NULL;
extern char *tags; extern char *tags;
extern int jump_sline;
#endif #endif
#if MSDOS_COMPILER #if MSDOS_COMPILER
extern int nm_fg_color, nm_bg_color; extern int nm_fg_color, nm_bg_color;
@ -128,33 +134,134 @@ opt__O(type, s)
#endif #endif
/* /*
* Handlers for -l option. * Handlers for -j option.
*/ */
public void public void
opt_l(type, s) opt_j(type, s)
int type; int type;
char *s; char *s;
{ {
PARG parg;
char buf[16];
int len;
int err; int err;
int n;
char *t;
switch (type) switch (type)
{ {
case INIT: case INIT:
t = s; case TOGGLE:
n = getnum(&t, "l", &err); if (*s == '.')
if (err || n <= 0)
{ {
error("Line number is required after -l", NULL_PARG); s++;
return; jump_sline_fraction = getfraction(&s, "j", &err);
if (err)
error("Invalid line fraction", NULL_PARG);
else
calc_jump_sline();
} else
{
int sline = getnum(&s, "j", &err);
if (err)
error("Invalid line number", NULL_PARG);
else
{
jump_sline = sline;
jump_sline_fraction = -1;
}
}
break;
case QUERY:
if (jump_sline_fraction < 0)
{
parg.p_int = jump_sline;
error("Position target at screen line %d", &parg);
} else
{
sprintf(buf, ".%06d", jump_sline_fraction);
len = strlen(buf);
while (len > 2 && buf[len-1] == '0')
len--;
buf[len] = '\0';
parg.p_string = buf;
error("Position target at screen position %s", &parg);
} }
plusoption = TRUE;
ungetsc(s);
break; break;
} }
} }
public void
calc_jump_sline()
{
if (jump_sline_fraction < 0)
return;
jump_sline = sc_height * jump_sline_fraction / NUM_FRAC_DENOM;
}
/*
* Handlers for -# option.
*/
public void
opt_shift(type, s)
int type;
char *s;
{
PARG parg;
char buf[16];
int len;
int err;
switch (type)
{
case INIT:
case TOGGLE:
if (*s == '.')
{
s++;
shift_count_fraction = getfraction(&s, "#", &err);
if (err)
error("Invalid column fraction", NULL_PARG);
else
calc_shift_count();
} else
{
int hs = getnum(&s, "#", &err);
if (err)
error("Invalid column number", NULL_PARG);
else
{
shift_count = hs;
shift_count_fraction = -1;
}
}
break;
case QUERY:
if (shift_count_fraction < 0)
{
parg.p_int = shift_count;
error("Horizontal shift %d columns", &parg);
} else
{
sprintf(buf, ".%06d", shift_count_fraction);
len = strlen(buf);
while (len > 2 && buf[len-1] == '0')
len--;
buf[len] = '\0';
parg.p_string = buf;
error("Horizontal shift %s of screen width", &parg);
}
break;
}
}
public void
calc_shift_count()
{
if (shift_count_fraction < 0)
return;
shift_count = sc_width * shift_count_fraction / NUM_FRAC_DENOM;
}
#if USERFILE #if USERFILE
public void public void
opt_k(type, s) opt_k(type, s)
@ -267,7 +374,7 @@ opt_p(type, s)
* In "more" mode, the -p argument is a command, * In "more" mode, the -p argument is a command,
* not a search string, so we don't need a slash. * not a search string, so we don't need a slash.
*/ */
if (!less_is_more); if (!less_is_more)
ungetsc("/"); ungetsc("/");
break; break;
} }
@ -281,7 +388,7 @@ opt__P(type, s)
int type; int type;
register char *s; register char *s;
{ {
register constant char **proto; register char **proto;
PARG parg; PARG parg;
switch (type) switch (type)
@ -301,7 +408,7 @@ opt__P(type, s)
case 'w': proto = &wproto; s++; break; case 'w': proto = &wproto; s++; break;
default: proto = &prproto[PR_SHORT]; break; default: proto = &prproto[PR_SHORT]; break;
} }
free((void *)*proto); free(*proto);
*proto = save(s); *proto = save(s);
break; break;
case QUERY: case QUERY:
@ -376,7 +483,7 @@ opt__V(type, s)
any_display = 1; any_display = 1;
putstr("less "); putstr("less ");
putstr(version); putstr(version);
putstr("\nCopyright (C) 1984-2005 Mark Nudelman\n\n"); putstr("\nCopyright (C) 1984-2009 Mark Nudelman\n\n");
putstr("less comes with NO WARRANTY, to the extent permitted by law.\n"); putstr("less comes with NO WARRANTY, to the extent permitted by law.\n");
putstr("For information about the terms of redistribution,\n"); putstr("For information about the terms of redistribution,\n");
putstr("see the file named README in the less distribution.\n"); putstr("see the file named README in the less distribution.\n");
@ -406,14 +513,14 @@ colordesc(s, fg_color, bg_color)
return; return;
} }
if (*s != '.') if (*s != '.')
bg = 0; bg = nm_bg_color;
else else
{ {
s++; s++;
bg = getnum(&s, "D", &err); bg = getnum(&s, "D", &err);
if (err) if (err)
{ {
error("Missing fg color in -D", NULL_PARG); error("Missing bg color in -D", NULL_PARG);
return; return;
} }
} }

View file

@ -1,7 +1,7 @@
/* $NetBSD: option.c,v 1.8 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: option.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -26,14 +26,44 @@
static struct loption *pendopt; static struct loption *pendopt;
public int plusoption = FALSE; public int plusoption = FALSE;
static int flip_triple __P((int, int));
static char *propt __P((int));
static void nostring __P((char *));
static char *optstring __P((char *, char **, char *, char *)); static char *optstring __P((char *, char **, char *, char *));
static int flip_triple __P((int, int));
static void nostring __P((char *));
extern int screen_trashed; extern int screen_trashed;
extern int less_is_more;
extern int quit_at_eof;
extern char *every_first_cmd; extern char *every_first_cmd;
/*
* Return a printable description of an option.
*/
static char *
opt_desc(o)
struct loption *o;
{
static char buf[OPTNAME_MAX + 10];
if (o->oletter == OLETTER_NONE)
SNPRINTF1(buf, sizeof(buf), "--%s", o->onames->oname);
else
SNPRINTF2(buf, sizeof(buf), "-%c (--%s)", o->oletter, o->onames->oname);
return (buf);
}
/*
* Return a string suitable for printing as the "name" of an option.
* For example, if the option letter is 'x', just return "-x".
*/
public char *
propt(c)
int c;
{
static char buf[8];
sprintf(buf, "-%s", prchar(c));
return (buf);
}
/* /*
* Scan an argument (either from the command line or from the * Scan an argument (either from the command line or from the
* LESS environment variable) and process it. * LESS environment variable) and process it.
@ -70,7 +100,7 @@ scan_option(s)
(*pendopt->ofunc)(INIT, s); (*pendopt->ofunc)(INIT, s);
break; break;
case NUMBER: case NUMBER:
printopt = propt(pendopt->oletter); printopt = opt_desc(pendopt);
*(pendopt->ovar) = getnum(&s, printopt, (int*)NULL); *(pendopt->ovar) = getnum(&s, printopt, (int*)NULL);
break; break;
} }
@ -135,6 +165,10 @@ scan_option(s)
s--; s--;
optc = 'z'; optc = 'z';
break; break;
case 'n':
if (less_is_more)
optc = 'z';
break;
} }
/* /*
@ -258,12 +292,12 @@ scan_option(s)
* OPT_SET set to the inverse of the default value * OPT_SET set to the inverse of the default value
*/ */
public void public void
toggle_option(c, s, how_toggle) toggle_option(o, lower, s, how_toggle)
int c; struct loption *o;
int lower;
char *s; char *s;
int how_toggle; int how_toggle;
{ {
register struct loption *o;
register int num; register int num;
int no_prompt; int no_prompt;
int err; int err;
@ -272,27 +306,22 @@ toggle_option(c, s, how_toggle)
no_prompt = (how_toggle & OPT_NO_PROMPT); no_prompt = (how_toggle & OPT_NO_PROMPT);
how_toggle &= ~OPT_NO_PROMPT; how_toggle &= ~OPT_NO_PROMPT;
/*
* Look up the option letter in the option table.
*/
o = findopt(c);
if (o == NULL) if (o == NULL)
{ {
parg.p_string = propt(c); error("No such option", NULL_PARG);
error("There is no %s option", &parg);
return; return;
} }
if (how_toggle == OPT_TOGGLE && (o->otype & NO_TOGGLE)) if (how_toggle == OPT_TOGGLE && (o->otype & NO_TOGGLE))
{ {
parg.p_string = propt(c); parg.p_string = opt_desc(o);
error("Cannot change the %s option", &parg); error("Cannot change the %s option", &parg);
return; return;
} }
if (how_toggle == OPT_NO_TOGGLE && (o->otype & NO_QUERY)) if (how_toggle == OPT_NO_TOGGLE && (o->otype & NO_QUERY))
{ {
parg.p_string = propt(c); parg.p_string = opt_desc(o);
error("Cannot query the %s option", &parg); error("Cannot query the %s option", &parg);
return; return;
} }
@ -352,15 +381,13 @@ toggle_option(c, s, how_toggle)
switch (how_toggle) switch (how_toggle)
{ {
case OPT_TOGGLE: case OPT_TOGGLE:
*(o->ovar) = flip_triple(*(o->ovar), *(o->ovar) = flip_triple(*(o->ovar), lower);
ASCII_IS_LOWER(c));
break; break;
case OPT_UNSET: case OPT_UNSET:
*(o->ovar) = o->odefault; *(o->ovar) = o->odefault;
break; break;
case OPT_SET: case OPT_SET:
*(o->ovar) = flip_triple(o->odefault, *(o->ovar) = flip_triple(o->odefault, lower);
ASCII_IS_LOWER(c));
break; break;
} }
break; break;
@ -464,33 +491,17 @@ flip_triple(val, lc)
} }
/* /*
* Return a string suitable for printing as the "name" of an option. * Determine if an option takes a parameter.
* For example, if the option letter is 'x', just return "-x".
*/
static char *
propt(c)
int c;
{
static char buf[8];
sprintf(buf, "-%s", prchar(c));
return (buf);
}
/*
* Determine if an option is a single character option (BOOL or TRIPLE),
* or if it a multi-character option (NUMBER).
*/ */
public int public int
single_char_option(c) opt_has_param(o)
int c; struct loption *o;
{ {
register struct loption *o;
o = findopt(c);
if (o == NULL) if (o == NULL)
return (TRUE); return (0);
return ((o->otype & (BOOL|TRIPLE|NOVAR|NO_TOGGLE)) != 0); if (o->otype & (BOOL|TRIPLE|NOVAR|NO_TOGGLE))
return (0);
return (1);
} }
/* /*
@ -498,14 +509,11 @@ single_char_option(c)
* Only string and number valued options have prompts. * Only string and number valued options have prompts.
*/ */
public char * public char *
opt_prompt(c) opt_prompt(o)
int c; struct loption *o;
{ {
register struct loption *o;
o = findopt(c);
if (o == NULL || (o->otype & (STRING|NUMBER)) == 0) if (o == NULL || (o->otype & (STRING|NUMBER)) == 0)
return (NULL); return ("?");
return (o->odesc[0]); return (o->odesc[0]);
} }
@ -540,7 +548,7 @@ nostring(printopt)
public void public void
nopendopt() nopendopt()
{ {
nostring(propt(pendopt->oletter)); nostring(opt_desc(pendopt));
} }
/* /*
@ -588,6 +596,30 @@ optstring(s, p_str, printopt, validchars)
return (p); return (p);
} }
/*
*/
static int
num_error(printopt, errp)
char *printopt;
int *errp;
{
PARG parg;
if (errp != NULL)
{
*errp = TRUE;
return (-1);
}
if (printopt != NULL)
{
parg.p_string = printopt;
error("Number is required after %s", &parg);
}
quit(QUIT_ERROR);
/* NOTREACHED */
return (-1);
}
/* /*
* Translate a string into a number. * Translate a string into a number.
* Like atoi(), but takes a pointer to a char *, and updates * Like atoi(), but takes a pointer to a char *, and updates
@ -602,7 +634,6 @@ getnum(sp, printopt, errp)
register char *s; register char *s;
register int n; register int n;
register int neg; register int neg;
PARG parg;
s = skipsp(*sp); s = skipsp(*sp);
neg = FALSE; neg = FALSE;
@ -612,19 +643,7 @@ getnum(sp, printopt, errp)
s++; s++;
} }
if (*s < '0' || *s > '9') if (*s < '0' || *s > '9')
{ return (num_error(printopt, errp));
if (errp != NULL)
{
*errp = TRUE;
return (-1);
}
if (printopt != NULL)
{
parg.p_string = printopt;
error("Number is required after %s", &parg);
}
quit(QUIT_ERROR);
}
n = 0; n = 0;
while (*s >= '0' && *s <= '9') while (*s >= '0' && *s <= '9')
@ -636,3 +655,53 @@ getnum(sp, printopt, errp)
n = -n; n = -n;
return (n); return (n);
} }
/*
* Translate a string into a fraction, represented by the part of a
* number which would follow a decimal point.
* The value of the fraction is returned as parts per NUM_FRAC_DENOM.
* That is, if "n" is returned, the fraction intended is n/NUM_FRAC_DENOM.
*/
public long
getfraction(sp, printopt, errp)
char **sp;
char *printopt;
int *errp;
{
register char *s;
long frac = 0;
int fraclen = 0;
s = skipsp(*sp);
if (*s < '0' || *s > '9')
return (num_error(printopt, errp));
for ( ; *s >= '0' && *s <= '9'; s++)
{
frac = (frac * 10) + (*s - '0');
fraclen++;
}
if (fraclen > NUM_LOG_FRAC_DENOM)
while (fraclen-- > NUM_LOG_FRAC_DENOM)
frac /= 10;
else
while (fraclen++ < NUM_LOG_FRAC_DENOM)
frac *= 10;
*sp = s;
if (errp != NULL)
*errp = FALSE;
return (frac);
}
/*
* Get the value of the -e flag.
*/
public int
get_quit_at_eof()
{
if (!less_is_more)
return quit_at_eof;
/* When less_is_more is set, the -e flag semantics are different. */
return quit_at_eof ? OPT_ON : OPT_ONPLUS;
}

View file

@ -1,7 +1,7 @@
/* $NetBSD: option.h,v 1.7 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: option.h,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -29,6 +29,8 @@
#define OTYPE (BOOL|TRIPLE|NUMBER|STRING|NOVAR) #define OTYPE (BOOL|TRIPLE|NUMBER|STRING|NOVAR)
#define OLETTER_NONE '\1' /* Invalid option letter */
/* /*
* Argument to a handling function tells what type of activity: * Argument to a handling function tells what type of activity:
*/ */
@ -52,6 +54,8 @@ struct optname
struct optname *onext; /* List of synonymous option names */ struct optname *onext; /* List of synonymous option names */
}; };
#define OPTNAME_MAX 32 /* Max length of long option name */
struct loption struct loption
{ {
char oletter; /* The controlling letter (a-z) */ char oletter; /* The controlling letter (a-z) */

View file

@ -1,7 +1,7 @@
/* $NetBSD: opttbl.c,v 1.12 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: opttbl.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -43,6 +43,8 @@ public int ctldisp; /* Send control chars to screen untranslated */
public int force_open; /* Open the file even if not regular file */ public int force_open; /* Open the file even if not regular file */
public int swindow; /* Size of scrolling window */ public int swindow; /* Size of scrolling window */
public int jump_sline; /* Screen line of "jump target" */ public int jump_sline; /* Screen line of "jump target" */
public long jump_sline_fraction = -1;
public long shift_count_fraction = -1;
public int chopline; /* Truncate displayed lines at screen width */ public int chopline; /* Truncate displayed lines at screen width */
public int no_init; /* Disable sending ti/te termcap strings */ public int no_init; /* Disable sending ti/te termcap strings */
public int no_keypad; /* Disable sending ks/ke termcap strings */ public int no_keypad; /* Disable sending ks/ke termcap strings */
@ -52,6 +54,8 @@ public int shift_count; /* Number of positions to shift horizontally */
public int status_col; /* Display a status column */ public int status_col; /* Display a status column */
public int use_lessopen; /* Use the LESSOPEN filter */ public int use_lessopen; /* Use the LESSOPEN filter */
public int quit_on_intr; /* Quit on interrupt */ 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}} */
#if HILITE_SEARCH #if HILITE_SEARCH
public int hilite_search; /* Highlight matched search patterns? */ public int hilite_search; /* Highlight matched search patterns? */
#endif #endif
@ -113,6 +117,8 @@ static struct optname tilde_optname = { "tilde", NULL };
static struct optname query_optname = { "help", NULL }; static struct optname query_optname = { "help", NULL };
static struct optname pound_optname = { "shift", NULL }; static struct optname pound_optname = { "shift", NULL };
static struct optname keypad_optname = { "no-keypad", 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 };
/* /*
@ -130,11 +136,11 @@ static struct optname keypad_optname = { "no-keypad", NULL };
static struct loption option[] = static struct loption option[] =
{ {
{ 'a', &a_optname, { 'a', &a_optname,
BOOL, OPT_OFF, &how_search, NULL, TRIPLE, OPT_ONPLUS, &how_search, NULL,
{ {
"Search includes displayed screen", "Search includes displayed screen",
"Search skips displayed screen", "Search skips displayed screen",
NULL "Search includes all of displayed screen"
} }
}, },
@ -158,7 +164,7 @@ static struct loption option[] =
TRIPLE, OPT_OFF, &top_scroll, NULL, TRIPLE, OPT_OFF, &top_scroll, NULL,
{ {
"Repaint by scrolling from bottom of screen", "Repaint by scrolling from bottom of screen",
"Repaint by clearing each line", "Repaint by painting from top of screen",
"Repaint by painting from top of screen" "Repaint by painting from top of screen"
} }
}, },
@ -239,10 +245,10 @@ static struct loption option[] =
} }
}, },
{ 'j', &j_optname, { 'j', &j_optname,
NUMBER, 1, &jump_sline, NULL, STRING, 0, NULL, opt_j,
{ {
"Target line: ", "Target line: ",
"Position target at screen line %d", "0123456789.-",
NULL NULL
} }
}, },
@ -268,10 +274,6 @@ static struct loption option[] =
NULL NULL
} }
}, },
{ 'l', NULL,
STRING|NO_TOGGLE|NO_QUERY, 0, NULL, opt_l,
{ NULL, NULL, NULL }
},
{ 'L', &L__optname, { 'L', &L__optname,
BOOL, OPT_ON, &use_lessopen, NULL, BOOL, OPT_ON, &use_lessopen, NULL,
{ {
@ -425,14 +427,14 @@ static struct loption option[] =
{ NULL, NULL, NULL } { NULL, NULL, NULL }
}, },
{ '#', &pound_optname, { '#', &pound_optname,
NUMBER, 0, &shift_count, NULL, STRING, 0, NULL, opt_shift,
{ {
"Horizontal shift: ", "Horizontal shift: ",
"Horizontal shift %d positions", "0123456789.",
NULL NULL
} }
}, },
{ '.', &keypad_optname, { OLETTER_NONE, &keypad_optname,
BOOL|NO_TOGGLE, OPT_OFF, &no_keypad, NULL, BOOL|NO_TOGGLE, OPT_OFF, &no_keypad, NULL,
{ {
"Use keypad mode", "Use keypad mode",
@ -440,6 +442,22 @@ static struct loption option[] =
NULL NULL
} }
}, },
{ OLETTER_NONE, &oldbot_optname,
BOOL, OPT_OFF, &oldbot, NULL,
{
"Use new bottom of screen behavior",
"Use old bottom of screen behavior",
NULL
}
},
{ OLETTER_NONE, &follow_optname,
BOOL, FOLLOW_DESC, &follow_mode, NULL,
{
"F command follows file descriptor",
"F command follows file name",
NULL
}
},
{ '\0', NULL, NOVAR, 0, NULL, NULL, { NULL, NULL, NULL } } { '\0', NULL, NOVAR, 0, NULL, NULL, { NULL, NULL, NULL } }
}; };

View file

@ -1,7 +1,7 @@
/* $NetBSD: os.c,v 1.9 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: os.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -80,6 +80,7 @@ iread(fd, buf, len)
{ {
register int n; register int n;
start:
#if MSDOS_COMPILER==WIN32C #if MSDOS_COMPILER==WIN32C
if (ABORT_SIGS()) if (ABORT_SIGS())
return (READ_INTR); return (READ_INTR);
@ -162,7 +163,25 @@ iread(fd, buf, len)
#endif #endif
reading = 0; reading = 0;
if (n < 0) if (n < 0)
{
#if HAVE_ERRNO
/*
* Certain values of errno indicate we should just retry the read.
*/
#if MUST_DEFINE_ERRNO
extern int errno;
#endif
#ifdef EINTR
if (errno == EINTR)
goto start;
#endif
#ifdef EAGAIN
if (errno == EAGAIN)
goto start;
#endif
#endif
return (-1); return (-1);
}
return (n); return (n);
} }
@ -237,6 +256,28 @@ errno_message(filename)
return (m); return (m);
} }
/* #define HAVE_FLOAT 0 */
static POSITION
muldiv(val, num, den)
POSITION val, num, den;
{
#if HAVE_FLOAT
double v = (((double) val) * num) / den;
return ((POSITION) (v + 0.5));
#else
POSITION v = ((POSITION) val) * num;
if (v / num == val)
/* No overflow */
return (POSITION) (v / den);
else
/* Above calculation overflows;
* use a method that is less precise but won't overflow. */
return (POSITION) (val / (den / num));
#endif
}
/* /*
* Return the ratio of two POSITIONS, as a percentage. * Return the ratio of two POSITIONS, as a percentage.
* {{ Assumes a POSITION is a long int. }} * {{ Assumes a POSITION is a long int. }}
@ -245,30 +286,24 @@ errno_message(filename)
percentage(num, den) percentage(num, den)
POSITION num, den; POSITION num, den;
{ {
POSITION num100 = num * 100; return (int) muldiv(num, (POSITION) 100, den);
if (num100 / 100 == num)
return (num100 / den);
else
return (num / (den / 100));
} }
/* /*
* Return the specified percentage of a POSITION. * Return the specified percentage of a POSITION.
*/ */
public POSITION public POSITION
percent_pos(pos, percent) percent_pos(pos, percent, fraction)
POSITION pos; POSITION pos;
int percent; int percent;
long fraction;
{ {
POSITION result100; /* Change percent (parts per 100) to perden (parts per NUM_FRAC_DENOM). */
POSITION perden = (percent * (NUM_FRAC_DENOM / 100)) + (fraction / 100);
if (percent == 0) if (perden == 0)
return (0); return (0);
else if ((result100 = pos * percent) / percent == pos) return (POSITION) muldiv(pos, perden, (POSITION) NUM_FRAC_DENOM);
return (result100 / 100);
else
return (percent * (pos / 100));
} }
#if !HAVE_STRCHR #if !HAVE_STRCHR

View file

@ -1,7 +1,7 @@
/* $NetBSD: output.c,v 1.10 2008/02/16 07:20:54 matt Exp $ */ /* $NetBSD: output.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -23,6 +23,7 @@
public int errmsgs; /* Count of messages displayed by error() */ public int errmsgs; /* Count of messages displayed by error() */
public int need_clr; public int need_clr;
public int final_attr; public int final_attr;
public int at_prompt;
extern int sigs; extern int sigs;
extern int sc_width; extern int sc_width;
@ -30,8 +31,9 @@ extern int so_s_width, so_e_width;
extern int screen_trashed; extern int screen_trashed;
extern int any_display; extern int any_display;
extern int is_tty; extern int is_tty;
extern int oldbot;
#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC #if MSDOS_COMPILER==WIN32C || MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
extern int ctldisp; extern int ctldisp;
extern int nm_fg_color, nm_bg_color; extern int nm_fg_color, nm_bg_color;
extern int bo_fg_color, bo_bg_color; extern int bo_fg_color, bo_bg_color;
@ -102,53 +104,7 @@ flush()
n = ob - obuf; n = ob - obuf;
if (n == 0) if (n == 0)
return; return;
#if MSDOS_COMPILER==WIN32C
if (is_tty && any_display)
{
char *op;
DWORD nwritten = 0;
CONSOLE_SCREEN_BUFFER_INFO scr;
int row;
int col;
int olen;
extern HANDLE con_out;
olen = ob - obuf;
/*
* There is a bug in Win32 WriteConsole() if we're
* writing in the last cell with a different color.
* To avoid color problems in the bottom line,
* we scroll the screen manually, before writing.
*/
GetConsoleScreenBufferInfo(con_out, &scr);
col = scr.dwCursorPosition.X;
row = scr.dwCursorPosition.Y;
for (op = obuf; op < obuf + olen; op++)
{
if (*op == '\n')
{
col = 0;
row++;
} else if (*op == '\r')
{
col = 0;
} else
{
col++;
if (col >= sc_width)
{
col = 0;
row++;
}
}
}
if (row > scr.srWindow.Bottom)
win32_scroll_up(row - scr.srWindow.Bottom);
WriteConsole(con_out, obuf, olen, &nwritten, NULL);
ob = obuf;
return;
}
#else
#if MSDOS_COMPILER==MSOFTC #if MSDOS_COMPILER==MSOFTC
if (is_tty && any_display) if (is_tty && any_display)
{ {
@ -158,12 +114,12 @@ flush()
return; return;
} }
#else #else
#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC #if MSDOS_COMPILER==WIN32C || MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
if (is_tty && any_display) if (is_tty && any_display)
{ {
*ob = '\0'; *ob = '\0';
if (ctldisp != OPT_ONPLUS) if (ctldisp != OPT_ONPLUS)
cputs(obuf); WIN32textout(obuf, ob - obuf);
else else
{ {
/* /*
@ -173,64 +129,70 @@ flush()
* the -D command-line option. * the -D command-line option.
*/ */
char *anchor, *p, *p_next; char *anchor, *p, *p_next;
int buflen = ob - obuf; unsigned char fg, bg;
unsigned char fg, bg, norm_attr; static unsigned char at;
/* #if MSDOS_COMPILER==WIN32C
* Only dark colors mentioned here, so that /* Screen colors used by 3x and 4x SGR commands. */
* bold has visible effect. static unsigned char screen_color[] = {
*/ 0, /* BLACK */
FOREGROUND_RED,
FOREGROUND_GREEN,
FOREGROUND_RED|FOREGROUND_GREEN,
FOREGROUND_BLUE,
FOREGROUND_BLUE|FOREGROUND_RED,
FOREGROUND_BLUE|FOREGROUND_GREEN,
FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED
};
#else
static enum COLORS screen_color[] = { static enum COLORS screen_color[] = {
BLACK, RED, GREEN, BROWN, BLACK, RED, GREEN, BROWN,
BLUE, MAGENTA, CYAN, LIGHTGRAY BLUE, MAGENTA, CYAN, LIGHTGRAY
}; };
#endif
/* Normal text colors are used as baseline. */
bg = nm_bg_color & 0xf;
fg = nm_fg_color & 0xf;
norm_attr = (bg << 4) | fg;
for (anchor = p_next = obuf; for (anchor = p_next = obuf;
(p_next = memchr (p_next, ESC, (p_next = memchr(p_next, ESC, ob - p_next)) != NULL; )
buflen - (p_next - obuf)))
!= NULL; )
{ {
p = p_next; p = p_next;
if (p[1] == '[') /* "ESC-[" sequence */
/*
* Handle the null escape sequence
* (ESC-[m), which is used to restore
* the original color.
*/
if (p[1] == '[' && is_ansi_end(p[2]))
{ {
textattr(norm_attr);
p += 3;
anchor = p_next = p;
continue;
}
if (p[1] == '[') /* "Esc-[" sequence */
{
/*
* If some chars seen since
* the last escape sequence,
* write it out to the screen
* using current text attributes.
*/
if (p > anchor) if (p > anchor)
{ {
*p = '\0'; /*
cputs (anchor); * If some chars seen since
*p = ESC; * the last escape sequence,
* write them out to the screen.
*/
WIN32textout(anchor, p-anchor);
anchor = p; anchor = p;
} }
p += 2; p += 2; /* Skip the "ESC-[" */
if (is_ansi_end(*p))
{
/*
* Handle null escape sequence
* "ESC[m", which restores
* the normal color.
*/
p++;
anchor = p_next = p;
WIN32setcolors(nm_fg_color, nm_bg_color);
continue;
}
p_next = p; p_next = p;
/*
* Select foreground/background colors
* based on the escape sequence.
*/
fg = nm_fg_color;
bg = nm_bg_color;
while (!is_ansi_end(*p)) while (!is_ansi_end(*p))
{ {
char *q; char *q;
long code = strtol(p, &q, 10); long code = strtol(p, &q, 10);
if (!*q) if (*q == '\0')
{ {
/* /*
* Incomplete sequence. * Incomplete sequence.
@ -238,15 +200,15 @@ flush()
* in the buffer. * in the buffer.
*/ */
int slop = q - anchor; int slop = q - anchor;
/* {{ strcpy args overlap! }} */
strcpy(obuf, anchor); strcpy(obuf, anchor);
ob = &obuf[slop]; ob = &obuf[slop];
return; return;
} }
if (q == p if (q == p ||
|| code > 49 || code < 0 code > 49 || code < 0 ||
|| (!is_ansi_end(*q) (!is_ansi_end(*q) && *q != ';'))
&& *q != ';'))
{ {
p_next = q; p_next = q;
break; break;
@ -256,27 +218,38 @@ flush()
switch (code) switch (code)
{ {
default:
/* case 0: all attrs off */
fg = nm_fg_color;
bg = nm_bg_color;
at = 0;
break;
case 1: /* bold on */ case 1: /* bold on */
fg = bo_fg_color; at |= 1;
bg = bo_bg_color;
break; break;
case 3: /* italic on */ case 3: /* italic on */
fg = so_fg_color; case 7: /* inverse on */
bg = so_bg_color; at |= 2;
break; break;
case 4: /* underline on */ case 4: /* underline on */
fg = ul_fg_color; at |= 4;
bg = ul_bg_color; break;
case 5: /* slow blink on */
case 6: /* fast blink on */
at |= 8;
break; break;
case 8: /* concealed on */ case 8: /* concealed on */
fg = (bg & 7) | 8; fg = (bg & 7) | 8;
break; break;
case 0: /* all attrs off */ case 22: /* bold off */
case 22:/* bold off */ at &= ~1;
case 23:/* italic off */ break;
case 24:/* underline off */ case 23: /* italic off */
fg = nm_fg_color; case 27: /* inverse off */
bg = nm_bg_color; at &= ~2;
break;
case 24: /* underline off */
at &= ~4;
break; break;
case 30: case 31: case 32: case 30: case 31: case 32:
case 33: case 34: case 35: case 33: case 34: case 35:
@ -297,26 +270,40 @@ flush()
} }
p = q; p = q;
} }
if (is_ansi_end(*p) && p > p_next) if (!is_ansi_end(*p) || p == p_next)
{
bg &= 15;
fg &= 15;
textattr ((bg << 4)| fg);
p_next = anchor = p + 1;
} else
break; break;
if (at & 1)
{
fg = bo_fg_color;
bg = bo_bg_color;
} else if (at & 2)
{
fg = so_fg_color;
bg = so_bg_color;
} else if (at & 4)
{
fg = ul_fg_color;
bg = ul_bg_color;
} else if (at & 8)
{
fg = bl_fg_color;
bg = bl_bg_color;
}
fg &= 0xf;
bg &= 0xf;
WIN32setcolors(fg, bg);
p_next = anchor = p + 1;
} else } else
p_next++; p_next++;
} }
/* Output what's left in the buffer. */ /* Output what's left in the buffer. */
cputs (anchor); WIN32textout(anchor, ob - anchor);
} }
ob = obuf; ob = obuf;
return; return;
} }
#endif #endif
#endif
#endif #endif
fd = (any_display) ? 1 : 2; fd = (any_display) ? 1 : 2;
if (write(fd, obuf, n) != n) if (write(fd, obuf, n) != n)
@ -374,6 +361,7 @@ putchr(c)
if (ob >= &obuf[sizeof(obuf)-1]) if (ob >= &obuf[sizeof(obuf)-1])
flush(); flush();
*ob++ = c; *ob++ = c;
at_prompt = 0;
return (c); return (c);
} }
@ -524,6 +512,8 @@ error(fmt, parg)
if (any_display && is_tty) if (any_display && is_tty)
{ {
if (!oldbot)
squish_check();
at_exit(); at_exit();
clear_bot(); clear_bot();
at_enter(AT_STANDOUT); at_enter(AT_STANDOUT);
@ -544,6 +534,7 @@ error(fmt, parg)
get_return(); get_return();
lower_left(); lower_left();
clear_eol();
if (col >= sc_width) if (col >= sc_width)
/* /*

324
external/bsd/less/dist/pattern.c vendored Normal file
View file

@ -0,0 +1,324 @@
/* $NetBSD: pattern.c,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/*
* Copyright (C) 1984-2011 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.
*/
/*
* Routines to do pattern matching.
*/
#include "less.h"
#include "pattern.h"
extern int caseless;
/*
* Compile a search pattern, for future use by match_pattern.
*/
static int
compile_pattern2(pattern, search_type, comp_pattern)
char *pattern;
int search_type;
void **comp_pattern;
{
if ((search_type & SRCH_NO_REGEX) == 0)
{
#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, 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;
#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;
#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;
#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
}
return (0);
}
/*
* Like compile_pattern2, but convert the pattern to lowercase if necessary.
*/
public int
compile_pattern(pattern, search_type, comp_pattern)
char *pattern;
int search_type;
void **comp_pattern;
{
char *cvt_pattern;
int result;
if (caseless != OPT_ONPLUS)
cvt_pattern = pattern;
else
{
cvt_pattern = (char*) ecalloc(1, cvt_length(strlen(pattern), CVT_TO_LC));
cvt_text(cvt_pattern, pattern, (int *)NULL, (int *)NULL, CVT_TO_LC);
}
result = compile_pattern2(cvt_pattern, search_type, comp_pattern);
if (cvt_pattern != pattern)
free(cvt_pattern);
return (result);
}
/*
* Forget that we have a compiled pattern.
*/
public void
uncompile_pattern(pattern)
void **pattern;
{
#if HAVE_POSIX_REGCOMP
regex_t **pcomp = (regex_t **) pattern;
if (*pcomp != NULL)
regfree(*pcomp);
*pcomp = NULL;
#endif
#if HAVE_PCRE
pcre **pcomp = (pcre **) pattern;
if (*pcomp != NULL)
pcre_free(*pcomp);
*pcomp = NULL;
#endif
#if HAVE_RE_COMP
int *pcomp = (int *) pattern;
*pcomp = 0;
#endif
#if HAVE_REGCMP
char **pcomp = (char **) pattern;
if (*pcomp != NULL)
free(*pcomp);
*pcomp = NULL;
#endif
#if HAVE_V8_REGCOMP
struct regexp **pcomp = (struct regexp **) pattern;
if (*pcomp != NULL)
free(*pcomp);
*pcomp = NULL;
#endif
}
/*
* Is a compiled pattern null?
*/
public int
is_null_pattern(pattern)
void *pattern;
{
#if HAVE_POSIX_REGCOMP
return (pattern == NULL);
#endif
#if HAVE_PCRE
return (pattern == NULL);
#endif
#if HAVE_RE_COMP
return (pattern == 0);
#endif
#if HAVE_REGCMP
return (pattern == NULL);
#endif
#if HAVE_V8_REGCOMP
return (pattern == NULL);
#endif
#if NO_REGEX
return (search_pattern != NULL);
#endif
}
/*
* Simple pattern matching function.
* It supports no metacharacters like *, etc.
*/
static int
match(pattern, pattern_len, buf, buf_len, pfound, pend)
char *pattern;
int pattern_len;
char *buf;
int buf_len;
char **pfound, **pend;
{
register char *pp, *lp;
register char *pattern_end = pattern + pattern_len;
register char *buf_end = buf + buf_len;
for ( ; buf < buf_end; buf++)
{
for (pp = pattern, lp = buf; *pp == *lp; pp++, lp++)
if (pp == pattern_end || lp == buf_end)
break;
if (pp == pattern_end)
{
if (pfound != NULL)
*pfound = buf;
if (pend != NULL)
*pend = lp;
return (1);
}
}
return (0);
}
/*
* Perform a pattern match with the previously compiled pattern.
* Set sp and ep to the start and end of the matched string.
*/
public int
match_pattern(pattern, tpattern, line, line_len, sp, ep, notbol, search_type)
void *pattern;
char *tpattern;
char *line;
int line_len;
char **sp;
char **ep;
int notbol;
int search_type;
{
int matched;
#if HAVE_POSIX_REGCOMP
regex_t *spattern = (regex_t *) pattern;
#endif
#if HAVE_PCRE
pcre *spattern = (pcre *) pattern;
#endif
#if HAVE_RE_COMP
int spattern = (int) pattern;
#endif
#if HAVE_REGCMP
char *spattern = (char *) pattern;
#endif
#if HAVE_V8_REGCOMP
struct regexp *spattern = (struct regexp *) pattern;
#endif
if (search_type & SRCH_NO_REGEX)
matched = match(tpattern, strlen(tpattern), line, line_len, sp, ep);
else
{
#if HAVE_POSIX_REGCOMP
{
regmatch_t rm;
int flags = (notbol) ? REG_NOTBOL : 0;
matched = !regexec(spattern, line, 1, &rm, flags);
if (matched)
{
#ifndef __WATCOMC__
*sp = line + rm.rm_so;
*ep = line + rm.rm_eo;
#else
*sp = rm.rm_sp;
*ep = rm.rm_ep;
#endif
}
}
#endif
#if HAVE_PCRE
{
int flags = (notbol) ? PCRE_NOTBOL : 0;
int ovector[3];
matched = pcre_exec(spattern, NULL, line, line_len,
0, flags, ovector, 3) >= 0;
if (matched)
{
*sp = line + ovector[0];
*ep = line + ovector[1];
}
}
#endif
#if HAVE_RE_COMP
matched = (re_exec(line) == 1);
/*
* re_exec doesn't seem to provide a way to get the matched string.
*/
*sp = *ep = NULL;
#endif
#if HAVE_REGCMP
*ep = regex(spattern, line);
matched = (*ep != NULL);
if (matched)
*sp = __loc1;
#endif
#if HAVE_V8_REGCOMP
#if HAVE_REGEXEC2
matched = regexec2(spattern, line, notbol);
#else
matched = regexec(spattern, line);
#endif
if (matched)
{
*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) ||
((search_type & SRCH_NO_MATCH) && !matched);
return (matched);
}

51
external/bsd/less/dist/pattern.h vendored Normal file
View file

@ -0,0 +1,51 @@
/* $NetBSD: pattern.h,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/*
* Copyright (C) 1984-2011 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.
*/
#if HAVE_POSIX_REGCOMP
#include <regex.h>
#ifdef REG_EXTENDED
extern int more_mode;
#define REGCOMP_FLAG (more_mode ? 0 : REG_EXTENDED)
#else
#define REGCOMP_FLAG 0
#endif
#define DEFINE_PATTERN(name) regex_t *name
#define CLEAR_PATTERN(name) name = NULL
#endif
#if HAVE_PCRE
#include <pcre.h>
#define DEFINE_PATTERN(name) pcre *name
#define CLEAR_PATTERN(name) name = NULL
#endif
#if HAVE_RE_COMP
char *re_comp();
int re_exec();
#define DEFINE_PATTERN(name) int name
#define CLEAR_PATTERN(name) name = 0
#endif
#if HAVE_REGCMP
char *regcmp();
char *regex();
extern char *__loc1;
#define DEFINE_PATTERN(name) char *name
#define CLEAR_PATTERN(name) name = NULL
#endif
#if HAVE_V8_REGCOMP
#include "regexp.h"
#define DEFINE_PATTERN(name) struct regexp *name
#define CLEAR_PATTERN(name) name = NULL
#endif

View file

@ -1,5 +1,7 @@
/* $NetBSD: pckeys.h,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.

View file

@ -1,5 +1,7 @@
/* $NetBSD: position.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.

View file

@ -1,5 +1,7 @@
/* $NetBSD: position.h,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.

View file

@ -1,7 +1,7 @@
/* $NetBSD: prompt.c,v 1.13 2008/02/16 07:20:54 matt Exp $ */ /* $NetBSD: prompt.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -24,7 +24,6 @@
#include "position.h" #include "position.h"
extern int pr_type; extern int pr_type;
extern int hit_eof;
extern int new_file; extern int new_file;
extern int sc_width; extern int sc_width;
extern int so_s_width, so_e_width; extern int so_s_width, so_e_width;
@ -32,6 +31,7 @@ extern int linenums;
extern int hshift; extern int hshift;
extern int sc_height; extern int sc_height;
extern int jump_sline; extern int jump_sline;
extern int less_is_more;
extern IFILE curr_ifile; extern IFILE curr_ifile;
#if EDITOR #if EDITOR
extern char *editor; extern char *editor;
@ -54,6 +54,8 @@ static constant char h_proto[] =
"HELP -- ?eEND -- Press g to see it again:Press RETURN for more., or q when done"; "HELP -- ?eEND -- Press g to see it again:Press RETURN for more., or q when done";
static constant char w_proto[] = static constant char w_proto[] =
"Waiting for data"; "Waiting for data";
static constant char more_proto[] =
"--More--(?eEND ?x- Next\\: %x.:?pB%pB\\%:byte %bB?s/%s...%t)";
public char constant *prproto[3]; public char constant *prproto[3];
public char constant *eqproto = e_proto; public char constant *eqproto = e_proto;
@ -71,8 +73,8 @@ static void ap_quest __P((void));
static POSITION curr_byte __P((int)); static POSITION curr_byte __P((int));
static int cond __P((int, int)); static int cond __P((int, int));
static void protochar __P((int, int, int)); static void protochar __P((int, int, int));
static char *skipcond __P((char *)); static const char *skipcond __P((const char *));
static char *wherechar __P((char *, int *)); static const char *wherechar __P((const char *, int *));
/* /*
* Initialize the prompt prototype strings. * Initialize the prompt prototype strings.
@ -81,7 +83,7 @@ static char *wherechar __P((char *, int *));
init_prompt() init_prompt()
{ {
prproto[0] = save(s_proto); prproto[0] = save(s_proto);
prproto[1] = save(m_proto); prproto[1] = save(less_is_more ? more_proto : m_proto);
prproto[2] = save(M_proto); prproto[2] = save(M_proto);
eqproto = save(e_proto); eqproto = save(e_proto);
hproto = save(h_proto); hproto = save(h_proto);
@ -207,7 +209,7 @@ cond(c, where)
case 'c': case 'c':
return (hshift != 0); return (hshift != 0);
case 'e': /* At end of file? */ case 'e': /* At end of file? */
return (hit_eof); return (eof_displayed());
case 'f': /* Filename known? */ case 'f': /* Filename known? */
return (strcmp(get_filename(curr_ifile), "-") != 0); return (strcmp(get_filename(curr_ifile), "-") != 0);
case 'l': /* Line number known? */ case 'l': /* Line number known? */
@ -315,6 +317,9 @@ protochar(c, where, iseditproto)
case 'f': /* File name */ case 'f': /* File name */
ap_str(get_filename(curr_ifile)); ap_str(get_filename(curr_ifile));
break; break;
case 'F': /* Last component of file name */
ap_str(last_component(get_filename(curr_ifile)));
break;
case 'i': /* Index into list of files */ case 'i': /* Index into list of files */
#if TAGS #if TAGS
if (ntags()) if (ntags())
@ -375,6 +380,7 @@ protochar(c, where, iseditproto)
case 't': /* Truncate trailing spaces in the message */ case 't': /* Truncate trailing spaces in the message */
while (mp > message && mp[-1] == ' ') while (mp > message && mp[-1] == ' ')
mp--; mp--;
*mp = '\0';
break; break;
case 'T': /* Type of list */ case 'T': /* Type of list */
#if TAGS #if TAGS
@ -401,9 +407,9 @@ protochar(c, where, iseditproto)
* where to resume parsing the string. * where to resume parsing the string.
* We must keep track of nested IFs and skip them properly. * We must keep track of nested IFs and skip them properly.
*/ */
static char * static const char *
skipcond(p) skipcond(p)
register char *p; register const char *p;
{ {
register int iflevel; register int iflevel;
@ -459,9 +465,9 @@ skipcond(p)
/* /*
* Decode a char that represents a position on the screen. * Decode a char that represents a position on the screen.
*/ */
static char * static const char *
wherechar(p, wp) wherechar(p, wp)
char *p; const char *p;
int *wp; int *wp;
{ {
switch (*p) switch (*p)
@ -485,10 +491,10 @@ wherechar(p, wp)
*/ */
public char * public char *
pr_expand(proto, maxwidth) pr_expand(proto, maxwidth)
char *proto; const char *proto;
int maxwidth; int maxwidth;
{ {
register char *p; register const char *p;
register int c; register int c;
int where; int where;
@ -575,9 +581,11 @@ eq_message()
pr_string() pr_string()
{ {
char *prompt; char *prompt;
int type;
type = (!less_is_more) ? pr_type : pr_type ? 0 : 1;
prompt = pr_expand((ch_getflags() & CH_HELPFILE) ? prompt = pr_expand((ch_getflags() & CH_HELPFILE) ?
hproto : prproto[pr_type], hproto : prproto[type],
sc_width-so_s_width-so_e_width-2); sc_width-so_s_width-so_e_width-2);
new_file = 0; new_file = 0;
return (prompt); return (prompt);

1252
external/bsd/less/dist/regexp.c vendored Normal file

File diff suppressed because it is too large Load diff

36
external/bsd/less/dist/regexp.h vendored Normal file
View file

@ -0,0 +1,36 @@
/* $NetBSD: regexp.h,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/*
* Definitions etc. for regexp(3) routines.
*
* Caveat: this is V8 regexp(3) [actually, a reimplementation thereof],
* not the System V one.
*/
#ifndef _REGEXP
#define _REGEXP 1
#define NSUBEXP 10
typedef struct regexp {
char *startp[NSUBEXP];
char *endp[NSUBEXP];
char regstart; /* Internal use only. */
char reganch; /* Internal use only. */
char *regmust; /* Internal use only. */
int regmlen; /* Internal use only. */
char program[1]; /* Unwarranted chumminess with compiler. */
} regexp;
#if defined(__STDC__) || defined(__cplusplus)
# define _ANSI_ARGS_(x) x
#else
# define _ANSI_ARGS_(x) ()
#endif
extern regexp *regcomp _ANSI_ARGS_((char *exp));
extern int regexec _ANSI_ARGS_((regexp *prog, char *string));
extern int regexec2 _ANSI_ARGS_((regexp *prog, char *string, int notbol));
extern void regsub _ANSI_ARGS_((regexp *prog, char *source, char *dest));
extern void regerror _ANSI_ARGS_((char *msg));
#endif /* REGEXP */

View file

@ -1,7 +1,7 @@
/* $NetBSD: screen.c,v 1.15 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: screen.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2005 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -165,6 +165,7 @@ static char
*sc_home, /* Cursor home */ *sc_home, /* Cursor home */
*sc_addline, /* Add line, scroll down following lines */ *sc_addline, /* Add line, scroll down following lines */
*sc_lower_left, /* Cursor to last line, first column */ *sc_lower_left, /* Cursor to last line, first column */
*sc_return, /* Cursor to beginning of current line */
*sc_move, /* General cursor positioning */ *sc_move, /* General cursor positioning */
*sc_clear, /* Clear screen */ *sc_clear, /* Clear screen */
*sc_eol_clear, /* Clear to end of line */ *sc_eol_clear, /* Clear to end of line */
@ -236,6 +237,7 @@ extern int wscroll;
extern int screen_trashed; extern int screen_trashed;
extern int tty; extern int tty;
extern int top_scroll; extern int top_scroll;
extern int oldbot;
#if HILITE_SEARCH #if HILITE_SEARCH
extern int hilite_search; extern int hilite_search;
#endif #endif
@ -627,7 +629,25 @@ ltget_env(capname)
char *capname; char *capname;
{ {
char name[16]; char name[16];
char *s;
s = lgetenv("LESS_TERMCAP_DEBUG");
if (s != NULL && *s != '\0')
{
struct env { struct env *next; char *name; char *value; };
static struct env *envs = NULL;
struct env *p;
for (p = envs; p != NULL; p = p->next)
if (strcmp(p->name, capname) == 0)
return p->value;
p = (struct env *) ecalloc(1, sizeof(struct env));
p->name = save(capname);
p->value = (char *) ecalloc(strlen(capname)+3, sizeof(char));
sprintf(p->value, "<%s>", capname);
p->next = envs;
envs = p;
return p->value;
}
strcpy(name, "LESS_TERMCAP_"); strcpy(name, "LESS_TERMCAP_");
strcat(name, capname); strcat(name, capname);
return (lgetenv(name)); return (lgetenv(name));
@ -1133,7 +1153,7 @@ get_term()
if ((term = lgetenv("TERM")) == NULL) if ((term = lgetenv("TERM")) == NULL)
term = DEFAULT_TERM; term = DEFAULT_TERM;
hardcopy = 0; hardcopy = 0;
if (tgetent(termbuf, term) <= 0) if (tgetent(termbuf, term) != TGETENT_OK)
hardcopy = 1; hardcopy = 1;
if (ltgetflag("hc")) if (ltgetflag("hc"))
hardcopy = 1; hardcopy = 1;
@ -1298,6 +1318,13 @@ get_term()
} }
sc_lower_left = cheaper(t1, t2, "\r"); sc_lower_left = cheaper(t1, t2, "\r");
/*
* Get carriage return string.
*/
sc_return = ltgetstr("cr", &sp);
if (sc_return == NULL)
sc_return = "\r";
/* /*
* Choose between using "al" or "sr" ("add line" or "scroll reverse") * Choose between using "al" or "sr" ("add line" or "scroll reverse")
* to add a line at the top of the screen. * to add a line at the top of the screen.
@ -1337,8 +1364,6 @@ get_term()
*/ */
static int costcount; static int costcount;
typedef int (*tputfunc)(int);
/*ARGSUSED*/ /*ARGSUSED*/
static int static int
inc_costcount(c) inc_costcount(c)
@ -1353,7 +1378,7 @@ cost(t)
char *t; char *t;
{ {
costcount = 0; costcount = 0;
tputs(t, sc_height, (tputfunc) inc_costcount); tputs(t, sc_height, inc_costcount);
return (costcount); return (costcount);
} }
@ -1526,9 +1551,9 @@ init()
{ {
#if !MSDOS_COMPILER #if !MSDOS_COMPILER
if (!no_init) if (!no_init)
tputs(sc_init, sc_height, (tputfunc) putchr); tputs(sc_init, sc_height, putchr);
if (!no_keypad) if (!no_keypad)
tputs(sc_s_keypad, sc_height, (tputfunc) putchr); tputs(sc_s_keypad, sc_height, putchr);
if (top_scroll) if (top_scroll)
{ {
int i; int i;
@ -1541,7 +1566,8 @@ init()
*/ */
for (i = 1; i < sc_height; i++) for (i = 1; i < sc_height; i++)
putchr('\n'); putchr('\n');
} } else
line_left();
#else #else
#if MSDOS_COMPILER==WIN32C #if MSDOS_COMPILER==WIN32C
if (!no_init) if (!no_init)
@ -1563,9 +1589,9 @@ deinit()
return; return;
#if !MSDOS_COMPILER #if !MSDOS_COMPILER
if (!no_keypad) if (!no_keypad)
tputs(sc_e_keypad, sc_height, (tputfunc) putchr); tputs(sc_e_keypad, sc_height, putchr);
if (!no_init) if (!no_init)
tputs(sc_deinit, sc_height, (tputfunc) putchr); tputs(sc_deinit, sc_height, putchr);
#else #else
/* Restore system colors. */ /* Restore system colors. */
SETCOLORS(sy_fg_color, sy_bg_color); SETCOLORS(sy_fg_color, sy_bg_color);
@ -1587,7 +1613,7 @@ deinit()
home() home()
{ {
#if !MSDOS_COMPILER #if !MSDOS_COMPILER
tputs(sc_home, 1, (tputfunc) putchr); tputs(sc_home, 1, putchr);
#else #else
flush(); flush();
_settextposition(1,1); _settextposition(1,1);
@ -1602,7 +1628,7 @@ home()
add_line() add_line()
{ {
#if !MSDOS_COMPILER #if !MSDOS_COMPILER
tputs(sc_addline, sc_height, (tputfunc) putchr); tputs(sc_addline, sc_height, putchr);
#else #else
flush(); flush();
#if MSDOS_COMPILER==MSOFTC #if MSDOS_COMPILER==MSOFTC
@ -1778,7 +1804,7 @@ win32_scroll_up(n)
/* Move the source text to the top of the screen. */ /* Move the source text to the top of the screen. */
new_org.X = rcSrc.Left; new_org.X = rcSrc.Left;
new_org.Y = 0; new_org.Y = rcClip.Top;
/* Fill the right character and attributes. */ /* Fill the right character and attributes. */
fillchar.Char.AsciiChar = ' '; fillchar.Char.AsciiChar = ' ';
@ -1811,13 +1837,44 @@ win32_scroll_up(n)
lower_left() lower_left()
{ {
#if !MSDOS_COMPILER #if !MSDOS_COMPILER
tputs(sc_lower_left, 1, (tputfunc) putchr); tputs(sc_lower_left, 1, putchr);
#else #else
flush(); flush();
_settextposition(sc_height, 1); _settextposition(sc_height, 1);
#endif #endif
} }
/*
* Move cursor to left position of current line.
*/
public void
line_left()
{
#if !MSDOS_COMPILER
tputs(sc_return, 1, putchr);
#else
int row;
flush();
#if MSDOS_COMPILER==WIN32C
{
CONSOLE_SCREEN_BUFFER_INFO scr;
GetConsoleScreenBufferInfo(con_out, &scr);
row = scr.dwCursorPosition.Y - scr.srWindow.Top + 1;
}
#else
#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
row = wherey();
#else
{
struct rccoord tpos = _gettextposition();
row = tpos.row;
}
#endif
#endif
_settextposition(row, 1);
#endif
}
/* /*
* Check if the console size has changed and reset internals * Check if the console size has changed and reset internals
* (in lieu of SIGWINCH for WIN32). * (in lieu of SIGWINCH for WIN32).
@ -1857,7 +1914,7 @@ goto_line(slinenum)
int slinenum; int slinenum;
{ {
#if !MSDOS_COMPILER #if !MSDOS_COMPILER
tputs(tgoto(sc_move, 0, slinenum), 1, (tputfunc) putchr); tputs(tgoto(sc_move, 0, slinenum), 1, putchr);
#else #else
flush(); flush();
_settextposition(slinenum+1, 1); _settextposition(slinenum+1, 1);
@ -1936,7 +1993,7 @@ vbell()
#if !MSDOS_COMPILER #if !MSDOS_COMPILER
if (*sc_visual_bell == '\0') if (*sc_visual_bell == '\0')
return; return;
tputs(sc_visual_bell, sc_height, (tputfunc) putchr); tputs(sc_visual_bell, sc_height, putchr);
#else #else
#if MSDOS_COMPILER==DJGPPC #if MSDOS_COMPILER==DJGPPC
ScreenVisualBell(); ScreenVisualBell();
@ -2027,7 +2084,7 @@ bell()
clear() clear()
{ {
#if !MSDOS_COMPILER #if !MSDOS_COMPILER
tputs(sc_clear, sc_height, (tputfunc) putchr); tputs(sc_clear, sc_height, putchr);
#else #else
flush(); flush();
#if MSDOS_COMPILER==WIN32C #if MSDOS_COMPILER==WIN32C
@ -2046,7 +2103,7 @@ clear()
clear_eol() clear_eol()
{ {
#if !MSDOS_COMPILER #if !MSDOS_COMPILER
tputs(sc_eol_clear, 1, (tputfunc) putchr); tputs(sc_eol_clear, 1, putchr);
#else #else
#if MSDOS_COMPILER==MSOFTC #if MSDOS_COMPILER==MSOFTC
short top, left; short top, left;
@ -2108,9 +2165,9 @@ clear_eol_bot()
clear_eol(); clear_eol();
#else #else
if (below_mem) if (below_mem)
tputs(sc_eos_clear, 1, (tputfunc) putchr); tputs(sc_eos_clear, 1, putchr);
else else
tputs(sc_eol_clear, 1, (tputfunc) putchr); tputs(sc_eol_clear, 1, putchr);
#endif #endif
} }
@ -2126,7 +2183,11 @@ clear_bot()
* the mode while we do the clear. Some terminals fill the * the mode while we do the clear. Some terminals fill the
* cleared area with the current attribute. * cleared area with the current attribute.
*/ */
lower_left(); if (oldbot)
lower_left();
else
line_left();
if (attrmode == AT_NORMAL) if (attrmode == AT_NORMAL)
clear_eol_bot(); clear_eol_bot();
else else
@ -2148,13 +2209,13 @@ at_enter(attr)
#if !MSDOS_COMPILER #if !MSDOS_COMPILER
/* The one with the most priority is last. */ /* The one with the most priority is last. */
if (attr & AT_UNDERLINE) if (attr & AT_UNDERLINE)
tputs(sc_u_in, 1, (tputfunc) putchr); tputs(sc_u_in, 1, putchr);
if (attr & AT_BOLD) if (attr & AT_BOLD)
tputs(sc_b_in, 1, (tputfunc) putchr); tputs(sc_b_in, 1, putchr);
if (attr & AT_BLINK) if (attr & AT_BLINK)
tputs(sc_bl_in, 1, (tputfunc) putchr); tputs(sc_bl_in, 1, putchr);
if (attr & AT_STANDOUT) if (attr & AT_STANDOUT)
tputs(sc_s_in, 1, (tputfunc) putchr); tputs(sc_s_in, 1, putchr);
#else #else
flush(); flush();
/* The one with the most priority is first. */ /* The one with the most priority is first. */
@ -2184,13 +2245,13 @@ at_exit()
#if !MSDOS_COMPILER #if !MSDOS_COMPILER
/* Undo things in the reverse order we did them. */ /* Undo things in the reverse order we did them. */
if (attrmode & AT_STANDOUT) if (attrmode & AT_STANDOUT)
tputs(sc_s_out, 1, (tputfunc) putchr); tputs(sc_s_out, 1, putchr);
if (attrmode & AT_BLINK) if (attrmode & AT_BLINK)
tputs(sc_bl_out, 1, (tputfunc) putchr); tputs(sc_bl_out, 1, putchr);
if (attrmode & AT_BOLD) if (attrmode & AT_BOLD)
tputs(sc_b_out, 1, (tputfunc) putchr); tputs(sc_b_out, 1, putchr);
if (attrmode & AT_UNDERLINE) if (attrmode & AT_UNDERLINE)
tputs(sc_u_out, 1, (tputfunc) putchr); tputs(sc_u_out, 1, putchr);
#else #else
flush(); flush();
SETCOLORS(nm_fg_color, nm_bg_color); SETCOLORS(nm_fg_color, nm_bg_color);
@ -2203,7 +2264,10 @@ at_exit()
at_switch(attr) at_switch(attr)
int attr; int attr;
{ {
if (apply_at_specials(attr) != attrmode) int new_attrmode = apply_at_specials(attr);
int ignore_modes = AT_ANSI;
if ((new_attrmode & ~ignore_modes) != (attrmode & ~ignore_modes))
{ {
at_exit(); at_exit();
at_enter(attr); at_enter(attr);
@ -2246,9 +2310,9 @@ backspace()
/* /*
* Erase the previous character by overstriking with a space. * Erase the previous character by overstriking with a space.
*/ */
tputs(sc_backspace, 1, (tputfunc) putchr); tputs(sc_backspace, 1, putchr);
putchr(' '); putchr(' ');
tputs(sc_backspace, 1, (tputfunc) putchr); tputs(sc_backspace, 1, putchr);
#else #else
#if MSDOS_COMPILER==MSOFTC #if MSDOS_COMPILER==MSOFTC
struct rccoord tpos; struct rccoord tpos;
@ -2292,7 +2356,7 @@ backspace()
putbs() putbs()
{ {
#if !MSDOS_COMPILER #if !MSDOS_COMPILER
tputs(sc_backspace, 1, (tputfunc) putchr); tputs(sc_backspace, 1, putchr);
#else #else
int row, col; int row, col;
@ -2422,3 +2486,33 @@ WIN32getch(tty)
return ((char)ascii); return ((char)ascii);
} }
#endif #endif
#if MSDOS_COMPILER
/*
*/
public void
WIN32setcolors(fg, bg)
int fg;
int bg;
{
SETCOLORS(fg, bg);
}
/*
*/
public void
WIN32textout(text, len)
char *text;
int len;
{
#if MSDOS_COMPILER==WIN32C
DWORD written;
WriteConsole(con_out, text, len, &written, NULL);
#else
char c = text[len];
text[len] = '\0';
cputs(text);
text[len] = c;
#endif
}
#endif

106
external/bsd/less/dist/scrsize.c vendored Normal file
View file

@ -0,0 +1,106 @@
/* $NetBSD: scrsize.c,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/*
* Copyright (C) 1984-2011 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.
*/
/*
* This program is used to determine the screen dimensions on OS/2 systems.
* Adapted from code written by Kyosuke Tokoro (NBG01720@nifty.ne.jp).
*/
/*
* When I wrote this routine, I consulted some part of the source code
* of the xwininfo utility by X Consortium.
*
* Copyright (c) 1987, X Consortium
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name of the X Consortium shall not
* be used in advertising or otherwise to promote the sale, use or other
* dealings in this Software without prior written authorization from the X
* Consortium.
*/
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdlib.h>
#include <stdio.h>
static int get_winsize(dpy, window, p_width, p_height)
Display *dpy;
Window window;
int *p_width;
int *p_height;
{
XWindowAttributes win_attributes;
XSizeHints hints;
long longjunk;
if (!XGetWindowAttributes(dpy, window, &win_attributes))
return 1;
if (!XGetWMNormalHints(dpy, window, &hints, &longjunk))
return 1;
if (!(hints.flags & PResizeInc))
return 1;
if (hints.width_inc == 0 || hints.height_inc == 0)
return 1;
if (!(hints.flags & (PBaseSize|PMinSize)))
return 1;
if (hints.flags & PBaseSize)
{
win_attributes.width -= hints.base_width;
win_attributes.height -= hints.base_height;
} else
{
win_attributes.width -= hints.min_width;
win_attributes.height -= hints.min_height;
}
*p_width = win_attributes.width / hints.width_inc;
*p_height = win_attributes.height / hints.height_inc;
return 0;
}
int main(argc, argv)
int argc;
char *argv[];
{
char *cp;
Display *dpy;
int size[2];
_scrsize(size);
cp = getenv("WINDOWID");
if (cp != NULL)
{
dpy = XOpenDisplay(NULL);
if (dpy != NULL)
{
get_winsize(dpy, (Window) atol(cp), &size[0], &size[1]);
XCloseDisplay(dpy);
}
}
printf("%i %i\n", size[0], size[1]);
return (0);
}

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
/* $NetBSD: signal.c,v 1.6 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: signal.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -42,6 +42,7 @@ extern int linenums;
extern int wscroll; extern int wscroll;
extern int reading; extern int reading;
extern int quit_on_intr; extern int quit_on_intr;
extern long jump_sline_fraction;
/* /*
* Interrupt signal handler. * Interrupt signal handler.
@ -51,6 +52,7 @@ extern int quit_on_intr;
u_interrupt(type) u_interrupt(type)
int type; int type;
{ {
bell();
#if OS2 #if OS2
LSIGNAL(SIGINT, SIG_ACK); LSIGNAL(SIGINT, SIG_ACK);
#endif #endif
@ -66,7 +68,7 @@ u_interrupt(type)
getkey(); getkey();
#endif #endif
if (reading) if (reading)
intread(); intread(); /* May longjmp */
} }
#ifdef SIGTSTP #ifdef SIGTSTP
@ -161,13 +163,12 @@ init_signals(on)
#endif #endif
#ifdef SIGWINCH #ifdef SIGWINCH
(void) LSIGNAL(SIGWINCH, winch); (void) LSIGNAL(SIGWINCH, winch);
#else #endif
#ifdef SIGWIND #ifdef SIGWIND
(void) LSIGNAL(SIGWIND, winch); (void) LSIGNAL(SIGWIND, winch);
#endif #endif
#ifdef SIGQUIT #ifdef SIGQUIT
(void) LSIGNAL(SIGQUIT, SIG_IGN); (void) LSIGNAL(SIGQUIT, SIG_IGN);
#endif
#endif #endif
} else } else
{ {
@ -250,6 +251,8 @@ psignals()
if (sc_width != old_width || sc_height != old_height) if (sc_width != old_width || sc_height != old_height)
{ {
wscroll = (sc_height + 1) / 2; wscroll = (sc_height + 1) / 2;
calc_jump_sline();
calc_shift_count();
screen_trashed = 1; screen_trashed = 1;
} }
} }
@ -257,25 +260,6 @@ psignals()
if (tsignals & S_INTERRUPT) if (tsignals & S_INTERRUPT)
{ {
if (quit_on_intr) if (quit_on_intr)
quit(QUIT_OK); quit(QUIT_INTERRUPT);
bell();
/*
* {{ You may wish to replace the bell() with
* error("Interrupt", NULL_PARG); }}
*/
/*
* If we were interrupted while in the "calculating
* line numbers" loop, turn off line numbers.
*/
if (lnloop)
{
lnloop = 0;
if (linenums == 2)
screen_trashed = 1;
linenums = 0;
error("Line numbers turned off", NULL_PARG);
}
} }
} }

View file

@ -1,7 +1,7 @@
/* $NetBSD: tags.c,v 1.8 2006/10/26 01:33:08 mrg Exp $ */ /* $NetBSD: tags.c,v 1.3 2011/07/03 20:14:13 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -58,7 +58,7 @@ static int getentry();
* *
* Use either pattern or line number. * Use either pattern or line number.
* findgtag() always uses line number, so pattern is always NULL. * findgtag() always uses line number, so pattern is always NULL.
* findctag() usually either pattern (in which case line number is 0), * findctag() uses either pattern (in which case line number is 0),
* or line number (in which case pattern is NULL). * or line number (in which case pattern is NULL).
*/ */
struct tag { struct tag {
@ -77,10 +77,10 @@ static struct taglist taglist = { TAG_END, TAG_END };
static struct tag *curtag; static struct tag *curtag;
#define TAG_INS(tp) \ #define TAG_INS(tp) \
(tp)->next = taglist.tl_first; \ (tp)->next = TAG_END; \
(tp)->prev = TAG_END; \ (tp)->prev = taglist.tl_last; \
taglist.tl_first->prev = (tp); \ taglist.tl_last->next = (tp); \
taglist.tl_first = (tp); taglist.tl_last = (tp);
#define TAG_RM(tp) \ #define TAG_RM(tp) \
(tp)->next->prev = (tp)->prev; \ (tp)->next->prev = (tp)->prev; \
@ -420,7 +420,7 @@ ctagsearch()
* starting position of that line in linepos. * starting position of that line in linepos.
*/ */
linepos = pos; linepos = pos;
pos = forw_raw_line(pos, &line); pos = forw_raw_line(pos, &line, (int *)NULL);
if (linenum != 0) if (linenum != 0)
linenum++; linenum++;

View file

@ -1,5 +1,7 @@
/* $NetBSD: ttyin.c,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/* /*
* Copyright (C) 1984-2004 Mark Nudelman * Copyright (C) 1984-2011 Mark Nudelman
* *
* You may distribute under the terms of either the GNU General Public * You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file. * License or the Less License, as specified in the README file.
@ -102,10 +104,6 @@ getchr()
{ {
char c; char c;
int result; int result;
#if 0
int hex_in = 0;
int hex_value = 0;
#endif
do do
{ {
@ -139,6 +137,9 @@ getchr()
#endif #endif
#if 0 /* allow entering arbitrary hex chars for testing */ #if 0 /* allow entering arbitrary hex chars for testing */
/* ctrl-A followed by two hex chars makes a byte */ /* ctrl-A followed by two hex chars makes a byte */
{
int hex_in = 0;
int hex_value = 0;
if (c == CONTROL('A')) if (c == CONTROL('A'))
{ {
hex_in = 2; hex_in = 2;
@ -164,6 +165,7 @@ getchr()
} }
c = hex_value; c = hex_value;
} }
}
#endif #endif
/* /*
* Various parts of the program cannot handle * Various parts of the program cannot handle

750
external/bsd/less/dist/version.c vendored Normal file
View file

@ -0,0 +1,750 @@
/* $NetBSD: version.c,v 1.2 2011/07/03 19:51:26 tron Exp $ */
/*
* Copyright (C) 1984-2011 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.
*/
/*
----------------------- CHANGE HISTORY --------------------------
1/29/84 Allowed use on standard input
2/1/84 Added E, N, P commands
4/17/84 Added '=' command, 'stop' signal handling
4/20/84 Added line folding
v2 4/27/84 Fixed '=' command to use BOTTOM_PLUS_ONE,
instead of TOP, added 'p' & 'v' commands
v3 5/3/84 Added -m and -t options, '-' command
v4 5/3/84 Added LESS environment variable
v5 5/3/84 New comments, fixed '-' command slightly
v6 5/15/84 Added -Q, visual bell
v7 5/24/84 Fixed jump_back(n) bug: n should count real
lines, not folded lines. Also allow number on G command.
v8 5/30/84 Re-do -q and -Q commands
v9 9/25/84 Added "+<cmd>" argument
v10 10/10/84 Fixed bug in -b<n> argument processing
v11 10/18/84 Made error() ring bell if \n not entered.
-----------------------------------------------------------------
v12 2/13/85 Reorganized signal handling and made portable to 4.2bsd.
v13 2/16/85 Reword error message for '-' command.
v14 2/22/85 Added -bf and -bp variants of -b.
v15 2/25/85 Miscellaneous changes.
v16 3/13/85 Added -u flag for backspace processing.
v17 4/13/85 Added j and k commands, changed -t default.
v18 4/20/85 Rewrote signal handling code.
v19 5/2/85 Got rid of "verbose" eq_message().
Made search() scroll in some cases.
v20 5/21/85 Fixed screen.c ioctls for System V.
v21 5/23/85 Fixed some first_cmd bugs.
v22 5/24/85 Added support for no RECOMP nor REGCMP.
v23 5/25/85 Miscellanous changes and prettying up.
Posted to USENET.
-----------------------------------------------------------------
v24 6/3/85 Added ti,te terminal init & de-init.
(Thanks to Mike Kersenbrock)
v25 6/8/85 Added -U flag, standout mode underlining.
v26 6/9/85 Added -M flag.
Use underline termcap (us) if it exists.
v27 6/15/85 Renamed some variables to make unique in
6 chars. Minor fix to -m.
v28 6/28/85 Fixed right margin bug.
v29 6/28/85 Incorporated M.Rose's changes to signal.c
v30 6/29/85 Fixed stupid bug in argument processing.
v31 7/15/85 Added -p flag, changed repaint algorithm.
Added kludge for magic cookie terminals.
v32 7/16/85 Added cat_file if output not a tty.
v33 7/23/85 Added -e flag and EDITOR.
v34 7/26/85 Added -s flag.
v35 7/27/85 Rewrote option handling; added option.c.
v36 7/29/85 Fixed -e flag to work if not last file.
v37 8/10/85 Added -x flag.
v38 8/19/85 Changed prompting; created prompt.c.
v39 8/24/85 (Not -p) does not initially clear screen.
v40 8/26/85 Added "skipping" indicator in forw().
Posted to USENET.
-----------------------------------------------------------------
v41 9/17/85 ONLY_RETURN, control char commands,
faster search, other minor fixes.
v42 9/25/85 Added ++ command line syntax;
ch_fsize for pipes.
v43 10/15/85 Added -h flag, changed prim.c algorithms.
v44 10/16/85 Made END print in all cases of eof;
ignore SIGTTOU after receiv ing SIGTSTP.
v45 10/16/85 Never print backspaces unless -u.
v46 10/24/85 Backwards scroll in jump_loc.
v47 10/30/85 Fixed bug in edit(): *first_cmd==0
v48 11/16/85 Use TIOCSETN instead of TIOCSETP.
Added marks (m and ' commands).
Posted to USENET.
-----------------------------------------------------------------
v49 1/9/86 Fixed bug: signal didn't clear mcc.
v50 1/15/86 Added ' (quote) to gomark.
v51 1/16/86 Added + cmd, fixed problem if first_cmd
fails, made g cmd sort of "work" on pipes
ev en if bof is no longer buffered.
v52 1/17/86 Made short files work better.
v53 1/20/86 Added -P option.
v54 1/20/86 Changed help to use HELPFILE.
v55 1/23/86 Messages work better if not tty output.
v56 1/24/86 Added -l option.
v57 1/31/86 Fixed -l to get confirmation before
ov erwriting an existing file.
v58 8/28/86 Added filename globbing.
v59 9/15/86 Fixed some bugs with very long filenames.
v60 9/26/86 Incorporated changes from Leith (Casey)
Leedom for boldface and -z option.
v61 9/26/86 Got rid of annoying repaints after ! cmd.
Posted to USENET.
-----------------------------------------------------------------
v62 12/23/86 Added is_directory(); change -z default to
-1 instead of 24; cat-and-exit if -e and
file is less than a screenful.
v63 1/8/87 Fixed bug in cat-and-exit if > 1 file.
v64 1/12/87 Changed puts/putstr, putc/putchr,
getc/getchr to av oid name conflict with
stdio functions.
v65 1/26/87 Allowed '-' command to change NUMBER
v alued options (thanks to Gary Puckering)
v66 2/13/87 Fixed bug: prepaint should use force=1.
v67 2/24/87 Added !! and % expansion to ! command.
v68 2/25/87 Added SIGWINCH and TIOCGWINSZ support;
changed is_directory to bad_file.
(thanks to J. Robert Ward)
v69 2/25/87 Added SIGWIND and WIOCGETD (for Unix PC).
v70 3/13/87 Changed help cmd from 'h' to 'H'; better
error msgs in bad_file, errno_message.
v71 5/11/87 Changed -p to -c, made triple -c/-C
for clear-eol like more's -c.
v72 6/26/87 Added -E, -L, use $SHELL in lsystem().
(thanks to Stev e Spearman)
v73 6/26/87 Allow Examine "#" for previous file.
Posted to USENET 8/25/87.
-----------------------------------------------------------------
v74 9/18/87 Fix conflict in EOF symbol with stdio.h,
Make os.c more portable to BSD.
v75 9/23/87 Fix problems in get_term (thanks to
Paul Eggert); new backwards scrolling in
jump_loc (thanks to Marion Hakanson).
v76 9/23/87 Added -i flag; allow single "!" to
inv oke a shell (thanks to Franco Barber).
v77 9/24/87 Added -n flag and line number support.
v78 9/25/87 Fixed problem with prompts longer than
the screen width.
v79 9/29/87 Added the _ command.
v80 10/6/87 Allow signal to break out of linenum scan.
v81 10/6/87 Allow -b to be changed from within less.
v82 10/7/87 Add cmd_decode to use a table for key
binding (thanks to Dav id Nason).
v83 10/9/87 Allow .less file for user-defined keys.
v84 10/11/87 Fix -e/-E problems (thanks to Felix Lee).
v85 10/15/87 Search now keeps track of line numbers.
v86 10/20/87 Added -B option and autobuf; fixed
"pipe error" bug.
v87 3/1/88 Fix bug re BSD signals while reading file.
v88 3/12/88 Use new format for -P option (thanks to
der Mouse), allow "+-c" without message,
fix bug re BSD hangup.
v89 3/18/88 Turn off line numbers if linenum scan
is interrupted.
v90 3/30/88 Allow -P from within less.
v91 3/30/88 Added tags file support (new -t option)
(thanks to Brian Campbell).
v92 4/4/88 Added -+option syntax.
v93 4/11/88 Add support for slow input (thanks to
Joe Orost & apologies for taking almost
3 years to get this in!)
v94 4/11/88 Redo reading/signal stuff.
v95 4/20/88 Repaint screen better after signal.
v96 4/21/88 Add /! and ?! commands.
v97 5/17/88 Allow -l/-L from within less.
Eliminate some static arrays (use calloc).
Posted to USENET.
-----------------------------------------------------------------
v98 10/14/88 Fix incorrect calloc call; uninitialized
var in exec_mca; core dump on unknown TERM.
Make v cmd work if past last line of file.
Fix some signal bugs.
v99 10/29/88 Allow space between -X and string,
when X is a string-valued option.
v100 1/5/89 Fix globbing bug when $SHELL not set;
allow spaces after -t command.
v101 1/6/89 Fix problem with long (truncated) lines
in tags file (thanks to Neil Dixon).
v102 1/6/89 Fix bug with E# when no prev file;
allow spaces after -l command.
v103 3/14/89 Add -N, -f and -? options. Add z and w
commands. Add %L for prompt strings.
v104 3/16/89 Added EDITPROTO.
v105 3/20/89 Fix bug in find_linenum which cached
incorrectly on long lines.
v106 3/31/89 Added -k option and multiple lesskey
files.
v107 4/27/89 Add 8-bit char support and -g option.
Split option code into 3 files.
v108 5/5/89 Allocate position table dynamically
(thanks to Paul Eggert); change % command
from "percent" to vi-style brace finder.
v109 5/10/89 Added ESC-% command, split prim.c.
v110 5/24/89 Fixed bug in + option; fixed repaint bug
under Sun windows (thanks to Paul Eggert).
v111 5/25/89 Generalized # and % expansion; use
calloc for some error messages.
v112 5/30/89 Get rid of ESC-%, add {}()[] commands.
v113 5/31/89 Optimize lseeks (thanks to Paul Eggert).
v114 7/25/89 Added ESC-/ and ESC-/! commands.
v115 7/26/89 Added ESC-n command.
v116 7/31/89 Added find_pos to optimize g command.
v117 8/1/89 Change -f option to -r.
v118 8/2/89 Save positions for all previous files,
not just the immediately previous one.
v119 8/7/89 Save marks across file boundaries.
Add file handle stuff.
v120 8/11/89 Add :ta command.
v121 8/16/89 Add -f option.
v122 8/30/89 Fix performance with many buffers.
v123 8/31/89 Verbose prompts for string options.
Posted beta to USENET.
-----------------------------------------------------------------
v124 9/18/89 Reorganize search commands,
N = rev, ESC-n = span, add ESC-N.
v125 9/18/89 Fix tab bug (thanks to Alex Liu).
Fix EOF bug when both -w and -c.
v126 10/25/89 Add -j option.
v127 10/27/89 Fix problems with blank lines before BOF.
v128 10/27/89 Add %bj, etc. to prompt strings.
v129 11/3/89 Add -+,-- commands; add set-option and
unset-option to lesskey.
v130 11/6/89 Generalize A_EXTRA to string, remove
set-option, unset-option from lesskey.
v131 11/7/89 Changed name of EDITPROTO to LESSEDIT.
v132 11/8/89 Allow editing of command prefix.
v133 11/16/89 Add -y option (thanks to Jeff Sullivan).
v134 12/1/89 Glob filenames in the -l command.
v135 12/5/89 Combined {}()[] commands into one, and
added ESC-^F and ESC-^B commands.
v136 1/20/90 Added -S, -R flags. Added | command.
Added warning for binary files. (thanks
to Richard Brittain and J. Sullivan).
v137 1/21/90 Rewrote horrible pappend code.
Added * notation for hi-bit chars.
v138 1/24/90 Fix magic cookie terminal handling.
Get rid of "cleanup" loop in ch_get.
v139 1/27/90 Added MSDOS support. (many thanks
to Richard Brittain).
v140 2/7/90 Editing a new file adds it to the
command line list.
v141 2/8/90 Add edit_list for editing >1 file.
v142 2/10/90 Add :x command.
v143 2/11/90 Add * and @ modifies to search cmds.
Change ESC-/ cmd from /@* to / *.
v144 3/1/90 Messed around with ch_zero;
no real change.
v145 3/2/90 Added -R and -v/-V for MSDOS;
renamed FILENAME to avoid conflict.
v146 3/5/90 Pull cmdbuf functions out of command.c
v147 3/7/90 Implement ?@; fix multi-file edit bugs.
v148 3/29/90 Fixed bug in :e<file> then :e#.
v149 4/3/90 Change error,ierror,query to use PARG.
v150 4/6/90 Add LESS_CHARSET, LESS_CHARDEF.
v151 4/13/90 Remove -g option; clean up ispipe.
v152 4/14/90 lsystem() closes input file, for
editors which require exclusive open.
v153 4/18/90 Fix bug if SHELL unset;
fix bug in overstrike control char.
v154 4/25/90 Output to fd 2 via buffer.
v155 4/30/90 Ignore -i if uppercase in pattern
(thanks to Michael Rendell.)
v156 5/3/90 Remove scroll limits in forw() & back();
causes problems with -c.
v157 5/4/90 Forward search starts at next real line
(not screen line) after jump target.
v158 6/14/90 Added F command.
v159 7/29/90 Fix bug in exiting: output not flushed.
v160 7/29/90 Clear screen before initial output w/ -c.
v161 7/29/90 Add -T flag.
v162 8/14/90 Fix bug with +F on command line.
v163 8/21/90 Added LESSBINFMT variable.
v164 9/5/90 Added -p, LINES, COLUMNS and
unset mark ' == BOF, for 1003.2 D5.
v165 9/6/90 At EOF with -c set, don't display empty
screen when try to page forward.
v166 9/6/90 Fix G when final line in file wraps.
v167 9/11/90 Translate CR/LF -> LF for 1003.2.
v168 9/13/90 Return to curr file if "tag not found".
v169 12/12/90 G goes to EOF even if file has grown.
v170 1/17/91 Add optimization for BSD _setjmp;
fix #include ioctl.h TERMIO problem.
(thanks to Paul Eggert)
Posted to USENET.
-----------------------------------------------------------------
v171 3/6/91 Fix -? bug in get_filename.
v172 3/15/91 Fix G bug in empty file.
Fix bug with ?\n and -i and uppercase
pattern at EOF!
(thanks to Paul Eggert)
v173 3/17/91 Change N cmd to not permanently change
direction. (thanks to Brian Matthews)
v174 3/18/91 Fix bug with namelogfile not getting
cleared when change files.
v175 3/18/91 Fix bug with ++cmd on command line.
(thanks to Jim Meyering)
v176 4/2/91 Change | to not force current screen,
include marked line, start/end from
top of screen. Improve search speed.
(thanks to Don Mears)
v177 4/2/91 Add LESSHELP variable.
Fix bug with F command with -e.
Try /dev/tty for input before using fd 2.
Patches posted to USENET 4/2/91.
-----------------------------------------------------------------
v178 4/8/91 Fixed bug in globbing logfile name.
(thanks to Jim Meyering)
v179 4/9/91 Allow negative -z for screen-relative.
v180 4/9/91 Clear to eos rather than eol if "db";
don't use "sr" if "da".
(thanks to Tor Lillqvist)
v181 4/18/91 Fixed bug with "negative" chars 80 - FF.
(thanks to Benny Sander Hofmann)
v182 5/16/91 Fixed bug with attribute at EOL.
(thanks to Brian Matthews)
v183 6/1/91 Rewrite linstall to do smart config.
v184 7/11/91 Process \b in searches based on -u
rather than -i.
v185 7/11/91 -Pxxx sets short prompt; assume SIGWINCH
after a SIGSTOP. (thanks to Ken Laprade)
-----------------------------------------------------------------
v186 4/20/92 Port to MS-DOS (Microsoft C).
v187 4/23/92 Added -D option & TAB_COMPLETE_FILENAME.
v188 4/28/92 Added command line editing features.
v189 12/8/92 Fix mem overrun in anscreen.c:init;
fix edit_list to recover from bin file.
v190 2/13/93 Make TAB enter one filename at a time;
create ^L with old TAB functionality.
v191 3/10/93 Defer creating "flash" page for MS-DOS.
v192 9/6/93 Add BACK-TAB.
v193 9/17/93 Simplify binary_file handling.
v194 1/4/94 Add rudiments of alt_filename handling.
v195 1/11/94 Port back to Unix; support keypad.
-----------------------------------------------------------------
v196 6/7/94 Fix bug with bad filename; fix IFILE
type problem. (thanks to David MacKenzie)
v197 6/7/94 Fix bug with .less tables inserted wrong.
v198 6/23/94 Use autoconf installation technology.
(thanks to David MacKenzie)
v199 6/29/94 Fix MS-DOS build (thanks to Tim Wiegman).
v200 7/25/94 Clean up copyright, minor fixes.
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v201 7/27/94 Check for no memcpy; add casts to calloc;
look for regcmp in libgen.a.
(thanks to Kaveh Ghazi).
v202 7/28/94 Fix bug in edit_next/edit_prev with
non-existant files.
v203 8/2/94 Fix a variety of configuration bugs on
various systems. (thanks to Sakai
Kiyotaka, Harald Koenig, Bjorn Brox,
Teemu Rantanen, and Thorsten Lockert)
v204 8/3/94 Use strerror if available.
(thanks to J.T. Conklin)
v205 8/5/94 Fix bug in finding "me" termcap entry.
(thanks to Andreas Stolcke)
8/10/94 v205+: Change BUFSIZ to LBUFSIZE to avoid name
conflict with stdio.h.
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v206 8/10/94 Use initial_scrpos for -t to avoid
displaying first page before init().
(thanks to Dominique Petitpierre)
v207 8/12/94 Fix bug if stdout is not tty.
v208 8/16/94 Fix bug in close_altfile if goto err1
in edit_ifile. (Thanks to M.J. Hewitt)
v209 8/16/94 Change scroll to wscroll to avoid
conflict with library function.
v210 8/16/94 Fix bug with bold on 8 bit chars.
(thanks to Vitor Duarte)
v211 8/16/94 Don't quit on EOI in jump_loc / forw.
v212 8/18/94 Use time_t if available.
v213 8/20/94 Allow ospeed to be defined in termcap.h.
v214 8/20/94 Added HILITE_SEARCH, -F, ESC-u cmd.
(thanks to Paul Lew and Bob Byrnes)
v215 8/23/94 Fix -i toggle behavior.
v216 8/23/94 Process BS in all searches, not only -u.
v217 8/24/94 Added -X flag.
v218 8/24/94 Reimplement undo_search.
v219 8/24/94 Find tags marked with line number
instead of pattern.
v220 8/24/94 Stay at same position after SIG_WINCH.
v221 8/24/94 Fix bug in file percentage in big file.
v222 8/25/94 Do better if can't reopen current file.
v223 8/27/94 Support setlocale.
(thanks to Robert Joop)
v224 8/29/94 Revert v216: process BS in search
only if -u.
v225 9/6/94 Rewrite undo_search again: toggle.
v226 9/15/94 Configuration fixes.
(thanks to David MacKenzie)
v227 9/19/94 Fixed strerror config problem.
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v228 9/21/94 Fix bug in signals: repeated calls to
get_editkeys overflowed st_edittable.
v229 9/21/94 Fix "Nothing to search" error if -a
and SRCH_PAST_EOF.
v230 9/21/94 Don't print extra error msg in search
after regerror().
v231 9/22/94 Fix hilite bug if search matches 0 chars.
(thanks to John Polstra)
v232 9/23/94 Deal with weird systems that have
termios.h but not tcgetattr().
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v233 9/26/94 Use get_term() instead of pos_init() in
psignals to re-get lower_left termcap.
(Thanks to John Malecki)
v234 9/26/94 Make MIDDLE closer to middle of screen.
v235 9/27/94 Use local strchr if system doesn't have.
v236 9/28/94 Don't use libucb; use libterm if
libtermcap & libcurses doesn't work.
(Fix for Solaris; thanks to Frank Kaefer)
v237 9/30/94 Use system isupper() etc if provided.
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v238 10/6/94 Make binary non-blinking if LESSBINFMT
is set to a string without a *.
v239 10/7/94 Don't let delimit_word run back past
beginning of cmdbuf.
v240 10/10/94 Don't write into termcap buffer.
(Thanks to Benoit Speckel)
v241 10/13/94 New lesskey file format.
Don't expand filenames in search command.
v242 10/14/94 Allow lesskey specification of "literal".
v243 10/14/94 Add #stop command to lesskey.
v244 10/16/94 Add -f flag to lesskey.
v245 10/25/94 Allow TAB_COMPLETE_FILENAME to be undefd.
v246 10/27/94 Move help file to /usr/local/share.
v247 10/27/94 Add -V option.
v248 11/5/94 Add -V option to lesskey.
v249 11/5/94 Remove -f flag from lesskey; default
input file is ~/.lesskey.in, not stdin.
v250 11/7/94 Lesskey input file "-" means stdin.
v251 11/9/94 Convert cfgetospeed result to ospeed.
(Thanks to Andrew Chernov)
v252 11/16/94 Change default lesskey input file from
.lesskey.in to .lesskey.
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v253 11/21/94 Fix bug when tags file has a backslash.
v254 12/6/94 Fix -k option.
v255 12/8/94 Add #define EXAMINE to disable :e etc.
v256 12/10/94 Change highlighting: only highlite search
results (but now it is reliable).
v257 12/10/94 Add goto_line and repaint_highlight
to optimize highlight repaints.
v258 12/12/94 Fixup in hilite_line if BS_SPECIAL.
v259 12/12/94 Convert to autoconf 2.0.
v260 12/13/94 Add SECURE define.
v261 12/14/94 Use system WERASE char as EC_W_BACKSPACE.
v262 12/16/94 Add -g/-G flag and screen_hilite.
v263 12/20/94 Reimplement/optimize -G flag behavior.
v264 12/23/94 Allow EXTRA string after line-edit cmd
in lesskey file.
v265 12/24/94 Add LESSOPEN=|cmd syntax.
v266 12/26/94 Add -I flag.
v267 12/28/94 Formalize the four-byte header emitted
by a LESSOPEN pipe.
v268 12/28/94 Get rid of four-byte header.
v269 1/2/95 Close alt file before open new one.
Avoids multiple popen().
v270 1/3/95 Use VISUAL; use S_ISDIR/S_ISREG; fix
config problem with Solaris POSIX regcomp.
v271 1/4/95 Don't quit on read error.
v272 1/5/95 Get rid of -L.
v273 1/6/95 Fix ch_ungetchar bug; don't call
LESSOPEN on a pipe.
v274 1/6/95 Ported to OS/2 (thanks to Kai Uwe Rommel)
v275 1/18/95 Fix bug if toggle -G at EOF.
v276 1/30/95 Fix OS/2 version.
v277 1/31/95 Add "next" charset; don't display ^X
for X > 128.
v278 2/14/95 Change default for -G.
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v279 2/22/95 Add GNU options --help, --version.
Minor config fixes.
v280 2/24/95 Clean up calls to glob(); don't set #
if we can't open the new file.
v281 2/24/95 Repeat search should turn on hilites.
v282 3/2/95 Minor fixes.
v283 3/2/95 Fix homefile; make OS2 look in $HOME.
v284 3/2/95 Error if "v" on LESSOPENed file;
"%" figures out file size on pipe.
v285 3/7/95 Don't set # in lsystem;
lesskey try $HOME first.
v286 3/7/95 Reformat change history (too much free time?).
v287 3/8/95 Fix hilite bug if overstrike multiple chars.
v288 3/8/95 Allow lesskey to override get_editkey keys.
v289 3/9/95 Fix adj_hilite bug when line gets processed by
hilite_line more than once.
v290 3/9/95 Make configure automatically. Fix Sequent problem
with incompatible sigsetmask().
Posted to prep.ai.mit.edu
-----------------------------------------------------------------
v291 3/21/95 Add #env to lesskey. Fix MS-DOS build.
Posted to simtel.
-----------------------------------------------------------------
v292 4/24/95 Add MS-DOS support for Borland C.
Fix arrow keys in MS-DOS versions.
v293 4/28/95 Add auto-versioning stuff to make dist.
v294 5/12/95 Fix Borland build.
v295 1/20/96 Fix search on squished file; add /@@.
v296 1/23/96 Allow cmdbuf larger than screen width.
v297 1/24/96 Don't call termcap if tgetent fails;
add #defines for buffers.
v298 1/24/96 Change @@ to ^K.
Add alternate search modifiers ^N, ^F, ^E.
v299 1/25/96 Fix percent overflow in jump_percent (thanks to Brent Wiese);
don't send "ti" after shell command till RETURN pressed.
v300 1/25/96 Change -U to print tabs as ^I.
v301 1/30/96 Make hilites work in cmd F output.
v302 1/31/96 Fix cmd F to notice window-change signals.
v303 1/31/96 Add ESC-SPACE command.
v304 2/1/96 Add ^R search modifier; add LESSSECURE.
v305 2/2/96 Workaround Linux /proc kernel bug; add LESSKEY.
v306 3/16/96 Minor fixes.
v307 3/25/96 Allow cmd line arg "--"; fix DOS & OS/2 defines.h.
v308 4/4/96 Port to OS-9 (thanks to Boisy Pitre); fix -d.
v309 4/9/96 Fix OS-9 version; fix tags bug with "$".
v310 4/10/96 Get rid of HELPFILE.
v311 4/22/96 Add Windows32 support; merge doscreen.c into screen.c.
v312 4/24/96 Don't quit after "cannot reopen" error.
v313 4/25/96 Added horizontal scrolling.
v314 4/26/96 Modified -e to quit on reaching end of a squished file.
v315 4/26/96 Fix "!;TAB" bug.
v316 5/2/96 Make "|a" when (a < curr screen) go to end of curr screen.
v317 5/14/96 Various fixes for the MS-DOS and OS/2 builds.
Added ## and %% handling for filenames
v318 5/29/96 Port to OS-9 Microware compiler; minor fixes
(thanks to Martin Gregorie).
v319 7/8/96 Fix Windows port (thanks to Jeff Paquette).
v320 7/11/96 Final fixes for Windows port.
v321 7/18/96 Minor fixes.
Posted to Web page.
-----------------------------------------------------------------
v322 8/13/96 Fix bug in shell escape from help file; add support for
Microsoft Visual C under Windows; numerous small fixes.
v323 8/19/96 Fixes for Windows version (thanks to Simon Munton);
fix for Linux library weirdness (thanks to Jim Diamond);
port to DJGPP (thanks to Eli Zaretskii).
v324 8/21/96 Add support for spaces in filenames (thanks to Simon Munton).
v325 8/21/96 Add lessecho, for spaces in filenames under Unix.
v326 8/27/96 Fix DJGPP version.
v327 9/1/96 Reorganize lglob, make spaces in filenames work better in Unix.
v328 10/7/96 Append / to directory name in filename completion.
Fix MS-DOS and OS-9 versions.
v329 10/11/96 Fix more MS-DOS bugs; add LESSSEPARATOR; add -" option.
Add LESSMETACHARS, LESSMETAESCAPE.
v330 10/21/96 Minor fixes.
Posted to Web page.
-----------------------------------------------------------------
v331 4/22/97 Various Windows fixes (thanks to Gurusamy Sarathy).
v332 4/22/97 Enter filenames from cmd line into edit history.
Posted to Web page.
-----------------------------------------------------------------
v333 3/4/99 Changed -w to highlite new line after forward movement.
v334 3/9/99 Avoid overflowing prompt buffer; add %d and %D.
v335 3/20/99 Add EBCDIC support (thanks to Thomas Dorner).
Use HOMEDRIVE/HOMEPATH on Windows (thanks to Preston Bannister).
Posted to Web page.
-----------------------------------------------------------------
v336 4/8/99 Fix installation bugs.
v337 4/9/99 Fix another installation bug.
Posted to Web page.
-----------------------------------------------------------------
v338 4/13/99 Add support for long option names.
v339 4/18/99 Add \k, long option names to lesskey. Add -^P. Add :d.
v340 4/21/99 Add regexec2. Fix Windows build.
Posted to Web page.
-----------------------------------------------------------------
v341 5/6/99 Add -F option; %c & ?c prompt escapes.
(Thanks to Michele Maltoni)
v342 7/22/99 Add system-wide lesskey file; allow GPL or Less License.
v343 9/23/99 Support UTF-8 (Thanks to Robert Brady).
Add %P and ?P in prompts.
v344 10/27/99 -w highlights target line of g and p commands.
v345 10/29/99 Make -R pass thru ESC but not other control chars.
Posted to Web page.
-----------------------------------------------------------------
v346 11/4/99 Fix bugs in long option processing; R cmd should clear hilites.
Posted to Web page.
-----------------------------------------------------------------
v347 12/13/99 Fixes for DJGPP version (thanks to Eli Zaretskii).
v348 12/28/99 Fix deleting file with marks (thanks to Dimitar Jekov).
Fix color problem in DJGPP version (thanks to Eli Zaretskii).
v349 1/24/00 Fix minor DJGPP bugs; check environment vars for UTF-8;
add --with-editor (thanks to Eli, Markus Kuhn, Thomas Schoepf).
v350 3/1/00 Fix clear-while-standout bug.
v351 3/5/00 Change -M and = prompts to show top & bottom line number.
Posted to Web page.
-----------------------------------------------------------------
v352 3/8/00 Fix scan_option NULL dereference.
-----------------------------------------------------------------
v353 3/20/00 Fix SECURE compile bug, allow space after numeric option.
v354 3/23/00 Add support for PCRE; add --with-regex configure option.
-----------------------------------------------------------------
v355 6/28/00 Add -# option (thanks to Andy Levinson).
v356 7/5/00 Add -J option.
v357 7/6/00 Support sigprocmask.
-----------------------------------------------------------------
v358 7/8/00 Fix problems with #stop in lesskey file.
Posted to Web page.
-----------------------------------------------------------------
v359 9/10/00 Fixes for Win32 display problems (thanks to Maurizio Vairani).
v360 1/17/01 Move sysless to etc.
v361 12/4/01 Add IBM-1047 charset & EBCDIC fixes (thanks to Thomas Dorner).
Fix 32 bit dependencies (thanks to Paul Eggert).
Fix UTF-8 overstriking (thanks to Robert Brady).
v362 12/4/01 Make status column show search targets.
v363 12/6/01 Add --no-keypad option.
Add variable width tabstops (thanks to Peter Samuelson).
v364 12/10/01 Better handling of very long lines in input;
Fix horizontal shifting of colored text.
v365 12/11/01 Fix overstriking of tabs;
Add support for global(1) and multiple tag matches
(thanks to Shigio Yamaguchi and Tim Vanderhoek).
v366 12/11/01 Fixes for OS/2 (thanks to Kyosuke Tokoro).
v367 12/13/01 Allow -D and -x options to terminate without dollar sign;
Right/left arrow when entering N are shift cmds, not line edit.
v368 12/18/01 Update lesskey commands.
v370 12/23/01 Fix tags error messages.
Posted to Web page.
-----------------------------------------------------------------
v371 12/26/01 Fix new_file bug; use popen in Windows version;
fix some compiler warnings.
v372 12/29/01 Make -b be in units of 1K.
v373 1/14/02 Improve handling of filenames containing shell metachars.
v374 2/7/02 Fix memory leak; fix bug in -x argument parsing.
v375 4/7/02 Fix searching for SGR sequences; fix SECURE build;
add SGR support to DJGPP version (thanks to Eli Zaretskii).
v376 6/10/02 Fix bug in overstriking mulitbyte UTF-8 characters
(thanks to Jungshik Shin).
Posted to Web page.
-----------------------------------------------------------------
v377 9/10/02 Fix bug in Windows version when file contains CR;
fix bug in search highlights with -R;
make initial buffer limit really be 64K not unlimited.
v378 9/30/02 Misc bug fixes and compiler warning cleanup.
Posted to Web page.
-----------------------------------------------------------------
v379 11/23/02 Add -L option; fix bug with ctrl-K in lesskey files;
improve UTF-8 overstriking and underscore overstriking;
fix minor man page problems; change to autoconf 2.54.
v380 11/24/02 Make LINENUM same as POSITION.
v381 11/28/02 Make -N use 7 columns for line number if possible.
-----------------------------------------------------------------
v382 2/3/04 Remove copyrighted code.
-----------------------------------------------------------------
v383 2/16/04 Add history file; add -K option; improve UTF-8 handling;
fix some signed char bugs (thanks to Christian Biere);
fix some upper/lower case bugs (thanks to Bjoern Jacke);
add erase2 char (thanks to David Lawrence);
add windows charset (thanks to Dimitar Zhekov).
v384 2/20/04 Improvements in UTF-8 handling.
v385 2/23/04 Fix UTF-8 output bug.
-----------------------------------------------------------------
v386 9/13/05 Improvements to UTF-8 shift & color (thanks to Charles Levert);
protect against invalid LESSOPEN and LESSCLOSE values.
v387 9/14/05 Update Charles Levert's UTF-8 patch.
v388 9/14/05 Change history behavior; change most sprintf calls to snprintf.
v389 9/14/05 Fix copy & paste with long lines; improve performance of
expand_linebuf; fix crash in init_mlist;
v390 9/15/05 Show search matches in status column even if -G is set.
-----------------------------------------------------------------
v391 9/17/05 Fix bugs.
v392 10/14/05 Fix line wrapping bug.
v393 10/19/05 Allow multiple attributes per char; fix bold+underline bug
(thanks again to Charles Levert).
v394 11/8/05 Fix prompt bug; fix compile problem in Windows build.
-----------------------------------------------------------------
v395 1/12/07 Update Unicode tables (thanks to Charles Levert);
don't chmod if LESSHISTFILE = /dev/null;
make -f work for directories; support DESTDIR in Makefile;
fix sigset_t detection in configure;
make "t" cmd traverse tags in correct order
v396 1/13/07 Add compatibility with POSIX more.
v397 3/21/07 Allow decimal point in number for % command;
Allow decimal point in number for -j option;
Allow n command to fetch last search pattern from history
(thanks to arno).
v398 3/22/07 Don't rewrite history file if not necessary;
fix bug when filenames contain "$".
v399 3/22/07 Don't move to bottom of screen at startup;
don't output extraneous newlines.
v400 3/23/07 Allow search to find pattern after null byte (PCRE and no-regex)
(thanks to Michael Constant).
-----------------------------------------------------------------
v401 3/24/07 Minor documentation fixes.
v402 3/30/07 Fix autoconf bug when memcpy etc are inline;
fix bug in terminating number following -j option.
v403 5/25/07 Fix Windows build.
v404 6/5/07 Fix display bug with F command and long lines.
v405 6/17/07 Fix display bug when using -w option.
v406 6/17/07 Fix secure build.
v407 8/16/07 Fix bugs; support CSI chars.
v408 10/1/07 Fix bug in -i with non-ASCII chars.
v409 10/12/07 Fix crash when viewing text with invalid UTF-8 sequences.
v411 11/6/07 Fix case-insensitive searching with non-ASCII text.
v412 11/6/07 Use symbolic SEEK constants.
v413 11/6/07 Fix search highlight bug with non-ASCII text.
v414 11/6/07 Fix display bug with no-wrap terminals.
v415 11/14/07 Add --follow-name option.
v416 11/22/07 Fix crash when searching text with invalid UTF-8 sequences.
v417 12/31/07 Don't support single-char CSI in UTF-8 mode;
fix bug with -R and invalid CSI sequences;
fix bug searching text with SGR sequences with -r;
emulate SGR sequences in WIN32 build.
v418 12/31/07 Clean up.
-----------------------------------------------------------------
v419 1/16/08 Make CSI char 0x9B work in UTF-8 mode (thanks to Colin Watson).
v420 2/24/08 Add & command; fix -F option; fix '' after G.
v421 2/24/08 Ignore filtered lines when searching.
v422 3/2/08 Output CR at startup.
v423 5/27/08 Clean up.
v424 6/16/08 Fix compile bug with pcre; don't filter help file.
v425 7/14/08 Fix non-ANSI code in list handling in ch.c.
v426 10/27/08 Fix ignaw terminal handling (thanks to Per Hedeland);
fix binary file detection in UTF-8 mode.
v427 3/16/09 A few Win32 fixes (thanks to Jason Hood).
v428 3/30/09 Add "|-" syntax to LESSOPEN.
v429 4/10/09 Fix search highlighting bug with underlined text.
-----------------------------------------------------------------
v430 4/22/09 Don't pass "-" to non-pipe LESSOPEN unless it starts with "-".
v431 4/29/09 Fix highlight bug when match is at end of line.
v432 6/27/09 Better fix for highlight bugs;
fix new problems with ignaw terminals.
v433 6/28/09 Cleanup search code.
v434 6/29/09 More cleanup.
v435 7/04/09 Fix bugs with non-regex filtering.
v436 7/05/09 Fix memory leak.
-----------------------------------------------------------------
v437 7/14/09 Fix bug in handling some long option names;
make percentage calculation more accurate.
v438 12/29/10 Fix bugs with -i/-I and & filtering;
exit with status 2 on ctrl-C with -K.
v439 12/31/10 Add -A option.
v440 1/5/11 Fix bug displaying prompt after = command.
v441 1/21/11 Fix semi-infinite loop if no newlines in file;
make new -A behavior the default.
-----------------------------------------------------------------
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.
*/
char version[] = "444";

121
external/bsd/less/less2netbsd vendored Executable file
View file

@ -0,0 +1,121 @@
#!/bin/sh
#
# $NetBSD: less2netbsd,v 1.5 2011/07/03 23:25:01 tron Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
#
# This code is derived from software contributed to The NetBSD Foundation
# by Matthias Scheler.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 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.
#
# less2netbsd:
# Prepare a less source tree for import into the NetBSD source repository.
PROGNAME=$(basename "$0")
if [ $# -ne 1 ]
then
echo "Usage: $PROGNAME <dir>" >&2
exit 1
fi
DIRNAME="$1"
# Change to the source directory.
if [ -d "$DIRNAME" ] && cd "$DIRNAME"
then
:
else
echo "${PROGNAME}: cannot access directory \"$DIRNAME\"." >&2
exit
fi
# Check whether the source directory looks sane.
CHECK_FILES="LICENSE configure less.h version.c"
for FILENAME in $CHECK_FILES
do
if [ ! -f "$FILENAME" ]
then
echo "${PROGNAME}: less distribution incomplete." >&2
exit
fi
done
# Check whether the "configure" was run.
REQUIRED_HEADERS=defines.h
for FILENAME in $REQUIRED_HEADERS
do
if [ ! -f "$FILENAME" ]
then
echo "${PROGNAME}: Please run \"./configure\"." >&2
exit
fi
done
# Fix the permissions.
find . -type d -print0 | xargs -0 chmod 755
find . -type f -print0 | xargs -0 chmod 644
chmod 755 configure
# Remove files generated by "configure".
REMOVE_FILES="Makefile config.log config.status configure.lineno"
rm -f $REMOVE_FILES
# Add NetBSD RCS Ids.
find . -type f -name "*.[ch]" -print |
while read FILENAME
do
if ! grep -q '\$NetBSD' "$FILENAME"
then
NEW_FILENAME="${FILENAME}.new"
rm -f "${NEW_FILENAME}"
(echo "/* \$NetBSD\$ */"
echo ""
cat "$FILENAME") >"${NEW_FILENAME}"
mv -f "${NEW_FILENAME}" "$FILENAME"
fi
done
# Remove formatted manual pages.
find . -type f -name "*.man" -delete
# Rename unformatted manual pages.
find . -type f -name "*.nro" -print |
while read FILENAME
do
mv "$FILENAME" "${FILENAME%.nro}.1"
done
# Determine the version number.
VERSION=$(sed -n -e 's#char version\[\] = "\(.*\)";#\1#p' version.c)
# Print out information for the import.
cat <<EOF
You can import now.
Path: src/external/bsd/less/dist
Vendortag: GREENWOODSOFTWARE
Releasetag: LESS-$VERSION
EOF
exit 0

View file

@ -50,6 +50,7 @@
2013/07/15 12:00:00,external/bsd/kyua-atf-compat 2013/07/15 12:00:00,external/bsd/kyua-atf-compat
2013/07/15 12:00:00,external/bsd/kyua-cli 2013/07/15 12:00:00,external/bsd/kyua-cli
2013/07/15 12:00:00,external/bsd/kyua-testers 2013/07/15 12:00:00,external/bsd/kyua-testers
2012/10/17 12:00:00,external/bsd/less
2012/10/17 12:00:00,external/bsd/libarchive 2012/10/17 12:00:00,external/bsd/libarchive
2013/07/15 12:00:00,external/bsd/lutok 2013/07/15 12:00:00,external/bsd/lutok
2012/10/17 12:00:00,external/bsd/Makefile 2012/10/17 12:00:00,external/bsd/Makefile