diff options
Diffstat (limited to 'manual')
-rw-r--r-- | manual/filesys.texi | 11 | ||||
-rw-r--r-- | manual/string.texi | 50 | ||||
-rw-r--r-- | manual/texinfo.tex | 18 |
3 files changed, 69 insertions, 10 deletions
diff --git a/manual/filesys.texi b/manual/filesys.texi index afe072c594..5ddd8a20a7 100644 --- a/manual/filesys.texi +++ b/manual/filesys.texi @@ -455,8 +455,8 @@ value are selected. Finally the entries in the @var{namelist} are sorted using the user supplied function @var{cmp}. The arguments of the @var{cmp} function are of type @code{struct dirent **}. I.e., one cannot directly use the -@code{strcmp} or @code{strcoll} function; see the function -@code{alphasort} below. +@code{strcmp} or @code{strcoll} function; see the functions +@code{alphasort} and @code{versionsort} below. The return value of the function gives the number of entries placed in @var{namelist}. If it is @code{-1} an error occurred and the global @@ -465,7 +465,7 @@ variable @code{errno} contains more information on the error. As said above the fourth argument to the @code{scandir} function must be a pointer to a sorting function. For the convenience of the programmer -the GNU C library contains an implementation of a function which is very +the GNU C library contains implementations of functions which are very helpful for this purpose. @deftypefun int alphasort (const void *@var{a}, const void *@var{b}) @@ -478,6 +478,11 @@ Return value of is less than, equal to, or greater than zero depending on the order of the two entries @var{a} and @var{b}. @end deftypefun +@deftypefun int versionsort (const void *@var{a}, const void *@var{b}) +The @code{versionsort} function is like @code{alphasort}, excepted that it +uses the @code{strverscmp} function internally. +@end deftypefun + @node Simple Directory Lister Mark II @subsection Simple Program to List a Directory, Mark II diff --git a/manual/string.texi b/manual/string.texi index 8f09ac9728..e358b2015f 100644 --- a/manual/string.texi +++ b/manual/string.texi @@ -609,6 +609,56 @@ strncmp ("hello, world", "hello, stupid world!!!", 5) @end smallexample @comment string.h +@comment GNU +@deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2}) +The @code{strverscmp} function compares the string @var{s1} against +@var{s2}, considering them as holding indices/version numbers. Return +value follows the same conventions as found in the @code{strverscmp} +function. In fact, if @var{s1} and @var{s2} contain no digits, +@code{strverscmp} behaves like @code{strcmp}. + +Basically, we compare strings normaly (character by character), until +we find a digit in each string - then we enter a special comparison +mode, where each sequence of digit is taken as a whole. If we reach the +end of these two parts without noticing a difference, we return to the +standard comparison mode. There are two types of numeric parts: +"integral" and "fractionnal" (these laters begins with a '0'). The types +of the numeric parts affect the way we sort them: + +@itemize @bullet +@item +integral/integral: we compare values as you would expect. + +@item +fractionnal/integral: the fractionnal part is less than the integral one. +Again, no surprise. + +@item +fractionnal/fractionnal: the things become a bit more complex. +if the common prefix contains only leading zeroes, the longest part is less +than the other one; else the comparison behaves normaly. +@end itemize + +@smallexample +strverscmp ("no digit", "no digit") + @result{} 0 /* @r{same behaviour as strverscmp.} */ +strverscmp ("item#99", "item#100") + @result{} <0 /* @r{same prefix, but 99 < 100.} */ +strverscmp ("alpha1", "alpha001") + @result{} >0 /* @r{fractionnal part inferior to integral one.} */ +strverscmp ("part1_f012", "part1_f01") + @result{} >0 /* @r{two fractionnal parts.} */ +strverscmp ("foo.009", "foo.0") + @result{} <0 /* @r{idem, but with leading zeroes only.} */ +@end smallexample + +This function is especially usefull when dealing with filename sorting, +because filenames frequently hold indices/version numbers. + +@code{strverscmp} is a GNU extension. +@end deftypefun + +@comment string.h @comment BSD @deftypefun int bcmp (const void *@var{a1}, const void *@var{a2}, size_t @var{size}) This is an obsolete alias for @code{memcmp}, derived from BSD. diff --git a/manual/texinfo.tex b/manual/texinfo.tex index 72050b8e22..6bae66900a 100644 --- a/manual/texinfo.tex +++ b/manual/texinfo.tex @@ -1,5 +1,5 @@ %% TeX macros to handle Texinfo files. -%% $Id: texinfo.tex,v 2.198 1997/05/07 15:16:03 drepper Exp $ +%% $Id: texinfo.tex,v 2.199 1997/05/20 11:11:48 drepper Exp $ % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, % 94, 95, 96, 97 Free Software Foundation, Inc. @@ -36,7 +36,7 @@ % This automatically updates the version number based on RCS. \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} -\deftexinfoversion$Revision: 2.198 $ +\deftexinfoversion$Revision: 2.199 $ \message{Loading texinfo package [Version \texinfoversion]:} % If in a .fmt file, print the version number @@ -1271,8 +1271,6 @@ where each line of input produces a line of output.} \def\ctrl #1{{\tt \rawbackslash \hat}#1} \let\file=\samp -\let\url=\samp % perhaps include a hypertex \special eventually -\def\email#1{$\langle${\tt #1}$\rangle$} % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. @@ -1325,7 +1323,7 @@ where each line of input produces a line of output.} \def\realdash{-} \def\codedash{-\discretionary{}{}{}} -\def\codeunder{\normalunderscore\discretionary{}{}{}} +\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}} \def\codex #1{\tclose{#1}\endgroup} %\let\exp=\tclose %Was temporary @@ -1339,6 +1337,12 @@ where each line of input produces a line of output.} \else{\tclose{\ttsl\look}}\fi \else{\tclose{\ttsl\look}}\fi} +% @url, @email. Quotes do not seem necessary. +\let\url=\code % perhaps include a hypertex \special eventually +% rms does not like the angle brackets --karl, 17may97. +%\def\email#1{$\langle${\tt #1}$\rangle$} +\let\email=\code + % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have @@ -3417,8 +3421,8 @@ width0pt\relax} \fi \let\.=\ptexdot \let\*=\ptexstar \let\dots=\ptexdots -\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}} -\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi} +\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% +\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% \let\bullet=\ptexbullet \let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext |