From 5280f9a0cd1f9ba200422ebba65d1e0133410995 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sat, 13 Sep 2014 09:43:21 -0700 Subject: Initial. --- COPYING | 339 +++ DOAP.rdf.xml | 85 + HISTORY | 128 + INSTALL | 70 + LSM | 26 + Makefile | 76 + Makefile.in | 76 + README | 41 + README.GNU-WIN32 | 32 + README.HP | 83 + README.IRIX | 28 + SPDX.rdf.xml | 35 + TODO | 28 + catopen/README | 29 + catopen/catopen.c | 209 ++ conf_script | 87 + configure | 1379 ++++++++++ gencat/Makefile | 18 + gencat/gencat.c | 265 ++ gencat/gencat.h | 107 + gencat/genlib.c | 892 +++++++ gencat/msgcat.h | 178 ++ man/Makefile | 65 + man/Makefile.in | 61 + man/bg.txt | 1 + man/bg/README | 7 + man/bg/apropos.man | 37 + man/bg/makewhatis.man | 104 + man/bg/man.conf.man | 59 + man/bg/man.man | 472 ++++ man/bg/whatis.man | 39 + man/cs.txt | 1 + man/cs/apropos.man | 29 + man/cs/man.conf.man | 43 + man/cs/man.man | 239 ++ man/cs/whatis.man | 32 + man/da.txt | 1 + man/da/apropos.man | 30 + man/da/man.conf.man | 45 + man/da/man.man | 253 ++ man/da/whatis.man | 32 + man/de.txt | 1 + man/de/README | 6 + man/de/apropos.man | 29 + man/de/man.conf.man | 43 + man/de/man.man | 225 ++ man/de/whatis.man | 31 + man/el.txt | 1 + man/el/apropos.man | 29 + man/el/hman.man | 71 + man/el/makewhatis.man | 109 + man/el/man.conf.man | 45 + man/el/man.man | 491 ++++ man/el/man2html.man | 157 ++ man/el/whatis.man | 31 + man/en.txt | 1 + man/en/apropos.1 | 36 + man/en/apropos.man | 32 + man/en/makewhatis.8 | 104 + man/en/makewhatis.man | 100 + man/en/man.1 | 528 ++++ man/en/man.conf.5 | 50 + man/en/man.conf.man | 46 + man/en/man.man | 524 ++++ man/en/whatis.1 | 38 + man/en/whatis.man | 34 + man/es.txt | 1 + man/es/README | 9 + man/es/apropos.man | 41 + man/es/makewhatis.man | 108 + man/es/man.conf.man | 55 + man/es/man.man | 240 ++ man/es/whatis.man | 43 + man/fi.txt | 1 + man/fi/apropos.man | 26 + man/fi/man.conf.man | 39 + man/fi/man.man | 286 +++ man/fi/whatis.man | 28 + man/fr.txt | 1 + man/fr/apropos.man | 47 + man/fr/makewhatis.man | 123 + man/fr/man.conf.man | 77 + man/fr/man.man | 496 ++++ man/fr/whatis.man | 49 + man/hr.txt | 1 + man/hr/apropos.man | 31 + man/hr/man.conf.man | 56 + man/hr/man.man | 280 ++ man/hr/whatis.man | 35 + man/it.txt | 1 + man/it/apropos.man | 37 + man/it/makewhatis.man | 103 + man/it/man.conf.man | 55 + man/it/man.man | 504 ++++ man/it/whatis.man | 39 + man/ja.txt | 1 + man/ja/apropos.man | 34 + man/ja/man.conf.man | 47 + man/ja/man.man | 262 ++ man/ja/whatis.man | 34 + man/ko.txt | 1 + man/ko/apropos.man | 25 + man/ko/man.conf.man | 42 + man/ko/man.man | 264 ++ man/ko/whatis.man | 29 + man/nl.txt | 1 + man/nl/apropos.man | 28 + man/nl/man.conf.man | 42 + man/nl/man.man | 259 ++ man/nl/whatis.man | 32 + man/pl.txt | 1 + man/pl/apropos.man | 35 + man/pl/man.conf.man | 49 + man/pl/man.man | 427 ++++ man/pl/whatis.man | 37 + man/pt.txt | 1 + man/pt/README | 6 + man/pt/apropos.man | 28 + man/pt/man.conf.man | 39 + man/pt/man.man | 156 ++ man/pt/whatis.man | 30 + man/ro.txt | 1 + man/ro/apropos.man | 32 + man/ro/makewhatis.man | 96 + man/ro/man.conf.man | 42 + man/ro/man.man | 434 ++++ man/ro/man2html.man | 144 ++ man/ro/whatis.man | 34 + man/sl.txt | 1 + man/sl/apropos.man | 29 + man/sl/man.conf.man | 42 + man/sl/man.man | 263 ++ man/sl/whatis.man | 31 + man2html/Makefile | 70 + man2html/Makefile.in | 66 + man2html/README | 91 + man2html/TODO | 43 + man2html/abbrev.c | 62 + man2html/cgibase.c | 143 ++ man2html/defs.h | 41 + man2html/glimpse_filters | 3 + man2html/hman | 96 + man2html/hman.1 | 69 + man2html/hman.sh | 96 + man2html/locales/en/hman.1 | 69 + man2html/locales/en/man2html.1 | 151 ++ man2html/locales/fr/man2html.1 | 165 ++ man2html/locales/it/hman.1 | 71 + man2html/locales/it/man2html.1 | 153 ++ man2html/man2html.1 | 151 ++ man2html/man2html.c | 3241 ++++++++++++++++++++++++ man2html/scripts/cgi-aux/man/man.aux | 75 + man2html/scripts/cgi-aux/man/mansearch.aux | 49 + man2html/scripts/cgi-aux/man/mansearchhelp.aux | 295 +++ man2html/scripts/cgi-bin/man/man2html | 109 + man2html/scripts/cgi-bin/man/mansearch | 192 ++ man2html/scripts/cgi-bin/man/mansearchhelp | 32 + man2html/scripts/cgi-bin/man/mansec | 183 ++ man2html/scripts/cgi-bin/man/manwhatis | 208 ++ man2html/strdefs.c | 176 ++ misc/README | 4 + misc/locales/it/manlint.1 | 66 + misc/man-preformat.c | 332 +++ misc/manlint | 225 ++ misc/manlint.1 | 63 + msgs/Makefile.in | 34 + msgs/README | 25 + msgs/gencat.in | 3 + msgs/gencat207fix.sh | 2 + msgs/inst.sh | 38 + msgs/mess.bg | 191 ++ msgs/mess.bg.codeset | 1 + msgs/mess.cs | 170 ++ msgs/mess.cs.codeset | 1 + msgs/mess.da | 170 ++ msgs/mess.da.codeset | 1 + msgs/mess.de | 186 ++ msgs/mess.de.codeset | 1 + msgs/mess.el | 171 ++ msgs/mess.el.codeset | 1 + msgs/mess.en | 188 ++ msgs/mess.en.codeset | 1 + msgs/mess.es | 170 ++ msgs/mess.es.codeset | 1 + msgs/mess.fi | 170 ++ msgs/mess.fi.codeset | 1 + msgs/mess.fr | 190 ++ msgs/mess.fr.codeset | 1 + msgs/mess.hr | 170 ++ msgs/mess.hr.codeset | 1 + msgs/mess.it | 190 ++ msgs/mess.it.codeset | 1 + msgs/mess.ja | 171 ++ msgs/mess.ja.codeset | 1 + msgs/mess.ko | 171 ++ msgs/mess.ko.codeset | 1 + msgs/mess.nl | 189 ++ msgs/mess.nl.codeset | 1 + msgs/mess.pl | 188 ++ msgs/mess.pl.codeset | 1 + msgs/mess.pt | 165 ++ msgs/mess.pt.codeset | 1 + msgs/mess.ro | 170 ++ msgs/mess.ro.codeset | 1 + msgs/mess.ru | 170 ++ msgs/mess.ru.codeset | 1 + msgs/mess.sl | 171 ++ msgs/mess.sl.codeset | 1 + msgs/mess.zh_TW.UTF-8 | 170 ++ src/Makefile | 124 + src/Makefile.in | 120 + src/apropos | 88 + src/apropos.sh | 88 + src/defs.h | 26 + src/different.c | 72 + src/different.h | 3 + src/glob.c | 682 +++++ src/glob.h | 1 + src/gripedefs.h | 87 + src/gripes.c | 139 + src/gripes.h | 5 + src/join.c | 28 + src/makemsg | Bin 0 -> 11755 bytes src/makemsg.c | 175 ++ src/makewhatis | 460 ++++ src/makewhatis.in | 456 ++++ src/makewhatis.sh | 456 ++++ src/man-config.c | 297 +++ src/man-config.h | 6 + src/man-getopt.c | 322 +++ src/man-getopt.h | 6 + src/man-iconv.c | 163 ++ src/man-iconv.h | 1 + src/man.c | 1366 ++++++++++ src/man.conf | 144 ++ src/man.conf.in | 140 + src/man.h | 22 + src/man2dvi | 36 + src/manfile.c | 337 +++ src/manfile.h | 36 + src/manpath.c | 412 +++ src/manpath.h | 5 + src/msg.c | 106 + src/mwi | 19 + src/ndir.h | 51 + src/paths.h | 43 + src/paths.h.in | 39 + src/to_cat.c | 171 ++ src/to_cat.h | 3 + src/util.c | 305 +++ src/util.h | 13 + src/version.h | 1 + src/whatis | 88 + version | 1 + 254 files changed, 31979 insertions(+) create mode 100644 COPYING create mode 100644 DOAP.rdf.xml create mode 100644 HISTORY create mode 100644 INSTALL create mode 100644 LSM create mode 100644 Makefile create mode 100644 Makefile.in create mode 100644 README create mode 100644 README.GNU-WIN32 create mode 100644 README.HP create mode 100644 README.IRIX create mode 100644 SPDX.rdf.xml create mode 100644 TODO create mode 100644 catopen/README create mode 100644 catopen/catopen.c create mode 100755 conf_script create mode 100755 configure create mode 100644 gencat/Makefile create mode 100644 gencat/gencat.c create mode 100644 gencat/gencat.h create mode 100644 gencat/genlib.c create mode 100644 gencat/msgcat.h create mode 100644 man/Makefile create mode 100644 man/Makefile.in create mode 100644 man/bg.txt create mode 100644 man/bg/README create mode 100644 man/bg/apropos.man create mode 100644 man/bg/makewhatis.man create mode 100644 man/bg/man.conf.man create mode 100644 man/bg/man.man create mode 100644 man/bg/whatis.man create mode 100644 man/cs.txt create mode 100644 man/cs/apropos.man create mode 100644 man/cs/man.conf.man create mode 100644 man/cs/man.man create mode 100644 man/cs/whatis.man create mode 100644 man/da.txt create mode 100644 man/da/apropos.man create mode 100644 man/da/man.conf.man create mode 100644 man/da/man.man create mode 100644 man/da/whatis.man create mode 100644 man/de.txt create mode 100644 man/de/README create mode 100644 man/de/apropos.man create mode 100644 man/de/man.conf.man create mode 100644 man/de/man.man create mode 100644 man/de/whatis.man create mode 100644 man/el.txt create mode 100644 man/el/apropos.man create mode 100644 man/el/hman.man create mode 100644 man/el/makewhatis.man create mode 100644 man/el/man.conf.man create mode 100644 man/el/man.man create mode 100644 man/el/man2html.man create mode 100644 man/el/whatis.man create mode 100644 man/en.txt create mode 100644 man/en/apropos.1 create mode 100644 man/en/apropos.man create mode 100644 man/en/makewhatis.8 create mode 100644 man/en/makewhatis.man create mode 100644 man/en/man.1 create mode 100644 man/en/man.conf.5 create mode 100644 man/en/man.conf.man create mode 100644 man/en/man.man create mode 100644 man/en/whatis.1 create mode 100644 man/en/whatis.man create mode 100644 man/es.txt create mode 100644 man/es/README create mode 100644 man/es/apropos.man create mode 100644 man/es/makewhatis.man create mode 100644 man/es/man.conf.man create mode 100644 man/es/man.man create mode 100644 man/es/whatis.man create mode 100644 man/fi.txt create mode 100644 man/fi/apropos.man create mode 100644 man/fi/man.conf.man create mode 100644 man/fi/man.man create mode 100644 man/fi/whatis.man create mode 100644 man/fr.txt create mode 100644 man/fr/apropos.man create mode 100644 man/fr/makewhatis.man create mode 100644 man/fr/man.conf.man create mode 100644 man/fr/man.man create mode 100644 man/fr/whatis.man create mode 100644 man/hr.txt create mode 100644 man/hr/apropos.man create mode 100644 man/hr/man.conf.man create mode 100644 man/hr/man.man create mode 100644 man/hr/whatis.man create mode 100644 man/it.txt create mode 100644 man/it/apropos.man create mode 100644 man/it/makewhatis.man create mode 100644 man/it/man.conf.man create mode 100644 man/it/man.man create mode 100644 man/it/whatis.man create mode 100644 man/ja.txt create mode 100644 man/ja/apropos.man create mode 100644 man/ja/man.conf.man create mode 100644 man/ja/man.man create mode 100644 man/ja/whatis.man create mode 100644 man/ko.txt create mode 100644 man/ko/apropos.man create mode 100644 man/ko/man.conf.man create mode 100644 man/ko/man.man create mode 100644 man/ko/whatis.man create mode 100644 man/nl.txt create mode 100644 man/nl/apropos.man create mode 100644 man/nl/man.conf.man create mode 100644 man/nl/man.man create mode 100644 man/nl/whatis.man create mode 100644 man/pl.txt create mode 100644 man/pl/apropos.man create mode 100644 man/pl/man.conf.man create mode 100644 man/pl/man.man create mode 100644 man/pl/whatis.man create mode 100644 man/pt.txt create mode 100644 man/pt/README create mode 100644 man/pt/apropos.man create mode 100644 man/pt/man.conf.man create mode 100644 man/pt/man.man create mode 100644 man/pt/whatis.man create mode 100644 man/ro.txt create mode 100644 man/ro/apropos.man create mode 100644 man/ro/makewhatis.man create mode 100644 man/ro/man.conf.man create mode 100644 man/ro/man.man create mode 100644 man/ro/man2html.man create mode 100644 man/ro/whatis.man create mode 100644 man/sl.txt create mode 100644 man/sl/apropos.man create mode 100644 man/sl/man.conf.man create mode 100644 man/sl/man.man create mode 100644 man/sl/whatis.man create mode 100644 man2html/Makefile create mode 100644 man2html/Makefile.in create mode 100644 man2html/README create mode 100644 man2html/TODO create mode 100644 man2html/abbrev.c create mode 100644 man2html/cgibase.c create mode 100644 man2html/defs.h create mode 100644 man2html/glimpse_filters create mode 100644 man2html/hman create mode 100644 man2html/hman.1 create mode 100755 man2html/hman.sh create mode 100644 man2html/locales/en/hman.1 create mode 100644 man2html/locales/en/man2html.1 create mode 100644 man2html/locales/fr/man2html.1 create mode 100644 man2html/locales/it/hman.1 create mode 100644 man2html/locales/it/man2html.1 create mode 100644 man2html/man2html.1 create mode 100644 man2html/man2html.c create mode 100644 man2html/scripts/cgi-aux/man/man.aux create mode 100644 man2html/scripts/cgi-aux/man/mansearch.aux create mode 100644 man2html/scripts/cgi-aux/man/mansearchhelp.aux create mode 100755 man2html/scripts/cgi-bin/man/man2html create mode 100755 man2html/scripts/cgi-bin/man/mansearch create mode 100755 man2html/scripts/cgi-bin/man/mansearchhelp create mode 100755 man2html/scripts/cgi-bin/man/mansec create mode 100755 man2html/scripts/cgi-bin/man/manwhatis create mode 100644 man2html/strdefs.c create mode 100644 misc/README create mode 100644 misc/locales/it/manlint.1 create mode 100644 misc/man-preformat.c create mode 100644 misc/manlint create mode 100644 misc/manlint.1 create mode 100644 msgs/Makefile.in create mode 100644 msgs/README create mode 100644 msgs/gencat.in create mode 100755 msgs/gencat207fix.sh create mode 100755 msgs/inst.sh create mode 100644 msgs/mess.bg create mode 100644 msgs/mess.bg.codeset create mode 100644 msgs/mess.cs create mode 100644 msgs/mess.cs.codeset create mode 100644 msgs/mess.da create mode 100644 msgs/mess.da.codeset create mode 100644 msgs/mess.de create mode 100644 msgs/mess.de.codeset create mode 100644 msgs/mess.el create mode 100644 msgs/mess.el.codeset create mode 100644 msgs/mess.en create mode 100644 msgs/mess.en.codeset create mode 100644 msgs/mess.es create mode 100644 msgs/mess.es.codeset create mode 100644 msgs/mess.fi create mode 100644 msgs/mess.fi.codeset create mode 100644 msgs/mess.fr create mode 100644 msgs/mess.fr.codeset create mode 100644 msgs/mess.hr create mode 100644 msgs/mess.hr.codeset create mode 100644 msgs/mess.it create mode 100644 msgs/mess.it.codeset create mode 100644 msgs/mess.ja create mode 100644 msgs/mess.ja.codeset create mode 100644 msgs/mess.ko create mode 100644 msgs/mess.ko.codeset create mode 100644 msgs/mess.nl create mode 100644 msgs/mess.nl.codeset create mode 100644 msgs/mess.pl create mode 100644 msgs/mess.pl.codeset create mode 100644 msgs/mess.pt create mode 100644 msgs/mess.pt.codeset create mode 100644 msgs/mess.ro create mode 100644 msgs/mess.ro.codeset create mode 100644 msgs/mess.ru create mode 100644 msgs/mess.ru.codeset create mode 100644 msgs/mess.sl create mode 100644 msgs/mess.sl.codeset create mode 100644 msgs/mess.zh_TW.UTF-8 create mode 100644 src/Makefile create mode 100644 src/Makefile.in create mode 100755 src/apropos create mode 100644 src/apropos.sh create mode 100644 src/defs.h create mode 100644 src/different.c create mode 100644 src/different.h create mode 100644 src/glob.c create mode 100644 src/glob.h create mode 100644 src/gripedefs.h create mode 100644 src/gripes.c create mode 100644 src/gripes.h create mode 100644 src/join.c create mode 100755 src/makemsg create mode 100644 src/makemsg.c create mode 100755 src/makewhatis create mode 100644 src/makewhatis.in create mode 100644 src/makewhatis.sh create mode 100644 src/man-config.c create mode 100644 src/man-config.h create mode 100644 src/man-getopt.c create mode 100644 src/man-getopt.h create mode 100644 src/man-iconv.c create mode 100644 src/man-iconv.h create mode 100644 src/man.c create mode 100644 src/man.conf create mode 100644 src/man.conf.in create mode 100644 src/man.h create mode 100755 src/man2dvi create mode 100644 src/manfile.c create mode 100644 src/manfile.h create mode 100644 src/manpath.c create mode 100644 src/manpath.h create mode 100644 src/msg.c create mode 100755 src/mwi create mode 100644 src/ndir.h create mode 100644 src/paths.h create mode 100644 src/paths.h.in create mode 100644 src/to_cat.c create mode 100644 src/to_cat.h create mode 100644 src/util.c create mode 100644 src/util.h create mode 100644 src/version.h create mode 100755 src/whatis create mode 100644 version diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..a43ea21 --- /dev/null +++ b/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + END OF TERMS AND CONDITIONS + + Appendix: 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 +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + 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 2 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. diff --git a/DOAP.rdf.xml b/DOAP.rdf.xml new file mode 100644 index 0000000..34e15e9 --- /dev/null +++ b/DOAP.rdf.xml @@ -0,0 +1,85 @@ + + + man + 2010-09-01 + C, Shell + All Linux distributions, commercial *NIX derivatives (including OS-X), *BSD, Windows with Cygwin, Plan 9 + The man suite: man, man2html, hman, whatis, apropos, man2dvi + + man is a man pager. It has support for compressed + pages (both man pages and cat pages), and for locale + ($LANG) and for message catalogs ($LC_MESSAGES). It + will format files given explicitly (man ./foo.man.gz). + It conforms to FSSTND or FHS, and handles stray cats. + * man2html is a utility that converts man pages to html + * hman is a man browser that uses your favorite browser. + For use with lynx, no http daemon is required. + Keywords: man manpath apropos whatis makewhatis + man.conf man2html man2dvi hman manual pager browser + keyword search. + + + + + + Federico Lucifredi + + + + + + Latest Stable Release: 1.6g + 2010-12-31 + 1.6g + + + + + 1.6f + 2007-12-31 + 1.6f + + + + + 1.6e + 2006-11-20 + 1.6e + + + + + 1.6d + 2006-6-16 + 1.6d + + + + + 1.6c + 2006-1-23 + 1.6c + + + + + 1.6b + 2005-9-19 + 1.6b + + + + + 1.6a + 2005-8-21 + 1.6a + + + + + 1.6 + 2006-6-20 + 1.6 + + + diff --git a/HISTORY b/HISTORY new file mode 100644 index 0000000..a07edda --- /dev/null +++ b/HISTORY @@ -0,0 +1,128 @@ +man-1.6g - 'Murcielago' + +- Fixed "man cut cut" throwing an error (Fedora #542852) (Ivana Varekova, flc). +- Corrections to the man.man German locale translation (Stefan Bacher). +- flawed treatment of Awk in configure script (Elias Pipping). +- announcement mailing list set up (man-announce@googlegroups.com) (flc). +- Minor fix to LZMA support (Per Øyvind Karlsen - Mandriva team). +- Added XZ compression support (Per Øyvind Karlsen). +- Improvements to extension handling (R. Urban, V. Zell - CYGWIN project). +- Releases now gpg signed. Validation instructions on primary distribution + site (flc). +- DOAP.rdf enabled on primary distribution site (flc). +- EXPERIMENTAL: SPDX.rdf enabled on primary distro site (flc). +- Changes to LSM file (flc). + +man-1.6f - 'Flying Fox' + +- Fixed incorrect shell-unsafe verification alphabet missing ampersand simbol. + This was being caught by another part of the code but yet still a bug (flc). +- Unified Posix locale to the C one (J. Pello, flc). +- Additional checks for defined but empty PAGER environment variable (flc). +- Don't update whatis files on read-only partitions (Mike Frysinger). +- Added bzip support to man2dvi (Charles Clément). +- Added bzip support to man2html (Fabiano Castro Pereira). +- EXPERIMENTAL: added LZMA suport to man (Per Øyvind Karlsen - Mandriva team). +- EXPERIMENTAL: added LZMA suport to makewhatis (Per Øyvind Karlsen, flc). +- README updates: cygwin (Volker Zell). +- Added "MANUAL SECTIONS" header to man.man (flc). +- Fixes to avoid shebang mangling in generated scripts (Mike Frysinger). +- makewhatis fix allowing spaces in pathnames for CYGWIN project (Volker Zell). +- Minor corrections to the German message catalog (Volker Zell). +- Updated Dutch Message catalog (Benno Schulenberg). +- Minor doc changes (flc). + +man-1.6e - 'Dracula' + +- Sections used by makewhatis set via environment variable MANSECT, falling + back to man.conf's MANSECT setting as man does (Mike Frysinger). +- Removed use of implicit prototypes - besides being sloppy, it leads to issues + on 64 bit platforms (Mike frysinger, flc). +- Building will now honor pre-existing LDFLAGS if set (Mike Frysinger). +- Updated Italian man pages (Giulio Daprelá). +- Updated Spanish man pages (B. Albiñana, flc). +- Corrected a minor bug in makewhatis' tempdir generation (flc). +- EXPERIMENTAL: support for Plan 9 rc shell lists (Michael Haardt). +- Overdue LSM v4 format compliance (flc). +- Minor corrections and cleanup (flc). + +man-1.6d + +- Fixed freeing of unallocated memory in '-K' under unsafe flag (flc). +- Corrected a bug introduced in 1.6c makewhatis - thanks to the packagers + that promptly pointed it out (flc). +- corrected off-by-one in LANG splitting code (no security aspect) (flc). +- added support for DESTDIR in man2html's Makefile (Claudio Fontana). +- Fixed -D option (flc). +- Header fix for variable header location of TIOCGWINSZ (Eugene Kotlyarov). +- Corrected erroneous encoding of FR locale man pages translation (flc). +- EXEEXT and DESTDIR fixes for gencat (Volker Zell). +- Minor correction of CYGWIN support (Volker Zell). +- Updated Polish message catalog and select man pages (M. Garski). +- Minor corrections to man pages, and the German message catalog + (flc, Volker Zell, others). +- Constricted locale settings for gencat (Fedora Project). +- Corrections to makewhatis exit codes and signal handling (flc). +- Fixes in man2html parsing (Fedora Project). +- Minor additional corrections (flc). + +man-1.6c + +- Corrected missing format string, but no privilege escalation was involved + (flc, Ville-Skyttä). +- pscan format string audit run - nothing further found (flc). +- Updated Bulgarian locale man pages translation and message catalog + (Alexander Shopov). +- makewhatis and other minor changes to support BG locale + (Alexander Shopov, flc). +- Updated Italian locale message catalog translation (flc). +- Updated French man pages, with new man2html page (Alain Portal). + +man-1.6b + +- Additional changes for parallel Make (Octavio Ruiz). +- New French locale man pages translation (Alain Portal). +- New French locale message catalog translation (Alain Portal). +- Minor changes in manual pages (Giorgos Keramidas, flc). +- Minor corrections in the docs (flc). + +man-1.6a + +- Fixes to support parallel Make (Mike Frysinger). +- Fixes in mess.en message catalog (Martin von Gagern). +- Corrections and updates to the manual (flc). + +man-1.6 + +- New Maintainer Federico Lucifredi (flucifredi@acm.org). +- Ability to hand HTML man pages off to a browser added (Eric S. Raymond). + +man-1.5p + +- Chinese messages (CHAO, Wei-Lun) - unused +- Russian messages +- Set DEFAULT_NLSPATH to "/usr/share/locale/%L/%N" +- Prefer LC_MESSAGES over LANG +- Don't (potentially) use a pager with apropos and whatis +- Superfluous security fix +- Filter .iX macros out when constructing whatis database +- Allow globbed MANPATH items like /opt/*/man +- Return a correct status +- Continue search when an appropriate page was found to be inaccessible + +man-1.5o2: + +- Fixed man -k segfault +- Allow man -k "text with spaces" + +man-1.5o1: + +- Fixed man2html array overflow + +man-1.5o: + +- Polish messages, non-dummy codesets (Jakub Bogusz ) +- CYGWIN fix for perl manpages (with :: in filename) +- Fix for certain awk versions in mansec (NISHIMURA Daisuke) +- When asked for a nonexisting page in section 1p, do not also try section 1 + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..230177e --- /dev/null +++ b/INSTALL @@ -0,0 +1,70 @@ +INSTALLATION + +NOTE! The default configuration file has moved from +/usr/lib/man.config or /etc/man.conf to /usr/share/misc/man.conf. +Remove the former two. +The country code dk has been replaced by the language code da. +If you had Danish man pages installed, these should probably be moved. + +The quick installation goes in three steps: + 1. configure -default + 2. make + 3. make install + +This should suffice for most people. The defaults are: + Only English man pages, no message catalogs, man not suid, + handle compressed man pages, compress cat pages, create cat pages + whenever the appropriate directory exists, + follow FHS by putting cat pages under /var/cache/man provided that + that directory exists. + +In order to select man pages in other languages, replace Step 1 by + 1. configure +lang de,en,nl +or perhaps (especially when making a general distribution) by + 1. configure +lang all +This yields all the defaults, except for the language setting. + +People who want something other than the default also use three steps: +1. configure -ask +2. make +3. make install +but have to answer a lot of questions during configure. + +In somewhat greater detail: + +1. Run configure. This will grope around your system a bit and then + ask you a number of questions. It will create a Makefile from the + file Makefile.in. You may have to do some fine tuning to get things + to work exactly right on your system. If you do, I'd like to know + what changes you had to make to get things working. + + Man uses groff (nroff, troff) to format man pages. If you don't + have *roff, then you can only use preformatted man pages. + + You can make man suid to some uid, say man, where man is the owner + of the directories (like /usr/man/cat*) for formatted man pages. + That way man can write formatted pages there, even when the directory + does not have universal write permission. However, it is fairly easy + to spoof man, so really this setup is not very different from the one + where /usr/man/cat* has universal write permission. + Never make man suid bin or daemon or root! + + Of course it is not necessary at all to cache formatted man pages. + Formatting usually takes less than a second, and by not having + preformatted pages one avoids problems with window width, integrity, etc. + +2. Look at the man.conf file. This determines the programs and extensions + used in compressing and uncompressing cat pages. It also determines + the system-wide mappings from bin directories to man page directories. + It was constructed by configure; you might want to make some changes. + +3. Do a `make all', try it out, and then if you're happy with that, do + a `make install'. You don't need to be root to use this set of + programs. + [Note: if you want to try man with the new, not yet installed, man.conf + file, use "man -C ./man.conf ...".] + +4. Install the whatis database(s) by running makewhatis. If you want + to keep things absolutely current, you'll need to run this whenever + you add new man pages. You might want to add an entry in your + crontab. diff --git a/LSM b/LSM new file mode 100644 index 0000000..2baa123 --- /dev/null +++ b/LSM @@ -0,0 +1,26 @@ +Begin4 +Title: man +Version: 1.6g +Entered-date: 2010-12-31 +Description: * man is a man pager. It has support for compressed + pages (both man pages and cat pages), and for locale + ($LANG) and for message catalogs ($LC_MESSAGES). It + will format files given explicitly (man ./foo.man.gz). + It conforms to FSSTND or FHS, and handles stray cats. + * man2html is a utility that converts man pages to html + * hman is a man browser that uses your favorite browser. + For use with lynx, no http daemon is required. + Keywords: man manpath apropos whatis makewhatis + man.conf man2html man2dvi hman manual pager browser + keyword search +Keywords: man, man2html, hman, whatis, apropos, man2dvi +Author: John Eaton, Richard Verhoeven, Michael Hamilton, + Andries Brouwer, Federico lucifredi (flucifredi@acm.org) +Maintained-by: Federico Lucifredi (flucifredi@acm.org) +Primary-site: http://primates.ximian.com/~flucifredi/man/ + 251k man-1.6g.tar.gz + 1378 man-1.6g.lsm +Alternate-site: http://www.people.fas.harvard.edu/~lucifred/man/ +Alternate-site: ftp://metalab.unc.edu/pub/Linux/apps/doctools/man/ +Copying-policy: Copyright by authors. Distributable under GPL. +End diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3fc74e0 --- /dev/null +++ b/Makefile @@ -0,0 +1,76 @@ +# Makefile for man +# [need allow_null_glob_expansion=true] +# The parts behind + +all: Makefile conf_script source manhtml manpages + @echo; echo 'You can now do "make install"' + +# On a machine with time before distribution time +# it may be necessary to touch all distributed files + +Makefile: Makefile.in configure + @echo "Please run configure first" + exit 1 + +conf_script: configure + @echo "Please run configure first" + exit 1 + +src/Makefile: conf_script src/Makefile.in + cd src; ../conf_script Makefile + +man2html/Makefile: conf_script man2html/Makefile.in + cd man2html; ../conf_script Makefile + +man/Makefile: conf_script man/Makefile.in + cd man; ../conf_script Makefile + +msgs/Makefile: conf_script msgs/Makefile.in + cd msgs; ../conf_script Makefile + +makefiles: src/Makefile man2html/Makefile man/Makefile msgs/Makefile + +source: src/Makefile + cd src; $(MAKE) + +manhtml: man2html/Makefile source + cd man2html; $(MAKE) + +manpages: man/Makefile + cd man; $(MAKE) subdirs + + + + + + + +install: src/Makefile man/Makefile man2html/Makefile + cd src; $(MAKE) install + cd man2html; $(MAKE) install + cd man; $(MAKE) installsubdirs + + @echo; echo 'Done.' + @echo 'In case you want to browse man pages using a www browser,' + @echo '"cd man2html", read README, and perhaps "make install-scripts".' +# @echo; echo 'Done. In case you want to mount /usr read-only, please' +# @echo 'install a symlink /usr/man/whatis -> /var/catman/whatis, or so.' + +clean: src/Makefile man/Makefile msgs/Makefile man2html/Makefile + cd src; $(MAKE) clean + cd man2html; $(MAKE) clean + cd man; $(MAKE) cleansubdirs + cd msgs; $(MAKE) clean + cd gencat; $(MAKE) clean + rm -f core *~ + +spotless distclean reallyclean: clean + cd src; $(MAKE) spotless + cd man2html; $(MAKE) spotless + cd man; $(MAKE) spotlesssubdirs + cd msgs; $(MAKE) spotless + cd gencat; $(MAKE) clean + rm -f conf_script Makefile + +DISTR = COPYING README README.HP README.RedHat README.GNU-WIN32 INSTALL \ + Makefile.in configure src man2html man msgs gencat catopen misc diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..fedb23c --- /dev/null +++ b/Makefile.in @@ -0,0 +1,76 @@ +# Makefile for man +# [need allow_null_glob_expansion=true] +# The parts behind % are removed when no message catalogs should be installed + +all: Makefile conf_script source manhtml manpages %messages + @echo; echo 'You can now do "make install"' + +# On a machine with time before distribution time +# it may be necessary to touch all distributed files + +Makefile: Makefile.in configure + @echo "Please run configure first" + exit 1 + +conf_script: configure + @echo "Please run configure first" + exit 1 + +src/Makefile: conf_script src/Makefile.in + cd src; ../conf_script Makefile + +man2html/Makefile: conf_script man2html/Makefile.in + cd man2html; ../conf_script Makefile + +man/Makefile: conf_script man/Makefile.in + cd man; ../conf_script Makefile + +msgs/Makefile: conf_script msgs/Makefile.in + cd msgs; ../conf_script Makefile + +makefiles: src/Makefile man2html/Makefile man/Makefile msgs/Makefile + +source: src/Makefile + cd src; $(MAKE) + +manhtml: man2html/Makefile source + cd man2html; $(MAKE) + +manpages: man/Makefile + cd man; $(MAKE) subdirs + +%messages: gencat/gencat msgs/Makefile source +% cd msgs; $(MAKE) + +%gencat/gencat: +% cd gencat; $(MAKE) + +install: src/Makefile man/Makefile man2html/Makefile %msgs/Makefile + cd src; $(MAKE) install + cd man2html; $(MAKE) install + cd man; $(MAKE) installsubdirs +% cd msgs; $(MAKE) install + @echo; echo 'Done.' + @echo 'In case you want to browse man pages using a www browser,' + @echo '"cd man2html", read README, and perhaps "make install-scripts".' +# @echo; echo 'Done. In case you want to mount /usr read-only, please' +# @echo 'install a symlink /usr/man/whatis -> /var/catman/whatis, or so.' + +clean: src/Makefile man/Makefile msgs/Makefile man2html/Makefile + cd src; $(MAKE) clean + cd man2html; $(MAKE) clean + cd man; $(MAKE) cleansubdirs + cd msgs; $(MAKE) clean + cd gencat; $(MAKE) clean + rm -f core *~ + +spotless distclean reallyclean: clean + cd src; $(MAKE) spotless + cd man2html; $(MAKE) spotless + cd man; $(MAKE) spotlesssubdirs + cd msgs; $(MAKE) spotless + cd gencat; $(MAKE) clean + rm -f conf_script Makefile + +DISTR = COPYING README README.HP README.RedHat README.GNU-WIN32 INSTALL \ + Makefile.in configure src man2html man msgs gencat catopen misc diff --git a/README b/README new file mode 100644 index 0000000..1ff31dd --- /dev/null +++ b/README @@ -0,0 +1,41 @@ +man was written by John Eaton (jwe@bevo.che.wisc.edu). +He does not maintain man anymore - please do not bother +him with remarks about the current version, which is +rather different from the original one. + +man-1.2 was released by Zeyd M. Ben-Halim (zmbenhal@netcom.com). + +man-1.3, man-1.4* and man-1.5* were released by Andries Brouwer (aeb@cwi.nl). + +In man-1.5 Richard Verhoeven's man2html was added, together with +some scripts by Michael Hamilton. + +man-1.6 and versions following were released by Federico Lucifredi (flucifredi@acm.org). + +In man-1.6 Eric S. Raymond's browser-handoff functionality was added, with +future minor versions planned to cleanup internationalization and cross +platform support (Cygwin, solaris, and perhaps Win32). A bugfixing campaign +is currently underway. + +The current maintainer is Federico Lucifredi (flucifredi@acm.org). + +The current version can usually be found at +http://primates.ximian.com/~flucifredi/man/ +a backup distribution site is located at +http://people.fas.harvard.edu/~lucifred/man/ +releases are also posted to the Metalab site regularly. + +Feedback from distribution packagers is very appreciated. Patches welcome! + +Man versions are codenamed for bats, starting with 1.6e. + +Development releases have an 'RC-' suffix followed by the release +candidate number. Versions released under the 'RC' label are not +to be included in stable distributions (and indeed no one has been +to date - do not be the first to goof up!). + +There is a very different man program, also derived from +John Eaton's original version (by Graeme W. Wilford) +distributed under the name man_db, with version numbers +like man_db-2.3.10. Do not confuse the two, they are +mutually incompatible, although they perform nearly the same job. diff --git a/README.GNU-WIN32 b/README.GNU-WIN32 new file mode 100644 index 0000000..c1a5c97 --- /dev/null +++ b/README.GNU-WIN32 @@ -0,0 +1,32 @@ +Volker Zell writes: + +To run a precompiled version of man with Cygwin 1.5.24 and above you will need +the following utilities + + o man, bash, cygwin, bzip2, coreutils, gawk, groff, gzip and less + +Click on the "Install Cygwin now" link on the http://cygwin.com/ web page. +This downloads setup.exe to your system. Save it and run setup, answer +the questions and pick up the above mentioned packages from the different +categories. + + +Building from source +==================== + +Adjust the paths in configure and man2html/Makefile.in to suit your +installation. + +man-1.6e builds with: + + CC="gcc -O2 -DNONLS -DLC_MESSAGES=6" ./configure +fhs +lang all + +then issue: + + make + +then: + + make install + +Edit the installed man.conf to suit your site. diff --git a/README.HP b/README.HP new file mode 100644 index 0000000..f228155 --- /dev/null +++ b/README.HP @@ -0,0 +1,83 @@ +People tell me that HP uses compressed man pages named like + /usr/man/man1.Z/ls.1 +that is, the directory instead of the file has an extension. +I have no access to HP machines, and do not know the details +of this situation (what happens to cat files? to .so files?), +but perhaps this man is usable in such a situation if one puts + MAN_HP_DIREXT=.Z +in the environment. Untested. + +Tell me if this works, and if not what is wrong. +I may yet gain access to an HP-UX box and verify this myself. +flc - flucifredi@acm.org + +P.S. + +A report mentions cat1.Z cat1m.Z cat2.Z ... cat8.Z +man1 man1.Z man1m man1m.Z ... man8 man8.Z man9.Z +subdirectories of /usr/share/man, +where the cat dirs are owned by bin:bin with mode 0777 +and the man dirs are owned by bin:bin with mode 0555. + +Scott Marovich adds: + +As far as your GNU software is concerned, the first very important point is: +The paths used for compressed manual pages represent only the tip of a very +deep iceberg: Historically, HP-UX derives from A.T.&T. UNIX System V (and +System III before that) with some selected BSD features added later, and it +doesn't even purport to be GNU-compatible. For many years HP sold a binary +HP-UX port of the A.T.&T. Documenter's Work Bench as an optional product, and +HP-UX's versions of "man(1)" and "nroff(1)" (etc.) strive to be DWB-compatible. +Similarly, the manual pages use only plain, old, simple A.T.&T. "man(7)" macros, +HP-UX's standard data-compression utility command is "compress(1)"/"zcat(1)" +instead "gzip(1)", and HP-UX follows System V conventions about where to cache +formatted pages: they go into directories such as "/usr[/share]/man/cat*" +instead of "/var/cache/man" like under Linux. System V "man(1)" can optionally +accept compressed input and/or produce compressed output, and it has a built-in +algorithm for deciding which directories to use. Assuming, for example, that +manual page "foo.1" is requested, the algorithm works like this: + +(Output-directory search:) +If a "/usr[/share]/man/cat1.Z" directory exists, look for a cached (formatted, +compressed) "foo.1" file in it; otherwise, if a "/usr[/share]/man/cat1" +directory exists, look for a cached (formatted, uncompressed) "foo.1" file in +it; otherwise, no formatted-and-cached form of the page exists. After an input +page is formatted, it will be compressed and cached if the "cat1.Z" directory +exists, or cached without compression if only the "cat1" directory exists, or +discarded if neither exist. + +(Input-directory search:) +If "/usr[/share]/man/man1.Z/foo.1" exists, then decompress and format this file; +otherwise, if "/usr[/share]/man/foo.1" exists, then format this uncompressed +file; otherwise, assume that the manual page is missing. + +Notice that: + +1. Priority is automatically given to fetching and storing manual pages in + compressed form if the necessary directories exist. + +2. Unlike GNU-compatible path naming schemes, the "regular" files containing + [un]formatted manual-page text do *not* have ".Z" (let alone ".gz") suffixes; +only their containing directories do. + +As far as these file's protection modes are concerned, that's partly up to a +local HP-UX system administrator. If one prefers not to have "man(1)" be a +set-UID/GID binary, then the usual custom is: + + man?[.Z] directories : mode 555 + man?[.Z]/.* files: mode 444 + cat?[.Z] directories : mode 777 + cat?[.Z]/.* files: mode 666 + +i.e., any user can delete any other user's cached, formatted pages. If one +prefers to run "man(1)" as a set-UID/GID program for a little more control, +then an alternative scheme is, say: + + cat?[.Z] directories : mode 755/575 + cat?[.Z]/.* files: mode 644/464 + +You also expressed some curiousity about the treatment of ".so" directives in +compressed manual pages. The answer is simple: there aren't any. ".so" is +rarely used in general, so the HP department responsible for producing HP-UX's +manual pages decided to "soelim(1)" the small number of exceptions (before +compressing the result) in order to avoid dealing with this problem. diff --git a/README.IRIX b/README.IRIX new file mode 100644 index 0000000..928d9bf --- /dev/null +++ b/README.IRIX @@ -0,0 +1,28 @@ +The NLSPATH / locale stuff doesnt work under IRIX. +(Patches are welcome.) + +--------------------------------------------------------------- + +It is reported that IRIX uses /usr/share/man/[apu]_man/man[1-8] +corresponding to admin, programmer and user pages. + +One finds files like /usr/share/catman/u_man/cat1/ls.z + +Maybe + + MAN_IRIX_CATNAMES=1 + +in the environment and + + MANPATH /usr/share/man/a_man /usr/share/catman/a_man + MANPATH /usr/share/man/p_man /usr/share/catman/p_man + MANPATH /usr/share/man/u_man /usr/share/catman/u_man + +in the man.conf file +will suffice to make this man work in an IRIX environment. +Reports on success/failure are welcome. + +--------------------------------------------------------------- + + +flucifredi@acm.org diff --git a/SPDX.rdf.xml b/SPDX.rdf.xml new file mode 100644 index 0000000..9c1df8e --- /dev/null +++ b/SPDX.rdf.xml @@ -0,0 +1,35 @@ + + + + + SPDX-1.0 + c97012607ed9d75a6eee7e66d257a99a8ed86918 + Man Maintainer (Federico Lucifredi) + 2010-09-15T18:31:00Z + + + Man 1.6g + man-1.6g.tar.gz + + + Man Maintainers (Federico Lucifredi, Andries Brouwer, Zeyd M. Ben-Halim, and John Eaton) and Contributors (Richard Verhoeven, Eric S. Raymond, Michael Hamilton, and others) + 2010 + The man suite: man, man2html, hman, whatis, apropos, man2dvi. + man is a man pager. It has support for compressed + pages (both man pages and cat pages), and for locale + ($LANG) and for message catalogs ($LC_MESSAGES). It + will format files given explicitly (man ./foo.man.gz). + It conforms to FSSTND or FHS, and handles stray cats. + * man2html is a utility that converts man pages to html + * hman is a man browser that uses your favorite browser. + For use with lynx, no http daemon is required. + Keywords: man manpath apropos whatis makewhatis + man.conf man2html man2dvi hman manual pager browser + keyword search. + + + + + diff --git a/TODO b/TODO new file mode 100644 index 0000000..1ccce13 --- /dev/null +++ b/TODO @@ -0,0 +1,28 @@ +Resuming regular releases after Grad School hiatus. + +Improvements and reviews of internationalization/localization. + +----> The localization and platform support are being addressed in the +upcoming minor releases. Comments and patches welcome. + +----> UTF-8 support is in the works as well. Comments and patches welcome. + +hman does not use LANG; review coherence of ENV use. + +Review support under HP-UX, Irix, Solaris, AIX, OS-X and other *NIXes. + +Add support for missing macros in man2html. + +Are there security problems in the present setup? + +----------------------------------------------------------- +MANPL gives page length - undocumented; may disappear again + +[But brobison@ecst.csuchico.edu likes it and says: +it allows one to do something like: + +export LINES +export MANPAGER='less -i' +export MANPL='$(perl -e "print ($LINES - 1) / 6, \"i\";")' +] + diff --git a/catopen/README b/catopen/README new file mode 100644 index 0000000..dbe8a45 --- /dev/null +++ b/catopen/README @@ -0,0 +1,29 @@ +In the good old days, with libc 4.*.*, +if NLSPATH was set to "/usr/lib/locale/%N/%L" +and LANG to "fr", then catopen("man",0) would open /usr/lib/locale/man/fr. + +These days, with libc 5.0.9, catopen will fail because it does a call +to setlocale, and if no locale has been setup, the C locale is assumed, +independent of the LANG setting. + +In order to preserve the possibility to say "LANG=de man fstab" +for systems where no locale has been set up, I enclose here +the original version of catopen. + +Concerning correctness: as far as I know POSIX does not specify +catopen(), and X/Open specifies catopen() without mentioning any +relation to locale - indeed, catopen() predates locale. +So, I think catopen() in libc 5.0.9 is broken. + +--- + +Time goes on, and I just looked at glibc-2.0.5. +Its catgets() contains (at least) two bugs, and will dump core. +One is fixed in RedHat's glibc-2.0.5c-10; I have submitted a fix +for the other. With a fixed catgets() things will work correctly. +However, glibc does a secure_getenv("NLSPATH"), which means that +the setting of NLSPATH is not taken into account for programs +that are sgid or suid. Thus, if you make man suid or sgid, and +want to use message catalogues, you have to install them in the +default place - on my system that is /usr/share/locale/%L/man +where %L is $LANG. diff --git a/catopen/catopen.c b/catopen/catopen.c new file mode 100644 index 0000000..2f756bc --- /dev/null +++ b/catopen/catopen.c @@ -0,0 +1,209 @@ +/* catopen.c - aeb, 960107 */ + +#include +#include +#include +#include +#include + +extern char *index (const char *, int); /* not always in */ +extern char *my_malloc(int); /* in util.c */ + +#ifndef DEFAULT_NLSPATH +# if __GLIBC__ >= 2 +# define DEFAULT_NLSPATH "/usr/share/locale/%L/%N" +# else +# define DEFAULT_NLSPATH "/usr/lib/locale/%N/%L" +# endif +#endif + +static nl_catd my_catopenpath(char *name, char *path); + +static /* this source included in gripes.c */ +nl_catd +my_catopen(char *name, int oflag) { + nl_catd fd; + + fd = catopen(name, oflag); + + if (fd == (nl_catd) -1 && oflag) { + oflag = 0; + fd = catopen(name, oflag); + } + + if (fd == (nl_catd) -1) { + char *nlspath; + + /* The libc catopen fails - let us see if we can do better */ + /* The quotes below are from X/Open, XPG 1987, Vol. 3. */ + + /* + * "In catopen(), the oflag argument is reserved for future use + * and should be set to 0." + */ + + if (oflag) + return fd; /* only treat the known case */ + + /* + * "If `name' contains a `/', then `name' specifies a pathname" + */ + if (index(name, '/')) { +#ifdef __GLIBC__ + /* glibc uses a pointer type for nl_catd, not a fd */ + return fd; +#else + /* this works under libc5 */ + return open(name, O_RDONLY); +#endif + } + + /* + * "If NLSPATH does not exist in the environment, or if a + * message catalog cannot be opened in any of the paths specified + * by NLSPATH, then an implementation defined default path is used" + */ + + nlspath = getenv("NLSPATH"); + if (nlspath) + fd = my_catopenpath(name, nlspath); + if (fd == (nl_catd) -1) + fd = my_catopenpath(name, DEFAULT_NLSPATH); + } + return fd; +} + +/* + * XPG 1987, Vol. 3, Section 4.4 specifies the environment + * variable NLSPATH (example: + * NLSPATH=/nlslib/%L/%N.cat:/nlslib/%N/%L + * where %L stands for the value of the environment variable LANG, + * and %N stands for the `name' argument of catopen(). + * The environ(5) page specifies more precisely that + * LANG is of the form + * LANG=language[_territory[.codeset]] + * and adds %l, %t, %c for the three parts of LANG, without the + * _ or . and are NULL when these parts are missing. + * It also specifies %% for a single % sign. + * A leading colon, or a pair of adjacent colons, in NLSPATH + * specifies the current directory. (Meant is that "" stands for "%N".) + * + */ +static nl_catd +my_catopenpath(char *name, char *nlspath) { + int fd; + nl_catd cfd = (nl_catd) -1; + char *path0, *path, *s, *file, *lang, *lang_l, *lang_t, *lang_c; + int langsz, namesz, sz, lang_l_sz, lang_t_sz, lang_c_sz; + + namesz = strlen(name); + + lang = getenv("LANG"); + if (!lang) + lang = ""; + langsz = strlen(lang); + + lang_l = lang; + s = index(lang_l, '_'); + if (!s) { + lang_t = lang_c = ""; + lang_l_sz = langsz; + lang_t_sz = lang_c_sz = 0; + } else { + lang_l_sz = s - lang_l; + lang_t = s+1; + s = index(lang_t, '.'); + if (!s) { + lang_c = ""; + lang_t_sz = langsz - lang_l_sz - 1; + lang_c_sz = 0; + } else { + lang_t_sz = s - lang_t; + lang_c = s+1; + lang_c_sz = langsz - lang_l_sz - lang_t_sz - 2; + } + } + + /* figure out how much room we have to malloc() */ + sz = 0; + s = nlspath; + while(*s) { + if(*s == '%') { + s++; + switch(*s) { + case '%': + sz++; break; + case 'N': + sz += namesz; break; + case 'L': + sz += langsz; break; + case 'l': + sz += lang_l_sz; break; + case 't': + sz += lang_t_sz; break; + case 'c': + sz += lang_c_sz; break; + default: /* unknown escape - ignore */ + break; + } + } else if (*s == ':' && (s == nlspath || s[-1] == ':')) { + sz += (namesz + 1); + } else + sz++; + s++; + } + + /* expand the %L and %N escapes */ + path0 = my_malloc(sz + 1); + path = path0; + s = nlspath; + while(*s) { + if(*s == '%') { + s++; + switch(*s) { + case '%': + *path++ = '%'; break; + case 'N': + strncpy(path, name, namesz); path += namesz; break; + case 'L': + strncpy(path, lang, langsz); path += langsz; break; + case 'l': + strncpy(path, lang_l, lang_l_sz); path += lang_l_sz; break; + case 't': + strncpy(path, lang_t, lang_t_sz); path += lang_t_sz; break; + case 'c': + strncpy(path, lang_c, lang_c_sz); path += lang_c_sz; break; + default: /* unknown escape - ignore */ + break; + } + } else if (*s == ':' && (s == nlspath || s[-1] == ':')) { + strncpy(path, name, namesz); path += namesz; + *path++ = ':'; + } else + *path++ = *s; + s++; + } + *path = 0; + + path = path0; + while(path) { + file = path; + s = index(path, ':'); + if (s) { + *s = 0; + path = s+1; + } else + path = 0; + fd = open(file, O_RDONLY); + if (fd != -1) { + /* we found the right catalog - but we don't know the + type of nl_catd, so close it again and ask libc */ + close(fd); + cfd = catopen(file, 0); + break; + } + } + + free(path0); + return cfd; +} diff --git a/conf_script b/conf_script new file mode 100755 index 0000000..0f4719f --- /dev/null +++ b/conf_script @@ -0,0 +1,87 @@ +#!/bin/sh +infiles=$@ +trap 'rm -f $infiles; exit 1' 1 3 15 + +# echo "" +for infile in $infiles +do + case $infile in + *.h) + cb="/*"; cs=" *"; ce=" */";; + *.1|*.5|*.8|*.man) + cb=.\\\"; cs=.\\\"; ce=.\\\";; + *) + case "`sed -n -e 1p $infile.in`" in + '#!'*) cb="`sed -n -e 1p $infile.in`";; + *) cb="#";; + esac + cs="#"; ce="#";; + esac + echo "$cb" > $infile + echo "$cs Generated automatically from $infile.in by the" >> $infile + echo "$cs configure script." >> $infile + echo "$ce" >> $infile + echo "Creating $infile from $infile.in" + sed -e ' +s,@version@,man-1.6g, +s,@CC@,gcc -O, +s,@EXEEXT@,, +s,@BUILD_CC@,gcc -O, +s,@INSTALL@,install, +s,@DEFS@, -DSTDC_HEADERS -DTERMIOS_HEADER -DPOSIX -DDO_COMPRESS, +s,@LIBS@,, +s,@LIBOBJS@,, +s,@troff@,/usr/bin/groff -Tps -mandoc, +s,@nroff@,/usr/bin/nroff -Tlatin1 -mandoc, +s,@jnroff@,/usr/bin/groff -Tnippon -mandocj, +s,@eqn@,/usr/bin/geqn -Tps, +s,@neqn@,/usr/bin/geqn -Tlatin1, +s,@jneqn@,/usr/bin/geqn -Tnippon, +s,@tbl@,/usr/bin/gtbl, +s,@nocol@,# , +s,@pcol@,, +s,@col@,/usr/bin/col, +s,@vgrind@,, +s,@refer@,, +s,@grap@,, +s,@pic@,/usr/bin/gpic, +s,@fcat@,, +s,@pcat@,, +s,@zcat@,/bin/zcat, +s,@unxz@,/usr/bin/unxz -c, +s,@gunzip@,/bin/gunzip -c, +s,@bzip2@,/bin/bzip2 -c -d, +s,@unlzma@,/usr/bin/unlzma -c -d, +s,@unyabba@,, +s,@compress@,/usr/bin/xz, +s,@compress_ext@,.xz, +s,@decompress@,/usr/bin/unxz -c, +s,@pager@,/bin/less -is, +s,@browser@,/bin/less -is, +s,@htmlpager@,/bin/cat, +s,@cmp@,/usr/bin/cmp -s, +s,@cat@,/bin/cat, +s,@awk@,/usr/bin/awk, +s,@bindir@,/usr/bin, +s,@sbindir@,/usr/sbin, +s,@mandir@,/usr/share/man, +s,@locale@,, +s,@fhs@,, +s,@fsstnd@,# , +s,@man1ext@,1,g +s,@man5ext@,5,g +s,@man8ext@,8,g +s,@man_install_flags@,, +s,@man_user@,, +s,@languages@,en, +s,@man@,/usr/bin/man, +s,@apropos@,/usr/bin/apropos, +s,@whatis@,/usr/bin/whatis, +s,@man2dvi@,/usr/bin/man2dvi, +s,@makewhatis@,/usr/sbin/makewhatis, +s,@man_config_dir@,/usr/share/misc, +s,@man_config_file@,/usr/share/misc/man.conf, +s,@manpathoption@,--path, +s/@sections@/1:1p:8:2:3:3p:4:5:6:7:9:0p:tcl:n:l:p:o/ +' $infile.in >> $infile +done diff --git a/configure b/configure new file mode 100755 index 0000000..4928ae0 --- /dev/null +++ b/configure @@ -0,0 +1,1379 @@ +#!/bin/sh +# +# Guess values for system-dependant variables and create `Makefile'. +# Can be distributed according to GPL. +# +# Usage: +# configure -ask (ask all questions) +# +# As soon as some other option is specified, configure +# will not ask questions. Other options: +# +# configure -d[efault] (language=en, +fhs) +# configure -confdir DIR (directory to hold man.conf) +# configure +suid/sgid (make man suid or sgid) +# configure +lang cs,da,de,el,en,es,fi,fr,hr,it,ko,nl,pl,pt,ro,sl +# (language(s) as given) +# ("all" will specify all available languages) +# ("none" will disable NLS support) +# configure +fhs (follow FHS: use /var/cache/man) +# configure +fsstnd (follow FSSTND: use /var/catman) +# +LANGUAGES="bg,cs,da,de,el,en,es,fi,fr,hr,it,ja,ko,nl,pl,pt,ro,ru,sl" +LANGOPT="+lang {$LANGUAGES|all|none}" +# +# Some people prefer "-irs", but probably only when they have a broken setup. +# (Indeed, -r may cause the terminal to get into funny states. +# Very inconvenient. For viewing pages in strange locales, set LC_*.) +# +DEFAULTLESSOPT="-is" +# +# Note that not creating any cat directories (/var/cache/man or so) +# and not making man suid or sgid is recommended. +# This avoids security problems, the fact that different users have +# different window sizes and different character sets, etc. +# Formatting is fast enough today. + +trap 'rm -f conftest conftest.c; exit 1' 1 3 15 + +set +u # Make sure unset variables are ok. + +if [ $# = 0 ]; then + echo "Usage: configure -ask" + echo " or: configure [-d|-default] [-confdir DIR] [+suid] [+sgid] \\" + echo " [+fhs|+fsstnd|+traditional] [+lang none|all|LANGUAGES]" + echo " where LANGUAGES is a substring of $LANGUAGES". + echo + echo 'The default "configure -d" is equivalent to "configure +fhs +lang en".' + echo 'The option +suid will make man suid to a user "man". Create this first.' + echo 'The option +sgid will make man sgid to a group "man". Create this first.' + echo 'The options +fhs, +fsstnd, +traditional will make man use' + echo ' /var/cache/man, /var/catman and /usr/man/cat?, respectively.' + echo 'It is recommended not to use suid/sgid and not to keep cat pages.' + echo 'The -confdir option specifies where man.conf lives (default /usr/share/misc).' + echo + exit 1 +fi + +default=true +usenls=true + +for arg in $*; do + if [ x$setlang = xtrue ] + then + case $arg in + none) + usenls=false + ;; + all) + languages="??" + ;; + *) + languages=`echo $arg | sed -e 's/,/ /g'` + esac + setlang=false + elif [ x$setconfdir = xtrue ] + then + confdir=$arg + confexplicit=1 + setconfdir=false + else + # help people used to GNU-style --options + # e.g. --enable-suid, --disable-suid, --prefix + case $arg in + --enable-*) + arg=`echo $arg | sed -e 's/--enable-/+/'` + ;; + --disable-*) + arg=`echo $arg | sed -e 's/--disable-/-/'` + ;; + --*) + arg=`echo $arg | sed -e 's/--/-/'` + esac + case $arg in + -default | -d) + usefhs=true + ;; + -ask | -a) + default= + ;; + -prefix=*) + prefix=`echo $arg | sed -e 's/-prefix=//'` + ;; + -bindir=*) + bindir=`echo $arg | sed -e 's/-bindir=//'` + ;; + -confdir=*) + confdir=`echo $arg | sed -e 's/-confdir=//'` + confexplicit=1 + ;; + -confdir) + setconfdir=true; + ;; + -confprefix=*) + confprefix=`echo $arg | sed -e 's/-confprefix=//'` + ;; + -mandir=*) + mandir=`echo $arg | sed -e 's/-mandir=//'` + manexplicit=1 + ;; + -sbindir=*) + sbindir=`echo $arg | sed -e 's/-sbindir=//'` + ;; + +lang) + setlang=true + ;; + +suid) + suid=true + ;; + -suid) + suid=false + ;; + +sgid) + sgid=true + ;; + -sgid) + sgid=false + ;; + +traditional) + usefsstnd=false + usefhs=false + ;; + +fsstnd) + usefsstnd=true + ;; + -fsstnd) + usefsstnd=false + ;; + +fhs) + usefhs=true + ;; + -fhs) + usefhs=false + ;; + -compatibility_mode_for_colored_groff) + set_compatibility_mode_for_colored_groff=true; + ;; + *) + echo "Usage: configure -ask" + echo " or: configure [-d|-default] [-confdir DIR] [+suid] [+sgid] \\" + echo " [+fhs|+fsstnd|+traditional] [+lang all|LANGUAGES]" + echo " where LANGUAGES is a substring of $LANGUAGES". + echo + echo 'The default "configure -d" is equivalent to "configure +fhs +lang en".' + echo 'The option +suid will make man suid to a user "man". Create this first.' + echo 'The option +sgid will make man sgid to a group "man". Create this first.' + echo 'The options +fhs, +fsstnd, +traditional will make man use' + echo ' /var/cache/man, /var/catman and /usr/man/cat?, respectively.' + echo 'The -confdir option specifies where man.conf lives (default /usr/share/misc).' + exit 1 + ;; + esac + fi +done + +# Default installation paths +# +# prefix="/usr/local" or "/usr" +# confprefix="/usr/local" or "/usr" or "/etc" +# +# The configuration file has various names and pathnames in the +# various distributions, such as /usr/share/misc/man.conf, +# /usr/lib/man.conf, /etc/man.config. +# The FHS wants it in /usr/share/misc +# All documentation assumes "man.conf" - in case you invent some other name +# (why?), also man pages and other docs need to be patched. +if [ -z "${prefix}" ]; then prefix="/usr"; fi +if [ -z "${confprefix}" ]; then confprefix=${prefix}; fi +if [ -z "${bindir}" ]; then bindir="${prefix}/bin"; fi +if [ -z "${sbindir}" ]; then sbindir="${prefix}/sbin"; fi +if [ -z "${mandir}" ]; then mandir="${prefix}/man"; fi + +if [ -z "$manexplicit" -a x"$usefhs" = xtrue ]; then + mandir="${prefix}/share/man" +fi +if [ -z "$confexplicit" ]; then + confdir="${confprefix}/lib" + if [ x"$usefhs" = xtrue ]; then + confdir="${confprefix}/share/misc" + fi +fi +conffilename="man.conf" + +if test "$RANDOM" = "$RANDOM"; then + # Plain old Bourne shell. + echo checking for gcc + test -z "$CC" -a -n "`gcc 2>&1`" && CC="gcc -O" +else + # ksh, bash or zsh. ksh and zsh write "command not found" to stderr. + echo checking for gcc + test -z "$CC" && type gcc && CC="gcc -O" +fi + +CC=${CC-cc} +BUILD_CC=${BUILD_CC-${CC}} +INSTALL=${INSTALL-install} +INCLUDEDIR=${INCLUDEDIR-/usr/include} + +rm -f conftest conftest.c +compile="$CC $DEFS conftest.c -o conftest $LIBS >/dev/null 2>&1" + +# Check for various header files. + +echo checking for ANSI C header files +echo "#include +#include +main() { exit(0); strerror(0); }" > conftest.c +eval $compile +if test -s conftest && ./conftest 2>/dev/null; then + DEFS="$DEFS -DSTDC_HEADERS" +fi +echo checking for Windows EXEEXT +EXEEXT= +test -f ./conftest.exe && EXEEXT=.exe + +rm -f conftest conftest.c + +echo checking for sys/termios.h +echo "#include +main() { exit(0); }" > conftest.c +eval $compile +if test -s conftest && ./conftest 2>/dev/null; then + DEFS="$DEFS -DTERMIOS_HEADER" +fi +rm -f conftest conftest.c + +echo checking for POSIX.1 header files +echo "#include +main() { +#ifdef _POSIX_VERSION +exit(0); +#else +exit(1); +#endif +}" > conftest.c +eval $compile +if test -s conftest && ./conftest 2>/dev/null; then + DEFS="$DEFS -DPOSIX" +fi +rm -f conftest conftest.c + +echo checking for BSD string and memory functions +echo "#include +main() { exit(0); rindex(0, 0); bzero(0, 0); }" > conftest.c +eval $compile +if test -s conftest && ./conftest 2>/dev/null; then : + else DEFS="$DEFS -DUSG" +fi +rm -f conftest conftest.c + +echo checking whether sys/types.h defines uid_t +echo '#include +main() { uid_t x; exit(0); }' > conftest.c +eval $compile +if test -s conftest && ./conftest 2>/dev/null; then : +else + uid_t=`awk '/pw_uid;/ {print $1}' $INCLUDEDIR/pwd.h` + DEFS="$DEFS -Duid_t=${uid_t} -Dgid_t=${uid_t}" +fi +rm -f conftest conftest.c + +echo checking for Xenix +if test -f /xenix; then + LIBS="$LIBS -lx" + case "$DEFS" in + *SYSNDIR*) ;; + *) LIBS="-ldir $LIBS" ;; # Make sure -ldir precedes any -lx. + esac +fi + +echo checking how to get alloca +echo ' +#ifdef __GNUC__ +#define alloca __builtin_alloca +#else +#ifdef sparc +#include +#else +#ifdef _AIX + #pragma alloca +#else +char *alloca (); +#endif +#endif +#endif +main() { char *p = (char *) alloca(1); exit(0); }' > conftest.c +eval $compile +if test -s conftest && ./conftest 2>/dev/null; then : +elif test -d /usr/ucblib; then LIBS="$LIBS -L/usr/ucblib -lucb" +elif test -f /usr/lib/libPW.a; then LIBS="$LIBS -lPW" +else DEFS="$DEFS -DALLOCA_MISSING" +fi +rm -f conftest conftest.c + +if [ $usenls = true ]; then + echo checking for nls + echo '#include + main() {nl_catd catfd; exit(0); }' > conftest.c + eval $compile + if test -s conftest && ./conftest 2>/dev/null; then : + else + usenls=false + fi + rm -f conftest conftest.c +fi + +if [ $usenls = false ]; then + DEFS="$DEFS -DNONLS" +fi + +echo checking for getopt.h +echo '#define _GNU_SOURCE +#include +#include +struct option long_opts[] = { { "", no_argument, NULL, 0 } }; +main() { exit(0); }' > conftest.c +eval $compile +if test -s conftest && ./conftest 2>/dev/null; then + manpathoption="--path" +else + manpathoption="-w" + DEFS="$DEFS -DNOGETOPT" +fi +rm -f conftest conftest.c + +# first determine how to suppress newline on echo command (stolen from +# Perl's Configure) ... + +echo "Checking echo to see how to suppress newlines..." +(echo "hi there\c" ; echo " ") >conftest +if grep c conftest >/dev/null 2>&1 ; then + echo "...using -n." + n='-n' + c='' +else + cat <<'EOM' +...using \c +EOM + n='' + c='\c' +fi +rm -f conftest + +# Ask the installer where various things are located. +# (A separate variable is needed since various shells do +# word-splitting at different moments, which means that +# for i in /bin:/usr/bin:$PATH +# does not work everywhere.) +# Some people might prefer having $PATH first in PREPATH +PREPATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:$PATH +IFS0="$IFS" +IFS=":$IFS" +for i in $PREPATH +do + case $i in + /*) + DEFPATH="$DEFPATH $i" + ;; + esac +done +IFS="$IFS0" + +if [ x$default = x ]; then + echo "" + echo $n "Do you have the nroff source for man pages? [yes] $c" + ans= + while [ x$ans = x ] + do + read yesno + if test "$yesno" = "" || test "$yesno" = "yes" + then + ans=true + elif test "$yesno" = "no" + then + ans=false + else + echo "You must enter yes or no" + fi + done +else + echo "" + echo "Assuming you want to be able to handle the nroff source for man pages." + ans=true +fi + +if test "$ans" = "false" +then + for i in more less cmp cat awk gawk mawk + do + eval F$i="missing" + for j in $DEFPATH + do + if test -f $j/$i + then + eval F$i=$j/$i + break + fi + done + done + troff="" + nroff="" + jnroff="" + eqn="" + neqn="" + jneqn="" + tbl="" + col="" + vgrind="" + refer="" + grap="" + pic="" + if test $Fless = "missing" + then + pager="$Fmore" + else + pager="$Fless $DEFAULTLESSOPT" + fi + if test $Fawk = "missing" + then + Fawk="$Fgawk" + fi + if test $Fawk = "missing" + then + Fawk="$Fmawk" + fi + cmp="$Fcmp -s" + cat="$Fcat" + awk="$Fawk" + + FILTERS="pager cmp cat awk" +else + for i in nroff groff geqn gtbl col vgrind grefer grap gpic more less lynx cmp cat awk gawk mawk + do + eval F$i="missing" + for j in $DEFPATH + do + if test -f $j/$i + then + eval F$i=$j/$i + break + fi + done + done + for i in eqn tbl refer pic + do + if test `eval echo \\$Fg$i` = "missing" + then + for j in $DEFPATH + do + if test -f $j/$i + then + eval Fg$i=$j/$i + break + fi + done + fi + done +# -Tlatin1 is bad when utf8 is used, but needed for groff, not for nroff +# Hmm - also needed for nroff, to prevent double conversion on uxterm + if test $Fgroff = "missing" + then + if test $Fnroff = "missing" + then + nroff="nroff -Tlatin1 -mandoc" + else + nroff="$Fnroff -Tlatin1 -mandoc" + fi + troff="troff -mandoc" + echo "Warning: could not find groff" + else + if test $Fnroff = "missing" + then + nroff="$Fgroff -Tlatin1 -mandoc" + else + nroff="$Fnroff -Tlatin1 -mandoc" + fi + troff="$Fgroff -Tps -mandoc" + jnroff="$Fgroff -Tnippon -mandocj" + fi + eqn="$Fgeqn -Tps" + neqn="$Fgeqn -Tlatin1" + jneqn="$Fgeqn -Tnippon" + tbl="$Fgtbl" + col="$Fcol" + vgrind="$Fvgrind" + refer="$Fgrefer" + grap="$Fgrap" + pic="$Fgpic" + if test $Fless = "missing" + then + pager="$Fmore" + else + pager="$Fless $DEFAULTLESSOPT" + fi + if test $Flynx = "missing" + then + browser=$pager + htmlpager=$Fcat + else + browser="$Flynx" + htmlpager="$Flynx -dump" + fi + if test $Fawk = "missing" + then + Fawk="$Fgawk" + fi + if test $Fawk = "missing" + then + Fawk="$Fmawk" + fi + cmp="$Fcmp -s" + cat="$Fcat" + awk="$Fawk" + + FILTERS="troff nroff jnroff eqn neqn jneqn tbl col vgrind refer grap pic pager browser htmlpager cmp cat awk" +fi + +# Note: older nroff gives an error message for -c +# Do this only when you have troff 1.18.1 or so. +if [ "x$set_compatibility_mode_for_colored_groff" = "xtrue" ]; then + troff="$troff -c" + nroff="$nroff -c" + jnroff="$jnroff -c" +fi + +if [ x$default = x ]; then + echo "" + echo "If you don't have one of the following programs, enter \`missing'." + echo "It's best to enter absolute pathnames so that man won't have to" + echo "depend on the user's path to work properly. Default values are" + echo "given in square brackets. The answers given are only checked to" + echo "see if the programs exist, not to see see if the given flags are" + echo "correct." + + for filter in $FILTERS + do + found=false + while test "$found" = "false" + do + echo "" + echo $n "$filter command to use [`eval echo \\$$filter`] $c" + read tmp + if test -n "$tmp" + then + if test "$tmp" = "missing" + then + if test "$filter" = "pager" + then + found=false + echo "You must have a pager!" + else + found=true + eval $filter="" + fi + elif test -f `echo $tmp | $awk '{print $1}'` + then + found=true + eval $filter=\""$tmp"\" + else + found=false + echo "" + echo "`echo $tmp | $awk '{print $1}'` doesn't seem to exist! Try again or enter \`missing'" + fi + elif test `eval echo \\$$filter | $awk '{print $1}'` = "missing" + then + found=true + eval $filter="" + elif test -f `eval echo \\$$filter | $awk '{print $1}'` + then + found=true + else + found=false + echo "" + echo "`eval echo \\$$filter | $awk '{print $1}'` doesn't seem to exist! Try again or enter \`missing'" + fi + done + done +else + echo "" + echo "Assuming the following ways to invoke the various commands and filters": + for filter in $FILTERS + do + echo "$filter command: `eval echo \\$$filter`" + if test `eval echo \\$$filter | $awk '{print $1}'` = "missing" + then + eval $filter="" + fi + done +fi + +case $nroff in + *roff*) + echo "" + echo "It seems that no col is needed, since you use groff." + pcol= + nocol="# " ;; + *) + pcol=$col + nocol= ;; +esac + +fhs="# " +fsstnd="# " +FHSDIR=/var/cache/man +FSSTNDDIR=/var/catman +if [ x$usefhs = x -a x$usefsstnd = x ]; then + if [ x$default = x ]; then + echo "" + echo $n "Do you want to put the cat pages under $FHSDIR ? [no] $c" + ans= + while [ x$ans = x ] + do + read yesno + if test "$yesno" = "" || test "$yesno" = "no" + then + ans=false + elif test "$yesno" = "yes" + then + ans=true + else + echo "You must enter yes or no" + fi + done + if [ $ans = true ]; then + fhs= + else + echo $n "Do you want to put the cat pages under $FSSTNDDIR ? [no] $c" + ans= + while [ x$ans = x ] + do + read yesno + if test "$yesno" = "" || test "$yesno" = "no" + then + ans=false + elif test "$yesno" = "yes" + then + ans=true + else + echo "You must enter yes or no" + fi + done + if [ $ans = true ]; then + fsstnd= + fi + fi + else + echo "" + if [ -d $FHSDIR ]; then + echo "Using $FHSDIR for cat pages, following FHS." + fhs= + elif [ -d $FSSTNDDIR ]; then + echo "Using $FSSTNDDIR for cat pages, following FSSTND." + fsstnd= + else + echo "Using /usr/man/cat* (if that exists) for cat pages." + fi + fi +else + if [ x$usefsstnd = xtrue ]; then + fsstnd= + elif [ x$usefhs = xtrue ]; then + fhs= + fi +fi + +# How should man be installed? + +if [ x$default = x ]; then + for d in bindir sbindir mandir confdir + do + case $d in + bindir) + echo "" + echo $n "Where should executables be installed? [${bindir}] $c" ;; + sbindir) + echo "" + echo $n "Where should makewhatis be installed? [${sbindir}] $c" ;; + confdir) + echo "" + echo $n "Where should $conffilename be installed? [${confdir}] $c" ;; + mandir) + echo "" + echo $n "Where should man pages be installed? [${mandir}] $c" ;; + esac + dd=`eval echo \\$$d` + dir=$prefix/$dd + ok=false + while test "$ok" = "false" + do + read tmpdir + if test "$tmpdir" = "" && test "$dir" != "" + then + if test -d $dir + then + ok=true + eval $d=$dir + else + echo "" + echo "$dir doesn't seem to exist! Try again!" + fi + elif test -d "$tmpdir" + then + ok=true + eval $d=$tmpdir + newprefix=`echo $tmpdir | sed -e "s:/$dd::"` + if test "$tmpdir" = "$newprefix/$dd" + then + prefix=$newprefix + fi + else + ok=false + echo "" + echo "$tmpdir doesn't seem to exist! Try again!" + fi + done + done + + tmpext=1 + echo "" + echo $n "What extension should installed man(1) pages have? [${tmpext}] $c" + read man1ext + if test "$man1ext" = ""; then man1ext=$tmpext; fi + + tmpext=5 + echo "" + echo $n "What extension should installed man(5) pages have? [${tmpext}] $c" + read man5ext + if test "$man5ext" = ""; then man5ext=$tmpext; fi + + tmpext=8 + echo "" + echo $n "What extension should installed man(8) pages have? [${tmpext}] $c" + read man8ext + if test "$man8ext" = ""; then man8ext=$tmpext; fi +else + echo "" + echo "Assuming that binaries go to $bindir, the configuration file" + echo "goes to $confdir, makewhatis to $sbindir, and the man pages" + echo "to $mandir/man*." + man1ext=1 + man5ext=5 + man8ext=8 +fi + +if [ x$default = x ]; then + echo "" + echo $n "Do you want to install non-english man pages? [no] $c" + ok=false + while test "$ok" = "false" + do + read yesno + if test "$yesno" = "" || test "$yesno" = "no" + then + ok=true + ans=false + elif test "$yesno" = "yes" + then + ok=true + ans=true + else + ok=false + echo "You must enter yes or no" + fi + done +else + if [ "x$languages" = x ]; then + echo "" + echo "Assuming that you do not want to install non-english man pages." + fi + ans=false +fi + +if test "$ans" = "true" +then + cd man + languages="" + for i in ??; do + langname=`cat $i.txt` + echo $n "Install $langname pages? [no] $c" + ok=false + while test "$ok" = "false" + do + read yesno + if test "$yesno" = "" || test "$yesno" = "no" + then + ok=true + ans=false + elif test "$yesno" = "yes" + then + ok=true + ans=true + else + ok=false + echo "You must enter yes or no" + fi + done + if test "$ans" = "true" + then + languages="$languages $i" + fi + done + cd .. + if [ "x$languages" = x ]; then echo "Not installing any man pages, then."; fi +else + if [ "x$languages" = x ] + then + languages="en" + fi +fi + +if [ "x$languages" != x -a "x$languages" != xen ] +then + DEF_NLSPATH="/usr/share/locale/%L/%N:/usr/lib/locale/%N/%L" + deflocalepath=`echo $NLSPATH:$DEF_NLSPATH | sed 's/:/ /g'` + for i in $deflocalepath; do + if [ x$deflocale = x ]; then + tstdir=`echo $i | sed -e 's/%N//; s/%L//'` + if [ -d "$tstdir" ]; then + deflocale=$i +# else +# tstdir=`echo $i | sed -e 's/%N/*/; s/%L/*/'` +# if [ -d "$tstdir" ]; then +# deflocale=$i +# fi + fi + fi + done + if [ x$deflocale = x ]; then + deflocale="/usr/lib/locale/%N/%L" + fi + if [ x$default = x ]; then + echo "" + echo $n "Do you want to install non-english message catalogs for man? [yes] $c" + ok=false + while test "$ok" = "false" + do + read yesno + if test "$yesno" = "" || test "$yesno" = "yes" + then + ok=true + ans=true + elif test "$yesno" = "no" + then + ok=true + ans=false + else + ok=false + echo "You must enter yes or no" + fi + done + if [ $ans = true ]; then + echo $n "Where? [$deflocale] $c" + read locale + if [ x$locale = x ]; then + locale=$deflocale + fi + else + locale= + fi + else + locale=$deflocale + fi + echo + echo "Using localedir $locale" +fi + +if [ x$suid = x -a x$sgid = x ]; then + if [ x$default = x ]; then + echo "" + echo "Do you want to install man setuid or setgid to some user" + echo $n "who owns all the formatted man pages? [no] $c" + ok=false + while test "$ok" = "false" + do + read yesno + if test "$yesno" = "" || test "$yesno" = "no" + then + ok=true + ans=false + elif test "$yesno" = "yes" + then + ok=true + ans=true + else + ok=false + echo "You must enter yes or no" + fi + done + else + echo "Assuming that you do not want man to be suid or sgid." + echo "(But you can always do _chown man man; chmod 04555 man_ later.)" + ans=false + fi +else + ans=true +fi + +if test "$ans" = "true" +then + # prefer uid/gid man above root, but prefer not to give man the + # ability to write into its own binary; never install man suid root + + if [ x$sgid = x ]; then + man_user=man + man_mode=4555 + if grep -q '^man:' /etc/group >/dev/null 2>/dev/null; + then + man_group=man + else + man_group=root + fi + if grep -q '^man:' /etc/passwd >/dev/null 2>/dev/null; + then + : + else + echo "Warning: you still have to create a user \"man\"" + fi + else + man_user=root + man_group=man + man_mode=2555 + if grep -q '^man:' /etc/group >/dev/null 2>/dev/null; + then + : + else + echo "Warning: you still have to create a group \"man\"" + fi + fi + if [ x$default = x ]; then + echo "" + echo $n "What owner should man have? [${man_user}] $c" + read user + if test "$user" != ""; then man_user=$user; fi + echo "" + echo $n "What group should man have? [${man_group}] $c" + read group + if test "$group" != ""; then man_group=$group; fi + echo "" + echo $n "What mode should the installed man have? [${man_mode}] $c" + read mode + if test "$mode" != ""; then man_mode=$mode; fi + fi + man_install_flags="-m $man_mode -o $man_user -g $man_group" +fi + +# What sections do we anticipate? + +tmpsections="1 1p 8 2 3 3p 4 5 6 7 9 0p tcl n l p o" + +if [ x$default = x ]; then + echo "" + echo "Enter the man page sections your system uses, separated by" + echo "spaces, and in the order they should be searched." + echo $n "[${tmpsections}] $c" + read sects + if test "$sects" != ""; then tmpsections="$sects"; fi +else + echo + echo "Setting the default section search order to $tmpsections." +fi + +for sect in $tmpsections +do + if [ x$sections = x ]; then + sections=$sect + else + sections=$sections:$sect + fi +done + +if test "$nroff" != "" +then + if [ x$default = x ]; then + echo "" + echo $n "Compress formatted pages? [yes] $c" + ok=false + while test "$ok" = "false" + do + read yesno + if test "$yesno" = "" || test "$yesno" = "yes" + then + ok=true + ans=true + elif test "$yesno" = "no" + then + ok=true + ans=false + else + ok=false + echo "You must enter yes or no" + fi + done + else + echo "" + echo "Assuming that formatted pages should be compressed." + ans=true + fi + + if test "$ans" = "true" + then + DO_COMPRESSION=true + compress= + for i in xz lzma bzip2 gzip bzip tzip pack compress freeze yabba + do + eval F$i=missing + for j in $DEFPATH + do + if test -f $j/$i + then + eval F$i=$j/$i + if [ x$compress = x ]; then compress=$j/$i; fi + break + fi + done + done + + if [ x$default = x ]; then + echo "" + echo "What program should be used to compress the formatted pages?" + echo $n "Note that it must work as a filter! [${compress}] $c" + found=false + while test "$found" = "false" + do + read tmp + if test -n "$tmp" + then + if test -f `echo $tmp | $awk '{print $1}'` + then + found=true + compress=$tmp + else + found=false + echo "" + echo "`echo $tmp | $awk '{print $1}'` doesn't seem to exist! Try again!" + fi + elif test -f `echo "$compress" | $awk '{print $1}'` + then + found=true + else + found=false + echo "" + echo "`echo "$compress" | $awk '{print $1}'` doesn't seem to exist! Try again!" + fi + done + else + if [ x$compress = x ] + then + DO_COMPRESSION=false + echo "Could not find any compression programs." + else + echo "Using $compress for compression." + fi + fi + + case $compress in + *xz*) ext=".xz" ;; + *lzma*) ext=".lzma" ;; + *bzip2*) ext=".bz2" ;; + *gzip*) ext=".gz" ;; + *bzip*) ext=".bz" ;; + *tzip*) ext=".tz" ;; + *pack*) ext=".z" ;; + *compress*) ext=".Z" ;; + *freeze*) ext=".F" ;; + *yabba*) ext=".Y" ;; + *) ext="" ;; + esac + if [ x$default = x ]; then + echo "" + echo "What extension should be added to" + if test "$ext" = "" + then + echo "compressed files?" + else + echo $n "compressed files? [${ext}] $c" + fi + ok=false + while test "$ok" = "false" + do + read tmp_ext + if test "$tmp_ext" = "" && test "$ext" != "" + then + ok=true + compress_ext=$ext + elif test "$tmp_ext" != "" + then + ok=true + compress_ext=$tmp_ext + fi + done + else + compress_ext=$ext + fi + else + DO_COMPRESSION=false + fi +fi + +# unconditionally handle uncompression +UNCOMPRESSORS="unxz unlzma gunzip bzip2 pcat zcat fcat unyabba" +for i in $UNCOMPRESSORS +do + eval F$i=missing + for j in $DEFPATH + do + if test -f $j/$i + then + eval F$i=$j/$i + break + fi + done +done +unxz=missing +if [ $Funxz != missing ]; then + unxz="$Funxz -c" +fi +gunzip=missing +if [ $Fgunzip != missing ]; then + gunzip="$Fgunzip -c" +fi +bzip2=missing +if [ $Fbzip2 != missing ]; then + bzip2="$Fbzip2 -c -d" +fi +unlzma=missing +if [ $Funlzma != missing ]; then + unlzma="$Funlzma -c -d" +fi +pcat="$Fpcat" +zcat="$Fzcat" +fcat="$Ffcat" +unyabba="$Funyabba" + +if [ x$default = x ]; then + echo "" + echo "Now let us look at programs for uncompressing compressed man pages." + echo "" + echo "If you don't have one of the following programs, enter \`missing'." + echo "It's best to enter absolute pathnames so that man won't have to" + echo "depend on the user's path to work properly. Default values are" + echo "given in square brackets. The answers given are only checked to" + echo "see if the programs exist, not to see see if the given flags are" + echo "correct." + for filter in $UNCOMPRESSORS + do + found=false + while test "$found" = "false" + do + echo "" + case $filter in + unxz) + echo "Command to use for .xz files (standard xz)" + echo $n "[`eval echo \\$$filter`] $c" ;; + gunzip) + echo "Command to use for .gz files (standard gzip)" + echo $n "[`eval echo \\$$filter`] $c" ;; + bzip2) + echo "Command to use for .bz2 files (standard bzip2)" + echo $n "[`eval echo \\$$filter`] $c" ;; + unlzma) + echo "Command to use for .lzma files (standard lzma)" + echo $n "[`eval echo \\$$filter`] $c" ;; + pcat) + echo "Command to use for .z files (pack/unpack)" + echo $n "[`eval echo \\$$filter`] $c" ;; + zcat) + echo "Command to use for .Z files (standard compress)" + echo $n "[`eval echo \\$$filter`] $c" ;; + fcat) + echo "Command to use for .F files (freeze/melt from net posting)" + echo $n "[`eval echo \\$$filter`] $c" ;; + unyabba) + echo "Command to use for .Y files (yabba/unyabba from net posting)" + echo $n "[`eval echo \\$$filter`] $c" ;; + esac + read tmp + if test -n "$tmp" + then + if test "$tmp" = "missing" + then + found=true + eval $filter="" + elif test -f `echo $tmp | $awk '{print $1}'` + then + found=true + eval $filter=\""$tmp"\" + else + found=false + echo "" + echo "`echo $tmp | $awk '{print $1}'` doesn't seem to exist! Try again or enter \`missing'" + fi + elif test `eval echo \\$$filter | $awk '{print $1}'` = "missing" + then + found=true + eval $filter="" + elif test -f `eval echo \\$$filter | $awk '{print $1}'` + then + found=true + else + found=false + echo "" + echo "`eval echo \\$$filter | $awk '{print $1}'` doesn't seem to exist! Try again or enter \`missing'" + fi + done + done +else + echo "" + echo "Assuming the following ways to invoke the various decompressors:" + for filter in $UNCOMPRESSORS + do + echo "$filter command: `eval echo \\$$filter`" + if test `eval echo \\$$filter | $awk '{print $1}'` = "missing" + then + eval $filter="" + fi + done +fi + +# set $decompress to the program that decompresses things +# with the $compress_ext extension. +case $compress_ext in + .xz) decompress=$unxz ;; + .gz) decompress=$gunzip ;; + .bz2) decompress=$bzip2 ;; + .lzma) decompress=$unlzma ;; + .z) decompress=$pcat ;; + .Z) decompress=$zcat ;; + .F) decompress=$fcat ;; + .Y) decompress=$unyabba ;; + *) decompress= ;; +esac + +if test "$DO_COMPRESSION" = "true" +then + DEFS="$DEFS -DDO_COMPRESS" +fi + +man=$bindir/man$EXEEXT +apropos=$bindir/apropos +whatis=$bindir/whatis +man2dvi=$bindir/man2dvi +makewhatis=$sbindir/makewhatis +man_config_dir=$confdir +man_config_file=$confdir/$conffilename + +if [ x$locale = x ]; then + sed -e 's/%.*//' < Makefile.in > Makefile +else + sed -e 's/%//' < Makefile.in > Makefile +fi + +# some definitions to avoid extensive quoting in the script below +allargs='$@' +infiles='$infiles' +infile='$infile' +shebang='`sed -n -e 1p $infile.in`' +cb='$cb' +cs='$cs' +ce='$ce' +mancomment='.\\\"' + +# Note: the script below only works when none of the variables +# contains a comma. +version=`cat version` + +cat > conf_script << EOS +#!/bin/sh +infiles=$allargs +trap 'rm -f $infiles; exit 1' 1 3 15 + +# echo "" +for infile in $infiles +do + case $infile in + *.h) + cb="/*"; cs=" *"; ce=" */";; + *.1|*.5|*.8|*.man) + cb=$mancomment; cs=$mancomment; ce=$mancomment;; + *) + case "$shebang" in + '#!'*) cb="$shebang";; + *) cb="#";; + esac + cs="#"; ce="#";; + esac + echo "$cb" > $infile + echo "$cs Generated automatically from $infile.in by the" >> $infile + echo "$cs configure script." >> $infile + echo "$ce" >> $infile + echo "Creating $infile from $infile.in" + sed -e ' +s,@version@,$version, +s,@CC@,$CC, +s,@EXEEXT@,$EXEEXT, +s,@BUILD_CC@,$BUILD_CC, +s,@INSTALL@,$INSTALL, +s,@DEFS@,$DEFS, +s,@LIBS@,$LIBS, +s,@LIBOBJS@,$LIBOBJS, +s,@troff@,$troff, +s,@nroff@,$nroff, +s,@jnroff@,$jnroff, +s,@eqn@,$eqn, +s,@neqn@,$neqn, +s,@jneqn@,$jneqn, +s,@tbl@,$tbl, +s,@nocol@,$nocol, +s,@pcol@,$pcol, +s,@col@,$col, +s,@vgrind@,$vgrind, +s,@refer@,$refer, +s,@grap@,$grap, +s,@pic@,$pic, +s,@fcat@,$fcat, +s,@pcat@,$pcat, +s,@zcat@,$zcat, +s,@unxz@,$unxz, +s,@gunzip@,$gunzip, +s,@bzip2@,$bzip2, +s,@unlzma@,$unlzma, +s,@unyabba@,$unyabba, +s,@compress@,$compress, +s,@compress_ext@,$compress_ext, +s,@decompress@,$decompress, +s,@pager@,$pager, +s,@browser@,$browser, +s,@htmlpager@,$htmlpager, +s,@cmp@,$cmp, +s,@cat@,$cat, +s,@awk@,$awk, +s,@bindir@,$bindir, +s,@sbindir@,$sbindir, +s,@mandir@,$mandir, +s,@locale@,$locale, +s,@fhs@,$fhs, +s,@fsstnd@,$fsstnd, +s,@man1ext@,$man1ext,g +s,@man5ext@,$man5ext,g +s,@man8ext@,$man8ext,g +s,@man_install_flags@,$man_install_flags, +s,@man_user@,$man_user, +s,@languages@,$languages, +s,@man@,$man, +s,@apropos@,$apropos, +s,@whatis@,$whatis, +s,@man2dvi@,$man2dvi, +s,@makewhatis@,$makewhatis, +s,@man_config_dir@,$man_config_dir, +s,@man_config_file@,$man_config_file, +s,@manpathoption@,$manpathoption, +s/@sections@/$sections/ +' $infile.in >> $infile +done +EOS + +chmod +x conf_script + +echo "" +echo 'Created Makefile and conf_script. Now do "make" and "make install".' +echo "" diff --git a/gencat/Makefile b/gencat/Makefile new file mode 100644 index 0000000..8800958 --- /dev/null +++ b/gencat/Makefile @@ -0,0 +1,18 @@ +# extremely primitive makefile +# just for people that don't have gencat but need it to make man + +# note: you only need gencat if you want non-English messages + +gencat: gencat.o genlib.o + $(CC) $(LDFLAGS) -o gencat gencat.o genlib.o + +gencat.o genlib.o: gencat.h + +genlib.o: msgcat.h + +install: gencat + cp gencat$(EXEEXT) $(DESTDIR)$(PREFIX)/usr/bin + +clean: + rm -f *~ *.o gencat + diff --git a/gencat/gencat.c b/gencat/gencat.c new file mode 100644 index 0000000..d1a7c31 --- /dev/null +++ b/gencat/gencat.c @@ -0,0 +1,265 @@ + +/*********************************************************** +Copyright 1990, by Alfalfa Software Incorporated, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that Alfalfa's name not be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. + +ALPHALPHA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +ALPHALPHA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +If you make any modifications, bugfixes or other changes to this software +we'd appreciate it if you could send a copy to us so we can keep things +up-to-date. Many thanks. + Kee Hinckley + Alfalfa Software, Inc. + 267 Allston St., #3 + Cambridge, MA 02139 USA + nazgul@alfalfa.com + +******************************************************************/ + +/* Edit History + +01/18/91 3 hamilton #if not reparsed +01/12/91 2 schulert conditionally use prototypes +12/23/90 2 hamilton Fix fd == NULL to fd < 0 +11/03/90 1 hamilton Alphalpha->Alfalfa & OmegaMail->Poste +08/13/90 1 schulert move from ua to omu +*/ + +#include +#include +#include +#ifdef SYSV +#include +#include +#else +#include +#endif +#ifdef __linux__ +#include +#include +#endif +#include +#include +#include "gencat.h" + +#ifndef L_SET +#define L_SET SEEK_SET +#endif + +#ifndef L_INCR +#define L_INCR SEEK_CUR +#endif + +/* + * The spec says the syntax is "gencat catfile msgfile...". + * We extend it to: + * gencat [-new] [-or] [-lang C|C++|ANSIC] catfile msgfile + * [-h ]... + * Flags are order dependant, we'll take whatever lang was most recently chosen + * and use it to generate the next header file. The header files are generated + * at the point in the command line they are listed. Thus the sequence: + * gencat -lang C foo.cat foo.mcs -h foo.h -lang C++ bar.mcs -h bar.H + * will put constants from foo.mcs into foo.h and constants from bar.mcs into + * bar.h. Constants are not saved in the catalog file, so nothing will come + * from that, even if things have been defined before. The constants in foo.h + * will be in C syntax, in bar.H in C++ syntax. + */ + +static void writeIfChanged( +#if defined(__STDC__) || defined(__cplusplus) + char *fname, int lang, int orConsts +#endif +); + +void usage() { + fprintf(stderr, "Use: gencat [-new] [-or] [-lang C|C++|ANSIC] catfile msgfile [-h ]...\n"); +} + +int main( +#if defined(__STDC__) || defined(__cplusplus) + int argc, char *argv[]) +#else + argc, argv) +int argc; +char *argv[]; +#endif +{ + int ofd, ifd, i; + FILE *fptr; + char *catfile = NULL; + char *input = NULL; + int lang = MCLangC; + int new = False; + int orConsts = False; + + for (i = 1; i < argc; ++i) { + if (argv[i][0] == '-') { + if (strcmp(argv[i], "-lang") == 0) { + ++i; + if (strcmp(argv[i], "C") == 0) lang = MCLangC; + else if (strcmp(argv[i], "C++") == 0) lang = MCLangCPlusPlus; + else if (strcmp(argv[i], "ANSIC") == 0) lang = MCLangANSIC; + else { + fprintf(stderr, "gencat: Unrecognized language: %s\n", argv[i]); + exit(1); + } + } else if (strncmp(argv[i], "-h", 2) == 0) { + if (!input) { + fprintf(stderr, "gencat: Can't write to a header before reading something.\n"); + exit(1); + } + ++i; + writeIfChanged(argv[i], lang, orConsts); + } else if (strncmp(argv[i], "-new", 4) == 0) { + if (catfile) { + fprintf(stderr, "gencat: You must specify -new before the catalog file name\n"); + exit(1); + } + new = True; + } else if (strncmp(argv[i], "-or", 3) == 0) { + orConsts = ~orConsts; + } else { + usage(); + exit(1); + } + } else { + if (!catfile) { + catfile = argv[i]; + if (new) { + if ((ofd = open(catfile, O_WRONLY|O_TRUNC|O_CREAT, 0666)) < 0) { + fprintf(stderr, "gencat: Unable to create a new %s.\n", catfile); + exit(1); + } + } else if ((ofd = open(catfile, O_RDONLY)) < 0) { + if ((ofd = open(catfile, O_WRONLY|O_CREAT, 0666)) < 0) { + fprintf(stderr, "gencat: Unable to create %s.\n", catfile); + exit(1); + } + } else { + MCReadCat(ofd); + close(ofd); + if ((ofd = open(catfile, O_WRONLY|O_TRUNC)) < 0) { + fprintf(stderr, "gencat: Unable to truncate %s.\n", catfile); + exit(1); + } + } + } else { + input = argv[i]; + if ((ifd = open(input, O_RDONLY)) < 0) { + fprintf(stderr, "gencat: Unable to read %s\n", input); + exit(1); + } + MCParse(ifd); + close(ifd); + } + } + } + if (catfile) { + MCWriteCat(ofd); + exit(0); + } else { + usage(); + exit(1); + } + return 0; /* just for gcc */ +} + +static void writeIfChanged( +#if defined(__STDC__) || defined(__cplusplus) + char *fname, int lang, int orConsts) +#else + fname, lang, orConsts) +char *fname; +int lang; +int orConsts; +#endif +{ + char tmpname[32]; + char buf[BUFSIZ], tbuf[BUFSIZ], *cptr, *tptr; + int fd, tfd; + int diff = False; + int c, len, tlen; + struct stat sbuf; + + /* If it doesn't exist, just create it */ + if (stat(fname, &sbuf)) { + if ((fd = open(fname, O_WRONLY|O_CREAT, 0666)) < 0) { + fprintf(stderr, "gencat: Unable to create header file %s.\n", fname); + exit(1); + } + MCWriteConst(fd, lang, orConsts); + close(fd); + return; + } + + /* If it does exist, create a temp file for now */ + sprintf(tmpname, "/tmp/gencat.%d", (int) getpid()); + if ((tfd = open(tmpname, O_RDWR|O_CREAT, 0666)) < 0) { + fprintf(stderr, "gencat: Unable to open temporary file: %s\n", tmpname); + exit(1); + } + unlink(tmpname); + + /* Write to the temp file and rewind */ + MCWriteConst(tfd, lang, orConsts); + + /* Open the real header file */ + if ((fd = open(fname, O_RDONLY)) < 0) { + fprintf(stderr, "gencat: Unable to read header file: %s\n", fname); + exit(1); + } + + /* Backup to the start of the temp file */ + if (lseek(tfd, 0L, L_SET) < 0) { + fprintf(stderr, "gencat: Unable to seek in tempfile: %s\n", tmpname); + exit(1); + } + + /* Now compare them */ + while ((tlen = read(tfd, tbuf, BUFSIZ)) > 0) { + if ((len = read(fd, buf, BUFSIZ)) != tlen) { + diff = True; + goto done; + } + for (cptr = buf, tptr = tbuf; cptr < buf+len; ++cptr, ++tptr) { + if (*tptr != *cptr) { + diff = True; + goto done; + } + } + } +done: + if (diff) { + if (lseek(tfd, 0L, L_SET) < 0) { + fprintf(stderr, "gencat: Unable to seek in tempfile: %s\n", tmpname); + exit(1); + } + close(fd); + if ((fd = open(fname, O_WRONLY|O_TRUNC)) < 0) { + fprintf(stderr, "gencat: Unable to truncate header file: %s\n", fname); + exit(1); + } + while ((len = read(tfd, buf, BUFSIZ)) > 0) { + if (write(fd, buf, len) != len) { + fprintf(stderr, "gencat: Error writing to header file: %s\n", fname); + } + } + } + close(fd); + close(tfd); +} diff --git a/gencat/gencat.h b/gencat/gencat.h new file mode 100644 index 0000000..fcf20b7 --- /dev/null +++ b/gencat/gencat.h @@ -0,0 +1,107 @@ + +/*********************************************************** +Copyright 1990, by Alfalfa Software Incorporated, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that Alfalfa's name not be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. + +ALPHALPHA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +ALPHALPHA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +If you make any modifications, bugfixes or other changes to this software +we'd appreciate it if you could send a copy to us so we can keep things +up-to-date. Many thanks. + Kee Hinckley + Alfalfa Software, Inc. + 267 Allston St., #3 + Cambridge, MA 02139 USA + nazgul@alfalfa.com + +******************************************************************/ + +/* Edit History + +02/25/91 2 nazgul Added MCGetByteOrder +01/18/91 2 hamilton #if not reparsed +01/12/91 2 schulert conditionally use prototypes +11/03/90 1 hamilton Alphalpha->Alfalfa & OmegaMail->Poste +08/13/90 1 schulert move from ua to omu +*/ + +#ifndef gencat_h +#define gencat_h + +/* + * $set n comment + * My extension: If the comment begins with # treat the next string + * as a constant identifier. + * $delset n comment + * n goes from 1 to NL_SETMAX + * Deletes a set from the MC + * $ comment + * My extension: If comment begins with # treat the next string as + * a constant identifier for the next message. + * m message-text + * m goes from 1 to NL_MSGMAX + * If message-text is empty, and a space or tab is present, put + * empty string in catalog. + * If message-text is empty, delete the message. + * Length of text is 0 to NL_TEXTMAX + * My extension: If '#' is used instead of a number, the number + * is generated automatically. A # followed by anything is an empty message. + * $quote c + * Optional quote character which can suround message-text to + * show where spaces are. + * + * Escape Characters + * \n (newline), \t (horiz tab), \v (vert tab), \b (backspace), + * \r (carriage return), \f (formfeed), \\ (backslash), \ddd (bitpattern + * in octal). + * Also, \ at end of line is a continuation. + * + */ + +#define MCLangC 0 +#define MCLangCPlusPlus 1 +#define MCLangANSIC 2 + +#define MAXTOKEN 1024 + +#if !defined(ANSI_C) && (defined(__STDC__) || defined(_AIX)) +# define ANSI_C 1 +#endif + +#if ANSI_C || defined(__cplusplus) +# define P_(x) x +#else +# define P_(x) /**/ +#endif + +extern void MCAddSet P_((int setId, char *c)); +extern void MCDelSet P_((int setId)); +extern void MCAddMsg P_((int msgId, char *msg, char *c)); +extern void MCDelMsg P_((int msgId)); +extern void MCParse P_((int fd)); +extern void MCReadCat P_((int fd)); +extern void MCWriteConst P_((int fd, int type, int orConsts)); +extern void MCWriteCat P_((int fd)); +extern long MCGetByteOrder P_((void)); + +#ifndef True +# define True ~0 +# define False 0 +#endif + +#endif diff --git a/gencat/genlib.c b/gencat/genlib.c new file mode 100644 index 0000000..737a9cb --- /dev/null +++ b/gencat/genlib.c @@ -0,0 +1,892 @@ +/* -*-c++-*- */ + + +/*********************************************************** +Copyright 1990, by Alfalfa Software Incorporated, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that Alfalfa's name not be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. + +ALPHALPHA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +ALPHALPHA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +If you make any modifications, bugfixes or other changes to this software +we'd appreciate it if you could send a copy to us so we can keep things +up-to-date. Many thanks. + Kee Hinckley + Alfalfa Software, Inc. + 267 Allston St., #3 + Cambridge, MA 02139 USA + nazgul@alfalfa.com + +******************************************************************/ + +/* Edit History + +12/03/82 nazgul Patch from . This may fix + the problem with updating sets. +10/18/92 3 schulert actually put in the changes described in last edit. +10/18/92 7 nazgul Changes from gbooman@feds1.Prime.COM (Gordon Booman) + 1) Support backslash quoted quotes in message file text. + 2) Correctly indicate error location in messages that have tabs. + 3) Fixed a misspelling. +04/15/91 6 nazgul Check for byte order first +02/25/91 5 nazgul Added flag for MS byteorder +01/14/91 4 nazgul Off by one on number specified entries +*/ + +#include +#include +#ifdef SYSV +#include +#include +#endif + +#if !defined(__linux__) && !defined(__CYGWIN__) +#include +static int bcopy(src, dst, length) +char *src, *dst; +int length; +{ + memcpy(dst, src, length); +} +static int bzero(b, length) +char *b; +int length; +{ + memset(b, '\0', length); +} +#else +#include +#endif + +#include +#include +#include "msgcat.h" +#include "gencat.h" + +#ifndef L_SET +#define L_SET SEEK_SET +#endif + +#ifndef L_INCR +#define L_INCR SEEK_CUR +#endif + +static char *curline = NULL; +static long lineno = 0; + +static void warning(cptr, msg) +char *cptr; +char *msg; +{ + fprintf(stderr, "gencat: %s on line %d\n", msg, lineno); + fprintf(stderr, "%s\n", curline); + if (cptr) { + char *tptr; + for (tptr = curline; tptr < cptr; ++tptr) + putc(*tptr == '\t' ? '\t' : ' ', stderr); + fprintf(stderr, "^\n"); + } +} + +static void error(cptr, msg) +char *cptr; +char *msg; +{ + warning(cptr, msg); + exit(1); +} + +static void corrupt() { + error(NULL, "corrupt message catalog"); +} +static void nomem() { + error(NULL, "out of memory"); +} + +static char *my_getline(fd) +int fd; +{ + static long len = 0, curlen = BUFSIZ; + static char buf[BUFSIZ], *bptr = buf, *bend = buf; + char *cptr, *cend; + long buflen; + + if (!curline) { + curline = (char *) malloc(curlen); + if (!curline) nomem(); + } + ++lineno; + + cptr = curline; + cend = curline + curlen; + while (True) { + for (; bptr < bend && cptr < cend; ++cptr, ++bptr) { + if (*bptr == '\n') { + *cptr = '\0'; + ++bptr; + return(curline); + } else *cptr = *bptr; + } + if (bptr == bend) { + buflen = read(fd, buf, BUFSIZ); + if (buflen <= 0) { + if (cptr > curline) { + *cptr = '\0'; + return(curline); + } + return(NULL); + } + bend = buf + buflen; + bptr = buf; + } + if (cptr == cend) { + cptr = curline = (char *) realloc(curline, curlen *= 2); + cend = curline + curlen; + } + } +} + + +static char *token(cptr) +char *cptr; +{ + static char tok[MAXTOKEN+1]; + char *tptr = tok; + + while (*cptr && isspace(*cptr)) ++cptr; + while (*cptr && !isspace(*cptr)) *tptr++ = *cptr++; + *tptr = '\0'; + return(tok); +} +static char *wskip(cptr) +char *cptr; +{ + if (!*cptr || !isspace(*cptr)) { + warning(cptr, "expected a space"); + return(cptr); + } + while (*cptr && isspace(*cptr)) ++cptr; + return(cptr); +} +static char *cskip(cptr) +char *cptr; +{ + if (!*cptr || isspace(*cptr)) { + warning(cptr, "wasn't expecting a space"); + return(cptr); + } + while (*cptr && !isspace(*cptr)) ++cptr; + return(cptr); +} + +static char *getmsg(fd, cptr, quote) +int fd; +char *cptr; +char quote; +{ + static char *msg = NULL; + static long msglen = 0; + long clen, i; + char *tptr; + + int needq; + + if (quote && *cptr == quote) { + needq = True; + ++cptr; + } else needq = False; + + clen = strlen(cptr) + 1; + if (clen > msglen) { + if (msglen) msg = (char *) realloc(msg, clen); + else msg = (char *) malloc(clen); + msglen = clen; + } + tptr = msg; + + while (*cptr) { + if (quote && *cptr == quote) { + char *tmp; + tmp = cptr+1; + if (*tmp && (!isspace(*tmp) || *wskip(tmp))) { + warning(cptr, "quote character before end of line, ignoring"); + *tptr++ = *cptr++; + } else { + *cptr = '\0'; + } + } else if (*cptr == '\\') { + ++cptr; + switch (*cptr) { + case '\0': + cptr = my_getline(fd); + if (!cptr) error(NULL, "premature end of file"); + msglen += strlen(cptr); + i = tptr - msg; + msg = (char *) realloc(msg, msglen); + tptr = msg + i; + break; + case 'n': + *tptr++ = '\n'; + ++cptr; + break; + case 't': + *tptr++ = '\t'; + ++cptr; + break; + case 'v': + *tptr++ = '\v'; + ++cptr; + break; + case 'b': + *tptr++ = '\b'; + ++cptr; + break; + case 'r': + *tptr++ = '\r'; + ++cptr; + break; + case 'f': + *tptr++ = '\f'; + ++cptr; + break; + case '\\': + *tptr++ = '\\'; + ++cptr; + break; + default: + if (isdigit(*cptr)) { + *tptr = 0; + for (i = 0; i < 3; ++i) { + if (!isdigit(*cptr)) break; + if (*cptr > '7') warning(cptr, "octal number greater than 7?!"); + *tptr *= 8; + *tptr += (*cptr - '0'); + ++cptr; + } + } else if (*cptr == quote) { + *tptr++ = *cptr++; + } else { + warning(cptr, "unrecognized escape sequence"); + } + } + } else { + *tptr++ = *cptr++; + } + } + *tptr = '\0'; + return(msg); +} + + + +static char *dupstr(ostr) +char *ostr; +{ + char *nstr; + + nstr = (char *) malloc(strlen(ostr) + 1); + if (!nstr) error(NULL, "unable to allocate storage"); + strcpy(nstr, ostr); + return(nstr); +} + + +/* + * The Global Stuff + */ + + +typedef struct _msgT { + long msgId; + char *str; + char *hconst; + long offset; + struct _msgT *prev, *next; +} msgT; +typedef struct _setT { + long setId; + char *hconst; + msgT *first, *last; + struct _setT *prev, *next; +} setT; +typedef struct { + setT *first, *last; +} catT; + +static setT *curSet; +static catT *cat; + +/* + * Find the current byte order. There are of course some others, but this will do + * for now. Note that all we care about is "long". + */ +long MCGetByteOrder() { + long l = 0x00010203; + char *cptr = (char *) &l; + + if (cptr[0] == 0 && cptr[1] == 1 && cptr[2] == 2 && cptr[3] == 3) + return MC68KByteOrder; + else return MCn86ByteOrder; +} + + +void MCParse( +#if PROTO + int fd) +#else + fd) +int fd; +#endif +{ + char *cptr, *str; + int setid, msgid = 0; + char hconst[MAXTOKEN+1]; + char quote = 0; + int i; + + if (!cat) { + cat = (catT *) malloc(sizeof(catT)); + if (!cat) nomem(); + bzero(cat, sizeof(catT)); + } + + hconst[0] = '\0'; + + while (cptr = my_getline(fd)) { + if (*cptr == '$') { + ++cptr; + if (strncmp(cptr, "set", 3) == 0) { + cptr += 3; + cptr = wskip(cptr); + setid = atoi(cptr); + cptr = cskip(cptr); + if (*cptr) cptr = wskip(cptr); + if (*cptr == '#') { + ++cptr; + MCAddSet(setid, token(cptr)); + } else MCAddSet(setid, NULL); + msgid = 0; + } else if (strncmp(cptr, "delset", 6) == 0) { + cptr += 6; + cptr = wskip(cptr); + setid = atoi(cptr); + MCDelSet(setid); + } else if (strncmp(cptr, "quote", 5) == 0) { + cptr += 5; + if (!*cptr) quote = 0; + else { + cptr = wskip(cptr); + if (!*cptr) quote = 0; + else quote = *cptr; + } + } else if (isspace(*cptr)) { + cptr = wskip(cptr); + if (*cptr == '#') { + ++cptr; + strcpy(hconst, token(cptr)); + } + } else { + if (*cptr) { + cptr = wskip(cptr); + if (*cptr) warning(cptr, "unrecognized line"); + } + } + } else { + if (isdigit(*cptr) || *cptr == '#') { + if (*cptr == '#') { + ++msgid; + ++cptr; + if (!*cptr) { + MCAddMsg(msgid, "", hconst); + hconst[0] = '\0'; + continue; + } + if (!isspace(*cptr)) warning(cptr, "expected a space"); + ++cptr; + if (!*cptr) { + MCAddMsg(msgid, "", hconst); + hconst[0] = '\0'; + continue; + } + } else { + msgid = atoi(cptr); + cptr = cskip(cptr); + cptr = wskip(cptr); + /* if (*cptr) ++cptr; */ + } + if (!*cptr) MCDelMsg(msgid); + else { + str = getmsg(fd, cptr, quote); + MCAddMsg(msgid, str, hconst); + hconst[0] = '\0'; + } + } + } + } +} + +void MCReadCat( +#if PROTO + int fd) +#else + fd) +int fd; +#endif +{ + MCHeaderT mcHead; + MCMsgT mcMsg; + MCSetT mcSet; + msgT *msg; + setT *set; + int i; + char *data; + + cat = (catT *) malloc(sizeof(catT)); + if (!cat) nomem(); + bzero(cat, sizeof(catT)); + + if (read(fd, &mcHead, sizeof(mcHead)) != sizeof(mcHead)) corrupt(); + if (strncmp(mcHead.magic, MCMagic, MCMagicLen) != 0) corrupt(); + if ((mcHead.flags & MCGetByteOrder()) == 0) error(NULL, "wrong byte order"); + if (mcHead.majorVer != MCMajorVer) error(NULL, "unrecognized catalog version"); + + if (lseek(fd, mcHead.firstSet, L_SET) == -1) corrupt(); + + while (True) { + if (read(fd, &mcSet, sizeof(mcSet)) != sizeof(mcSet)) corrupt(); + if (mcSet.invalid) continue; + + set = (setT *) malloc(sizeof(setT)); + if (!set) nomem(); + bzero(set, sizeof(*set)); + if (cat->first) { + cat->last->next = set; + set->prev = cat->last; + cat->last = set; + } else cat->first = cat->last = set; + + set->setId = mcSet.setId; + + /* Get the data */ + if (mcSet.dataLen) { + data = (char *) malloc(mcSet.dataLen); + if (!data) nomem(); + if (lseek(fd, mcSet.data.off, L_SET) == -1) corrupt(); + if (read(fd, data, mcSet.dataLen) != mcSet.dataLen) corrupt(); + if (lseek(fd, mcSet.u.firstMsg, L_SET) == -1) corrupt(); + + for (i = 0; i < mcSet.numMsgs; ++i) { + if (read(fd, &mcMsg, sizeof(mcMsg)) != sizeof(mcMsg)) corrupt(); + if (mcMsg.invalid) { + --i; + continue; + } + + msg = (msgT *) malloc(sizeof(msgT)); + if (!msg) nomem(); + bzero(msg, sizeof(*msg)); + if (set->first) { + set->last->next = msg; + msg->prev = set->last; + set->last = msg; + } else set->first = set->last = msg; + + msg->msgId = mcMsg.msgId; + msg->str = dupstr((char *) (data + mcMsg.msg.off)); + } + free(data); + } + if (!mcSet.nextSet) break; + if (lseek(fd, mcSet.nextSet, L_SET) == -1) corrupt(); + } +} + + +static void printS(fd, str) +int fd; +char *str; +{ + write(fd, str, strlen(str)); +} +static void printL(fd, l) +int fd; +long l; +{ + char buf[32]; + sprintf(buf, "%ld", l); + write(fd, buf, strlen(buf)); +} +static void printLX(fd, l) +int fd; +long l; +{ + char buf[32]; + sprintf(buf, "%lx", l); + write(fd, buf, strlen(buf)); +} + +static void genconst(fd, type, setConst, msgConst, val) +int fd; +int type; +char *setConst; +char *msgConst; +long val; +{ + switch (type) { + case MCLangC: + if (!msgConst) { + printS(fd, "\n#define "); + printS(fd, setConst); + printS(fd, "Set"); + } else { + printS(fd, "#define "); + printS(fd, setConst); + printS(fd, msgConst); + } + printS(fd, "\t0x"); + printLX(fd, val); + printS(fd, "\n"); + break; + case MCLangCPlusPlus: + case MCLangANSIC: + if (!msgConst) { + printS(fd, "\nconst long "); + printS(fd, setConst); + printS(fd, "Set"); + } else { + printS(fd, "const long "); + printS(fd, setConst); + printS(fd, msgConst); + } + printS(fd, "\t= "); + printL(fd, val); + printS(fd, ";\n"); + break; + default: + error(NULL, "not a recognized (programming) language type"); + } +} + +void MCWriteConst( +#if PROTO + int fd, int type, int orConsts) +#else + fd, type, orConsts) +int fd; +int type; +int orConsts; +#endif +{ + msgT *msg; + setT *set; + long id; + + if (orConsts && (type == MCLangC || type == MCLangCPlusPlus || type == MCLangANSIC)) { + printS(fd, "/* Use these Macros to compose and decompose setId's and msgId's */\n"); + printS(fd, "#ifndef MCMakeId\n"); + printS(fd, "# define MCuint unsigned int\n"); + printS(fd, "# define MCushort unsigned short\n"); + printS(fd, "# define MCulong unsigned long\n"); + printS(fd, "# define MCMakeId(s,m)\t(MCulong)(((MCushort)s<<(sizeof(short)*8))\\\n"); + printS(fd, " \t |(MCushort)m)\n"); + printS(fd, "# define MCSetId(id)\t(MCuint) ((MCuint)id >> (MCuint)(sizeof(short) * 8))\n"); + printS(fd, "# define MCMsgId(id)\t(MCuint) (((MCuint)id << (MCuint)(sizeof(short) * 8))\\\n"); + printS(fd, " \t >> (MCuint)(sizeof(short) * 8))\n"); + printS(fd, "#endif\n"); + } + + for (set = cat->first; set; set = set->next) { + if (set->hconst) genconst(fd, type, set->hconst, NULL, set->setId); + + for (msg = set->first; msg; msg = msg->next) { + if (msg->hconst) { + if (orConsts) id = MCMakeId(set->setId, msg->msgId); + else id = msg->msgId; + genconst(fd, type, set->hconst, msg->hconst, id); + free(msg->hconst); + msg->hconst = NULL; + } + } + if (set->hconst) { + free(set->hconst); + set->hconst = NULL; + } + } +} + +void MCWriteCat( +#if PROTO + int fd) +#else + fd) +int fd; +#endif +{ + MCHeaderT mcHead; + int cnt; + setT *set; + msgT *msg; + MCSetT mcSet; + MCMsgT mcMsg; + off_t pos; + + bcopy(MCMagic, mcHead.magic, MCMagicLen); + mcHead.majorVer = MCMajorVer; + mcHead.minorVer = MCMinorVer; + mcHead.flags = MCGetByteOrder(); + mcHead.firstSet = 0; /* We'll be back to set this in a minute */ + + for (cnt = 0, set = cat->first; set; set = set->next) ++cnt; + mcHead.numSets = cnt; + + lseek(fd, 0L, L_SET); + write(fd, &mcHead, sizeof(mcHead)); + mcHead.firstSet = lseek(fd, 0, L_INCR); + lseek(fd, 0L, L_SET); + write(fd, &mcHead, sizeof(mcHead)); + + for (set = cat->first; set; set = set->next) { + bzero(&mcSet, sizeof(mcSet)); + + mcSet.setId = set->setId; + mcSet.invalid = False; + + /* The rest we'll have to come back and change in a moment */ + pos = lseek(fd, 0, L_INCR); + write(fd, &mcSet, sizeof(mcSet)); + + /* Now write all the string data */ + mcSet.data.off = lseek(fd, 0, L_INCR); + cnt = 0; + for (msg = set->first; msg; msg = msg->next) { + msg->offset = lseek(fd, 0, L_INCR) - mcSet.data.off; + mcSet.dataLen += write(fd, msg->str, strlen(msg->str) + 1); + ++cnt; + } + mcSet.u.firstMsg = lseek(fd, 0, L_INCR); + mcSet.numMsgs = cnt; + + /* Now write the message headers */ + for (msg = set->first; msg; msg = msg->next) { + mcMsg.msgId = msg->msgId; + mcMsg.msg.off = msg->offset; + mcMsg.invalid = False; + write(fd, &mcMsg, sizeof(mcMsg)); + } + + /* Go back and fix things up */ + + if (set == cat->last) { + mcSet.nextSet = 0; + lseek(fd, pos, L_SET); + write(fd, &mcSet, sizeof(mcSet)); + } else { + mcSet.nextSet = lseek(fd, 0, L_INCR); + lseek(fd, pos, L_SET); + write(fd, &mcSet, sizeof(mcSet)); + lseek(fd, mcSet.nextSet, L_SET); + } + } +} + + +void MCAddSet( +#if PROTO + int setId, char *hconst) +#else + setId, hconst) +int setId; +char *hconst; +#endif +{ + setT *set; + + if (setId <= 0) { + error(NULL, "setId's must be greater than zero"); + return; + } + + if (hconst && !*hconst) hconst = NULL; + for (set = cat->first; set; set = set->next) { + if (set->setId == setId) { + if (set->hconst && hconst) free(set->hconst); + set->hconst = NULL; + break; + } else if (set->setId > setId) { + setT *newSet; + + newSet = (setT *) malloc(sizeof(setT)); + if (!newSet) nomem(); + bzero(newSet, sizeof(setT)); + newSet->prev = set->prev; + newSet->next = set; + if (set->prev) set->prev->next = newSet; + else cat->first = newSet; + set->prev = newSet; + set = newSet; + break; + } + } + if (!set) { + set = (setT *) malloc(sizeof(setT)); + if (!set) nomem(); + bzero(set, sizeof(setT)); + + if (cat->first) { + set->prev = cat->last; + set->next = NULL; + cat->last->next = set; + cat->last = set; + } else { + set->prev = set->next = NULL; + cat->first = cat->last = set; + } + } + set->setId = setId; + if (hconst) set->hconst = dupstr(hconst); + curSet = set; +} + +void MCAddMsg( +#if PROTO + int msgId, char *str, char *hconst) +#else + msgId, str, hconst) +int msgId; +char *str; +char *hconst; +#endif +{ + msgT *msg; + + if (!curSet) error(NULL, "can't specify a message when no set exists"); + + if (msgId <= 0) { + error(NULL, "msgId's must be greater than zero"); + return; + } + + if (hconst && !*hconst) hconst = NULL; + for (msg = curSet->first; msg; msg = msg->next) { + if (msg->msgId == msgId) { + if (msg->hconst && hconst) free(msg->hconst); + if (msg->str) free(msg->str); + msg->hconst = msg->str = NULL; + break; + } else if (msg->msgId > msgId) { + msgT *newMsg; + + newMsg = (msgT *) malloc(sizeof(msgT)); + if (!newMsg) nomem(); + bzero(newMsg, sizeof(msgT)); + newMsg->prev = msg->prev; + newMsg->next = msg; + if (msg->prev) msg->prev->next = newMsg; + else curSet->first = newMsg; + msg->prev = newMsg; + msg = newMsg; + break; + } + } + if (!msg) { + msg = (msgT *) malloc(sizeof(msgT)); + if (!msg) nomem(); + bzero(msg, sizeof(msgT)); + + if (curSet->first) { + msg->prev = curSet->last; + msg->next = NULL; + curSet->last->next = msg; + curSet->last = msg; + } else { + msg->prev = msg->next = NULL; + curSet->first = curSet->last = msg; + } + } + msg->msgId = msgId; + if (hconst) msg->hconst = dupstr(hconst); + msg->str = dupstr(str); +} + +void MCDelSet( +#if PROTO + int setId) +#else + setId) +int setId; +#endif +{ + setT *set; + msgT *msg; + + for (set = cat->first; set; set = set->next) { + if (set->setId == setId) { + for (msg = set->first; msg; msg = msg->next) { + if (msg->hconst) free(msg->hconst); + if (msg->str) free(msg->str); + free(msg); + } + if (set->hconst) free(set->hconst); + + if (set->prev) set->prev->next = set->next; + else cat->first = set->next; + + if (set->next) set->next->prev = set->prev; + else cat->last = set->prev; + + free(set); + return; + } else if (set->setId > setId) break; + } + warning(NULL, "specified set doesn't exist"); +} + +void MCDelMsg( +#if PROTO + int msgId) +#else + msgId) +int msgId; +#endif +{ + msgT *msg; + + if (!curSet) error(NULL, "you can't delete a message before defining the set"); + + for (msg = curSet->first; msg; msg = msg->next) { + if (msg->msgId == msgId) { + if (msg->hconst) free(msg->hconst); + if (msg->str) free(msg->str); + + if (msg->prev) msg->prev->next = msg->next; + else curSet->first = msg->next; + + if (msg->next) msg->next->prev = msg->prev; + else curSet->last = msg->prev; + + free(msg); + return; + } else if (msg->msgId > msgId) break; + } + warning(NULL, "specified msg doesn't exist"); +} + + + + + + diff --git a/gencat/msgcat.h b/gencat/msgcat.h new file mode 100644 index 0000000..6c3a9d5 --- /dev/null +++ b/gencat/msgcat.h @@ -0,0 +1,178 @@ +/* -*-c++-*- */ + +#ifndef __msgcath + + +/*********************************************************** +Copyright 1990, by Alfalfa Software Incorporated, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that Alfalfa's name not be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. + +ALPHALPHA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +ALPHALPHA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +If you make any modifications, bugfixes or other changes to this software +we'd appreciate it if you could send a copy to us so we can keep things +up-to-date. Many thanks. + Kee Hinckley + Alfalfa Software, Inc. + 267 Allston St., #3 + Cambridge, MA 02139 USA + nazgul@alfalfa.com + +******************************************************************/ + + +#include + +/* + * On disk data structures + */ + +/* Edit History + +02/25/91 2 nazgul Byte order flags, upped the version number +11/03/90 1 hamilton Alphalpha->Alfalfa & OmegaMail->Poste +08/13/90 1 schulert move from ua to omu +*/ + +/* For or'd constants */ +#define MCMakeId(s,m) (unsigned long) ( ((unsigned short)s << (sizeof(short)*8)) \ + | (unsigned short)m ) +#define MCSetId(id) (unsigned int) ( id >> (sizeof(short) * 8) ) +#define MCMsgId(id) (unsigned int) ( (id << (sizeof(short) * 8)) \ + >> (sizeof(short) * 8) ) +#undef S +#undef UI +#undef UL + +#define MCMagicLen 8 +#define MCMagic "*nazgul*" +#define MCLastMsg 0 +#define MCLastSet 0 + +#define MCMajorVer 1 +#define MCMinorVer 0 + +/* + * Critical note here. Sets and Messages *MUST* be stored in ascending + * order. There are stored that way (by specification) in the original + * data file, however in the process of merging in new stuff you might + * mix that up. Don't! The catget stuff does a binary search and will + * totally lose it if these aren't in order (not contiguous mind you, just + * in order. If this turns out to be a major problem this could be enhanced + * by adding a 'sorted' flag to the db, and sorting msgs and sets at load + * time if things aren't sorted, but I'd like not to have to do that. + */ + +/* + * I have tried here to define data structures which can be used + * while the catalog is on disk, and at runtime. + * This is rather dangerous of course, but I think it can be done without + * overly increasing the memory usage, and it makes loading and storing + * somewhat simpler and less prone to accidents. I have also tried to + * define on disk data structures which can be updated in place, so that + * with a very large catalog (e.g. all system errors) you don't have to + * load everything in memory in order to add or update one set. With + * this in mind there are "invalid" flags which allow items to be + * invalidated and thus not loaded at runtime. Note however that although + * I pay attention to these when I load the DB, I do not currently use + * them in gencat (it just reads everything into memory), so there is + * no guarantee that this will all work. + */ + +/* These should be publicly available */ + +#define MCLoadBySet 0 /* Load entire sets as they are used */ +#define MCLoadAll 1 /* Load entire DB on catopen */ + +extern char *MCAppPath; /* Additional search path for strings (appended) */ + +/* + * MCOffsetT - Union to handle both disk and runtime pointers + */ +typedef union { + off_t off; + char *str; + void *ptr; + struct _MCMsgT *msg; + struct _MCSetT *set; +} MCOffsetT; + +/* + * MCMsgT - Message structure (disk and runtime) + */ +typedef struct _MCMsgT { + long msgId; /* Id of this message */ + MCOffsetT msg; /* Relative offset on disk or pointer in memory */ + long invalid; /* Valid on disk, loaded in memory */ +} MCMsgT; + +/* + * MCSetT - Set structure (disk and runtime) + */ +typedef struct _MCSetT { + long setId; /* Id of this set */ + off_t nextSet; /* Offset of next set on disk */ + union { + off_t firstMsg; /* Offset to first Msg (while on disk) */ + MCMsgT *msgs; /* Pointer to array of msgs (in mem, loaded) */ + } u; + MCOffsetT data; /* Offset to data, or pointer to data */ + long dataLen; /* Length of data area on disk */ + long numMsgs; /* Number of messages */ + long invalid; /* Valid on disk, loaded in memory */ +} MCSetT; + +/* + * MCCatT - Runtime catalog pointer + */ +typedef struct { + long loadType; /* How to load the messages (see MSLoadType) */ +#ifdef HAVE_MMAP + union { +#endif + int fd; /* File descriptor of catalog (if load-on-demand) */ +#ifdef HAVE_MMAP + caddr_t addr; /* Mmaped() address */ + } u; + off_t size; /* File size */ +#endif + long numSets; /* Number of sets */ + MCSetT *sets; /* Pointer to the sets */ + off_t firstSet; /* Offset of first set on disk */ +} MCCatT; + +/* + * MCHeaderT - Disk file header + */ +typedef struct { + char magic[MCMagicLen]; /* Magic cookie "*nazgul*" */ + long majorVer; /* ++ on incompatible changes */ + long minorVer; /* ++ on compatible changes */ + long flags; /* Informational flags */ + long numSets; /* Number of valid Sets */ + off_t firstSet; /* Offset of first set on disk */ +} MCHeaderT; + +/* Some flags */ +#define MC68KByteOrder 0x01 +#define MCn86ByteOrder 0x02 + + + + +#endif diff --git a/man/Makefile b/man/Makefile new file mode 100644 index 0000000..5f21fd0 --- /dev/null +++ b/man/Makefile @@ -0,0 +1,65 @@ +# +# Generated automatically from Makefile.in by the +# configure script. +# +# only executed from a subdir +MAN1 = man whatis apropos +MAN5 = man.conf +MAN8 = makewhatis +ALL = man.1 whatis.1 apropos.1 man.conf.5 +MAYBE8 = makewhatis + +.SUFFIXES: .man .1 .5 .8 + +.man.1: + @cp $< $@.in; ../../conf_script $@; rm $@.in + +.man.5: + @cp $< $@.in; ../../conf_script $@; rm $@.in + +.man.8: + @cp $< $@.in; ../../conf_script $@; rm $@.in + +INSTALL = install -c -m 644 + +# Where to put the manual pages. +mandir = $(DESTDIR)$(PREFIX)/usr/share/man$(SLANG) + +all: $(ALL) + for i in $(MAYBE8); \ + do if test -f $$i.man; then make -f ../Makefile $$i.8; fi; done + +install: $(ALL) + mkdir -p $(mandir)/man1 $(mandir)/man5 $(mandir)/man8 + for i in $(MAN1); \ + do $(INSTALL) $$i.1 $(mandir)/man1/$$i.1; done + for i in $(MAN5); \ + do $(INSTALL) $$i.5 $(mandir)/man5/$$i.5; done + for i in $(MAN8); \ + do if test -f $$i.8; then $(INSTALL) $$i.8 $(mandir)/man8/$$i.8; fi; done + +clean: + rm -f core *.in *.1 *.5 *.8 *~ + +spotless: + +subdirs: + @for i in en; do if test -d $$i; then echo; \ + echo "==== Making the `cat $$i.txt` man pages. ===="; \ + cd $$i; make -f ../Makefile; cd ..; \ + else echo "==== No $$i man pages found. ===="; fi; done + +installsubdirs: + @for i in en; do if test -d $$i; then echo; \ + echo "==== Installing the `cat $$i.txt` man pages. ===="; \ + cd $$i; SLANG=/$$i; if test $$SLANG = /en; then SLANG= ; fi; \ + export SLANG; make -f ../Makefile install; cd ..; \ + else echo "==== No $$i man pages found. ===="; fi; done + +cleansubdirs: + @for i in ??; do cd $$i; make -f ../Makefile clean; cd ..; done + rm -f core *~ + +spotlesssubdirs: + for i in ??; do cd $$i; make -f ../Makefile spotless; cd ..; done + rm -f Makefile diff --git a/man/Makefile.in b/man/Makefile.in new file mode 100644 index 0000000..4fac193 --- /dev/null +++ b/man/Makefile.in @@ -0,0 +1,61 @@ +# only executed from a subdir +MAN1 = man whatis apropos +MAN5 = man.conf +MAN8 = makewhatis +ALL = man.1 whatis.1 apropos.1 man.conf.5 +MAYBE8 = makewhatis + +.SUFFIXES: .man .1 .5 .8 + +.man.1: + @cp $< $@.in; ../../conf_script $@; rm $@.in + +.man.5: + @cp $< $@.in; ../../conf_script $@; rm $@.in + +.man.8: + @cp $< $@.in; ../../conf_script $@; rm $@.in + +INSTALL = @INSTALL@ -c -m 644 + +# Where to put the manual pages. +mandir = $(DESTDIR)$(PREFIX)@mandir@$(SLANG) + +all: $(ALL) + for i in $(MAYBE8); \ + do if test -f $$i.man; then make -f ../Makefile $$i.8; fi; done + +install: $(ALL) + mkdir -p $(mandir)/man1 $(mandir)/man5 $(mandir)/man8 + for i in $(MAN1); \ + do $(INSTALL) $$i.1 $(mandir)/man1/$$i.@man1ext@; done + for i in $(MAN5); \ + do $(INSTALL) $$i.5 $(mandir)/man5/$$i.@man5ext@; done + for i in $(MAN8); \ + do if test -f $$i.8; then $(INSTALL) $$i.8 $(mandir)/man8/$$i.@man8ext@; fi; done + +clean: + rm -f core *.in *.@man1ext@ *.@man5ext@ *.@man8ext@ *~ + +spotless: + +subdirs: + @for i in @languages@; do if test -d $$i; then echo; \ + echo "==== Making the `cat $$i.txt` man pages. ===="; \ + cd $$i; make -f ../Makefile; cd ..; \ + else echo "==== No $$i man pages found. ===="; fi; done + +installsubdirs: + @for i in @languages@; do if test -d $$i; then echo; \ + echo "==== Installing the `cat $$i.txt` man pages. ===="; \ + cd $$i; SLANG=/$$i; if test $$SLANG = /en; then SLANG= ; fi; \ + export SLANG; make -f ../Makefile install; cd ..; \ + else echo "==== No $$i man pages found. ===="; fi; done + +cleansubdirs: + @for i in ??; do cd $$i; make -f ../Makefile clean; cd ..; done + rm -f core *~ + +spotlesssubdirs: + for i in ??; do cd $$i; make -f ../Makefile spotless; cd ..; done + rm -f Makefile diff --git a/man/bg.txt b/man/bg.txt new file mode 100644 index 0000000..047a2a6 --- /dev/null +++ b/man/bg.txt @@ -0,0 +1 @@ +bulgarian diff --git a/man/bg/README b/man/bg/README new file mode 100644 index 0000000..3173a29 --- /dev/null +++ b/man/bg/README @@ -0,0 +1,7 @@ +These pages are a one-time contribution by Dimitar Zhekov. +E-mail: +They were updated by Alexander Shopov. +E-mail: +You can reach the Bulgarain translation team at: +http://fsa-bg.org/project/gtp + diff --git a/man/bg/apropos.man b/man/bg/apropos.man new file mode 100644 index 0000000..0e4f937 --- /dev/null +++ b/man/bg/apropos.man @@ -0,0 +1,37 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Translated by Dimitar Zhekov , 2002. +.\" Translated by Alexander Shopov , 2005. +.TH apropos 1 "15 1991" +.LO 1 +.SH +apropos \- whatis +.SH +.BI apropos +_ ... +.SH +apropos , + , + . +.SH "/" + +.BR man + John W. Eaton. Federico Lucifredi + . +.SH + , +.SH " " +.BR whatis(1), +.BR man(1). diff --git a/man/bg/makewhatis.man b/man/bg/makewhatis.man new file mode 100644 index 0000000..772e281 --- /dev/null +++ b/man/bg/makewhatis.man @@ -0,0 +1,104 @@ +.\" Copyright (c) 1999 Ottavio G. Rizzo +.\" +.\" This is free documentation; 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 2 of +.\" the License, or (at your option) any later version. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +.\" USA. +.\" +.\" Translated by Alexander Shopov , 2005. +.TH MAKEWHATIS 8 "21 2005" +.SH +makewhatis \- whatis +.SH +.BI "makewhatis [-u] [-v] [-w] [-s " " ] [-c [" ___ "]] [" __ "]" +.SH +.B makewhatis + +.IR " " " " " " +.IR " " " " " ", + +.I . + whatis +. + . + . +.LP + , +.B makewhatis + , , , , +. +.LP + +.IR " ", + +.I /usr/man +. +.SH +.TP +.B -u + . +.TP +.B -v + . +.TP +.B -w + `man --path` +.TP +.BI -s " " + +.I + +.IR " " " " . + , +.I \'1 2 3 4 5 6 7 8 9 n l\' +.TP +.BI -c " ___" + +.I + . , + +.IR /usr/man/preformat " " /usr/man . +.SH +.PP + +.IR /usr/X11R6/man/whatis " " /usr/local/man/whatis +.IP +makewhatis /usr/X11R6/man /usr/local/man +.PP + , + , : +.IP +LANGUAGE=bg:ru:en makewhatis -w +.SH +.B makewhatis + , + troff, . Tcl/Tk. +.PP +.B makewhatis + . +.SH "/" + +.BR man + John W. Eaton. Federico Lucifredi + . +.SH + +.SH " " +.BR apropos (1), +.BR man (1), +.BR whatis (1) diff --git a/man/bg/man.conf.man b/man/bg/man.conf.man new file mode 100644 index 0000000..6574e69 --- /dev/null +++ b/man/bg/man.conf.man @@ -0,0 +1,59 @@ +.\" @(#)man.conf +.TH MAN.CONF 5 "21 2005" +.SH +man.conf \- man +.SH +.LP + +.BR man (1) + : () + ; () + nroff, eqn, tbl .., man; () + +. + : +.LP +.RS +man -C private_man.conf ... +.RE +.LP + . +grotty(1) nroff. +, : +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP + : +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP + . +.SH +.I "@man_config_file@" +.SH "/" + +.BR man + John W. Eaton. Federico Lucifredi + . +.SH + , +.SH " " +.BR col (1), +.BR (g)eqn (1), +.BR (g)pic (1), +.BR groff (1), +.BR grotty (1), +.BR (g)refer (1), +.BR (g)tbl (1), +.BR less (1), +.BR man (1), +.BR compress (1), +.BR gzip (1). diff --git a/man/bg/man.man b/man/bg/man.man new file mode 100644 index 0000000..e4013fa --- /dev/null +++ b/man/bg/man.man @@ -0,0 +1,472 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" More changes - flc +.\" +.\" Translated by Dimitar Zhekov , 2002. +.\" Translated by Alexander Shopov , 2005. +.TH man 1 "21 2005" +.LO 1 +.SH +man \- +.SH +.B man +.RB [ \-acdfFhkKtwW ] +.RB [ --path ] +.RB [ \-m +.IR ] +.RB [ \-p +.IR ] +.RB [ \-C +.IR _ ] +.RB [ \-M +.IR ] +.RB [ \-P +.IR ] +.RB [ \-B +.IR ] +.RB [ \-H +.IR __HTML ] +.RB [ \-S +.IR __ ] +.RI [ ] +.I " ..." + +.SH +.B man + . + +.IR , +.B man + . +.I + , .. + , . +.I + +.RB ( / ), +.B man +, , +.B "man ./foo.5" + +.B "man /cd/foo/bar.1.gz\fR.\fP" +.PP +- +.B man + . + +.SH +.TP +.B \-\^C " _" + . +.BR @man_config_file@ . +( +.BR man.conf (5)). +.TP +.B \-\^M " __" + , , + . + +.BR \-M . + +.BR " " . +.TP +.B \-\^P " " +, . + - +.BR MANPAGER , + - +.BR PAGER . + +.B man + +.BR "@pager@" . +.TP +.B \-\^B +, HTML. + - +.BR BROWSER . + +.B man + +.BR @browser@ , +.TP +.B \-\^H + HTML. + - +.BR HTMLPAGER . + +.B man + +.BR @htmlpager@ , +.TP +.B \-\^S " __" + , , + . - + +.BR MANSECT . +.TP +.B \-\^a + . + +.B man + . + +.B man + . +.TP +.B \-\^c + , + , . + , + . +.TP +.B \-\^d + , +.BR man . +.TP +.B \-\^D + , . +.TP +.B \-\^f + +.BR whatis . +.TP +.BR \-\^F " " \-\-preformat + , . +.TP +.B \-\^h + . +.TP +.B \-\^k + +.BR apropos . +.TP +.B \-\^K + ** . : + \- , + . ( \- + 500 ). +.TP +.B \-\^m " " + , . +.TP +.B \-\^p " " + , +.B nroff + +.BR troff . + + . + , : +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). + - +.BR MANROFFSEQ . +.TP +.B \-\^t + +.B @troff@ + \- +.B stdout. + + . +.TP +.B \-\^w \fR\fP \-\-path + , , + . + , ( ) +, +.B man + . + +.B manpath + man, "manpath" "man --path". +.TP +.B \-\^W + \-\^w, + . + +.ft CW +.BR "man -aW man | xargs ls -l" . +.ft + +.SH " " + , man + + . ("cat") + /manX /catX, +.BR @man_config_file@ + . +, , + +80 man.conf NOCACHE. +.PP + +.B man + (suid) man. , + man + 0755 ( man), + man + 0644 0444 ( + man ), + + . + +.B man + (suid) man + cat , + 0777. +.PP + +.B \-c + , + , . + +.SH " HTML" +Man HTML, + html . + +".html". \- + +.BR ls (1) + HTML +.IR /usr/share/man/htmlman1/ls.1.html . + +.SH " " +.B man + +, , +, +.B @man_config_file@ + . +.PP +, +.I + +.B man + +.RB ( / ), +.B man + . +.PP + , +.I + , +.B man + , + +.IR . +.PP + +.BI "-M " , + +.I + , +.B man +. +.PP + +.BR -M , + +.BR MANPATH , + , +.B man +. +.PP + +.B -M + +.BR MANPATH , +.B man + , + +.BR @man_config_file@ . + +.B MANPATH + , + . +.PP + +.B MANPATH_MAP + + , .. +.BR PATH . + , , +.B MANPATH_MAP + , + . +.B man + +.B PATH + . + , +.BR MANPATH_MAP , + +.BR "man xyz" , + , + , +.BR xyz . +.PP + , + (" "), +.I + +.B MANPATH_MAP , +.B man + , \- + . +.PP + +.B NOAUTOPATH + +.BR @man_config_file@ . +.PP + , \-, +.B man + +.IB . \fR, + \- + . , +.B man + , , +.BI man N + +.BI cat N\fR, + +.I N + . + +.BI cat N, +.B man +, , . +.B man +, . , + +.B man + , +.BR .gz , +.B man +, . +.PP + ( ) +.B man + , +.BR "--path " ( -w ). + +.SH +.TP +.B MANPATH + . +\- + , \- +.BR -M . + +.BR " " . +.TP +.B MANPL + . , + () . +.TP +.B MANROFFSEQ + , +.B nroff + +.BR troff . + , +.B nroff + tbl. +.TP +.B MANSECT + , . +.TP +.B MANWIDTH + . . +.TP +.B MANPAGER + , +. , +.BR PAGER . + , +.BR @pager@ . +.TP +.B BROWSER + HTML. + , @browser@. +.TP +.B HTMLPAGER + HTML. + @htmlpager@. +.TP +.B LANG +, man - . + LANG=bg man 1 foo man foo + .../bg/man1/foo.1, , .../man1/foo.1 (... + ). +.TP +.B "NLSPATH, LC_MESSAGES, LANG" + +.B NLSPATH + +.B LC_MESSAGES +( +.BR LANG , + LC_MESSAGES ) + man ( man + ). +: , man, +.BR col(1) , + LC_CTYPE. +.TP +.B PATH + . +.BR " " . +.TP +.B SYSTEM + +.BR \-m . +.SH + +.B \-t +, troff . +.br + () \e255 , + LESSCHARSET=latin1. +.SH + + + (global-set-key [(f1)] (lambda () (interactive) (manual-entry (current-word)))) + + +.IR .emacs +, F1 +, . +.LP + , + , : + + # man foo | col -b > foo.mantxt + +.SH "/" + +.BR man + John W. Eaton. Federico Lucifredi . +.SH + , +.SH " " +.BR apropos (1), +.BR whatis(1), +.BR less(1), +.BR groff(1), +.BR man.conf(5). diff --git a/man/bg/whatis.man b/man/bg/whatis.man new file mode 100644 index 0000000..def4539 --- /dev/null +++ b/man/bg/whatis.man @@ -0,0 +1,39 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Translated by Dimitar Zhekov , 2002. +.\" Translated by Alexander Shopov , 2005. +.TH whatis 1 "5 1991" +.LO 1 +.SH +whatis \- whatis +.SH +.BI whatis +_ ... +.SH E +whatis , + , + . + . + + whatis @makewhatis@. +.SH "/" + +.BR man + John W. Eaton. Federico Lucifredi . +.SH + , +.SH " " +.BR apropos (1), +.BR man (1). diff --git a/man/cs.txt b/man/cs.txt new file mode 100644 index 0000000..d94d829 --- /dev/null +++ b/man/cs.txt @@ -0,0 +1 @@ +czech diff --git a/man/cs/apropos.man b/man/cs/apropos.man new file mode 100644 index 0000000..186702a --- /dev/null +++ b/man/cs/apropos.man @@ -0,0 +1,29 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Autorem eskho pekladu je Pavel JANK ml. +.\" Pavel.JANIK@inet.cz +.\" +.TH apropos 1 "7. ledna, 1997" +.LO 1 +.SH JMNO +apropos \- hledej etzec v databzi whatis +.SH SYNTAXE +.BI apropos +slovo ... +.SH POPIS +apropos prohledv databzi obsahujc krtk popis systmovch pkaz na +vskyt `slova' a vsledek zobraz na standardn vstup. +.SH "VIZ Tɮ" +whatis(1), man(1). diff --git a/man/cs/man.conf.man b/man/cs/man.conf.man new file mode 100644 index 0000000..2267052 --- /dev/null +++ b/man/cs/man.conf.man @@ -0,0 +1,43 @@ +.\" @(#)man.conf +.\" Autorem eskho pekladu je Pavel JANK ml. +.\" Pavel.JANIK@inet.cz +.\" +.TH MAN.CONF 5 "7. ledna, 1997" +.SH JMNO +man.conf \- konfiguran soubor pro man +.SH POPIS +.LP +Tento soubor je ten programem +.BR man (1) +a obsahuje (a) informace o tom, kde hledat manulov strnky, +(b) pln jmna dalch preprocesor jako nroff, eqn, tbl atd. pouvanch +programem man a (c) seznam komprimovacch program a jimi specifikovanch +ppon. Uivatelsk verze tohoto souboru me bt specifikovna takto: +.LP +.RS +man -C soukrom_man.conf ... +.RE +.LP +Jmna pkaz mohou bt uvedena na pkazov dce. +Uiten volby pro nroff mohou bt nalezeny v grotty(1). +Nap. msto standardn dky +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +mete napsat +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +co zpsob, e znaky nebudou podtren a pekrtnut. +.SH "VIZ Tɮ" +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) and compress(1), gzip(1). + diff --git a/man/cs/man.man b/man/cs/man.man new file mode 100644 index 0000000..085136c --- /dev/null +++ b/man/cs/man.man @@ -0,0 +1,239 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" +.\" Autorem eskho pekladu je Pavel JANK ml. +.\" Pavel.JANIK@inet.cz +.\" +.TH man 1 "7. ledna, 1997" +.LO 1 +.SH JMNO +man \- zformtuje a zobraz on-line manulov strnky +.br +manpath \- zobraz manulov cesty uivatele +.SH SYNTAXE +man [\-acdfhkKtwW] [\-m systm] [\-p etzec] [\-C konfiguran soubor] [\-M cesta] +[\-P strnkova] [\-S seznam_sekc] [sekce] jmno ... +.SH POPIS +.B man +zformtuje a zobraz on-line manulov strnky. Tato verze um pracovat s +promnnmi prosted +.B MANPATH +a +.BR (MAN)PAGER , +proto mete mt i vlastn +manulov strnky a vlastn program uren ke strnkovn zformtovanch +manulovch strnek. +Je-li specifikovna +.I sekce +.B man +hled danou strnku pouze v tto sekci. +Samozejm mete tak specifikovat poad sekc, kter budou prohledvny a +tak mete pmo na pkazov dce nebo promnnmi prosted urit, kter +preprocesory budou pi formtovn strnek pouity. +Obsahuje-li +.I jmno +znak /, je prvn vyzkoueno jako jmno souboru, proto mete udlat nco +jako +.B "man ./nco.5" +nebo +.B "man /cdko/nco/nco_jinho.1.gz\fR.\fP" +.SH VOLBY +.TP +.B \-\^C " konfiguran_soubor" +Specifikujete jin konfiguran soubor. Standardn je +@man_config_file@. (Viz t man.conf(5).) +.TP +.B \-\^M " cesta" +Specifikuje seznam manulov cest (zde jsou hledny manulov strnky). +Nen-li tato volba specifikovna, je pouita promnn prosted +.B MANPATH +. Jestlie ani ona neexistuje, jsou manulov cesty pevzaty ze souboru +@man_config_file@. +.TP +.B \-\^P " strnkova" +Specifikuje strnkova, kterm budou strnky prohleny. +Tato volba m pednost ped +.B MANPAGER +, kter m pednost ped +.B PAGER . +Standardn strnkova je +.BR @pager@ . +.TP +.B \-\^S " seznam_sekc" +Seznam_sekc je rkami oddlen seznam sekc manulovch strnek. +Tato volba m pednost ped promnnou prosted +.B MANSECT . +.TP +.B \-\^a +Standardn nastaven ukon man pot, co zobraz prvn nalezenou manulovou +strnku. Tato volba umon zobrazit vechny nalezen strnky, kter vyhovuj +zadanm kritrim. +.TP +.B \-\^c +Zformtuj zdroj manulov strnky i kdy existuje ji zformtovan verze. +Tato volba je vznamn. je-li zformtovan strnka prohlena na obrazovce s +jinm potem sloupc. +.TP +.B \-\^d +Nezobrazuj zformtovanou strnku, pouze vytiskni ladc informace. +.TP +.B \-\^D +Zobraz ladc informace i zformtovanou strnku. +.TP +.B \-\^f +Tot co +.B whatis. +.TP +.B \-\^h +Vytiskni krtkou pomoc a skoni. +.TP +.B \-\^k +Tot co +.B apropos. +.TP +.B \-\^K +Hledej specifikovan etze ve *vech* manulovch strnkch. Varovn: tato +funkce je pravdpodobn velmi pomal! Specifikujete-li sekci, bude to +rychlej. (Jen pro zajmavost, na mm potai to trv piblin minutu na +500 strnek). +.TP +.B \-\^m " systm" +Specifikuje jinou sadu manulovch strnek zvislou na zadanm systmu. +.TP +.B \-\^p " etzec" +Specifikuje poad preprocesor ped nroff nebo troff. Ne vechny instalace +maj plnou sadu preprocesor. Nkter preprocesory a psmena pouvan pro +jejich spoutn: +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +Tato volba m pednost ped promnnou prosted +.B MANROFFSEQ . +.TP +.B \-\^t +Pouij +.B @troff@ +k formtovn strnky a vstup zobraz na +.B stdout. +Vstup z +.B @troff@ +je teba ped tiskem poslat pes njak filtry. +.TP +.B \-\^w \fRnebo\fP \-\-path +Nezobrazuj manulov strnky, pouze vytiskni cestu(y) soubor, kter bys +zobrazil. Nen-li zadn dn argument: zobraz (na standardn vstup) seznam +adres, kter jsou programem +.B man +hledny. Je-li +.B manpath +link na man, potom je manpath toton s "man --path". +.TP +.B \-\^W +Podobn jako \-\^w, ale tiskne jmna soubor po jednom na dek bez dalch +informac. To je uiten pro pkazy shellu jako nap. +.ft CW +man -aW man | xargs ls -l +.ft + +.SH "ZFORMTOVAN STRNKY" +Man se sna ukldat ji zformtovan manulov strnky, aby uetil pi +jejich ptm zobrazen as. Tradin se zformtovan strnky z +DIR/manX ukldaj do DIR/catX, ale jin mapovn z manulovho adrese na +adres zformtovanch strnek je mon specifikovat v souboru +@man_config_file@. Neexistuje-li adres zformtovanch strnek, nejsou +ukldny dn zformtovan strnky. +Je mon nechat man suid pro uivatele man. Potom, je-li majitel adrese +zformtovanch strnek man a md je 0755 (zapisovat me pouze vlastnk), a +zformtovan strnky maj md 0644 nebo 0444 (zapisovat me bu jenom +majitel nebo vbec nikdo), neme normln uivatel zmnit zformtovan +strnky nebo umstit do adrese zformtovanch strnek jin soubory. +Nen-li man suid, potom by ml mt adres zformtovanch strnek md 0777 +aby zde mohli vichni uivatel zanechat ji zformtovan strnky. + +Volba -c zpsob reformtovn strnky i kdy ji existuje zformtovan +strnka. + +.SH PROSTED +.TP +.B MANPATH +Je-li nastavena promnn +.B MANPATH +, jej hodnota je vyuvna ke hledn zformtovanch strnek. +.TP +.B MANROFFSEQ +Je-li nastavena promnn prosted +.B MANROFFSEQ +je jej hdnota vyuita pro uren poad spoutn preprocesor ped +nroff nebo troff. Standardn jsou strnky formtovny prvn tabulkovm +procesorem a teprve pot nroffem. +.TP +.B MANSECT +Je-li nastvane promnn prosted +.B MANSECT +je jej hodnota vyuita k uren sekc, kter budou prohledvny. +.TP +.B MANWIDTH +Je-li nastavena promnn prosted +.B MANWIDTH +, tak jej hodnota uruje poet sloupc, na kter bude strnka zformtovna. +Jinak bude strnka zformtovna na ku obrazovky. +.TP +.B MANPAGER +Je-li nastavena promnn prosted +.B MANPAGER +jej obsah uruje strnkova, kter bude pouit pi zobrazen zformtovan +strnky. Nen-li nastavena, je pouita promnn +.B PAGER . +nen-li ani tato promnn nastavena, pouije se +.B @pager@ . +.TP +.B LANG +Je-li nastavena promnn prosted +.B LANG +jej hodnota definuje podadres, ve kterm budou hledny strnky. +Potom pkaz `LANG=cz man 1 manulov_strnka' +zobraz strnku .../cz/man1/manulov_strnka.1, nebo +.../man1/manulov_strnka.1, kde ... je adres v manulov cest. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +Promnn prosted +.B NLSPATH +a +.B LC_MESSAGES +(nebo +.B LANG +jestlie pedchoz neexistuj) +hraj roli pi hledn katalogu zprv. +(Anglick zprvy jsou zkompilovny a nen pro n teba katalogu.) +Dejte pozor na to, e programy jako col (1) volan programem man pouvaj +nap. LC_CTYPE. +.TP +.B PATH +.B PATH +je pouvna pi sestaven starndardn manulov cesty. +.TP +.B SYSTEM +.B SYSTEM +je pouvna ke zjitn standardnho jmna systmu (pro pouit s volbou +.B \-m +). +.SH "VIZ Tɮ" +apropos(1), whatis(1), less(1), groff(1). +.SH CHYBY +Volba +.B \-t +je funkn pouze, je-li instalovn program podobn programu troff. +.br +Uvidte-li blikajc \e255 nebo msto oddlovtek, +umstte `LESSCHARSET=latin1' do Vaeho prosted. diff --git a/man/cs/whatis.man b/man/cs/whatis.man new file mode 100644 index 0000000..8b3dfc2 --- /dev/null +++ b/man/cs/whatis.man @@ -0,0 +1,32 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Autorem eskho pekladu je Pavel JANK ml. +.\" Pavel.JANIK@inet.cz +.\" +.TH whatis 1 "7. ledna 1997" +.LO 1 +.SH JMNO +whatis \- hledej cel slova v databzi whatis +.SH SYNTAXE +.BI whatis +slovo ... +.SH POPIS +whatis prohledv databzi obsahujc krtk popis systmovch pkaz na +vskyt `slova' a vsledek zobraz na standardn vstup. Jsou vak zobrazena +pouze slova, kter kompletn vyhovla. + +Databze whatis je vytvoena sputnm programu @makewhatis@. +.SH "VIZ Tɮ" +apropos(1), man(1). diff --git a/man/da.txt b/man/da.txt new file mode 100644 index 0000000..fa723bb --- /dev/null +++ b/man/da.txt @@ -0,0 +1 @@ +danish diff --git a/man/da/apropos.man b/man/da/apropos.man new file mode 100644 index 0000000..560b6bd --- /dev/null +++ b/man/da/apropos.man @@ -0,0 +1,30 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" edited and translated to danish by Bo Vagner Hoejer 1996 +.\" email bo@petshop.ping.dk - bo@image.dk +.\" +.TH apropos 1 "15. Januar 1991" "da" "Linux brugerkommandoer" +.LO 1 +.SH NAVN +apropos \- gennemsg 'whatis' databasen for tekststrenge +.SH SYNTAKS +.BI apropos +ngleord ... +.SH BESKRIVELSE +apropos gennemsger et set af databasefiler, som indeholder korte beskrivelser +af systemets kommandoer, efter ngleordet og udskriver resultatet paa standard +udskriftsenheden. +.SH "SE OGS" +whatis(1), man(1). diff --git a/man/da/man.conf.man b/man/da/man.conf.man new file mode 100644 index 0000000..26f4fc8 --- /dev/null +++ b/man/da/man.conf.man @@ -0,0 +1,45 @@ +.\" @(#)man.conf +.\" +.\" edited and translated to danish by Bo Vagner Hoejer 1996 +.\" email bo@petshop.ping.dk - bo@image.dk +.\" +.TH MAN.CONF 5 "30 Marts 1994" "da" "Linux filformater" +.SH NAVN +man.conf \- konfigurationsfil for manual kommandoen +.SH BESKRIVELSE +.LP +Denne fil bliver lst af +.BR man (1) +og indeholder (a) information om hvordan sgestien for 'man' konstrueres, +(b) den fulde sti til programmer som bruges af 'man' f.eks. nroff, eqn, tbl +etc. og (c) en liste over udpakkeprogrammer til filer med en given endelse. +En alternativ version af denne fil kan specifiseres med +.LP +.RS +man -C privat_manual.konfiguration ... +.RE +.LP +Programnavne kan angives med parametre. Nyttige parametre til nroff er +beskrevet p +.BR grotty (1) +manualsiden. Eksempelvis kan standardlinien +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +erstattes med +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +med det forml at forhindre understregning og fed skrift. +.SH "SE OGS" +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) og compress(1), gzip(1). + diff --git a/man/da/man.man b/man/da/man.man new file mode 100644 index 0000000..da5f28f --- /dev/null +++ b/man/da/man.man @@ -0,0 +1,253 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" +.\" edited and translated to danish by Bo Vagner Hoejer 1996 +.\" email bo@petshop.ping.dk +.\" +.TH man 1 "2. September 1995" "da" "Linux brugerkommandoer" +.LO 1 +.SH NAVN +man \- formaterer og viser online manual siderne +.br +manpath \- udskriver brugerens sgesti for manual siderne +.SH SYNTAKS +man [\-acdfhkKtwW] [\-m system] [\-p streng] [\-C konfigurationsfil] [\-M sti] +[\-P pager] [\-S kapitelliste] [kapitel] opslagsord ... +.SH BESKRIVELSE +.B man +formaterer og viser online manual siderne. Denne version genkender +.B MANPATH +og +.B (MAN)PAGER +variablerne, s du kan derfor faststte dit personlige +set manual sider og vlge hvilket program du fortrkker til at vise de formaterede +sider med. Hvis +.I kapitel +er angivet vil +.B man +kun gennemsge dette kapitel af manualen. +Man kan ogs angive hvilken rkkeflge kapitlerne gennemsges for opslag i +og hvilke preprocessore, som kres p kildeteksten, via kommandolinie parametre +eller skalvariabler. +Hvis +.I opslagsordet +indeholder en skrstreg ('/') bliver det frst testet som et filnavn, +s man kan anfre +.I "man ./foo.5" +eller selv +.I "man /cd/foo/bar.1.gz\fR.\fP" +.SH PARAMETRE +.TP +.B \-\^C " konfigurations_fil" +Angiver hvilken konfigurations_fil som bruges. Normalt anvendes +@man_config_file@. (Se man.conf(5).) +.TP +.B \-\^M " sti" +Angiver hvilke kataloger som gennemsges efter manualsider. +Hvis en sdan parameter ikke er angivet bruges skalvariablen +.BR MANPATH . +Hvis ingen sdan skalvariabel findes, konsulteres +.I @man_config_file@ +for at opbygge en standardliste. +Hvis MANPATH indeholder et tom delstreng bruges standardlisten. +.TP +.B \-\^P " pager" +Angiver hvilket 'pager' program, som skal bruges. +Denne parameter tilsidestter +.B MANPAGER +skalvariablen, som igen overskygger +.B PAGER +variablen. Normalt bruger 'man' +.IR @pager@ . +.TP +.B \-\^S " kapitel_liste" +Kapitel_liste er en kolon sepereret liste af kapiteller +som skal gennemsges. +Denne parameter tilsidestter +.B MANSECT +skalvariablen. +.TP +.B \-\^a +Normalt vil man afslutte efter visning af den frste fundne manualside +Brug af denne parameter tvinger 'man' til ikke kun at vise den frst fundne +side, men alle sider der matcher +.BR opslagsord . +.TP +.B \-\^c +Reformater kildesiden, selvom der findes en preformateret side, +som er up to date. +Denne mulighed bruges, hvis for eksempel manualsiden er preformateret +til en skrm med en anden bredde end den, man aktuelt anvender. +.TP +.B \-\^d +Siden vises ikke; men der udskrives adskillige fejlfindingsinformationer +i stedet. +.TP +.B \-\^D +Udskiver bde siden og fejlfindingsinformation. +.TP +.B \-\^f +kvivalent med +.B whatis. +.TP +.B \-\^h +Udskriv en kort hjlpetekst og afslut programmet. +.TP +.B \-\^k +kvivalent med +.B apropos. +.TP +.B \-\^K +Gennemsger *alle* manualsiderne efter den angivne streng. Advarsel: det +kan godt g meget langsomt. Det hjper at specifisere et kapitel. P +en typisk maskine tager det omkring 1 minut at gennemsge 500 manualsider. +.TP +.B \-\^m " system" +System angiver et alternativt set manualsider. +.TP +.B \-\^p " string" +Angiver den sekvens af preprocessore som kres fr nroff eller troff. +Ikke alle installationer har et fuldt set preprocessore. +Bogstaverne som betegner nogle af preprocessorene er: +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +Denne parameter tilsidestter +.B MANROFFSEQ +skalvariablen. +.TP +.B u-\^t +Brug +.B @troff@ +til formattering af manualside, uddata sendes til +.B stdout. +Uddata fra +.B @troff@ +m muligvis viderebearbejdes gennem et filter fr udskrift. +.TP +.BR \-\^w or \-\-path +Manualsiderne vises ikke, men findestedet for filerne ,som ville blive +formateret eller vist, udskrives. Hvis ingen argumenter er angivet +udskrives hvilke kataloger som +.B man +gennemsger efter manualsider. +Hvis +.B manpath +er et link til man, s er 'manpath' kvivalent med 'man --path'. +.TP +.B \-\^W +Som \-\^w, men udskriver filnavne en per linie, uden yderligere information. +Dette er smart i skal kommandoer ssom +.ft CW +man -aW man | xargs ls -l +.ft + +.SH "PREFORMATEREDE SIDER" +.B man +vil prve p at gemme de formaterede manualsider, for at spare +formatteringstid nste gang der er brug for siderne. +Traditionelt bliver de formatterede sider fra KATALOG/manX gemt i +KATALOG/catX, men rute fra manual kataloget til preformat kataloget +kan angives i +.I @man_config_file@. +Ingen preformaterede sider bliver gemt, hvis det forlangte katalog ikke eksisterer. +.TP +Det er muligt at stte 'man' suid til bruger man. Hvis cat kataloget har ejer +man og tilgangsrettighed 0755 (kum skrivetilladelse for man), +og cat-filerne har ejer man og tilgangsrettighed 0644 eller 0444 +(kun skrivetilladelse for man, eller ingen skriveltilladelse overhovedet), +kan ingen ordinr bruger ndre de preformaterede sider eller +anbringe andre filer i katalog for preformaterede sider. +Hvis 'man' ikke er suid, skal kataloget for preformaterede sider have +tilgangrettighed 0777 hvis alle brugere skal have mulighed for at gemme +preformaterede sider. +.TP +Parameteren -c gennemtvinger reformattering af en side, +selvom en frisk preformateret side eksisterer. + + +.SH SKALVARIABLE +.TP +.B MANPATH +Hvis +.B MANPATH +er sat, bruges dens vrdi som sgesti til manualsiderne. +.TP +.B MANROFFSEQ +Hvis +.B MANROFFSEQ +is sat, bruges dennes vrdi til at bestemme hvilke preprocessore som +gennemkres fr nroff eller troff. Normalt bliver siderne sendt gennem +tabel preprocessoren fr nroff. +.TP +.B MANSECT +Hvis +.B MANSECT +er sat, bruges dens vrdi til at faststte hvilken manualsektioner +som gennemsges. +.TP +.B MANWIDTH +Hvis +.B MANWIDTH +is sat, bruges dens vrdi; som den brede manualsiderne bliver vist med. +Hvis ikke +.B MANWIDTH +er sat, bruges hele skrmens bredde. +.TP +.B MANPAGER +Hvis +.B MANPAGER +is sat, anvendes dets vrdi som navnet p det program som bruges til at vise +manualsiderne med. Hvis ikke s bruges +.BR PAGER . +Hvis denne heller ikke har nogen vrdi bruges +.BR @pager@ . +.TP +.B LANG +Hvis +.B LANG +er sat, bruges dets vrdi til at definere i hvilket underkatalog man +frst kigger efter manualsider. Sledes vil kommandoen `LANG=da man 1 foo' +f man til at lede efter foo manualsiden i .../da/man1/foo.1, +og hvis der ikke kan finde en sdan fil fortsttes der i .../man1/foo.1, +hvor ... er et katalog p sgestien. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +Skalvariablerne +.B NLSPATH +og +.B LC_MESSAGES +(eller +.B LANG +nr den sidste ikke findes) +spiller en rolle i at lokalisere meddelelses kataloget. +(Engelske meddelelser er oversat direkte ind i programmet, +s derfor behves intet katalog.) +Bemrk at nogle programmer, s som col(1), kaldt af man ogs bruger LC_CTYPE. +.TP +.B STI +.B STI +bliver brugt til konstruktion af den normale sgesti for manualsiderne. +.TP +.B SYSTEM +.B SYSTEM +bliver brugt til at angive et andet system navn med (for brug +med +.B \-m +parametren). +.SH "SE OGS" +apropos(1), whatis(1), less(1), groff(1). +.SH FEJL +.B \-t +parametren virker kun, hvis der er installeret et troff-lignende program. diff --git a/man/da/whatis.man b/man/da/whatis.man new file mode 100644 index 0000000..0d57b74 --- /dev/null +++ b/man/da/whatis.man @@ -0,0 +1,32 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" edited and translated to danish by Bo Vagner Hoejer 1996 +.\" email bo@petshop.ping.dk - bo@image.dk +.\" +.TH whatis 1 "5. Januar 1991" "da" "Linux brugerkommandoer" +.LO 1 +.SH NAVN +whatis \- gennemsg 'whatis' databasen efter komplette ord. +.SH SYNTAKS +.BI whatis +ngleord ... +.SH BESKRIVELSE +whatis gennemsger et set af databasefiler, som indeholder korte beskrivelser +af systemets kommandoer, efter ngleordet og udskriver resultatet paa standard +udskriftsenheden. Kun ord der matcher fuldstndigt bliver vist. + +whatis databasen oprettes ved at anvende kommandoen @makewhatis@. +.SH "SE OGS" +apropos(1), man(1). diff --git a/man/de.txt b/man/de.txt new file mode 100644 index 0000000..b518853 --- /dev/null +++ b/man/de.txt @@ -0,0 +1 @@ +german diff --git a/man/de/README b/man/de/README new file mode 100644 index 0000000..2be681b --- /dev/null +++ b/man/de/README @@ -0,0 +1,6 @@ +These german man pages were contributed by Jochen Hein. + +#From hein@centeotl.in.tu-clausthal.de Tue May 31 08:52:20 1994 +#To: Andries.Brouwer@cwi.nl +#Subject: Re: man-1.3 +#From: Hein@student.tu-clausthal.de (Jochen Hein) diff --git a/man/de/apropos.man b/man/de/apropos.man new file mode 100644 index 0000000..958f10f --- /dev/null +++ b/man/de/apropos.man @@ -0,0 +1,29 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" bersetzt von Jochen Hein ( Hein@Student.tu-clausthal.de ) +.\" +.TH apropos 1 "Jan 15, 1991" +.LO 1 +.SH NAME +apropos \- durchsucht die whatis Datenbank nach Zeichenketten +.SH SYNTAX +.BI apropos +keyword ... +.SH BESCHREIBUNG +apropos durchsucht eine Reihe von Datenbank-Dateien, die kurze Beschreibungen +von System-Kommandos enthalten, nach Schlsselworten und zeigt das Ergebnis +auf der Standard-Ausgabe an. +.SH "SIEHE AUCH" +whatis(1), man(1). diff --git a/man/de/man.conf.man b/man/de/man.conf.man new file mode 100644 index 0000000..66ee564 --- /dev/null +++ b/man/de/man.conf.man @@ -0,0 +1,43 @@ +.\" @(#)man.conf +.TH MAN.CONF 5 "30 Mar 1994" +.SH NAME +man.conf \- Konfigurationsdatei fr man +.SH BESCHREIBUNG +.LP +Diese Datei wird von +.BR man (1) +gelesen und enthlt (a) Informationen darber, wie der Such-Pfad fr man +aufgebaut wird, (b) den vollstndigen Namen (inclusive Pfad) von diversen +Programmen wie nroff, eqn, tbl etc, die von man aufgerufen werden und (c) +eine Liste mit Auspack-Programmen fr Dateien mit speziellen Erweiterungen. +Eine alternative Version dieser Datei benutzt werden mit +.LP +.RS +man -C private_man.conf ... +.RE +.LP +Die Programm-Namen knnen mit Optionen angegeben werden. Ntzliche Optionen +fr roff sind in grotty(1) beschrieben. Zum Beispiel knnte man statt +des Default-Kommandos +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tascii +.fi +.RE +.LP +den Befehl +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tascii -P-u -P-b +.fi +.RE +.LP +verwenden, um Unterstreichungen und berschreiben zu verhindern. +.SH "SIEHE AUCH" +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) and compress(1), gzip(1). + + + diff --git a/man/de/man.man b/man/de/man.man new file mode 100644 index 0000000..57681d1 --- /dev/null +++ b/man/de/man.man @@ -0,0 +1,225 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" +.\" Translated into german by Jochen Hein ( Hein@Student.TU-Clausthal.de ) +.\" and Ralf W. Stephan ( ralf@franken.de ). +.\" +.TH man 1 "2. September 1995" +.LO 1 +.SH NAME +man \- Formatieren und Anzeigen von Seiten des Online-Handbuches (man pages) +.br +manpath \- Anzeigen des Benutzer-eigenen Suchpfades fr Seiten des Online-Handbuches (man pages) +.SH SYNTAX +man [\-acdfhktw] [\-m system] [\-p string] [\-C config_file] [\-M path] +[\-P pager] [\-S section_list] [section] name ... +.SH BESCHREIBUNG +.B man +formatiert Seiten aus dem Online-Handbuch und zeigt diese an. +Diese Version untersttzt die +.B MANPATH +und +.B (MAN)PAGER +Umgebungsvariablen, so da +Sie ihre eigenen man pages verwenden knnen und selbst whlen knnen, welches +Programm die formatierten Seiten anzeigen soll. Wenn der Parameter +.I section +angegeben wird, so sucht +.B man +nur in dieser Sektion des Handbuchs. +Sie knnen auch mit Hilfe von Kommando-Zeilen-Optionen oder Umgebungsvariablen +die Reihenfolge angeben, in der die Sektionen nach +Eintrgen durchsucht werden und welche zustzlichen Programme +die Quelltexte bearbeiten sollen. +Wenn der Parameter +.I name +das Zeichen / enthlt, dann wird zunchst versucht, diese Datei zu +bearbeiten. Damit knnen Sie z.B. +.B "man ./foo.5" +oder auch +.B "man /cd/foo/bar.1.gz" +eingeben. +.SH OPTIONEN +.TP +.B \-\^C " config_file" +bestimmt welche man.conf-Datei als Steuerdatei verwendet wird. +.TP +.B \-\^M " path" +bestimmt eine Liste von Verzeichnissen, die nach Handbuch-Seiten durchsucht +werden. Wenn diese Option nicht angegeben ist, so wird die Umgebungsvariable +.B MANPATH +benutzt. Ist diese Variable nicht gesetzt, so wird diese Liste aus der +Datei man.conf erstellt. +.TP +.B \-\^P " pager" +bestimmt welches Programm zur Anzeige der Handbuch-Seiten benutzt wird. +Als default benutzt man +.B @pager@ +Diese Option berschreibt die Umgebungsvariable +.B PAGER +.TP +.B \-\^S " section_list" +ist eine durch Doppelpunkte getrennte Liste von Handbuch-Sektionen, die +nach Handbuch-Seiten durchsucht werden soll. +Diese Option berschreibt die Umgebungsvariable +.B MANSECT +.TP +.B \-\^a +Als Default wird +.B man +beendet, nachdem es die erste Handbuchseite angezeigt +hat, die gefunden wurde. Diese Option weist +.B man +an, alle Handbuch-Seiten anzuzeigen, die zu +.B name, +passen, nicht nur die erste. +.TP +.B \-\^d +zeigt nicht die Handbuch-Seiten an, sondern gibt etliche Informationen +zur Fehlersuche aus. +.TP +.B \-\^f +ist quivalent zu +.BR whatis . +.TP +.B \-\^h +gibt eine (einzeilige) Hilfe aus und beendet +.BR man . +.TP +.B \-\^k +ist quivalent zu +.BR apropos . +.TP +.B \-\^K +Suche in *allen* Manualseiten nach dem angegebenen Schlsselwort. Achtung: +Die Suche dauert mglicherweise sehr lange! Die Angabe der Sektion +beschleunigt die Suche. (Als groben Richtwert fr die Suche kann man +ca. eine Minute fr 500 Manualseiten ansetzen.) +.TP +.B \-\^m " system" +bestimmt eine andere Menge von Handbuch-Seiten, die aufgrund des +angegebenen System-Namen durchsucht werden sollen. +.TP +.B \-\^p " string" +bestimmt die Abfolge von Prprozessoren, die vor nroff oder troff +gestartet werden sollen. Nicht alle Installationen verfgen ber alle +Prprozessoren. Einige der Prprozessoren und die dafr verwendeten +Buchstaben sind: +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +Diese Option berschreibt die Umgebungsvariable +.B MANROFFSEQ +.TP +.B \-\^t +benutzt +.B @troff@ +um die Handbuch-Seite zu formatieren und leitet die Ausgabe weiter nach +.B stdout. +Die Ausgabe von +.B @troff@ +mu mglicherweise durch einen Filter weiterbearbeitet werden, bevor +sie gedruckt werden kann. +.TP +.B \-\^w \fRor\fP \-\-path +die Handbuchseiten werden nicht angezeigt, sondern die Fundorte der Seiten, +die formatiert oder angezeigt wrden. Wenn kein Argument angegeben wurde, +wird die Liste der Verzeichnisse ausgegeben, die von +.B man +nach Handbuch-Seiten durchsucht werden. Wenn +.B manpath +ein Link zu man ist, dann ist "manpath" quivalent zu "man --path". + +.SH ENVIRONMENT +.TP +.B MANPATH +Wenn die Umgebungsvariable +.B MANPATH +gesetzt ist, dann wird dieser Wert als Suchpfad fr Handbuch-Seiten +verwendet. +.TP +.B MANROFFSEQ +Wenn die Umgebungsvariable +.B MANROFFSEQ +gesetzt ist, dann wird dieser Wert benutzt um die Prprozessoren zu bestimmen, +die aufgerufen werden sollen, bevor die Handbuch-Seite mit nroff oder troff +bearbeitet wird. Standardmig werden Handbuch-Seiten durch den Tabellen +Prprozessor bearbeitet bevor nroff gestartet wird. +.TP +.B MANSECT +Wenn die Umgebungsvariable +.B MANSECT +gesetzt ist, dann bestimmt dieser Wert welche Handbuch-Sektionen durchsucht +werden sollen. +.TP +.B MANWIDTH +Wenn die Umgebungsvariable +.B MANWIDTH +gesetzt ist, dann beschreibt deren Wert die Breite auf der die +Handbuch-Seite angezeigt werden soll. Ansonsten wird die Seite u.U. +ber die gesamte Breite des Bildschirmes gezogen. +.TP +.B PAGER +Wenn die Umgebungsvariable +.B PAGER +gesetzt ist, so wird dieser Wert als Name des Programms benutzt, mit dem +die Handbuch-Seiten angezeigt werden sollen. Standardmig wird +.B @pager@ +verwendet. +.TP +.B LANG +Wenn die Umgebungsvariable +.B LANG +gesetzt ist, gibt ihr Inhalt den Namen des Unterverzeichnisses +an, wo zuerst nach der Handbuch-Seite gesucht werden soll. +So zB bewirkt der Shell-Befehl `LANG=dk man 1 foo', da +.B man +zuerst in ...dk/man1/foo.1 nach der Handbuchseite fr 'foo' sucht, und +wenn es dort nicht fndig wird, dann in ...man1/foo.1, wobei '...' +ein Verzeichnis aus dem Suchpfad bedeutet. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +Die Umgebungsvariablen +.B NLSPATH +und +.B LC_MESSAGES +(oder +.B LANG +falls erstere nicht existiert) spielen bei der Suche nach dem Message +Katalog eine Rolle (englische Messages sind fest einkompiliert, daher +ist auch kein Katalog fr sie notwendig). Beachten Sie, da auch +Programme wie +.B col(1), +das von +.B man +aufgerufen wird, noch zustzliche Variablen wie LC_CTYPE benutzen. +.TP +.B PATH +.B PATH +wird bei der Konstruktion des vorgegebenen Suchpfades fr Handbuchseiten +verwendet. +.TP +.B SYSTEM +.B SYSTEM +wird verwendet, um einen alternativen Systemnamen herauszufinden +(sinnvoll zusammen mit der +.B \-m +Option). +.SH "SIEHE AUCH" +apropos(1), whatis(1), less(1), groff(1). +.SH BUGS +Die +.B \-t +Option kann nur auf System verwendet werden, auf denen ein troff-Programm +installiert ist. diff --git a/man/de/whatis.man b/man/de/whatis.man new file mode 100644 index 0000000..c632255 --- /dev/null +++ b/man/de/whatis.man @@ -0,0 +1,31 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" bersetzt von Jochen Hein ( Hein@Student.TU-Clausthal.de ) +.\" +.TH whatis 1 "Jan 5, 1991" +.LO 1 +.SH NAME +whatis \- durchsucht die whatis Datenbank nach vollstndigen Worten. +.SH SYNTAX +.BI whatis +keyword ... +.SH BESCHREIBUNG +whatis durchsucht eine Reihe von Datenbank-Dateien, die kurze Beschreibungen +von System-Kommandos enthalten, nach Schlsselworten und zeigt das Ergebnis +auf der Standard-Ausgabe an. Nur genaue Treffer werden angezeigt. + +Die whatis Datenbank wird mit dem Kommando @makewhatis@ erstellt. +.SH "SIEHE AUCH" +apropos(1), man(1). diff --git a/man/el.txt b/man/el.txt new file mode 100644 index 0000000..360f39a --- /dev/null +++ b/man/el.txt @@ -0,0 +1 @@ +greek diff --git a/man/el/apropos.man b/man/el/apropos.man new file mode 100644 index 0000000..159b8d0 --- /dev/null +++ b/man/el/apropos.man @@ -0,0 +1,29 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" . 2003 +.\" +.TH apropos 1 " 15 1991" " " " " +.LO 1 +.SH ONOMA +apropos \- whatis +.SH +.BI apropos +- ... +.SH + apropos , +' + , + . +.SH " " +whatis(1), man(1). diff --git a/man/el/hman.man b/man/el/hman.man new file mode 100644 index 0000000..207bf33 --- /dev/null +++ b/man/el/hman.man @@ -0,0 +1,71 @@ +.\" Copyright (c) 1998 Andries Brouwer +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" . edimitro@tee.gr, 2003 +.TH hman 1 "19 1998" +.LO 1 +.SH +hman \- +.SH +.B hman +[ -P \fI\fP ] [ -H \fI_\fP ] [ \fI\fP ] \fI\fP +.br +.B hman +[ -P \fI\fP ] [ -H \fI_\fP ] [ \fI\fP ] [ ] +.SH + +.B hman + man2html(1) + , + . + +.BR man (1) + +.B hman + +.BR man . + netscape, + , + +.B hman + ' . + +.SH +.TP +.B \-\^P " " + ( lynx, xmosaic, arena, chimera, +netscape, amaya, ...) . + +.BR MANHTMLPAGER . + -httpd +.BR lynx . +.TP +.B \-\^H " _" + . + +.BR MANHTMLHOST . + +.BR localhost . + +.SH +.TP +.B MANHTMLPAGER + , + . +.TP +.B MANHTMLHOST + , + . + +.SH " " +.BR man (1), +.BR man2html (1), +.BR arena (1), +.BR lynx (1), +.BR netscape (1), +.BR xmosaic (1), +.BR glimpse (1) + +http://www.mcom.com/newsref/std/x-remote.html diff --git a/man/el/makewhatis.man b/man/el/makewhatis.man new file mode 100644 index 0000000..2077f8b --- /dev/null +++ b/man/el/makewhatis.man @@ -0,0 +1,109 @@ +.\" Copyright (c) 1999 Ottavio G. Rizzo +.\" +.\" This is free documentation; 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 2 of +.\" the License, or (at your option) any later version. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +.\" USA. +.\" +.\" . edimitro@tee.gr 2003 +.\" +.TH MAKEWHATIS 8 "22 1999" " " " " +.SH +makewhatis \- whatis. +.SH +.BI "makewhatis [-u] [-v] [-w] [-s " " ] [-c [" catpath "]] [" manpath "]" +.SH + +.B makewhatis + +.IR " " manpath " , " + +.IR " " catpath " . " + , + whatis + , + . + , + . +.LP + , + +.B makewhatis + , , , , + . +.LP + +.I manpath + +.I /usr/man + . +.SH +.TP +.B -u + . +.TP +.B -v + . +.TP +.B -w + manpath man --path . +.TP +.BI -s " " + +.I + +.IR manpath " " + +.IR catpath " . " + , + +.I \'1 2 3 4 5 6 7 8 9 n l\' +.TP +.BI -c " catpath" + +.IR catpath " . " + , + + +.IR /usr/man/preformat " " /usr/man ". " +.SH +.PP + +.IR /usr/X11R6/man/whatis " " /usr/local/man/whatis + +.IP +makewhatis /usr/X11R6/man /usr/local/man +.PP + , +, + , +.IP +LANGUAGE=fi:fr:it makewhatis -w +.SH + +.B makewhatis + , + troff macros, + Tcl/Tk. +.PP +.B makewhatis + . +.SH +.BR apropos (1), +.BR man (1), +.BR whatis (1) diff --git a/man/el/man.conf.man b/man/el/man.conf.man new file mode 100644 index 0000000..2517db9 --- /dev/null +++ b/man/el/man.conf.man @@ -0,0 +1,45 @@ +.\" @(#)man.conf +.\" . edimitro@tee.gr 2003 +.TH MAN.CONF 5 "30 1994" " " " " +.SH +man.conf \- man +.SH +.LP + +.BR man (1) + : () man, +() nroff, eqn, tbl . + man, + () . + +.LP +.RS +man -C private_man.conf ... +.RE +.LP + . + nroff grotty(1). + , + +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP + +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP + . +.SH +.I "@man_config_file@" +.SH " " +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) and compress(1), gzip(1). + diff --git a/man/el/man.man b/man/el/man.man new file mode 100644 index 0000000..1cae41c --- /dev/null +++ b/man/el/man.man @@ -0,0 +1,491 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" . edimitro@tee.gr 2003 +.\" +.TH man 1 "2 1995" " " " " +.LO 1 +.SH +man \- +.br +manpath \- . +.SH +.B man +.RB [ \-acdfFhkKtwW ] +.RB [ -- ] +.RB [ \-m +.IR ] +.RB [ \-p +.IR ] +.RB [ \-C +.IR _ ] +.RB [ \-M +.IR _ ] +.RB [ \-P +.IR ] +.RB [ \-S +.IR _ ] +.RI [ ] +.I " ..." + +.SH + +.B man + . +.IR + +.B man + ' . + +.I + , + , . + , +.I + +.RB ( / ) + +.B man + , +.B "man ./foo.5" + +.B "man /cd/foo/bar.1.gz\fR.\fP" +.PP + +.B man + . + +.SH +.TP +.B \-\^C " config_file" + + +.BR @man_config_file@ . +( +.BR man.conf (5).) +.TP +.B \-\^M " " + . + . + +.B \-M +. + +.BR " ". +.TP +.B \-\^P " " + . + +.B MANPAGER + +.BR PAGER . + , + +.B man + +.BR "@pager@" . +.TP +.B \-\^S " _" + + . + +.BR MANSECT . +.TP +.B \-\^a + , +.B man + + . , +.B man + +.BR , + . +.TP +.B \-\^c + , + cat. + cat + , + + . +.TP +.B \-\^d + , + . +.TP +.B \-\^D + +.I + +.I + . +.TP +.B \-\^f + +.BR whatis . +.TP +.BR \-\^F " " \-\-preformat + - . +.TP +.B \-\^h + . +.TP +.B \-\^k + +.BR apropos . +.TP +.B \-\^K + ** . +: ! + . +( , + 500 .) +.TP +.B \-\^m " " + , + . +.TP +.B \-\^p " " + +.B nroff + +.BR troff . + . + : +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). + +.BR MANROFFSEQ . +.TP +.B \-\^t + +.B @troff@ + , + +.BR " " . + +.B @troff@ + . +.TP +.B \-\^w \fR\fP \-\- + , () () + . : + ( ) +.B man + . +.B manpath + man, + manpath man --޻. +.TP +.B \-\^W + \-\^w, , , + . + +.ft CW +.B "man -aW man | xargs ls -l" +.ft + +.SH " CAT" + man , + + . +, DIR/manX + DIR/catX, man dir cat dir + +.BR @man_config_file@ . + cat , + cat. + cat + 80, . + cat man.conf + NOCACHE. +.PP + +.B man +suid man. , cat + man 0755 ( man), + cat man 0644 0444 +( man, + ), + + cat cat. +.B man + suid, + cat 0777, + + cat. +.PP + +.B \-c + , + cat. + + +.SH " " + +.B man + , + , + +.B @man_config_file@ + . +.PP +' , +.I + +.B man + +.RB ( / ), + +.B man + , + . +.PP + +.I + +.RB ( / ), + +.B man + , + + . +.PP + +.BI "-M " _ + +.I _ + + +.BR man . +.PP + +.B -M + +.B MANPATH + + +.B man +. +.PP + +.B -M + +.BR MANPATH , + +.B man + + +.BR @man_config_file@ . + +.B MANPATH + + . +.PP +, +.B MANPATH_MAP + +(. ) +.BR PATH . + +, +.B MANPATH_MAP + + . + +.B man + +.B PATH + + . , +.BR MANPATH_MAP , + +.BR "man xyz", + + +.BR xyz . +.PP +, ( + ) +.I + +.B MANPATH_MAP + +.B man + + ' + . +.PP + ' + +.B NOAUTOPATH + +.BR @man_config_file@ . +.PP + , + , + +.B man + +.IB . \fR, + + . + , + +.BI man N + +.BI cat N + +.I N + . + ' +.BI cat N, + +.B man + ( cat). + +.B man + . , + ( +.BR .gz ), + +.B man + gzip. +.PP + ( ) +.B man + , + +.BR "-- " ( -w ). + +.SH +.TP +.B MANPATH + +.B MANPATH + +.B man + . + + , + +.B -M + +.BR " ". +.TP +.B MANPL + +.B MANPL + . +, () . +.TP +.B MANROFFSEQ + +.B MANROFFSEQ + + +.B nroff + +.BR troff . + , + tbl +.BR nroff . +.TP +.B MANSECT + +.B MANSECT + + . +.TP +.B MANWIDTH + +.B MANWIDTH + . + ' . +.TP +.B MANPAGER + +.B MANPAGER + + . + , +.BR PAGER . + +.BR @pager@ . +.TP +.B LANG + +.B LANG + man + ' . +, LANG=dk man 1 foo + man +foo .../dk/man1/foo.1, + , + .../man1/foo.1, + ... . +.TP +.BR NLSPATH ", " LC_MESSAGES ", " LANG + +.B NLSPATH + +.B LC_MESSAGES +( +.B LANG + ) + . +( , + .) + +.BR col(1) + man LC_CTYPE. +.TP +.B PATH + +.B PATH + . + +.BR " " . +.TP +.B SYSTEM + +.B SYSTEM + ( + +.B \-m +) . +.SH " " +apropos(1), whatis(1), less(1), groff(1), man.conf(5). +.SH + +.B \-t + troff. +.br + \e255 , + LESSCHARSET=latin1 . +.SH + + +(global-set-key [(f1)] (lambda () (interactive) (manual-entry (current-word)))) + + +.IR .emacs + F1 + . +.LP + , a + , + + # man foo | col -b > foo.mantxt + diff --git a/man/el/man2html.man b/man/el/man2html.man new file mode 100644 index 0000000..9aae819 --- /dev/null +++ b/man/el/man2html.man @@ -0,0 +1,157 @@ +'\" t +.\" Man page for man2html +.\" aeb, 980101 +.\" +.\" . edimitro@tee.gr, 2003 +.\" +.TH man2html 1 "1 1998" +.LO 1 +.SH +man2html \- html +.SH +man2html [] [] +.SH +.B man2html + +.I +( , + - ) + nroff html, + . + tbl eqn. + 0. , + . + , + , + + html +.BR lynx (1), +.BR xmosaic (1) + +.BR netscape (1). +./" ( +./" .BR man (1) +./" +./" .BR man2html . +./" "MANHTMLPAGER=/usr/bin/lynx" +./" .) + + +.B man2html + troff-to-html Richard Verhoeven (rcb5@win.tue.nl) + : +.LP +.TS +l l. +foo(3x) "http://localhost/cgi-bin/man/man2html?3x+foo" +method://string "method://string" +www.host.name "http://www.host.name" +ftp.host.name "ftp://ftp.host.name" +name@host "mailto:name@host" + "file:/usr/include/string.h" +.TE +.LP +( - .) + - ' . + , + + +.BR bash (1). + +.SH + , + . + \-D ' . +.LP +.TP +.B \-\^D _ + , +\fIchdir\fP(\fIdir\fP) . +.LP + \-E + cgi. +.LP +.TP +.B \-\^E + . +.LP + +.LP +<:/_cgi><_man> +.LP + . + . +.TP +.B \-\^h + :_cgi http://localhost . +.TP +.BI \-\^H " _[._][:]" + :_cgi +.RI http:// _._: . +.TP +.B \-\^l + :_cgi +.RI lynxcgi: /home/httpd . +.TP +.BI \-\^L " dir" + :_cgi +.RI lynxcgi: dir . +.TP +.BI \-\^M " _man2html" + _man2html . +.IR /cgi-bin/man/man2html . +.TP +.B \-\^p + /. +.TP +.B \-\^q + ?. . +.TP +.B \-\^r + html, + cgi-bin. +.LP +' +.BR httpd , + +.B lynx + , + lynxcgi. + http, lynx, + , + , + http. + \-l ( lynxcgi ) . + , + _cgip \fI/home/httpd\fP. + +, cgi +.LP +<___>/<__>?<> +.LP + PATH_INFO QUERY_STRING + <__> <>, . + lynxcgi PATH_INFO, + ? . + \-p ( path ) / , + \-q ( query ) ?. + + \-H \fI_\fP, + +( \fIlocalhost\fP). + cgi +.IP +man2html -H $SERVER_NAME +.LP + SERVER_NAME. + , + . + +.SH + . . + lynxcgi lynx + . . + +.SH " " +.BR lynx (1), +.BR man (1) diff --git a/man/el/whatis.man b/man/el/whatis.man new file mode 100644 index 0000000..6820f1c --- /dev/null +++ b/man/el/whatis.man @@ -0,0 +1,31 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" . edimitro@tee.gr 2003 +.\" +.TH whatis 1 "Jan 5, 1991" " " " " +.LO 1 +.SH +whatis \- whatis . +.SH +.BI whatis +- ... +.SH + whatis , + , + . + . + + whatis @makewhatis@. +.SH " " +apropos(1), man(1). diff --git a/man/en.txt b/man/en.txt new file mode 100644 index 0000000..97ab12f --- /dev/null +++ b/man/en.txt @@ -0,0 +1 @@ +english diff --git a/man/en/apropos.1 b/man/en/apropos.1 new file mode 100644 index 0000000..05baa49 --- /dev/null +++ b/man/en/apropos.1 @@ -0,0 +1,36 @@ +.\" +.\" Generated automatically from apropos.1.in by the +.\" configure script. +.\" +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH apropos 1 "September 19, 2005" +.LO 1 +.SH NAME +apropos \- search the whatis database for strings +.SH SYNOPSIS +.BI apropos +keyword ... +.SH DESCRIPTION +apropos searches a set of database files containing short descriptions +of system commands for keywords and displays the result on the +standard output. +.SH AUTHOR +John W. Eaton was the original author of +.BR "man" . +Zeyd M. Ben-Halim released man 1.2, and Andries Brouwer followed up with versions 1.3 thru 1.5p. +Federico Lucifredi is the current maintainer. +.SH "SEE ALSO" +whatis(1), man(1). diff --git a/man/en/apropos.man b/man/en/apropos.man new file mode 100644 index 0000000..9ad50ce --- /dev/null +++ b/man/en/apropos.man @@ -0,0 +1,32 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH apropos 1 "September 19, 2005" +.LO 1 +.SH NAME +apropos \- search the whatis database for strings +.SH SYNOPSIS +.BI apropos +keyword ... +.SH DESCRIPTION +apropos searches a set of database files containing short descriptions +of system commands for keywords and displays the result on the +standard output. +.SH AUTHOR +John W. Eaton was the original author of +.BR "man" . +Zeyd M. Ben-Halim released man 1.2, and Andries Brouwer followed up with versions 1.3 thru 1.5p. +Federico Lucifredi is the current maintainer. +.SH "SEE ALSO" +whatis(1), man(1). diff --git a/man/en/makewhatis.8 b/man/en/makewhatis.8 new file mode 100644 index 0000000..227db4c --- /dev/null +++ b/man/en/makewhatis.8 @@ -0,0 +1,104 @@ +.\" +.\" Generated automatically from makewhatis.8.in by the +.\" configure script. +.\" +.\" Copyright (c) 1999 Ottavio G. Rizzo +.\" +.\" This is free documentation; 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 2 of +.\" the License, or (at your option) any later version. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +.\" USA. +.\" +.TH MAKEWHATIS 8 "September 19, 2005" +.SH NAME +makewhatis \- Create the whatis database +.SH SYNOPSIS +.BI "makewhatis [-u] [-v] [-w] [-s " sections " ] [-c [" catpath "]] [" manpath "]" +.SH DESCRIPTION +.B makewhatis +reads all the manual pages contained in the given +.IR sections " of " manpath +or the preformatted pages contained in the given +.IR sections " of " catpath . +For each page, it writes a line in the whatis database; each line +consists of the name of the page and a short description, separated +by a dash. The description is extracted using the content of the +NAME section of the manual page. +.LP +Since other languages use a different term for the NAME section, +.B makewhatis +recognizes the equivalent terms in Czech, Italian, Finnish, French, +German and Spanish. +.LP +If no +.I manpath +argument is given, +.I /usr/man +is assumed by default. +.SH OPTIONS +.TP +.B -u +Update database with new pages. +.TP +.B -v +Verbose output +.TP +.B -w +Use manpath obtained from `man --path` +.TP +.BI -s " sections" +Looks in the +.I sections +of +.IR manpath " or " catpath . +If the option is absent, the MANSECT env var will be used. If it too +is absent, the MANSECT setting in man.conf will be used. +.TP +.BI -c " catpath" +The preformatted manual pages located in +.I catpath +are scanned. If the argument is not provided, it is assumed to be the +first existing directory between +.IR /usr/man/preformat " and " /usr/man . +.SH EXAMPLES +.PP +To rebuild only +.IR /usr/X11R6/man/whatis " and " /usr/local/man/whatis +.IP +makewhatis /usr/X11R6/man /usr/local/man +.PP +To rebuild all the databases, including those of the Finnish, French +and Italian translations +.IP +LANGUAGE=fi:fr:it makewhatis -w +.SH BUGS +.B makewhatis +may not handle too well manual pages written with non-standard troff +macros, such as the Tcl/Tk pages. +.PP +.B makewhatis +does not work on preformatted translations. +.SH AUTHOR +John W. Eaton was the original author of +.BR "man" . +Zeyd M. Ben-Halim released man 1.2, and Andries Brouwer followed up with versions 1.3 thru 1.5p. +Federico Lucifredi is the current maintainer. +.SH SEE ALSO +.BR apropos (1), +.BR man (1), +.BR whatis (1) diff --git a/man/en/makewhatis.man b/man/en/makewhatis.man new file mode 100644 index 0000000..2108284 --- /dev/null +++ b/man/en/makewhatis.man @@ -0,0 +1,100 @@ +.\" Copyright (c) 1999 Ottavio G. Rizzo +.\" +.\" This is free documentation; 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 2 of +.\" the License, or (at your option) any later version. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +.\" USA. +.\" +.TH MAKEWHATIS 8 "September 19, 2005" +.SH NAME +makewhatis \- Create the whatis database +.SH SYNOPSIS +.BI "makewhatis [-u] [-v] [-w] [-s " sections " ] [-c [" catpath "]] [" manpath "]" +.SH DESCRIPTION +.B makewhatis +reads all the manual pages contained in the given +.IR sections " of " manpath +or the preformatted pages contained in the given +.IR sections " of " catpath . +For each page, it writes a line in the whatis database; each line +consists of the name of the page and a short description, separated +by a dash. The description is extracted using the content of the +NAME section of the manual page. +.LP +Since other languages use a different term for the NAME section, +.B makewhatis +recognizes the equivalent terms in Czech, Italian, Finnish, French, +German and Spanish. +.LP +If no +.I manpath +argument is given, +.I /usr/man +is assumed by default. +.SH OPTIONS +.TP +.B -u +Update database with new pages. +.TP +.B -v +Verbose output +.TP +.B -w +Use manpath obtained from `man --path` +.TP +.BI -s " sections" +Looks in the +.I sections +of +.IR manpath " or " catpath . +If the option is absent, the MANSECT env var will be used. If it too +is absent, the MANSECT setting in man.conf will be used. +.TP +.BI -c " catpath" +The preformatted manual pages located in +.I catpath +are scanned. If the argument is not provided, it is assumed to be the +first existing directory between +.IR /usr/man/preformat " and " /usr/man . +.SH EXAMPLES +.PP +To rebuild only +.IR /usr/X11R6/man/whatis " and " /usr/local/man/whatis +.IP +makewhatis /usr/X11R6/man /usr/local/man +.PP +To rebuild all the databases, including those of the Finnish, French +and Italian translations +.IP +LANGUAGE=fi:fr:it makewhatis -w +.SH BUGS +.B makewhatis +may not handle too well manual pages written with non-standard troff +macros, such as the Tcl/Tk pages. +.PP +.B makewhatis +does not work on preformatted translations. +.SH AUTHOR +John W. Eaton was the original author of +.BR "man" . +Zeyd M. Ben-Halim released man 1.2, and Andries Brouwer followed up with versions 1.3 thru 1.5p. +Federico Lucifredi is the current maintainer. +.SH SEE ALSO +.BR apropos (1), +.BR man (1), +.BR whatis (1) diff --git a/man/en/man.1 b/man/en/man.1 new file mode 100644 index 0000000..1673352 --- /dev/null +++ b/man/en/man.1 @@ -0,0 +1,528 @@ +.\" +.\" Generated automatically from man.1.in by the +.\" configure script. +.\" +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" More changes - flc +.\" +.TH man 1 "September 19, 2005" +.LO 1 +.SH NAME +man \- format and display the on-line manual pages +.SH SYNOPSIS +.B man +.RB [ \-acdfFhkKtwW ] +.RB [ --path ] +.RB [ \-m +.IR system ] +.RB [ \-p +.IR string ] +.RB [ \-C +.IR config_file ] +.RB [ \-M +.IR pathlist ] +.RB [ \-P +.IR pager ] +.RB [ \-B +.IR browser ] +.RB [ \-H +.IR htmlpager ] +.RB [ \-S +.IR section_list ] +.RI [ section ] +.I "name ..." + +.SH DESCRIPTION +.B man +formats and displays the on-line manual pages. If you specify +.IR section , +.B man +only looks in that section of the manual. +.I name +is normally the name of the manual page, which is typically the name +of a command, function, or file. +However, if +.I name +contains a slash +.RB ( / ) +then +.B man +interprets it as a file specification, so that you can do +.B "man ./foo.5" +or even +.B "man /cd/foo/bar.1.gz\fR.\fP" +.PP +See below for a description of where +.B man +looks for the manual page files. + +.SH MANUAL SECTIONS +The standard sections of the manual include: +.TP +.B 1 +User Commands +.TP +.B 2 +System Calls +.TP +.B 3 +C Library Functions +.TP +.B 4 +Devices and Special Files +.TP +.B 5 +File Formats and Conventions +.TP +.B 6 +Games et. Al. +.TP +.B 7 +Miscellanea +.TP +.B 8 +System Administration tools and Deamons +.TP +Distributions customize the manual section to their specifics, which often include additional sections. + +.SH OPTIONS +.TP +.B \-\^C " config_file" +Specify the configuration file to use; the default is +.BR /usr/share/misc/man.conf . +(See +.BR man.conf (5).) +.TP +.B \-\^M " path" +Specify the list of directories to search for man pages. +Separate the directories with colons. An empty list is the same as +not specifying +.B \-M +at all. See +.BR "SEARCH PATH FOR MANUAL PAGES" . +.TP +.B \-\^P " pager" +Specify which pager to use. +This option overrides the +.B MANPAGER +environment variable, which in turn overrides the +.B PAGER +variable. By default, +.B man +uses +.BR "/bin/less -is" . +.TP +.B \-\^B +Specify which browser to use on HTML files. +This option overrides the +.B BROWSER +environment variable. By default, +.B man +uses +.BR /bin/less -is , +.TP +.B \-\^H +Specify a command that renders HTML files as text. +This option overrides the +.B HTMLPAGER +environment variable. By default, +.B man +uses +.BR /bin/cat , +.TP +.B \-\^S " section_list" +List is a colon separated list of manual sections to search. +This option overrides the +.B MANSECT +environment variable. +.TP +.B \-\^a +By default, +.B man +will exit after displaying the first manual page it +finds. Using this option forces +.B man +to display all the manual pages that match +.B name, +not just the first. +.TP +.B \-\^c +Reformat the source man page, even when an up-to-date cat page exists. +This can be meaningful if the cat page was formatted for a screen +with a different number of columns, or if the preformatted page +is corrupted. +.TP +.B \-\^d +Don't actually display the man pages, but do print gobs of debugging +information. +.TP +.B \-\^D +Both display and print debugging info. +.TP +.B \-\^f +Equivalent to +.BR whatis . +.TP +.BR \-\^F " or " \-\-preformat +Format only - do not display. +.TP +.B \-\^h +Print a help message and exit. +.TP +.B \-\^k +Equivalent to +.BR apropos . +.TP +.B \-\^K +Search for the specified string in *all* man pages. Warning: this is +probably very slow! It helps to specify a section. +(Just to give a rough idea, on my machine this takes about a minute +per 500 man pages.) +.TP +.B \-\^m " system" +Specify an alternate set of man pages to search based on the system +name given. +.TP +.B \-\^p " string" +Specify the sequence of preprocessors to run before +.B nroff +or +.BR troff . +Not all installations will have a full set of preprocessors. +Some of the preprocessors and the letters used to designate them are: +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +This option overrides the +.B MANROFFSEQ +environment variable. +.TP +.B \-\^t +Use +.B /usr/bin/groff -Tps -mandoc +to format the manual page, passing the output to +.B stdout. +The default output format of +.B /usr/bin/groff -Tps -mandoc +is Postscript, refer to the manual page of +.B /usr/bin/groff -Tps -mandoc +for ways to pick an alternate format. +.PP +Depending on the selected format and the availability of printing +devices, the output +may need to be passed through some filter or another before being +printed. +.TP +.B \-\^w \fRor\fP \-\-path +Don't actually display the man pages, but do print the location(s) of +the files that would be formatted or displayed. If no argument is given: +display (on stdout) the list of directories that is searched by +.B man +for man pages. If +.B manpath +is a link to man, then "manpath" is equivalent to "man --path". +.TP +.B \-\^W +Like \-\^w, but print file names one per line, without additional information. +This is useful in shell commands like +.ft CW +.B "man -aW man | xargs ls -l" +.ft + +.SH "CAT PAGES" +Man will try to save the formatted man pages, in order to save +formatting time the next time these pages are needed. +Traditionally, formatted versions of pages in DIR/manX are +saved in DIR/catX, but other mappings from man dir to cat dir +can be specified in +.BR /usr/share/misc/man.conf . +No cat pages are saved when the required cat directory does not exist. +No cat pages are saved when they are formatted for a line length +different from 80. +No cat pages are saved when man.conf contains the line NOCACHE. +.PP +It is possible to make +.B man +suid to a user man. Then, if a cat directory +has owner man and mode 0755 (only writable by man), and the cat files +have owner man and mode 0644 or 0444 (only writable by man, or not +writable at all), no ordinary user can change the cat pages or put +other files in the cat directory. If +.B man +is not made suid, then a cat directory should have mode 0777 +if all users should be able to leave cat pages there. +.PP +The option +.B \-c +forces reformatting a page, even if a recent cat page exists. + +.SH "HTML PAGES" +Man will find HTML pages if they live in directories named as +'html' followed by a section extension. The last file extension is +expected to be ".html", thus a valid name for an HTML version of the +.BR ls (1) +man page would be +.IR /usr/share/man/htmlman1/ls.1.html . + +.SH "SEARCH PATH FOR MANUAL PAGES" +.B man +uses a sophisticated method of finding manual page files, based on the +invocation options and environment variables, the +.B /usr/share/misc/man.conf +configuration file, and some built in conventions and heuristics. +.PP +First of all, when the +.I name +argument to +.B man +contains a slash +.RB ( / ), +.B man +assumes it is a file specification itself, +and there is no searching involved. +.PP +But in the normal case where +.I name +doesn't contain a slash, +.B man +searches a variety of directories for a file that could be a manual page +for the topic named. +.PP +If you specify the +.BI "-M " pathlist +option, +.I pathlist +is a colon-separated list of the directories that +.B man +searches. +.PP +If you don't specify +.B -M +but set the +.B MANPATH +environment variable, the value of that variable is the list of the +directories that +.B man +searches. +.PP +If you don't specify an explicit path list with +.B -M +or +.BR MANPATH , +.B man +develops its own path list based on the contents of the configuration +file +.BR /usr/share/misc/man.conf . +The +.B MANPATH +statements in the configuration file identify particular directories to +include in the search path. +.PP +Furthermore, the +.B MANPATH_MAP +statements add to the search path depending on your command search path +(i.e. your +.B PATH +environment variable). For each directory that may be in the command +search path, a +.B MANPATH_MAP +statement specifies a directory that should be added to the search +path for manual page files. +.B man +looks at the +.B PATH +variable and adds the corresponding directories to the manual page +file search path. Thus, with the proper use of +.BR MANPATH_MAP , +when you issue the command +.BR "man xyz" , +you get a manual page for the program that would run if you issued the +command +.BR xyz . +.PP +In addition, for each directory in the command search path (we'll call +it a "command directory") for which you do +.I not +have a +.B MANPATH_MAP +statement, +.B man +automatically looks for a manual page directory "nearby" +namely as a subdirectory in the command directory itself or +in the parent directory of the command directory. +.PP +You can disable the automatic "nearby" searches by including a +.B NOAUTOPATH +statement in +.BR /usr/share/misc/man.conf . +.PP +In each directory in the search path as described above, +.B man +searches for a file named +.IB topic . section\fR, +with an optional suffix on the section number and +possibly a compression suffix. +If it doesn't find such a file, it then looks in any subdirectories +named +.BI man N +or +.BI cat N +where +.I N +is the manual section number. +If the file is in a +.BI cat N +subdirectory, +.B man +assumes it is a formatted manual page file (cat page). Otherwise, +.B man +assumes it is unformatted. In either case, if the filename has a +known compression suffix (like +.BR .gz ), +.B man +assumes it is gzipped. +.PP +If you want to see where (or if) +.B man +would find the manual page for a particular topic, use the +.BR "--path " ( -w ) +option. + +.SH ENVIRONMENT +.TP +.B MANPATH +If +.B MANPATH +is set, +.B man +uses it as the path to search for manual page files. It overrides the +configuration file and the automatic search path, but is overridden by +the +.B -M +invocation option. See +.BR "SEARCH PATH FOR MANUAL PAGES" . +.TP +.B MANPL +If +.B MANPL +is set, its value is used as the display page length. +Otherwise, the entire man page will occupy one (long) page. +.TP +.B MANROFFSEQ +If +.B MANROFFSEQ +is set, its value is used to determine the set of preprocessors run +before running +.B nroff +or +.BR troff . +By default, pages are passed through +the tbl preprocessor before +.BR nroff . +.TP +.B MANSECT +If +.B MANSECT +is set, its value is used to determine which manual sections to search. +.TP +.B MANWIDTH +If +.B MANWIDTH +is set, its value is used as the width manpages should be displayed. +Otherwise the pages may be displayed over the whole width of your +screen. +.TP +.B MANPAGER +If +.B MANPAGER +is set, its value is used as the name of the program to use to display +the man page. If not, then +.B PAGER +is used. If that has no value either, +.B /bin/less -is +is used. +.TP +.B BROWSER +The name of a browser to use for displaying HTML manual pages. If +it is not set, /bin/less -is is used. +.TP +.B HTMLPAGER +The command to use for rendering HTML manual pages as text. If +it is not set, /bin/cat is used. +.TP +.B LANG +If +.B LANG +is set, its value defines the name of the subdirectory where man +first looks for man pages. Thus, the command `LANG=dk man 1 foo' +will cause man to look for the foo man page in .../dk/man1/foo.1, +and if it cannot find such a file, then in .../man1/foo.1, +where ... is a directory on the search path. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +The environment variables +.B NLSPATH +and +.B LC_MESSAGES +(or +.B LANG +when the latter does not exist) +play a role in locating the message catalog. +(But the English messages are compiled in, and for English no catalog +is required.) +Note that programs like +.BR col(1) +called by man also use e.g. LC_CTYPE. +.TP +.B PATH +.B PATH +helps determine the search path for manual page files. See +.BR "SEARCH PATH FOR MANUAL PAGES" . +.TP +.B SYSTEM +.B SYSTEM +is used to get the default alternate system name (for use +with the +.B \-m +option). +.SH BUGS +The +.B \-t +option only works if a troff-like program is installed. +.br +If you see blinking \e255 or instead of hyphens, +put `LESSCHARSET=latin1' in your environment. +.SH TIPS +If you add the line + + (global-set-key [(f1)] (lambda () (interactive) (manual-entry (current-word)))) + +to your +.IR .emacs +file, then hitting F1 will give you the man page for the library call +at the current cursor position. +.LP +To get a plain text version of a man page, without backspaces +and underscores, try + + # man foo | col -b > foo.mantxt +.SH AUTHOR +John W. Eaton was the original author of +.BR "man" . +Zeyd M. Ben-Halim released man 1.2, and Andries Brouwer followed up with +versions 1.3 thru 1.5p. +Federico Lucifredi is the current maintainer. +.SH "SEE ALSO" +apropos(1), whatis(1), less(1), groff(1), man.conf(5). diff --git a/man/en/man.conf.5 b/man/en/man.conf.5 new file mode 100644 index 0000000..45c33ca --- /dev/null +++ b/man/en/man.conf.5 @@ -0,0 +1,50 @@ +.\" +.\" Generated automatically from man.conf.5.in by the +.\" configure script. +.\" +.\" @(#)man.conf +.TH MAN.CONF 5 "September 19, 2005" +.SH NAME +man.conf \- configuration data for man +.SH DESCRIPTION +.LP +This file is read by +.BR man (1) +and contains (a) information on how to construct the search path for man, +(b) full path names for various programs like nroff, eqn, tbl etc. used by man, +and (c) a list with uncompressors for files with a given extension. +An alternative version of this file can be specified with +.LP +.RS +man -C private_man.conf ... +.RE +.LP +The command names may be provided with options. +Useful options to nroff can be found in grotty(1). +For example, instead of the default line +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +one may write +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +in order to suppress underlining and overstriking. +.SH FILES +.I "/usr/share/misc/man.conf" +.SH AUTHOR +John W. Eaton was the original author of +.BR "man" . +Zeyd M. Ben-Halim released man 1.2, and Andries Brouwer followed up with versions 1.3 thru 1.5p. +Federico Lucifredi is the current maintainer. +.SH "SEE ALSO" +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) and compress(1), gzip(1). diff --git a/man/en/man.conf.man b/man/en/man.conf.man new file mode 100644 index 0000000..811e6bd --- /dev/null +++ b/man/en/man.conf.man @@ -0,0 +1,46 @@ +.\" @(#)man.conf +.TH MAN.CONF 5 "September 19, 2005" +.SH NAME +man.conf \- configuration data for man +.SH DESCRIPTION +.LP +This file is read by +.BR man (1) +and contains (a) information on how to construct the search path for man, +(b) full path names for various programs like nroff, eqn, tbl etc. used by man, +and (c) a list with uncompressors for files with a given extension. +An alternative version of this file can be specified with +.LP +.RS +man -C private_man.conf ... +.RE +.LP +The command names may be provided with options. +Useful options to nroff can be found in grotty(1). +For example, instead of the default line +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +one may write +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +in order to suppress underlining and overstriking. +.SH FILES +.I "@man_config_file@" +.SH AUTHOR +John W. Eaton was the original author of +.BR "man" . +Zeyd M. Ben-Halim released man 1.2, and Andries Brouwer followed up with versions 1.3 thru 1.5p. +Federico Lucifredi is the current maintainer. +.SH "SEE ALSO" +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) and compress(1), gzip(1). diff --git a/man/en/man.man b/man/en/man.man new file mode 100644 index 0000000..eff2548 --- /dev/null +++ b/man/en/man.man @@ -0,0 +1,524 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" More changes - flc +.\" +.TH man 1 "September 19, 2005" +.LO 1 +.SH NAME +man \- format and display the on-line manual pages +.SH SYNOPSIS +.B man +.RB [ \-acdfFhkKtwW ] +.RB [ --path ] +.RB [ \-m +.IR system ] +.RB [ \-p +.IR string ] +.RB [ \-C +.IR config_file ] +.RB [ \-M +.IR pathlist ] +.RB [ \-P +.IR pager ] +.RB [ \-B +.IR browser ] +.RB [ \-H +.IR htmlpager ] +.RB [ \-S +.IR section_list ] +.RI [ section ] +.I "name ..." + +.SH DESCRIPTION +.B man +formats and displays the on-line manual pages. If you specify +.IR section , +.B man +only looks in that section of the manual. +.I name +is normally the name of the manual page, which is typically the name +of a command, function, or file. +However, if +.I name +contains a slash +.RB ( / ) +then +.B man +interprets it as a file specification, so that you can do +.B "man ./foo.5" +or even +.B "man /cd/foo/bar.1.gz\fR.\fP" +.PP +See below for a description of where +.B man +looks for the manual page files. + +.SH MANUAL SECTIONS +The standard sections of the manual include: +.TP +.B 1 +User Commands +.TP +.B 2 +System Calls +.TP +.B 3 +C Library Functions +.TP +.B 4 +Devices and Special Files +.TP +.B 5 +File Formats and Conventions +.TP +.B 6 +Games et. Al. +.TP +.B 7 +Miscellanea +.TP +.B 8 +System Administration tools and Deamons +.TP +Distributions customize the manual section to their specifics, which often include additional sections. + +.SH OPTIONS +.TP +.B \-\^C " config_file" +Specify the configuration file to use; the default is +.BR @man_config_file@ . +(See +.BR man.conf (5).) +.TP +.B \-\^M " path" +Specify the list of directories to search for man pages. +Separate the directories with colons. An empty list is the same as +not specifying +.B \-M +at all. See +.BR "SEARCH PATH FOR MANUAL PAGES" . +.TP +.B \-\^P " pager" +Specify which pager to use. +This option overrides the +.B MANPAGER +environment variable, which in turn overrides the +.B PAGER +variable. By default, +.B man +uses +.BR "@pager@" . +.TP +.B \-\^B +Specify which browser to use on HTML files. +This option overrides the +.B BROWSER +environment variable. By default, +.B man +uses +.BR @browser@ , +.TP +.B \-\^H +Specify a command that renders HTML files as text. +This option overrides the +.B HTMLPAGER +environment variable. By default, +.B man +uses +.BR @htmlpager@ , +.TP +.B \-\^S " section_list" +List is a colon separated list of manual sections to search. +This option overrides the +.B MANSECT +environment variable. +.TP +.B \-\^a +By default, +.B man +will exit after displaying the first manual page it +finds. Using this option forces +.B man +to display all the manual pages that match +.B name, +not just the first. +.TP +.B \-\^c +Reformat the source man page, even when an up-to-date cat page exists. +This can be meaningful if the cat page was formatted for a screen +with a different number of columns, or if the preformatted page +is corrupted. +.TP +.B \-\^d +Don't actually display the man pages, but do print gobs of debugging +information. +.TP +.B \-\^D +Both display and print debugging info. +.TP +.B \-\^f +Equivalent to +.BR whatis . +.TP +.BR \-\^F " or " \-\-preformat +Format only - do not display. +.TP +.B \-\^h +Print a help message and exit. +.TP +.B \-\^k +Equivalent to +.BR apropos . +.TP +.B \-\^K +Search for the specified string in *all* man pages. Warning: this is +probably very slow! It helps to specify a section. +(Just to give a rough idea, on my machine this takes about a minute +per 500 man pages.) +.TP +.B \-\^m " system" +Specify an alternate set of man pages to search based on the system +name given. +.TP +.B \-\^p " string" +Specify the sequence of preprocessors to run before +.B nroff +or +.BR troff . +Not all installations will have a full set of preprocessors. +Some of the preprocessors and the letters used to designate them are: +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +This option overrides the +.B MANROFFSEQ +environment variable. +.TP +.B \-\^t +Use +.B @troff@ +to format the manual page, passing the output to +.B stdout. +The default output format of +.B @troff@ +is Postscript, refer to the manual page of +.B @troff@ +for ways to pick an alternate format. +.PP +Depending on the selected format and the availability of printing +devices, the output +may need to be passed through some filter or another before being +printed. +.TP +.B \-\^w \fRor\fP \-\-path +Don't actually display the man pages, but do print the location(s) of +the files that would be formatted or displayed. If no argument is given: +display (on stdout) the list of directories that is searched by +.B man +for man pages. If +.B manpath +is a link to man, then "manpath" is equivalent to "man --path". +.TP +.B \-\^W +Like \-\^w, but print file names one per line, without additional information. +This is useful in shell commands like +.ft CW +.B "man -aW man | xargs ls -l" +.ft + +.SH "CAT PAGES" +Man will try to save the formatted man pages, in order to save +formatting time the next time these pages are needed. +Traditionally, formatted versions of pages in DIR/manX are +saved in DIR/catX, but other mappings from man dir to cat dir +can be specified in +.BR @man_config_file@ . +No cat pages are saved when the required cat directory does not exist. +No cat pages are saved when they are formatted for a line length +different from 80. +No cat pages are saved when man.conf contains the line NOCACHE. +.PP +It is possible to make +.B man +suid to a user man. Then, if a cat directory +has owner man and mode 0755 (only writable by man), and the cat files +have owner man and mode 0644 or 0444 (only writable by man, or not +writable at all), no ordinary user can change the cat pages or put +other files in the cat directory. If +.B man +is not made suid, then a cat directory should have mode 0777 +if all users should be able to leave cat pages there. +.PP +The option +.B \-c +forces reformatting a page, even if a recent cat page exists. + +.SH "HTML PAGES" +Man will find HTML pages if they live in directories named as +'html' followed by a section extension. The last file extension is +expected to be ".html", thus a valid name for an HTML version of the +.BR ls (1) +man page would be +.IR /usr/share/man/htmlman1/ls.1.html . + +.SH "SEARCH PATH FOR MANUAL PAGES" +.B man +uses a sophisticated method of finding manual page files, based on the +invocation options and environment variables, the +.B @man_config_file@ +configuration file, and some built in conventions and heuristics. +.PP +First of all, when the +.I name +argument to +.B man +contains a slash +.RB ( / ), +.B man +assumes it is a file specification itself, +and there is no searching involved. +.PP +But in the normal case where +.I name +doesn't contain a slash, +.B man +searches a variety of directories for a file that could be a manual page +for the topic named. +.PP +If you specify the +.BI "-M " pathlist +option, +.I pathlist +is a colon-separated list of the directories that +.B man +searches. +.PP +If you don't specify +.B -M +but set the +.B MANPATH +environment variable, the value of that variable is the list of the +directories that +.B man +searches. +.PP +If you don't specify an explicit path list with +.B -M +or +.BR MANPATH , +.B man +develops its own path list based on the contents of the configuration +file +.BR @man_config_file@ . +The +.B MANPATH +statements in the configuration file identify particular directories to +include in the search path. +.PP +Furthermore, the +.B MANPATH_MAP +statements add to the search path depending on your command search path +(i.e. your +.B PATH +environment variable). For each directory that may be in the command +search path, a +.B MANPATH_MAP +statement specifies a directory that should be added to the search +path for manual page files. +.B man +looks at the +.B PATH +variable and adds the corresponding directories to the manual page +file search path. Thus, with the proper use of +.BR MANPATH_MAP , +when you issue the command +.BR "man xyz" , +you get a manual page for the program that would run if you issued the +command +.BR xyz . +.PP +In addition, for each directory in the command search path (we'll call +it a "command directory") for which you do +.I not +have a +.B MANPATH_MAP +statement, +.B man +automatically looks for a manual page directory "nearby" +namely as a subdirectory in the command directory itself or +in the parent directory of the command directory. +.PP +You can disable the automatic "nearby" searches by including a +.B NOAUTOPATH +statement in +.BR @man_config_file@ . +.PP +In each directory in the search path as described above, +.B man +searches for a file named +.IB topic . section\fR, +with an optional suffix on the section number and +possibly a compression suffix. +If it doesn't find such a file, it then looks in any subdirectories +named +.BI man N +or +.BI cat N +where +.I N +is the manual section number. +If the file is in a +.BI cat N +subdirectory, +.B man +assumes it is a formatted manual page file (cat page). Otherwise, +.B man +assumes it is unformatted. In either case, if the filename has a +known compression suffix (like +.BR .gz ), +.B man +assumes it is gzipped. +.PP +If you want to see where (or if) +.B man +would find the manual page for a particular topic, use the +.BR "--path " ( -w ) +option. + +.SH ENVIRONMENT +.TP +.B MANPATH +If +.B MANPATH +is set, +.B man +uses it as the path to search for manual page files. It overrides the +configuration file and the automatic search path, but is overridden by +the +.B -M +invocation option. See +.BR "SEARCH PATH FOR MANUAL PAGES" . +.TP +.B MANPL +If +.B MANPL +is set, its value is used as the display page length. +Otherwise, the entire man page will occupy one (long) page. +.TP +.B MANROFFSEQ +If +.B MANROFFSEQ +is set, its value is used to determine the set of preprocessors run +before running +.B nroff +or +.BR troff . +By default, pages are passed through +the tbl preprocessor before +.BR nroff . +.TP +.B MANSECT +If +.B MANSECT +is set, its value is used to determine which manual sections to search. +.TP +.B MANWIDTH +If +.B MANWIDTH +is set, its value is used as the width manpages should be displayed. +Otherwise the pages may be displayed over the whole width of your +screen. +.TP +.B MANPAGER +If +.B MANPAGER +is set, its value is used as the name of the program to use to display +the man page. If not, then +.B PAGER +is used. If that has no value either, +.B @pager@ +is used. +.TP +.B BROWSER +The name of a browser to use for displaying HTML manual pages. If +it is not set, @browser@ is used. +.TP +.B HTMLPAGER +The command to use for rendering HTML manual pages as text. If +it is not set, @htmlpager@ is used. +.TP +.B LANG +If +.B LANG +is set, its value defines the name of the subdirectory where man +first looks for man pages. Thus, the command `LANG=dk man 1 foo' +will cause man to look for the foo man page in .../dk/man1/foo.1, +and if it cannot find such a file, then in .../man1/foo.1, +where ... is a directory on the search path. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +The environment variables +.B NLSPATH +and +.B LC_MESSAGES +(or +.B LANG +when the latter does not exist) +play a role in locating the message catalog. +(But the English messages are compiled in, and for English no catalog +is required.) +Note that programs like +.BR col(1) +called by man also use e.g. LC_CTYPE. +.TP +.B PATH +.B PATH +helps determine the search path for manual page files. See +.BR "SEARCH PATH FOR MANUAL PAGES" . +.TP +.B SYSTEM +.B SYSTEM +is used to get the default alternate system name (for use +with the +.B \-m +option). +.SH BUGS +The +.B \-t +option only works if a troff-like program is installed. +.br +If you see blinking \e255 or instead of hyphens, +put `LESSCHARSET=latin1' in your environment. +.SH TIPS +If you add the line + + (global-set-key [(f1)] (lambda () (interactive) (manual-entry (current-word)))) + +to your +.IR .emacs +file, then hitting F1 will give you the man page for the library call +at the current cursor position. +.LP +To get a plain text version of a man page, without backspaces +and underscores, try + + # man foo | col -b > foo.mantxt +.SH AUTHOR +John W. Eaton was the original author of +.BR "man" . +Zeyd M. Ben-Halim released man 1.2, and Andries Brouwer followed up with +versions 1.3 thru 1.5p. +Federico Lucifredi is the current maintainer. +.SH "SEE ALSO" +apropos(1), whatis(1), less(1), groff(1), man.conf(5). diff --git a/man/en/whatis.1 b/man/en/whatis.1 new file mode 100644 index 0000000..3c331be --- /dev/null +++ b/man/en/whatis.1 @@ -0,0 +1,38 @@ +.\" +.\" Generated automatically from whatis.1.in by the +.\" configure script. +.\" +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH whatis 1 "September 19, 2005" +.LO 1 +.SH NAME +whatis \- search the whatis database for complete words. +.SH SYNOPSIS +.BI whatis +keyword ... +.SH DESCRIPTION +whatis searches a set of database files containing short descriptions +of system commands for keywords and displays the result on the +standard output. Only complete word matches are displayed. + +The whatis database is created using the command /usr/sbin/makewhatis. +.SH AUTHOR +John W. Eaton was the original author of +.BR "man" . +Zeyd M. Ben-Halim released man 1.2, and Andries Brouwer followed up with versions 1.3 thru 1.5p. +Federico Lucifredi is the current maintainer. +.SH "SEE ALSO" +apropos(1), man(1). diff --git a/man/en/whatis.man b/man/en/whatis.man new file mode 100644 index 0000000..7793394 --- /dev/null +++ b/man/en/whatis.man @@ -0,0 +1,34 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH whatis 1 "September 19, 2005" +.LO 1 +.SH NAME +whatis \- search the whatis database for complete words. +.SH SYNOPSIS +.BI whatis +keyword ... +.SH DESCRIPTION +whatis searches a set of database files containing short descriptions +of system commands for keywords and displays the result on the +standard output. Only complete word matches are displayed. + +The whatis database is created using the command @makewhatis@. +.SH AUTHOR +John W. Eaton was the original author of +.BR "man" . +Zeyd M. Ben-Halim released man 1.2, and Andries Brouwer followed up with versions 1.3 thru 1.5p. +Federico Lucifredi is the current maintainer. +.SH "SEE ALSO" +apropos(1), man(1). diff --git a/man/es.txt b/man/es.txt new file mode 100644 index 0000000..924ac1f --- /dev/null +++ b/man/es.txt @@ -0,0 +1 @@ +spanish diff --git a/man/es/README b/man/es/README new file mode 100644 index 0000000..70b2ef0 --- /dev/null +++ b/man/es/README @@ -0,0 +1,9 @@ +Man pages y msgs en castellano por Pablo Saratxaga +Inspiradas de las pginas portuguesas de Vitor Duarte + +Fecha: Fri May 24 02:43:10 MET DST 1996 + +Actualizacin de Benjamn Albiana + +Fecha: vie abr 14 13:21:11 CEST 2006 + diff --git a/man/es/apropos.man b/man/es/apropos.man new file mode 100644 index 0000000..16374a4 --- /dev/null +++ b/man/es/apropos.man @@ -0,0 +1,41 @@ +.\" +.\" Generated automatically from apropos.1.in by the +.\" configure script. +.\" +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" Traducido del portugus por Pablo Saratxaga +.\" +.\" Traduccin actualizada por Benjamn Albiana +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH apropos 1 "Septiembre 19 2005" +.LO 1 +.SH NOMBRE +apropos \- busca `cadenas' en la base de datos "whatis" +.SH SINOPSIS +.BI apropos +palabra_clave ... +.SH DESCRIPCIN +apropos busca el contenido de +.B palabra_clave, +en una base de datos que contiene breves descripciones de los comandos, +mostrando todas las descripciones donde encontra una referencia a la clave. +.SH AUTOR +John W. Eaton fue el autor original de +.BR "man" . +Zeyd M. Ben-Halim lanz man 1.2, y Andries Brouwer continu con +las versiones 1.3 a 1.5p. +Federico Lucifredi es el encargado actual. +.SH "VASE TAMBIN" +whatis(1), man(1). diff --git a/man/es/makewhatis.man b/man/es/makewhatis.man new file mode 100644 index 0000000..7486660 --- /dev/null +++ b/man/es/makewhatis.man @@ -0,0 +1,108 @@ +.\" Copyright (c) 1999 Ottavio G. Rizzo +.\" +.\" Traducido por Benjamn Albiana +.\" +.\" This is free documentation; 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 2 of +.\" the License, or (at your option) any later version. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +.\" USA. +.\" +.TH MAKEWHATIS 8 "Septiembre 19 2005" +.SH NOMBRE +makewhatis \- Crea la base de datos de whatis +.SH SINOPSIS +.BI "makewhatis [-u] [-v] [-w] [-s " secciones " ] [-c [" catpath "]] [" manpath "]" +.SH DESCRIPCIN +.B makewhatis +lee todas las pginas del manual contenidas en las +.IR secciones " de " manpath +dadas o de las pginas preformateadas contenidas en las +.IR secciones " de " catpath +dadas. +Por cada pgina, escribe una lnea en la base de datos de whatis; cada +lnea contiene el nombre de la pgina y una breve descripcin, +separadas por una guin. La descripcin se obtiene del contenido de +la seccin NOMBRE de la pgina del manual. +.LP +Ya que otros idiomas usan trminos diferentes para la seccin NOMBRE, +.B makewhatis +reconoce los trminos equivalentes en checo, italiano, finlands, francs, +alemn y espaol. +.LP +Si no se da el argumento +.I manpath +se asume por defecto +.I /usr/man +.SH OPCIONES +.TP +.B -u +Actualiza la base de datos con pginas nuevas. +.TP +.B -v +Salida prolija +.TP +.B -w +Usa la ruta de `man --path` +.TP +.BI -s " secciones " +Mira en las +.I secciones +de +.IR manpath " o " catpaht. +Si no existe la opcin, se asume el valor +.I \'1 2 3 4 5 6 7 8 9 n l\' +.TP +.BI -c " catpath" +Se exploran la pginas del manual preformateadas en +.I catpath +Si no se da el argumento, se asume que ser el primer directorio +existente entre +.IR /usr/man/preformat " y " /usr/man . +.SH EJEMPLOS +.PP +Para rehacer slo +.IR /usr/X11R6/man/whatis " y " /usr/local/man/whatis +.IP +makewhatis /usr/X11R6/man /usr/local/man +.PP +Para reconstruir todas las bases de datos, incluyendo las traducciones +al finlands, francs e italiano +.IP +LANGUAGE=fi:fr:it makewhatis -w +.SH FALLOS +.B makewhatis +puede que no maneje bien pginas del manual hechas con macros troff +no estndar, como las pginas de Tcl/Tk. +.PP +.B makewhatis +no funciona con traducciones preformateadas +.SH AUTOR +John W. Eaton fue el autor original de +.BR "man" . +Zeyd M. Ben-Halim lanz man 1.2, y Andries Brouwer continu con +las versiones 1.3 a 1.5p. +Federico Lucifredi es el encargado actual. +.SH TRADUCCIN +Benjamn Albiana, 2006 +.SH VASE TAMBIN +.BR apropos (1), +.BR man (1), +.BR whatis (1) + + + diff --git a/man/es/man.conf.man b/man/es/man.conf.man new file mode 100644 index 0000000..0ed0772 --- /dev/null +++ b/man/es/man.conf.man @@ -0,0 +1,55 @@ +.\" +.\" Generated automatically from man.conf.5.in by the +.\" configure script. +.\" +.\" @(#)man.conf +.\" Traducido del portugus por Pablo Saratxag +.\" +.\" Traduccin actualizada por Benjamn Albiana +.\" +.TH MAN.CONF 5 "Septiembre 19, 2005" +.SH NOMBRE +man.conf \- fichero de configuracin para el comando man +.SH DESCRIPCIN +.LP +Este fichero es leido por +.BR man (1) +y contiene: (a) informacin para obtener la ruta de bsqueda de las +pginas (manpath); (b) nombres completos +de varios programas como nroff, eqn, tbl, etc. usados por man; (c) una lista +de descompresores de ficheros con determinadas extensiones. Se puede indicar +un fichero alternativo con +.LP +.RS +man -C fich_config ... +.RE +.LP +Los nombres de comandos pueden ser indicados con opciones. +Las opciones tiles para nroff se pueden encontrar en grotty(1). +Por ejemplo, en vez de la lnea +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +se puede usar +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +para suprimir subrayados y carcteres en negrita. +.SH AUTOR +John W. Eaton fue el autor original de +.BR "man" . +Zeyd M. Ben-Halim lanz man 1.2, y Andries Brouwer continu con +las versiones 1.3 a 1.5p. +Federico Lucifredi es el encargado actual. +.SH VASE TAMBIN +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) e compress(1), gzip(1). + diff --git a/man/es/man.man b/man/es/man.man new file mode 100644 index 0000000..b16b55b --- /dev/null +++ b/man/es/man.man @@ -0,0 +1,240 @@ +.\" +.\" Generated automatically from man.1.in by the +.\" configure script. +.\" +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" Traducido del portugus por Pablo Saratxaga +.\" La seccin "pginas formatadas" ha sido tomada de la version francesa de +.\" esta pgina de manual, traducida por Ren Cougnenc. +.\" +.\" Traduccin actualizada por Benjamn Albiana +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" +.TH man 1 "Septiembre 19 2005" +.LO 1 +.SH NOMBRE +man \- da formato y muestra las pginas del manual en lnea +.br +manpath \- determina la ruta de bsqueda inicial +.SH SINPSIS +man [\-acdfhktw] [\-m sistema] [\-p cadena] [\-C fich_config] [\-M ruta] +[\-P paginador] [\-S lista_sec] [seccin] nombre ... +.SH DESCRIPCIN +.B man +da formato y muestra las pginas del manual en lnea. Esta versin reconoce +las variables de entorno (environment) +.B. MANPATH +y +.B (MAN)PAGER +(ver ms adelante). +Si se indica la +.I seccin +, +.B man +buscar nicamente en ella. +Es tambin posible indicar el orden de bsqueda en la secciones +y que preprocesamiento efectuar con los manuales, por medio de opciones en la +lnea de comando o con variables de entorno. +Si el +.I nombre +contiene el carcter `/' tratar primero un fichero con ese nombre, permitiendo +hacer +.B "man ./foo.5" +o tambin +.B "man /cd/foo/bar.1.gz" +para dar formato y ver un fichero en particular. +.SH OPCIONES +.TP +.B \-\^C " fich_config" +Indica el fichero de configuracin a usar; por defecto se usar +/etc/man.conf. (Ver man.conf(5).) +.TP +.B \-\^M " ruta" +Indica la lista de directorios donde buscar los manuales. +Sin esta opcin se utilizar la variable +.B MANPATH. +Si esta variable tampoco estuviera definida, se obtendr una lista +consultando /etc/man.conf. Un directorio vaco en MANPATH +representa la lista anterior. +.TP +.B \-\^P " paginador" +Indica que paginador/visualisador usar. Sin esta opcin tratar +de consultar la variable +.B PAGER. +Normalmente, man usar +.B /usr/bin/less -is. +.TP +.B \-\^S " lista_sec" +Da la lista de secciones (separadas por `:') donde buscar y en que +orden. Esta opcin tiene prioridad sobre la variable +.B MANSECT. +.TP +.B \-\^a +Normalmente man muestra el primer manual que encuentra. Esta opcin +le permite mostrar todas las pginas de manual encontradas para la entrada +.B nombre. +.TP +.B \-\^d +No muestra el manual, sino informacin para la depuracin de errores. +.TP +.B \-\^f +Equivalente a +.B whatis. +.TP +.B \-\^h +Muestra un breve mensaje de ayuda. +.TP +.B \-\^k +Equivalente a +.B apropos. +.TP +.B \-\^m " sistema" +Indica un conjunto de manuales diferentes aplicables al sistema indicado. +.TP +.B \-\^p " cadena" +Especifica una secuencia de preprocesadores a usar antes de nroff o +troff (los formateadores). Algunas instalaciones de Linux pueden no tener todos los +preprocesadores. Algunos preprocesadores y las letras a usar para +indicarlos son: +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +Esta opcin tiene proridad sobre la variable +.B MANROFFSEQ. +.TP +.B \-\^t +Usar +.B /usr/bin/groff -Tps -mandoc +para dar formato a las pginas de manual, efectundose la salida por +.B stdout +Puede ser necesario procesar la salida de este comando con otros filtros +para poder visualizarla o imprimirla. +.TP +.B \-\^w \fRo\fP \-\-path +No muestra las pginas de manual, sino la(s) localizacin(es) de los +ficheros que se hubieran formateado y mostrado, para la entrada de +.B nombre +indicado. Si no se da ninguna otra opcin muestra la lista de +directorios que seran recorrido por .B man +durante la bsqueda. Si +.B manpath +es un enlace a man, entonces "manpath" equivale a "man --path". +.B \-\^W +Como \-\^w, pero muestra los nombres de ficheros, uno por linea, sin ninguna +otra informacin. Muy til en comandos shell del estilo: +.ft CW +man -aW man | xargs ls -l +.ft +.SH "PGINAS FORMATEADAS" +Con el fin de ganar tiempo, +.B man +trata de guardar la pginas formateadas +en vez de interpretarlas cada vez que se las pide. +Tradicionalmente, las versiones formateadas de las pginas de REP/manX son +guardadas en REP/catX, pero se pueden indicar otras correspondencias +entre los directorios man y cat en el fichero /etc/man.conf. Si el +directorio \%cat\% correspondiente no existe, no se guardarn las +pginas formateadas. +Es posible hacer a +.B man +suid para un usuario man. En este caso, si un directorio cat pertenece +a man, y tiene el modo 0755 (nicamente man tiene permisos de escritura), +y los ficheros cat pertenecen tambin a man y tiene el modo 0644 0444 (slo +mana tiene permisos de escritura, o nadie los tiene), ningn usuario normal +podr cambiar las pginas formateadas o aadir ficheros al directorio +correspondiente. Si +.B man +no es suid, los directorios cat debern tener el modo 0777 para que todo +usuario pueda dejar el resultado de los formateos efectuados durante las +consutlas del manual. +.LP +La opcin -c fuerza el reformateo de una pgina, aunque ya exista un fichero +cat ms reciente que el fichero fuente. + +.SH ENTORNO +.TP +.B MANPATH +Si se ha definido +.B MANPATH +se usar su valor como lista de directorios (manpath) donde pueden estar +las entradas del manual. +.TP +.B MANROFFSEQ +Si se ha definido +.B MANROFFSEQ +su valor determinar los preprocesadores a aplicar +antes de nroff o troff. Normalmente, las pginas de manual, son +preprocesadas por tbl antes de nroff. +.TP +.B MANSECT +Si se ha definido +.B MANSECT +su valor indicar las secciones a recorrer. +.TP +.B PAGER +Si se ha definido +.B PAGER +su valor indicar el programa a usar para mostrar el manual. +Normalmente usar +.B /usr/bin/less -is. +.TP +.B LANG +Si se ha definido +.B LANG +su valor indicar el nombre del subdirectorio donde +.B man +comenzar la bsqueda de las pginas de manual. Por ejemplo, el comando +\%LANG=es man 1 pepe\% tendr como efecto de hacer una bsqueda de la pgina +pepe en .../es/man1/pepe.1, y si ese fichero no existe, +en .../man1/pepe.1, ( ... indica un directorio en la ruta de bsqueda). +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +Las variables de entorno +.B NLSPATH +y +.B LC_MESSAGES +(o +.B LANG +cuando LC_MESSAGES no existe) +juegan un papel en la localizacin del catlogo de mensajes. +Ntese que los programas como col(1) que son llamados por +.B man, +tambin utilizan LC_CTYPE. +.TP +.B PATH +.B PATH +se utiliza para la construccin de la ruta de bsqueda por omisin. +.TP +.B SYSTEM +.B SYSTEM +se emplea para obtener los sistemas alternativos por omisin (en vista del +uso de la opcin +.B \-m +). +.SH AUTOR +John W. Eaton fue el autor original de +.BR "man" . +Zeyd M. Ben-Halim lanz man 1.2, y Andries Brouwer continu con +las versiones 1.3 a 1.5p. +Federico Lucifredi es el encargado actual. +.SH "VASE TAMBIN" +apropos(1), whatis(1), less(1), groff(1). +.SH BUGS +.B \-t +solo funciona si existe un programa troff o equivalente. +.SH TRADUCCIN +Pablo Saratxaga, 1996. A partir de la pgina en portugus de +Vitor Duarte y la pgina en francs de Ren Cougnenc. + +Actualizacin de Benjamn Albiana, 2006. diff --git a/man/es/whatis.man b/man/es/whatis.man new file mode 100644 index 0000000..aadf696 --- /dev/null +++ b/man/es/whatis.man @@ -0,0 +1,43 @@ +.\" +.\" Generated automatically from whatis.1.in by the +.\" configure script. +.\" +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH whatis 1 "Septiembre 19 2005" +.LO 1 +.SH NOMBRE +whatis \- busca palabras en una base de datos propia +.SH SINOPSIS +.BI whatis +palabra_clave ... +.SH DESCRIPCIN +whatis busca el contenido de +.B palabra_clave, +en una base de datos que contiene breves descripciones de los comandos, +mostrando todas las descripciones que contienen una palabra idntica ( +una palabra completa). + +La base de datos de "whatis" se crea con el comando /usr/sbin/makewhatis +.SH AUTOR +John W. Eaton fue el autor original de +.BR "man" . +Zeyd M. Ben-Halim lanz man 1.2, y Andries Brouwer continu con +las versiones 1.3 a 1.5p. +Federico Lucifredi es el encargado actual. +.SH VASE TAMBIN +apropos(1), man(1). + + diff --git a/man/fi.txt b/man/fi.txt new file mode 100644 index 0000000..b864848 --- /dev/null +++ b/man/fi.txt @@ -0,0 +1 @@ +finnish diff --git a/man/fi/apropos.man b/man/fi/apropos.man new file mode 100644 index 0000000..fcca5be --- /dev/null +++ b/man/fi/apropos.man @@ -0,0 +1,26 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" Translated into Finnish by Raimo Koski +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH apropos 1 "Tammi 15, 1991" +.LO 1 +.SH NIMI +apropos \- etsi whatis-tietokannasta merkkijonoja +.SH YLEISKATSAUS +.BI apropos +avainsana ... +.SH KUVAUS +apropos etsii avainsanoja tietokannoista, joissa on lyhyet kuvaukset jrjestelmn komennoista ja nytt tulokset vakiotulosteessa. +.SH "KATSO MYS" +whatis(1), man(1). diff --git a/man/fi/man.conf.man b/man/fi/man.conf.man new file mode 100644 index 0000000..b00e824 --- /dev/null +++ b/man/fi/man.conf.man @@ -0,0 +1,39 @@ +.\" @(#)man.conf +.\" Translated into Finnish by Raimo Koski +.TH MAN.CONF 5 "30 Maaliskuu 1994" +.SH NIMI +man.conf \- man-ohjelman konfigurointitiedot +.SH KUVAUS +.LP +Tmn tiedoston lukee +.BR man (1) +ja siin on (a) tiedot, miten man:n hakupolku muodostetaan, +(b) tydet nimet polkuineen ohjelmielle, kuten nroff, eqn, tbl jne. joita man kytt +ja (c) lista purkuohjelmista, joilla annetun tiedostoptteen tiedostot voidaan purkaa. +Vaihtoehtoinen versio tst tiedostosta voidaan ottaa kyttn komennolla +.LP +.RS +man -C private_man.conf ... +.RE +.LP +Komentojen nimille voidaan antaa optioita. Kyttkelpoiset optiot nroff-ohjelmalle lytyvt sivulta grotty(1). +Esimerkiksi oletusrivin +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +sijasta voidaan mritell +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +jotta alle- ja yliviivaus estetn. +.SH "KATSO MYS" +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) and compress(1), gzip(1). diff --git a/man/fi/man.man b/man/fi/man.man new file mode 100644 index 0000000..a8417e4 --- /dev/null +++ b/man/fi/man.man @@ -0,0 +1,286 @@ +.\" From rkoski@pp.weppi.fi Sun Jun 28 12:50:44 1998 +.\" +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" Translated into Finnish by Teppo Kankaanp (photon@clinet.fi) +.\" Proofread by Raimo Koski (rkoski@pp.weppi.fi) +.\" Reconstructed man.man from man.1 - aeb +.\" +.\" TERM man_page man-sivu Nin se oli sotin sivuillakin.. +.\" TERM manual_page ohjesivu +.\" TERM section osasto Osasto kuvaa melko hyvin manin luonnetta +.\" TERM pager nytinohjelma Tulee ihan IBM ja sen nyttimet mieleen... +.\" TERM debugging_info,debugging_information debuggaustiedot +.\" TERM preprocessor esiksittelyohjelma,esiksittelij Mik olisi parempi? +.\" TERM message_catalog viestikirjasto +.\" TERM search_path hakupolku +.\" TERM owner_mode kyttoikeudet +.\" TERM suid suid +.\" TERM arguments parametrit +.\" +.TH MAN 1 "4. Keskuuta 1998" "Linux" "Kyttjn sovellusohjelmat" +.LO 1 +.SH NIMI +man \- muotoile ja nyt on-line -ohjesivuja +.br +manpath \- mrit kyttjn hakupolku man-sivuihin +.SH "YLEISKATSAUS" +man [\-acdfhkKtwW] [\-m jrjestelm] [\-p merkkijono] [\-C konfiguraatiotiedosto] [\-M polku] +[\-P selausohjelma] [\-S sektiolista] [sektio] nimi ... +.SH KUVAUS +.B man +muotoilee ja nytt on-line -ohjesivuja. Tm versio tuntee +ympristmuuttujat +.B MANPATH +ja +.BR "(MAN)PAGER" , +joten sinulla voi olla oma(t) kokoelmasi man-sivuja ja voit valita mink tahansa +ohjelman nyttmn muotoillut sivut. Jos +.I sektio +on annettu, +.B man +etsii sivuja vain siit sektiosta. +Voit mys mritell, miss jrjestyksess sektiot lpikydn +sivuja haettaessa ja mink esiksittelyohjelmien lpi lhdetiedostot +ajetaan, joko komentorivioptioiden tai ympristmuuttujien avulla. +Jos +.I nimi +sislt / -merkin, yritetn se ensin ksitell tiedostonimen, +joten voit kirjoittaa +.B "man ./foo.5" +tai vaikkapa +.B "man /cd/foo/bar.1.gz\fR.\fP" +.SH OPTIOT +.TP +.B \-\^C " config_file" +Mrittele kytettv man.conf -tiedosto. Oletus on +.BR @man_config_file@ . +(Katso +.BR man.conf (5).) +.TP +.B \-\^M " polku" +Mrittele hakemistolista, joista man-sivuja etsitn. +Jos optiota ei kytet, katsotaan lista ympristmuuttujasta +.BR MANPATH . +Jos tllaista ympristmuuttujaa ei lydy, oletuslista haetaan +tiedostosta +.BR @man_config_file@ . +Jos +.B MANPATH +sislt tyhjn merkkijonon, kytetn mys tllin oletuslistaa. +.TP +.B \-\^P " pager" +Mrittele, mill ohjelmalla sivuja katsotaan. +Tm optio kumoaa +.BR MANPAGER "-ympristmuuttujan" +vaikutuksen, joka taas lytyessn kumoaa +.BR PAGER "-ympristmuuttujan" +vaikutuksen. Oletuksena +.B man +kytt komentoa +.BR @pager@ . +.TP +.B \-\^S " sektiolista" +Sektiolista on kaksoispisteill eroteltu lista sektioista, jotka +kydn lpi sivua haettaessa. Tm optio kumoaa +.BR MANSECT "-ympristmuuttujan" +vaikutuksen. +.TP +.B \-\^a +Oletuksena +.B man +lopettaa toimintansa nytettyn ensimmisen lytmns +man-sivun. Tt optiota kyttmll +.B man +pakotetaan nyttmn +.I kaikki +tsmvt man-sivut. +.TP +.B \-\^c +Uudelleenmuotoile lhteen oleva man-sivu, vaikka pivitetty cat-sivu +lytyisi. Tm voi olla kytnnllist, jos cat-sivu muotoiltiin +nytlle, jolle mahtuu eri mr kirjaimia. +.TP +.B \-\^d +l nyt itse man-sivua, vaan vain debuggaustiedot. +.TP +.B \-\^D +Nyt sek sivu ett debuggaustiedot. +.TP +.B \-\^f +Vastaa komentoa +.BR whatis . +.TP +.B \-\^h +Nyt vain pieni ohje ohjelman kytst. +.TP +.B \-\^k +Vastaa komentoa +.BR apropos . +.TP +.B \-\^K +Etsi mritelty merkkijonoa *kaikista* man-sivuista. Varoitus: +tm on todennkisesti hyvin hidasta! Sektion mrittely auttaa. +(Omalla koneellani etsint kest minuutin 500 man-sivua kohden) +.TP +.B \-\^m " jrjestelm" +Mrittele etsittvksi vaihtoehtoinen kokoelma man-sivuja, +pohjautuen annettuun jrjestelmnimeen. +.TP +.B \-\^p " merkkijono" +Mrittele esiksittelijiden lista, jotka ajetaan ennen +.BR nroff ":ia" +tai +.BR troff ":ia." +Kaikkiin jrjestelmiin ei ole asennettu kaikkia esiksittelyohjelmia. +Jotkin nist ja niit vastaavista kirjaimista ovat +eqn (e), grap (g), pic (p), tbl (t), vgrind (v) ja refer (r). +Tm optio kumoaa +.BR MANROFFSEQ "-ympristmuuttujan" +vaikutuksen. +.TP +.B \-\^t +Kyt komentoa +.B @troff@ +man-sivun muotoiluun ja ohjaa tuloste +.BR vakiotulosteeseen . +Tm tuloste saatetaan joutua ohjaamaan jonkin filtterin lpi ennen +tulostamista. +.TP +.B \-\^w \fRtai\fP \-\-path +l nyt man-sivuja, mutta nyt sijainnit sivuille, jotka +muotoiltaisiin tai nytettisiin. Jos mitn parametria ei anneta, +tulostetaan (vakiotulosteeseen) lista hakemistoista, joista +.B man +etsisi sivuja. Jos +.B manpath +on linkitetty man-ohjelmaan, vastaa "manpath" samaa, kuin "man --path". +.TP +.B \-\^W +Kuten \-\^w, mutta tulosta jokainen tiedostonimi omalle rivilleen ilman +mitn listietoja. Tm on hydyllinen komennoissa, kuten +.ft CW +.B "man -aW man | xargs ls -l" +.ft + +.SH CAT-SIVUT +Man yritt tallentaa muotoillut man-sivut sstkseen +muotoiluun kuluneen ajan seuraavalla kerralla, kun nit +sivuja tarvitaan. Perinteisesti muotoillut sivut .../manX:st +on tallennettu .../catX:n (... on hakupolku), mutta +.BR @man_config_file@ ":issa" +voidaan st jokin muu hakemistosijoittelu. +Jos tarvittavaa cat-hakemistoa ei lydy, ei cat-sivuja tallenneta. +.PP +On mahdollista asettaa +.BR man "in" +suid:ksi kyttj man. Jos man omistaa cat-hakemiston, jonka +kyttoikeudet ovat 0755 (vain man-kyttjn +kirjoitettavissa) ja cat-tiedostojen kyttoikeudet ovat 0644 tai 0444 +(vain man-kyttjn +tai ei kenenkn kirjoitettavissa), ei tavallinen kyttj voi +muuttaa cat-sivuja tai laittaa muita tiedostoja cat-hakemistoon. +Jos +.BR man "ille" +ei ole mritelty suidia, silloin cat-hakemiston +kyttoikeuksien pitisi olla 0777, +jolloin jokainen kyttj voisi jtt cat-sivuja sinne. +.PP +Optio +.B \-c +pakottaa muotoilemaan sivun uudelleen, vaikka uusi cat-sivu lytyisikin. +.SH YMPRISTMUUTTUJAT +.TP +.B MANPATH +Jos +.B MANPATH +on asetettu, sen arvoa kytetn polkuna man-sivuja etsittess. +.TP +.B MANROFFSEQ +Jos +.B MANROFFSEQ +on asetettu, sen arvoa kytetn mrittelemn esiksittelijt, +jotka ajetaan ennen +.BR nroff "ia" +tai +.BR troff "ia." +Oletuksena sivut ajetaan +tbl(1)-esiksittelijn lpi ennen +.BR nroff "ia." +.TP +.B MANSECT +Jos +.B MANSECT +on asetettu, sen arvoa kytetn mrittelemn, mist sektioista +sivuja etsitn. +.TP +.B MANWIDTH +Jos +.B MANWIDTH +on asetettu, sen arvo kertoo leveyden, jolla sivut nytetn ruudulla. +Muuten sivut nytetn koko ruudun levyisin. +.TP +.B MANPAGER +Jos +.B MANPAGER +on asetettu, sen arvo kertoo ohjelman nimen, jota kytetn man-sivujen +esittmiseen. Muuten kytetn ympristmuuttujaa +.BR PAGER . +Jos sitkn ei ole asetettu, kytetn komentoa +.BR @pager@ . +.TP +.B LANG +Jos +.B LANG +on asetettu, sen arvo mrittelee alihakemiston nimen, mist +man etsii ensin sivuja. Niinp komento 'LANG=fi man 1 foo' +saa manin etsimn ensin sivua .../fi/man1/foo.1. +Jos tt ei lydy, etsii man sivua .../man1/foo.1. +Merkit ... tarkoittavat hakupolkua. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +Ympristmuuttujat +.B NLSPATH +ja +.B LC_MESSAGES +(tai +.BR LANG , +jos jlkimmist ei ole asetettu) kertovat kytettvn viestikirjaston. +(Englanninkieliset viestit on knnetty ohjelman sisn, +joten ne eivt tarvitse erillist viestikirjastoa.) +Huomaa, ett man saattaa kytt ohjelmia, kuten col(1), jotka +kyttvt mys esimerkiksi muuttujaa LC_CTYPE. +.TP +.B PATH +.BR PATH ":ia" +kytetn muodostamaan oletushakupolkua man-sivuille. +.TP +.B SYSTEM +.B SYSTEM "-ympristmuuttujaa" +kytetn vaihtoehtoisen jrjestelmn oletusnimeksi (optiota +.B \-m +kytettess). +.SH BUGIT +Optio +.B \-t +toimii vain, jos troffin kaltainen ohjelma on asennettu. +.br +Jos net tavuviivojen tilalla vilkkuvan \e255:n tai :n, +aseta ympristmuuttuja 'LESSCHARSET=latin1'. +.SH "KATSO MYS" +apropos(1) whatis(1) less(1) groff(1). + + diff --git a/man/fi/whatis.man b/man/fi/whatis.man new file mode 100644 index 0000000..449c845 --- /dev/null +++ b/man/fi/whatis.man @@ -0,0 +1,28 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" Translated into Finnish by Raimo Koski +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH whatis 1 "Tammikuun 5, 1991" +.LO 1 +.SH NIMI +whatis \- etsii whatis-tietokannasta kokonaisia sanoja. +.SH YLEISKATSAUS +.BI whatis +avainsana ... +.SH KUVAUS +whatis etsii avainsanoja tietokannoista, joissa on lyhyet kuvaukset jrjestelmn komennoista ja nytt tulokset vakiotulosteessa. Vain lytyneet kokonaiset sanat nytetn. + +Whatis-tietokanta luodaan komennolla @makewhatis@. +.SH "KATSO MYS" +apropos(1), man(1). diff --git a/man/fr.txt b/man/fr.txt new file mode 100644 index 0000000..4836cc2 --- /dev/null +++ b/man/fr.txt @@ -0,0 +1 @@ +french diff --git a/man/fr/apropos.man b/man/fr/apropos.man new file mode 100644 index 0000000..383de43 --- /dev/null +++ b/man/fr/apropos.man @@ -0,0 +1,47 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" Traduction franaise Ren Cougnenc - Mai 1995. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH APROPOS 1 "19 septembre 2005" "Manuel Linux" "Commandes utilisateur" +.LO 1 +.SH NOM +apropos \- recherche de chanes de caractres dans la base de donnes whatis +.SH SYNOPSIS +.BI apropos +mot-cl ... +.SH DESCRIPTION +apropos effectue une recherche de chanes de caractres dans un +ensemble de fichiers de donnes contenant de brves descriptions des +commandes systme, et affiche le rsultat sur la sortie standard. + +.SH AUTEUR +John W. Eaton est l'auteur historique de +.BR man . +Federico Lucifredi en assure aujourd'hui la maintenance. + +.SH "VOIR AUSSI" +.BR whatis (1), +.BR man (1). + +.SH TRADUCTION +.PP +Ce document est une traduction ralise par Ren Cougnenc en mai 1995 et mise + jour par Alain Portal le 7 novembre 2005. +.PP +L'quipe de traduction a fait le maximum pour raliser une adaptation +franaise de qualit. La version anglaise la plus jour de ce document est +toujours consultable via la commande\ : \ \fBLANG=en\ man\ 1\ apropos\fR\ . +N'hsitez pas signaler l'auteur ou au traducteur, selon le cas, toute +erreur dans cette page de manuel. + diff --git a/man/fr/makewhatis.man b/man/fr/makewhatis.man new file mode 100644 index 0000000..abd5981 --- /dev/null +++ b/man/fr/makewhatis.man @@ -0,0 +1,123 @@ +.\" Copyright (c) 1999 Ottavio G. Rizzo +.\" +.\" Traduction : Alain Portal le 1/6/2005 +.\" +.\" This is free documentation; 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 2 of +.\" the License, or (at your option) any later version. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +.\" USA. +.\" +.TH MAKEWHATIS 8 "19 septembre 2005" +.SH NOM +makewhatis \- Cre la base de donnes whatis +.SH SYNOPSIS +.BI "makewhatis [-u] [-v] [-w] [-s " sections " ] [-c [" catpath "]] [" manpath "]" +.SH DESCRIPTION +.B makewhatis +lit toutes les pages de manuels contenues dans les sections +.I sections +du rpertoire +. I manpath +ou les pages prformates contenues dans les sections +.I sections +du rpertoire +.IR catpath . +Pour chacune des pages, +.B makewhatis +crit une ligne dans la base de donnes whatis\ ; chaque ligne est constitue +du nom de la page de manuel et d'une courte description de celle-ci, spars +par un trait. La description est extraite du contenu de la section NAME de la +page de manuel. +.LP +Du fait que d'autres langues utilisent un terme diffrent pour la section NAME, +.B makewhatis +reconnat les termes quivalents en allemand, espagnol, finnois, franais, +italien et tchque. +.LP +Si aucun argument +.I manpath +n'est fourni, la valeur par dfaut est +.IR /usr/man . +.SH OPTIONS +.TP +.B -u +Mettre jour la base de donnes avec de nouvelles pages. +.TP +.B -v +Sortie bavarde. +.TP +.B -w +Utiliser le chemin de recherche +.I manpath +obtenu par la commande \ man --path\ . +.TP +.BI -s " sections" +Chercher dans les sections +.I sections +de +.IR manpath " ou " catpath . +Si cette option est absente, sa valeur est +.IR " " \' "1 2 3 4 5 6 7 8 9 n l"\' +.TP +.BI -c " catpath" +Les pages prformates de manuel situes dans +.I catpath +sont scrutes. Si l'argument n'est pas fourni, il est suppos tre le premier +des deux rpertoires existant entre +.IR /usr/man/preformat " et " /usr/man . +.SH EXEMPLES +.PP +Pour reconstruire seulement les bases de donnes +.IR /usr/X11R6/man/whatis " et " /usr/local/man/whatis +.IP +makewhatis /usr/X11R6/man /usr/local/man +.PP +Pour reconstruire toutes les bases de donnes en incluant les traductions +finnoise, franaise et italienne +.IP +LANGUAGE=fi:fr:it makewhatis -w +.SH BOGUES +.B makewhatis +peut ne pas trs bien grer les pages de manuels qui ont t crites avec +des macros troff non standard, comme les pages Tcl/Tk. +.PP +.B makewhatis +ne fonctionne pas avec les traductions prformates. + +.SH AUTEUR +John W. Eaton est l'auteur historique de +.BR man . +Federico Lucifredi en assure aujourd'hui la maintenance. + +.SH "VOIR AUSSI" +.BR apropos (1), +.BR man (1), +.BR whatis (1) + +.SH TRADUCTION +.PP +Ce document est une traduction ralise par Alain Portal + le 1er juin 2005 et mise jour +le 7 novembre 2005. +.PP +L'quipe de traduction a fait le maximum pour raliser une adaptation +franaise de qualit. La version anglaise la plus jour de ce document est +toujours consultable via la commande\ : \ \fBLANG=en\ man\ 8\ makewhatis\fR\ . +N'hsitez pas signaler l'auteur ou au traducteur, selon le cas, toute +erreur dans cette page de manuel. + diff --git a/man/fr/man.conf.man b/man/fr/man.conf.man new file mode 100644 index 0000000..49d9bbd --- /dev/null +++ b/man/fr/man.conf.man @@ -0,0 +1,77 @@ +.\" @(#)man.conf +.\" Traduction franaise Ren Cougnenc - Mai 1995 +.\" +.TH MAN.CONF 5 "19 septembre 2005" "Manuel Linux" "Commandes utilisateur" +.SH NOM +man.conf \- fichier de configuration de la commande man +.SH DESCRIPTION +.LP +Ce fichier est lu par +.BR man (1) +et contient\ : (a) des informations sur la manire de construire le +chemin de recherche des pages de manuel, (b) les chemins d'accs +complets de divers programmes de formatage tels nroff, eqn, tbl, etc. +utiliss par man, et (c) une liste des dcompacteurs employer pour +traiter les pages prformates selon l'extension de leur nom de +fichier. Il est possible de spcifier un autre fichier que celui-ci en +prcisant\ : +.LP +.RS +man -C man.conf_personnel ... +.RE +.LP +Les noms de commandes peuvent comporter des options. +Les options utiles pour nroff se trouvent dans grotty(1). +Par exemple, au lieu de la ligne par dfaut\ : +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +vous pouvez mettre\ : +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +afin de supprimer le soulignement et les caractres gras. + +Notez que l'option -Tlatin1 passe la commande groff est importante +pour nous autres, francophones\ ; associe un visualiseur et un +terminal supportant ce jeu de caractres (comme less et xterm), elle +permet de conserver nos prcieux accents dans les pages de manuel. +.SH FICHIERS +.I "@man_config_file@" +.SH AUTEUR +John W. Eaton est l'auteur historique de +.BR man . +Federico Lucifredi en assure aujourd'hui la maintenance. +.SH "VOIR AUSSI" +.BR col (1), +.BR (g)eqn (1), +.BR (g)pic (1), +.BR groff (1), +.BR grotty (1), +.BR (g)refer (1), +.BR (g)tbl (1), +.BR less (1), +.BR man (1) +et +.BR compress (1), +.BR gzip (1). + +.SH TRADUCTION +.PP +Ce document est une traduction ralise par Ren Cougnenc en mai 1995 et mise + jour par Alain Portal le 7 novembre 2005. +.PP +L'quipe de traduction a fait le maximum pour raliser une adaptation +franaise de qualit. La version anglaise la plus jour de ce document est +toujours consultable via la commande\ : \ \fBLANG=en\ man\ 5\ man.conf\fR\ . +N'hsitez pas signaler l'auteur ou au traducteur, selon le cas, toute +erreur dans cette page de manuel. + diff --git a/man/fr/man.man b/man/fr/man.man new file mode 100644 index 0000000..ad09529 --- /dev/null +++ b/man/fr/man.man @@ -0,0 +1,496 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" Traduction franaise Ren Cougnenc - Mai 1995 +.\" Mise jour importante Alain Portal le 2 juin 2005 +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" More changes - flc +.\" +.TH MAN 1 "19 septembre 2005" "Manuel Linux" "Commandes utilisateur" +.LO 1 +.SH NOM +man \- formate et affiche les pages du manuel en ligne +.SH SYNOPSIS +.B man +.RB [ \-acdfFhkKtwW ] +.RB [ --path ] +.RB [ \-m +.IR systme ] +.RB [ \-p +.IR chane ] +.RB [ \-C +.IR fichier_config ] +.RB [ \-M +.IR chemin ] +.RB [ \-P +.IR visualiseur ] +.RB [ \-B +.IR navigateur ] +.RB [ \-H +.IR visualiseur_html ] +.RB [ \-S +.IR liste_sections ] +.RI [ section ] +.I "nom ..." + +.SH DESCRIPTION +.B man +formate et affiche les pages du manuel en ligne. Si +.I section +est spcifie, +.B man +ne recherchera que dans cette section du manuel. +.I nom +est le nom de la page qui est gnralement le nom d'une commande, +d'une fonction ou d'un fichier. Toutefois, si +.I nom +contient une barre oblique +.RB " \ "/ \ , +il sera d'abord considr en tant que nom de fichier, vous pouvez donc faire\ : +.B "man ./toto.5" +ou mme +.B "man /truc/machin/bidule.1.gz\fR.\fP" +.PP +Voir plus loin pour une description sur la faon dont +.B man +cherche les fichiers pages de manuel. + +.SH OPTIONS +.TP +.B \-\^C " fichier_config" +Spcifie le fichier de configuration utiliser\ ; par dfaut il s'agit de +.BR @man_config_file@ . +(Voir +.BR man.conf (5).) +.TP +.B \-\^M " chemin" +Indique la liste des rpertoires dans lesquels la recherche des pages +sera effectue. Veuillez sparer les rpertoires par le symbole deux points +.RB " \ ": \ . +Une liste vide est quivalent ne pas spcifier l'option +.BR \-M . +Voir +.BR "CHEMIN DE RECHERCHE POUR LES PAGES DE MANUEL" . +.TP +.B \-\^P " visualiseur" +Indique le programme de visualisation des pages employer. +Cette option a priorit sur la variable d'environnement +.BR MANPAGER , +qui, son tour, a priorit sur la variable d'environnement +.BR PAGER . +Par dfaut, +.B man +utilisera +.B @pager@. +.TP +.B \-\^B +Spcifie quel navigateur utiliser pour les fichiers HTML. +Cette option supplante la variable d'environnement +.B BROWSER +Par dfaut, +.B man +utilise +.BR @browser@ . +.TP +.B \-\^H +Spcifie une commande qui produit un fichier texte partir du fichier HTML. +Cette option supplante la variable d'environnement +.B HTMLPAGER +Par dfaut, +.B man +utilise +.BR @htmlpager@ . +.TP +.B \-\^S " liste_sections" +Il s'agit d'une liste de sections, spares par le symbole deux points +.RB " \ ": \ , +dans lesquelles les pages seront recherches. Elle a priorit sur +la variable d'environnement +.B MANSECT. +.TP +.B \-\^a +Par dfaut, +.B man +s'arrte aprs avoir affich la premire page de +manuel trouve. Cette option permet de l'obliger afficher toutes +les pages correspondant la requte +.RB " \ "nom \ +de l'utilisateur, s'il y en a plusieurs, et pas seulement la premire trouve. +.TP +.B \-\^c +Reformater la page de manuel, mme si une version prformate jour +existe. Cela peut tre utile si cette dernire a t prvue pour un +cran de taille diffrente ou bien si elle est abme. +.TP +.B \-\^d +Ne pas afficher les pages de manuel, mais fournir une grande quantit +d'informations de dbogage. +.TP +.B \-\^D +Afficher la fois les pages de manuel et les informations de dbogage. +.TP +.B \-\^f +quivalent +.BR whatis . +.TP +.B \-\^h +Afficher un court message d'aide et quitter. +.TP +.B \-\^k +quivalent +.B apropos. +.TP +.B \-\^K +Chercher la chane spcifie dans *toutes* les pages de manuel. Attention\ : +cela peut tre trs long\ ! Et il peut tre utile de spcifier une section. +(Pour donner une vague ide, sur ma machine, il faut environ une minute +pour 500 pages de manuel.) +.TP +.B \-\^m " systme" +Demander l'utilisation d'un autre jeu de pages de manuel, en fonction +du nom de systme indiqu. +.TP +.B \-\^p " chane" +Spcifie la squence de prprocesseurs excuter avant +.B nroff +ou +.BR troff . +Selon votre installation de Linux, vous ne disposerez pas forcment +de tous les programmes possibles. Voici les plus courants et les lettres +qui les dsignent\ : +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +Cette option a priorit sur la variable d'environnement +.B MANROFFSEQ. +.TP +.B \-\^t +Utiliser +.B @troff@ +pour formater la page de manuel, la sortie se faisant sur +.B stdout. +La sortie de +.B @troff@ +peut ncessiter un passage par certains filtres avant de pouvoir +tre affiche ou imprime. +.TP +.B \-\^w \fRou\fP \-\-path +Ne pas afficher les pages de manuel, mais les emplacements des fichiers +qui auraient t formats ou affichs. Si aucun argument n'est prcis, +indique sur la sortie standard la liste des rpertoires dans lesquels +.B man +recherche les pages. Si +.B manpath +est un lien sur le programme man, alors \ manpath\ est quivalent + la commande \ man --path\ . +.TP +.B \-\^W +Comme \-\^w, mais affiche les noms de fichiers, un par ligne, sans aucune +autre information. Trs utile dans des commandes shell du genre\ : +.ft CW +.B man -aW man | xargs ls -l +.ft + +.SH "PAGES FORMATES" +Afin de gagner du temps, +.B man +tente de sauvegarder les pages formates +au lieu de les interprter chaque fois qu'elles sont demandes. +Traditionnellement, les versions formates des pages de REP/manX sont +enregistres dans REP/catX, mais d'autres correspondances entre les +rpertoires man et les rpertoires cat peuvent tre indiques dans +le fichier +.BR @man_config_file@ . +Aucune page formate n'est enregistre si le rpertoire \ cat\ correspondant +n'existe pas. +Aucune page formate n'est enregistre si elle est formate avec une longueur +de ligne diffrente de 80. +Aucune page formate n'est enregistre si le fichier +.B @man_config_file@ +contient la ligne NOCACHE. +.PP +Il est possible de rendre +.B man +suid utilisateur man. Dans ce cas, si un rpertoire \ cat\ appartient + man et a le mode 0755 (seul man peut l'crire), et que les fichiers +formats appartiennent eux aussi man et ont le mode 0644 ou 0444 (seul +man peut les crire, voire personne), aucun utilisateur normal ne pourra +modifier les pages formates ou mettre d'autre fichiers dans le rpertoire +correspondant. Si +.B man +n'est pas suid, les rpertoires cat devront avoir le mode 0777 afin +que tout utilisateur puisse y laisser le rsultat des formatages lors +des consultations du manuel. +.PP +L'option +.B \-c +force le reformatage d'une page, mme si un fichier cat +plus rcent que le fichier source existe. + +.SH "CHEMIN DE RECHERCHE POUR LES PAGES DE MANUEL" +.B man +utilise une mthode sophistique pour chercher les pages de manuels, +base sur l'invocation d'options et de variables d'environnement, +le fichier de configuration +.BR @man_config_file@ , +des heuristiques et conventions prdfinies. +.PP +En premier lieu, lorsque l'argument +.I nom +de +.B man +contient une barre oblique +.RB " \ "/ \ , +.B man +suppose qu'il s'agit d'un fichier et aucune recherche complexe n'est lance. +.PP +Mais dans la plupart des cas o +.I nom +ne contient pas de barre oblique, +.B man +recherche dans plusieurs rpertoires un fichier qui pourrait tre une page +de manuel pour le sujet nomm. +.PP +Si vous spcifiez l'option +.B \-M +.IR liste_chemins , +.I liste_chemins +est une liste de rpertoires, spars par le symbole deux points +.RB " \ ": \ , +dans lesquels +.B man +effectuera sa recherche. +.PP +Si vous ne spcifiez pas +.B -M +mais que vous positionniez la variable d'environnement +.BR MANPATH , +la valeur de cette variable est la liste des rpertoires dans lesquels +.B man +effectuera sa recherche. +.PP +Si vous ne spcifiez pas une liste de chemins explicite avec +.B -M +ou +.BR MANPATH , +.B man +dveloppe sa propre liste de chemins base sur le contenu du fichier de +configuration +.BR @man_config_file@ . +Les dclarations +.B MANPATH +dans le fichier de configuration identifient des rpertoires particuliers + inclure dans le chemin de recherche. +.PP +Qui plus est, les dclarations +.B MANPATH_MAP +compltent le chemin de recherche en fonction du chemin de recherche de vos +commandes (autrement dit, de votre variable d'environnement +.BR PATH ). +La dclaration +.B MANPATH_MAP +indique, pour chacun des rpertoires pouvant se trouver dans le chemin de +recherche des commandes, un rpertoire qui devrait tre ajout au chemin de +recherche des pages de manuel. +.B man +scrute la variable +.B PATH +et ajoute au chemin de recherche des pages de manuel les rpertoires +correspondants. Ainsi, avec une utilisation correcte de +.BR MANPATH_MAP , +lorsque vous tapez la commande +.BR "man xyz" , +vous obtenez la page de manuel du programme que vous lanceriez si vous +tapiez la commande +.BR xyz . +.PP +De plus, pour chacun des rpertoires situs dans le chemin de recherche des +commandes (nous l'appellerons \ rpertoire commandes\ ) pour lequel vous +.IR n "'avez " pas +d'instruction +.BR MANPATH_MAP , +.B man +cherchera automatiquement un rpertoire de pages de manuel proximit, + savoir un sous-rpertoire du \ rpertoire commandes\ lui-mme ou dans +le rpertoire parent du \ rpertoire commandes\ . +.PP +Vous pouvez dsactiver la recherche automatique de proximit en incluant +l'instruction +.B NOAUTOPATH +dans le fichier de configuration +.BR @man_config_file@ . +.PP +Dans chaque rpertoire du chemin de recherche dcrit plus haut, +.B man +cherche un fichier nomm +.IB sujet . section\fR, +avec un suffixe optionnel sur le numro de section et un possible suffixe +de compression. S'il ne peut trouver un tel fichier, il regarde alors dans +tous les sous-rpertoires nomms +.BI man N +ou +.BI cat N +o +.I N +est le numro de la section du manuel. Si le fichier se trouve dans +le sous-rpertoire +.B cat +.IR N , +.B man +suppose qu'il s'agit d'une page de manuel formate (page cat). Autrement, +.B man +suppose qu'elle n'est pas formate. Dans tous les cas, si le nom de +fichier comporte une extension indiquant une compression connue (comme +.BR .gz ), +.B man +suppose que le fichier est gzipp. +.PP +Si vous vouloir savoir o (ou si) +.B man +peut trouver une page de manuel sur un sujet particulier, utilisez l'option +.BR "--path " ( -w ). + +.SH ENVIRONNEMENT +.TP +.B MANPATH +Si la variable +.B MANPATH +est positionne, +.B man +utilisera sa valeur comme chemin de recherche des pages de manuel. +Cette variable est prioritaire sur le fichier de configuration et le chemin +de recherche automatique, mais cde cette priorit si l'option +.B -M +est utilise. Voir +.BR "CHEMIN DE RECHERCHE POUR LES PAGES DE MANUEL" . +.TP +.B MANPL +Si la variable +.B MANPL +est positionne, sa valeur servira dfinir la longueur de l'affichage de la +page. Autrement, la page entire est affiche sur une seule et longue page. +.TP +.B MANROFFSEQ +Si +.B MANROFFSEQ +est positionne, sa valeur servira dterminer le jeu de prprocesseurs + excuter avant de lancer +.B nroff +ou +.BR troff . +Par dfaut, les pages sont passes dans le processeur de tableaux avant +.BR nroff . +.TP +.B MANSECT +Si +.B MANSECT +est positionne, sa valeur dterminera les sections du manuel dans +lesquelles les pages seront recherches. +.TP +.B MANWIDTH +Si +.B MANWIDTH +est positionne, sa valeur servira dfinir la largeur de l'affichage de la +page. Autrement, la page sera affiche sur toute la largeur de l'cran. +.TP +.B MANPAGER +Si +.B MANPAGER +est positionne, sa valeur sera considre comme le nom du programme + utiliser pour visualiser la page de manuel. Dans le cas contraire, +.B PAGER +sera utilise. Si aucune des deux variables n'est positionne, +.B @pager@ +sera utilis. +.TP +.B LANG +Si +.B LANG +est positionne, sa valeur dfinira le nom du sous-rpertoire o +.B man +commencera la recherche des pages de manuel. Ainsi, la commande +\ LANG=fr man 1 toto\ aura pour effet de faire rechercher la page +toto dans .../fr/man1/toto.1, et si ce fichier n'existe pas, +dans .../man1/toto.1, o ... est un rpertoire du chemin de recherche. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +Les variables d'environnement +.B NLSPATH +et +.B LC_MESSAGES +(ou +.B LANG +lorsque la dernire n'existe pas) +jouent un rle dans la localisation du catalogue de messages. +(Mais les messages anglais sont inclus dans le programme la compilation, +aucun catalogue n'est donc ncessaire pour un affichage dans la langue de +Shakespeare.) +Notez que les programmes comme +.BR col (1) +qui sont appels par +.BR man , +utilisent galement LC_CTYPE. +.TP +.B PATH +.B PATH +est utilise pour la construction du chemin de recherche par dfaut. Voir +.BR "CHEMIN DE RECHERCHE POUR LES PAGES DE MANUEL" . +.TP +.B SYSTEM +.B SYSTEM +est employe pour obtenir le nom du systme alternatif par dfaut (en vue de +l'utilisation de l'option +.B \-m +). +.SH BOGUES +L'option +.B \-t +ne fonctionne que si un programme \ troff-like\ est install. +.br +Si vous voyez clignoter \e255 ou au lieu de traits d'union, +mettez \ LESSCHARSET=latin1\ dans votre environnement. +.SH ASTUCES +Si vous ajoutez la ligne + + (global-set-key [(f1)] (lambda () (interactive) (manual-entry (current-word)))) + + votre fichier +.IR .emacs , +vous obtiendrez la page de manuel de l'appel de la bibliothque situ la +position courante du curseur lorsque vous presserez la touche F1. +.LP +Pour obtenir une version texte seul d'une page de manuel, sans retour arrire +ni caractre de soulignement, essayez + + # man foo | col -b > foo.mantxt + +.SH AUTEUR +John W. Eaton est l'auteur historique de +.BR man . +Federico Lucifredi en assure aujourd'hui la maintenance. +.SH "VOIR AUSSI" +.BR apropos (1), +.BR whatis (1), +.BR less (1), +.BR groff (1), +.BR man.conf (5). +.SH TRADUCTION +.PP +Ce document est une traduction ralise par Ren Cougnenc en mai 1995 et mise + jour par Alain Portal le 7 novembre 2005. +.PP +L'quipe de traduction a fait le maximum pour raliser une adaptation +franaise de qualit. La version anglaise la plus jour de ce document est +toujours consultable via la commande\ : \ \fBLANG=en\ man\ 1\ man\fR\ . +N'hsitez pas signaler l'auteur ou au traducteur, selon le cas, toute +erreur dans cette page de manuel. + diff --git a/man/fr/whatis.man b/man/fr/whatis.man new file mode 100644 index 0000000..ed6d897 --- /dev/null +++ b/man/fr/whatis.man @@ -0,0 +1,49 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" Traduction franaise Ren Cougnenc - Mai 1995. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH WHATIS 1 "19 septembre 2005" "Manuel Linux" "Commandes utilisateur" +.LO 1 +.SH NOM +whatis \- recherche de noms complets dans la base de donnes whatis. +.SH SYNOPSIS +.BI whatis +mot-cl ... +.SH DESCRIPTION +whatis effectue une recherche de mots-cls dans un ensemble de +fichiers de donnes contenant de brves descriptions des commandes +systme, et affiche le rsultat sur la sortie standard. Seules les +entres contenant le mot-cl complet sont affiches. +.LP +La base de donnes whatis est ralise et mise jour par la commande +@makewhatis@. + +.SH AUTEUR +John W. Eaton est l'auteur historique de +.BR man . +Federico Lucifredi en assure aujourd'hui la maintenance. +.SH "VOIR AUSSI" +.BR apropos (1), +.BR man (1). + +.SH TRADUCTION +.PP +Ce document est une traduction ralise par Ren Cougnenc en mai 1995 et mise + jour par Alain Portal le 7 novembre 2005. +.PP +L'quipe de traduction a fait le maximum pour raliser une adaptation +franaise de qualit. La version anglaise la plus jour de ce document est +toujours consultable via la commande\ : \ \fBLANG=en\ man\ 1\ whatis\fR\ . +N'hsitez pas signaler l'auteur ou au traducteur, selon le cas, toute +erreur dans cette page de manuel. diff --git a/man/hr.txt b/man/hr.txt new file mode 100644 index 0000000..6db2627 --- /dev/null +++ b/man/hr.txt @@ -0,0 +1 @@ +croatian diff --git a/man/hr/apropos.man b/man/hr/apropos.man new file mode 100644 index 0000000..f1ca427 --- /dev/null +++ b/man/hr/apropos.man @@ -0,0 +1,31 @@ +.\" Man stranica za apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" Moete distribuirati pod uvjetima GNU Ope javne licence kako je +.\" odreeno u datoteci README koja dolazi s distribucijom mana 1.0. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" 9. studenog 1998. preveo Matej Vela , META. +.TH apropos 1 "15. sijenja 1991." +.SH IME +apropos \- trai niz u whatis bazi podataka +.SH SAETAK +.BI apropos kljuna_rije +... +.SH OPIS +.B apropos +trai kljune rijei u skupu baza podataka koje sadre kratke +opise naredbi sustava i prikazuje rezultate na standardnom izlazu. +.SH "TAKOER POGLEDAJTE" +.BR whatis (1), +.BR man (1). diff --git a/man/hr/man.conf.man b/man/hr/man.conf.man new file mode 100644 index 0000000..c450f58 --- /dev/null +++ b/man/hr/man.conf.man @@ -0,0 +1,56 @@ +.\" @(#)man.conf +.\" +.\" 9. studenog 1998. preveo Matej Vela , META. +.TH MAN.CONF 5 "30. oujka 1994." +.SH IME +man.conf \- konfiguracijski podaci za man +.SH OPIS +Ovu datoteku ita +.BR man (1), +a sadri +(a) informacije o izgradnji staze pretraivanja za man, +(b) pune staze i imena raznih programa kao to je +.BR nroff ", " eqn ", " tbl +itd. koje man koristi, te +(c) popis programa za dekomprimiranje datoteka s navedenim nastavcima. +Neka druga verzija ove datoteke moe se odrediti pomou +.LP +.RS +man -C osobni_man.conf ... +.RE +.LP +Imenima naredbi mogu se dodati opcije. +Opcije korisne za +.B nroff +mogu se nai u +.BR grotty (1). +Na primjer, umjesto predodreenog reda +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +moete napisati +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +kako biste iskljuili potcrtavanje i precrtavanje. +.SH "TAKOER POGLEDAJTE" +.BR col (1), +.BR (g)eqn (1), +.BR (g)pic (1), +.BR groff (1), +.BR grotty (1), +.BR (g)refer (1), +.BR (g)tbl (1), +.BR less (1), +.BR man (1), +te +.BR compress (1), +.BR gzip (1). diff --git a/man/hr/man.man b/man/hr/man.man new file mode 100644 index 0000000..be92d5c --- /dev/null +++ b/man/hr/man.man @@ -0,0 +1,280 @@ +.\" Man stranica za man (i bivi manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" Moete distribuirati pod uvjetima GNU Ope javne licence kako je +.\" odreeno u datoteci README koja dolazi s distribucijom mana 1.0. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Mnoge promjene -- aeb +.\" +.\" 9. studenog 1998. preveo Matej Vela , META. +.TH man 1 "2. rujna 1998." +.SH IME +man \- formatira i prikazuje raunalne man stranice +.br +manpath \- saznaje korisnikovu stazu pretraivanja za man stranice +.SH SAETAK +man [\-acdfhkKtwW] [\-m sustav] [\-p niz] [\-C konfiguracijska_datoteka] +[\-M staza] [\-P preglednik] [\-S popis_dijelova] [dio] ime ... +.SH OPIS +.B man +formatira i prikazuje raunalne man stranice. Ova verzija poznaje varijable +okruja +.B MANPATH +i +.BR (MAN)PAGER , +pa moete imati svoje vlastite skupove osobnih man stranica i odabrati +eljeni program za prikaz formatiranih stranica. Ako je naveden +.IR dio , +.B man +pretrauje samo taj dio man stranica. +Takoer moete preko opcija na naredbenom redu ili varijabli okruja +odrediti red po kojem se pretrauju dijelovi te preprocesore kojima se +obrauju izvorne datoteke. +Ako +.I ime +sadri /, prvo ga se iskuava kao ime datoteke, pa tako moete pokrenuti +``man ./foo.5'' ili ak ``man /cd/foo/bar.1.gz''. +.SH OPCIJE +.TP +.B \-\^C " konfiguracijska_datoteka" +Koristi drugi +.IR man.conf ; +predodreeni je +.BR @man_config_file@ . +(Pogledajte +.BR man.conf (5).) +.TP +.B \-\^M " staza" +.I staza +je popis direktorija u kojima se trae man stranice. +Ako takva opcija nije dana, koristi varijablu okruja +.BR MANPATH . +Ako takve varijable okruja nema, predodreeni popis se nalazi u +.BR @man_config_file@ . +Neispunjen dio u +.B MANPATH +odgovara predodreenom popisu. +.TP +.B \-\^P " preglednik" +Odreuje koriteni preglednik. +Ova opcija ima prednost nad varijablom okruja +.BR MANPAGER , +koja pak ima prednost nad varijablom +.BR PAGER . +.B man +predodreeno koristi +.BR @pager@ . +.TP +.B \-\^S " popis_dijelova" +.I popis_dijelova +je popis dvotokama razdvojenih dijelova man stranica koje se pretrauje. +Ova opcija ima prednost nad varijablom okruja +.BR MANSECT . +.TP +.B \-\^a +.B man +predodreeno izlazi nakon prikazivanja prve naene man stranice. Ova opcija +prisiljava +.B man +na prikaz svih man stranica ije je ime +.IR ime , +a ne samo prve. +.TP +.B \-\^c +Ponovno formatira izvornu man stranicu, ak i kada postoji svjea cat +stranica. Ovo ima smisla ako je cat stranica formatirana za drukiju irinu +zaslona ili ako je preformatirana stranica pokvarena. +.TP +.B \-\^d +U stvari ne prikazuje man stranice, ali zato ispisuje gomilu informacija za +otklanjanje greaka. +.TP +.B \-\^D +I prikazuje i ispisuje informacije za otklanjanje greaka. +.TP +.B \-\^f +Isto to i +.BR whatis . +.TP +.B \-\^h +Ispisuje poruku o koritenju od jednog reda i zavrava. +.TP +.B \-\^k +Isto to i +.BR apropos . +.TP +.B \-\^K +Navedeni niz trai u +.I svim +man stranicama. Upozorenje: ovo je vjerojatno vrlo sporo! Navoenje dijela +ubrzava stvari. +(Samo okvirno, na mom stroju ovo traje oko minutu na 500 man stranica.) +.TP +.B \-\^m " sustav" +Pretrauje se drugi skup man stranica na osnovu danog imena sustava. +.TP +.B \-\^p " niz" +.I niz +odreuje niz preprocesora koje treba pokrenuti prije pokretanja +.B nroff +odnosno +.BR troff . +Sve instalacije nemaju potpun skup preprocesora. Neki od preprocesora i +slova koja ih oznauju su: +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +Ova opcija ima prednost nad varijablom okruja +.BR MANROFFSEQ . +.TP +.B \-\^t +Za formatiranje man stranica koristi +.BR @troff@ , +aljui izlaz na standardni izlaz. Izlaz iz +.B @troff@ +moe prije samog tiskanja zahtijevati prolazak kroz neki filter. +.TP +.B \-\^w \fRili\fP \-\-path +U stvari ne prikazuje man stranice, ali zato ispisuje lokacije datoteka koje +bi se formatirale ili prikazale. Ako nije dan nijedan argument, prikazuje +(na standardnom izlazu) popis direktorija u kojima +.B man +trai man stranice. Ako je +.B manpath +veza na +.BR man , +onda ``manpath'' ima isti uinak kao ``man --path''. +.TP +.B \-\^W +Kao \-\^w, ali svako ime datoteke ispisuje u zasebnom redu, bez dodatnih +informacija. Ovo je korisno u naredbama ljuske kao to je +.ft CW +.B "man -aW man | xargs ls -l" +.ft +.SH "CAT STRANICE" +.B man +e pokuati snimiti formatirane man stranice kako bi utedio vrijeme +formatiranja slijedei put kada te man stranice budu potrebne. +Tradicionalno se formatirane verzije stranica iz +.I DIREKTORIJ/manX +snimaju u +.IR DIREKTORIJ/catX , +no druga mapiranja man direktorija u cat direktorije se mogu odrediti u +.BR @man_config_file@ . +Kada potrebni cat direktorij ne postoji, cat stranice se ne snimaju. +.PP +.B man +se moe suid-ati na korisnika man. Potom e, ako je vlasnik cat direktorija +man, uz dozvole 0755 (pisati moe samo man), a vlasnik cat datoteka man uz +dozvole 0644 ili 0444 (pisati moe samo man, odnosno nitko ne moe pisati), +nijedan obini korisnik ne moe mijenjati cat stranice ili stavljati druge +datoteke u cat direktorij. Ako +.B man +nije suid-an, cat direktorij bi trebao imati dozvole 0777 +ako bi svi korisnici trebali moi tamo ostavljati cat stranice. +.PP +Opcija +.B \-c +prisiljava na ponovno formatiranje stranice, ak i ako postoji svjea cat +stranica. +.SH OKRUJE +.TP +.B MANPATH +Ako je +.B MANPATH +postavljenja, njena se vrijednost koristi kao staza za traenje man +stranica. +.TP +.B MANROFFSEQ +Ako je +.B MANROFFSEQ +postavljena, njena vrijednost odreuje skup preprocesora +koje treba pokrenuti prije pokretanja +.B nroff +odnosno +.BR troff . +Stranice predodreeno prolaze kroz preprocesor tablica prije nego prou +kroz +.BR nroff . +.TP +.B MANSECT +Ako je +.B MANSECT +postavljena, njena vrijednost odreuje dijelove man stranica +koje treba pretraiti. +.TP +.B MANWIDTH +Ako je +.B MANWIDTH +postavljena, njena se vrijednost koristi kao irina u kojoj bi se man +stranice trebale prikazivati. Inae se stranice mogu prikazati preko cijele +irine vaeg zaslona. +.TP +.B MANPAGER +Ako je +.B MANPAGER +postavljena, njena se vrijednost koristi kao ime programa za prikaz man +stranice. Ako nije, koristi se +.BR PAGER . +Ako ni to nema vrijednosti, koristi se +.BR @pager@ . +.TP +.B LANG +Ako je +.B LANG +postavljena, njena vrijednost odreuje ime poddirektorija u kojem +.B man +najprije trai man stranice. Dakle, naredba `LANG=hr man 1 foo' +.B man +tjera na traenje man stranice foo u .../hr/man1/foo.1, a ako takvu datoteku +ne moe nai, u .../man1/foo.1, gdje ... oznaava direktorij u stazi +pretrage. +.TP +.B NLSPATH, LC_MESSAGES, LANG +Varijable okruja +.B NLSPATH +i +.B LC_MESSAGES +(odnosno +.B LANG +kada ova druga ne postoji) igraju ulogu u nalaenju kataloga poruka. +(No engleske su poruke ugraene i engleski katalog nije potreban.) +Primjetite da programi koje +.B man +pokree, kao to je +.BR col (1), +takoer mogu koristiti npr. +.BR LC_CTYPE . +.TP +.B PATH +.B PATH +se koristi u graenju predodreene staze traenja man stranica. +.TP +.B SYSTEM +.B SYSTEM +se koristi za odreivanje predodreenog imena drugog sustava (za koritenje +uz opciju +.BR \-m ). +.SH "TAKOER POGLEDAJTE" +.BR apropos (1), +.BR whatis (1), +.BR less (1), +.BR groff (1). +.SH GREKE +Opcija +.B \-t +radi samo ako je instaliran +.BR troff-olik +program. +.PP +Ako umjesto crtica vidite trepui \e255 ili , u okruje dodajte +`LESSCHARSET=latin1'. diff --git a/man/hr/whatis.man b/man/hr/whatis.man new file mode 100644 index 0000000..a19ea76 --- /dev/null +++ b/man/hr/whatis.man @@ -0,0 +1,35 @@ +.\" Man stranica za whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" Moete distribuirati pod uvjetima GNU Ope javne licence kako je +.\" odreeno u datoteci README koja dolazi s distribucijom mana 1.0. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" 9. studenog 1998. preveo Matej Vela , META. +.TH whatis 1 "5. sijenja 1991." +.SH IME +whatis \- trai potpune rijei u whatis bazi podataka +.SH SAETAK +.BI whatis kljuna_rije +... +.SH OPIS +.B whatis +trai kljune rijei u skupu baza podataka koje sadre kratke opise naredbi +sustava i prikazuje rezultate na standardnom izlazu. +Prikazuju se samo rijei koje potpuno odgovaraju zadanima. +.PP +.B whatis +baza podataka se stvara naredbom @makewhatis@. +.SH "TAKOER POGLEDAJTE" +.BR apropos (1), +.BR man (1). diff --git a/man/it.txt b/man/it.txt new file mode 100644 index 0000000..a809ed0 --- /dev/null +++ b/man/it.txt @@ -0,0 +1 @@ +italian diff --git a/man/it/apropos.man b/man/it/apropos.man new file mode 100644 index 0000000..5f52a72 --- /dev/null +++ b/man/it/apropos.man @@ -0,0 +1,37 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" Traduzione italiana by Michele Dalla Silvestra - dalla@maya.dei.unipd.it +.\" Luglio 1996 +.\" Aggiornamento alla versione 1.6d di Giulio Daprel +.\" Agosto 2006 +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH apropos 1 "19 settembre 2005" +.LO 1 +.SH NOME +apropos \- ricerca stringhe nel database di whatis +.SH SINTASSI +.BI apropos +parola ... +.SH DESCRIZIONE +apropos ricerca una parola chiave in database contenenti brevi +descrizioni dei comandi di sistema e mostra i risultati sullo +standard output. +.SH AUTORE +John W. Eaton l'autore originale di +.BR "man" . +Zeyd M. Ben-Halim ha rilasciato man 1.2, e Andries Brouwer le versioni da +1.3 a 1.5p. +Federico Lucifredi il maintainer attuale. +.SH "VEDERE ANCHE" +whatis(1), man(1). \ No newline at end of file diff --git a/man/it/makewhatis.man b/man/it/makewhatis.man new file mode 100644 index 0000000..84d9450 --- /dev/null +++ b/man/it/makewhatis.man @@ -0,0 +1,103 @@ +.\" $Id: makewhatis.8,v 1.2 1999/05/24 14:40:26 otto Exp $ +.\" Copyright (c) 1999 Ottavio G. Rizzo +.\" Traduzione italiana del medesimo +.\" Aggiornamento alla versione 1.6d di Giulio Daprel +.\" Agosto 2006 +.\" +.\" This is free documentation; 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 2 of +.\" the License, or (at your option) any later version. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +.\" USA. +.\" +.TH MAKEWHATIS 8 "19 settembre 2005" +.SH NOME +makewhatis \- Crea il database di whatis +.SH SINTASSI +.BI "makewhatis [-u] [-v] [-w] [-s " sezioni " ] [-c [" percorso_cat "]] [" percorso_man "]" +.SH DESCRIZIONE +.B makewhatis +legge tutte le pagine di manuale contenute nelle date +.IR sezioni " in " percorso_man +o nelle corrispondenti +.IR sezioni " in " percorso_cat . +Scrive, per ogni pagina, una riga nel database di whatis: ognuna +consiste nel nome della pagina e in una breve descrizione separata da +un trattino. La descrizione viene estratta basandosi sul contenuto +della sezione NOME della pagina di manuale. +.LP +Poich lingue diverse usano nomi diversi per indicare la sezione NOME, +.B makewhatis +riconosce il termine equivalente in ceco, finlandese, francese, +inglese, italiano, spagnolo e tedesco. +.LP +Se non viene passato nessun argomento +.I percorso_man , +viene usato +.I /usr/man . +.SH OPZIONI +.TP +.B -u +Aggiorna il database con le nuove pagine. +.TP +.B -v +Output pi dettagliato. +.TP +.B -w +Ottiene il percorso da `man --path` +.TP +.BI -s " sezioni" +Guarda nelle +.I sezioni +di +.IR percorso_man " or " percorso_cat . +Se l'opzione manca, il suo valore viene posto a +.I \'1 2 3 4 5 6 7 8 9 n l\' +.TP +.BI -c " percorso_cat" +Vengono considerate le pagine preformattate che si trovano in +.I catpath . +Se l'argomento assente, viene usata la prima directory esistente fra +.I /usr/man/preformat " e " /usr/man . +.SH ESEMPI +.PP +Per ricostruire solo +.IR /usr/X11R6/man/whatis " e " /usr/local/man/whatis : +.IP +makewhatis /usr/X11R6/man /usr/local/man +.PP +Per ricostruire tutti i database, inclusi quelli con le traduzioni +finlandesi, francesi e italiane: +.IP +LANGUAGE=fi:fr:it makewhatis -w +.SH BACHI +.B makewhatis +potrebbe non aprezzare molto le pagine scritte con macro Troff non +standard, come quelle di Tcl/Tk. +.PP +.B makewhatis +non funziona con le traduzioni preformattate. +.SH AUTORE +John W. Eaton l'autore originale di +.BR "man" . +Zeyd M. Ben-Halim ha rilasciato man 1.2, e Andries Brouwer le versioni da +1.3 a 1.5p. +Federico Lucifredi il maintainer attuale. +.SH VEDERE ANCHE +.BR apropos (1), +.BR man (1), +.BR whatis (1) \ No newline at end of file diff --git a/man/it/man.conf.man b/man/it/man.conf.man new file mode 100644 index 0000000..c8b7d71 --- /dev/null +++ b/man/it/man.conf.man @@ -0,0 +1,55 @@ +.\" @(#)man.conf +.\" Traduzione italiana by Michele Dalla Silvestra - dalla@maya.dei.unipd.it +.\" Luglio 1996 +.\" Correzioni stilistiche di Daniele Giacomini +.\" Gennaio 1999 +.\" Aggiornamento alla versione 1.6d di Giulio Daprel +.\" Agosto 2006 +.\" +.TH MAN.CONF 5 "19 settembre 2005" +.SH NOME +man.conf \- configurazione di man +.SH DESCRIZIONE +.LP +Questo file letto da +.BR man (1) +e contiene (a) informazioni su come costruire il percorso di ricerca per +man, (b) percorso completo per vari programmi tipo nroff, eqn, tbl ecc. +usati da man, e (c) una lista con programmi di dearchiviazione per file con una +data estensione. Una versione alternativa di questo file pu essere +specificata con: +.LP +.RS +man -C private_man.conf ... +.RE +.LP +I nomi dei comandi possono essere forniti con opzioni. +Opzioni utili a nroff possono essere trovate in grotty(1). +Per esempio, invece della riga predefinita: +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +si potrebbe scrivere: +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +per eliminare la sottolineatura e la sovrascrittura. +.SH FILE +.I "@man_config_file@" +.SH AUTORE +John W. Eaton l'autore originale di +.BR "man" . +Zeyd M. Ben-Halim ha rilasciato man 1.2, e Andries Brouwer le versioni da +1.3 a 1.5p. +Federico Lucifredi il maintainer attuale. +.SH "VEDERE ANCHE" +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) and compress(1), gzip(1). diff --git a/man/it/man.man b/man/it/man.man new file mode 100644 index 0000000..4a1ab57 --- /dev/null +++ b/man/it/man.man @@ -0,0 +1,504 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" More changes - flc +.\" +.\" Traduzione italiana by Michele Dalla Silvestra - dalla@maya.dei.unipd.it +.\" Luglio 1996 +.\" Correzioni stilistiche di Daniele Giacomini +.\" Gennaio 1999 +.\" Aggiornamento a 1.5g di Ottavio Rizzo +.\" Aggiornamento alla versione 1.6d di Giulio Daprel +.\" Agosto 2006 +.\" +.TH man 1 "19 settembre 2005" +.LO 1 +.SH NOME +man \- formatta e mostra le pagine di manuale +.SH SINTASSI +.B man +.RB [ \-acdfFhkKtwW ] +.RB [ --path ] +.RB [ \-m +.IR sistema ] +.RB [ \-p +.IR stringa ] +.RB [ \-C +.IR config_file ] +.RB [ \-M +.IR lista_percorsi ] +.RB [ \-P +.IR impaginatore ] +.RB [ \-B +.IR browser ] +.RB [ \-H +.IR impaginatorehtml ] +.RB [ \-S +.IR lista_sezione ] +.RI [ sezione ] +.I "nome ..." + +.SH DESCRIZIONE +.B man +formatta e mostra le pagine di manuale. Se si specifica +.IR sezione +.B man +cerca solo in quella sezione del manuale. +.I nome +normalmente il nome della pagina di manuale, che tipicamente il nome +di un comando, funzione, o file. +Tuttavia, se +.I name +contiene uno slash +.RB ( / ) +allora +.B man +lo interpreta come la specificazione di un file, quindi si pu fare +.B "man ./foo.5" +o anche +.B "man /cd/foo/bar.1.gz\fR.\fP" +.PP +Vedere pi avanti per una descrizione di dove +.B man +cerca i file delle pagine di manuale. + +.SH OPZIONI +.TP +.B \-\^C " file_configurazione" +Specifica il file di configurazione da usare; il valore predefinito +.BR @man_config_file@ +(vedere +.BR man.conf (5)). +.TP +.B \-\^M " percorso" +Specifica la lista di directory in cui cercare le pagine di manuale. +Separare le directory con caratteri ":". Una lista vuota come non +specificare +.B \-M +vedere +.BR "PERCORSO DI RICERCA DELLE PAGINE DI MANUALE" . +.TP +.B \-\^P " impaginatore" +Specifica il programma di impaginazione da usare. +Questa opzione sovrascrive la variabile d'ambiente +.BR MANPAGER , +che sovrascrive a sua volta la variabile +.BR PAGER +Per default, +.B man +usa +.BR "@pager@" . +.TP +.B \-\^B +Specifica quale browser usare con i file HTML. +Questa opzione sovrascrive la variabile d'ambiente +.B BROWSER +Per default +.B man +usa +.BR @browser@ , +.TP +.B \-\^H +Specifica un comando che riproduce i file HTML come testo. +Questa opzione sovrascrive la variabile d'ambiente +.B HTMLPAGER +Per default, +.B man +usa +.BR @htmlpager@ , +.TP +.B \-\^S " lista_sezione" +Lista una lista di sezioni di manuale in cui cercare, separate da ":". +Questa opzione sovrascrive la variabile d'ambiente +.B MANSECT . +.TP +.B \-\^a +Per default, +.B man +terminer dopo aver visualizzato la prima pagina di manuale che trova. +L'uso di questa opzione forza +.B man +a visualizzare tutte le pagine di manuale che corrispondono a +.B nome, +non solo la prima. +.TP +.B \-\^c +Riformatta la pagina di manuale sorgente, anche se esiste una pagina cat +aggiornata. Questo pu essere importante se la pagina cat stata +formattata per uno schermo con un numero di colonne diverso, o se la +pagina preformattata danneggiata. +.TP +.B \-\^d +Non visualizza le pagine di manuale, ma stampa informazioni di debug. +.TP +.B \-\^D +Visualizza e stampa informazioni di debug. +.TP +.B \-\^f +Equivalente di +.BR whatis . +.TP +.BR \-\^F " or " \-\-preformat +Formatta solo - non visualizza. +.TP +.B \-\^h +stampa un messaggio di aiuto ed esce. +.TP +.B \-\^k +Equivalente di +.BR apropos . +.TP +.B \-\^K +Cerca la stringa specificata in *tutte* le pagine di manuale. Attenzione: +questo probabilmente molto lento! Pu essere di aiuto specificare una +sezione. +(Solo per dare un'idea di massima, sulla mia macchina impiega circa un +minuto per 500 pagine di manuale). +.TP +.B \-\^m " sistema" +Specifica un insieme alternativo di pagine di manuale in cui cercare +basato sul nome di sistema dato. +.TP +.B \-\^p " stringa" +specifica la sequenza dei preprocessori da eseguire prima di +.B nroff +o +.BR troff . +Non tutte le installazioni avranno un insieme completo di preprocessori. +Alcuni dei preprocessori, e le lettere usate per designarli, sono: +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +Questa opzione sovrascrive la variabile d'ambiente +.B MANROFFSEQ . +.TP +.B \-\^t +Usa +.B @troff@ +per formattare la pagina di manuale, passando l'output a +.B stdout. +Il formato di output predefinito di +.B @troff@ + Postscript, fare riferimento alla pagina di manuale di +.B @troff@ +per vedere i modi per scegliere un formato alternativo. +.PP +Secondo il formato selezionato e la disponibilit di dispositivi di stampa +l'output deve passare attraverso alcuni filtri prima di essere stampato. +.TP +.B \-\^w \fRor\fP \-\-path +Non visualizza le pagine di manuale, ma stampa la locazione(i) dei file +che verrebbero formattati o visualizzati. Se non viene dato alcun +argomento visualizza (sullo standard output) l'elenco delle directory in +cui +.B man +cerca le pagine di manuale. Se +.B manpath + un collegamento a man, allora "manpath" equivalente a "man --path". +.TP +.B \-\^W +Come \-\^w, ma stampa i nomi di file uno per linea, senza informazioni +aggiuntive. Questo utile in comandi shell come +.ft CW +.B "man -aW man | xargs ls -l" +.ft + +.SH "PAGINE CAT" +Man cercher di salvare le pagine formattate, allo scopo di risparmiare +tempo di formattazione la prossima volta che queste pagine saranno +necessarie. Tradizionalmente le versioni formattate delle pagine in +DIR/manX sono salvate in DIR/catX, ma possono essere specificati +altri percorsi da man dir a cat dir in +.BR @man_config_file@ . +Non viene salvata alcuna pagina cat quando la directory cat richiesta non +esiste. +Le pagine cat non vengono salvate quando sono formattate per una lunghezza +della linea diversa da 80. +Le pagine cat non vengono salvate quando man.conf contiene la linea NOCACHE. +.PP +E' possibile fare un suid di +.B man +a un utente man. In questo caso se una directory di cat ha come proprietario +man e permessi 0755 (scrivibile solo da man), e i file cat hanno +proprietario man e permessi 0644 o 0444 (scrivibili solo da man, o non +scrivibili del tutto), nessun utente ordinario pu cambiare le pagine cat +o mettere altri file nella directory di cat. Se su +.B man +non viene fatto un suid, allora una directory cat deve avere permessi 0777 +se tutti gli utenti devono poter lasciare l le pagine cat. +.PP +L'opzione +.B \-c +forza la riformattazione di una pagina, anche se esiste una pagina cat +recente. + +.SH "PAGINE HTML" +Man trover le pagine HTML se esse vivono in directory con nome +'html' seguita da una sezione. L'ultima estensione del +file deve essere ".html", quindi un nome valido per una versione HTML +della pagina di manuale di +.BR ls (1) +sarebbe +.IR /usr/share/man/htmlman1/ls.1.html . + +.SH "PERCORSO DI RICERCA DELLE PAGINE DI MANUALE" +.B man +usa un metodo sofisticato per trovare i file delle pagine di manuale, +basato su opzioni di invocazione e variabili d'ambiente, il file di +configurazione +.B @man_config_file@ +e alcune convenzioni e metodi euristici inclusi. +.PP +Prima di tutto, quando l'argomento +.I nome +di +.B man +contiene uno slash +.RB ( / ), +.B man +assume che si tratti di una specificazione di file, +e non viene fatta alcuna ricerca. +.PP +Ma nel caso normale in cui +.I nome +non contenga uno slash, +.B man +cerca in una variet di directory un file che possa essere una pagina di +manuale per il nome dato. +.PP +Se si specifica l'opzione +.BI "-M " lista_percorsi +.I lista_percorsi + un elenco di directory, separate da ":", nelle quali +.B man +cerca. +.PP +Se non si specifica +.B -M +ma si imposta la variabile d'ambiente +.B MANPATH +il valore di tale variabile la lista di directory nelle quali +.B man +cerca. +.PP +Se non si specifica una lista percorsi esplicita con +.B -M +o +.BR MANPATH , +.B man +sviluppa la propria lista percorsi basata sul contenuto del file di +configurazione +.BR @man_config_file@ . +La dichiarazione +.B MANPATH +nel file di configurazione identifica particolari direcotry da includere +nel percorso di ricerca. +.PP +Inoltre le dichiarazioni +.B MANPATH_MAP +fanno aggiunte al percorso di ricerca in funzione del proprio percorso di +ricerca dei comandi +(es. la propria variabile d'ambiente +.B PATH +). Per ciascuna directory che potrebbe essere nel percorso di ricerca del +comando, una dichiarazione +.B MANPATH_MAP +specifica una directory che deve essere aggiunta al percorso di ricerca +dei file delle pagine di manuale. +.B man +guarda nella variabile +.B PATH +e aggiunge le directory corrispondenti al percorso di ricerca del file +della pagina di manuale. +Quindi, con l'uso appropriato di +.BR MANPATH_MAP , +quando si d il comando +.BR "man xyz" , +si ottiene una pagina di manuale per il programma che verrebbe eseguito se +si desse il comando +.BR xyz . +.PP +In aggiunta, per ciascuna directory nel percorso di ricerca del comando +(lo chiameremo una "directory del comando") per il quale +.I non +si ha una dichiarazione +.B MANPATH_MAP , +.B man +automaticamente cerca una directory di pagina di manuale "vicina", come +una sottodirectory nella stessa directory del comando o nella directory di +livello superiore della directory del comando. +.PP +Si possono disabilitare le ricerche automatiche "vicine" includendo una +direttiva +.B NOAUTOPATH +in +.BR @man_config_file@ . +.PP +In ciascuna directory nel percorso di ricerca come descritto in precedenza, +.B man +cerca un file chiamato +.IB argomento . sezione\fR, +con un suffisso opzionale sul numero di sezione e +magari un suffisso di compressione. +Se non trova un tale file, esso allora cerca in tutte le sottodirectory +che si chiamano +.BI man N +o +.BI cat N +dove +.I N + il numero di sezione del manuale. +Se il file in una sottodirectory +.BI cat N +.B man +suppone che sia un file di una pagina di manuale formattata (pagina cat). +Altrimenti +.B man +suppone che non sia formattato. In ogni caso se il nome del file ha un +suffisso di compressione noto (come +.BR .gz ), +.B man +suppone che sia compresso con gzip. +.PP +Se si vuole vedere dove (o se) +.B man +troverebbe la pagina di manuale per un particolare soggetto usare l'opzione +.BR "--path " ( -w ) . + +.SH AMBIENTE +.TP +.B MANPATH +Se +.B MANPATH + impostata, +.B man +la usa come percorso di ricerca dei file delle pagine di manuale. Esso +sovrascrive il file di configurazione e il percorso di ricerca automatico, +ma sovrascritta a sua volta dall'opzione di invocazione +.B -M +Vedere +.BR "PERCORSO DI RICERCA DELLE PAGINE DI MANUALE" . +.TP +.B MANPL +Se +.B MANPL + impostata il suo valore usato come lunghezza della pagina da +visualizzare. Altrimenti l'intera pagina di manuale occuper una (lunga) +pagina. +.TP +.B MANROFFSEQ +Se +.B MANROFFSEQ + impostata il suo valore usato per determinare l'insieme di +preprocessori da eseguire prima di eseguire +.B nroff +o +.BR troff . +Per default le pagine vengono passate attraverso il preprocessore +tbl prima di +.BR nroff . +.TP +.B MANSECT +Se +.B MANSECT + impostata il suo valore usato per determinare in quali sezioni del +manuale cercare. +.TP +.B MANWIDTH +Se +.B MANWIDTH + impostata il suo valore usato come ampiezza a cui le pagine di manuale +devono essere visualizzate. Altrimenti le pagine possono essere +visualizzate sull'intera larghezza del proprio schermo. +.TP +.B MANPAGER +Se +.B MANPAGER + impostata il suo valore usato come nome del programma da usare per +visualizzare la pagina di manuale. Se non lo allora viene usata +.B PAGER . +Se nemmeno questa impostata, viene usato +.B @pager@ . +.TP +.B BROWSER +Il nome di un browser da usare per visualizzare le pagine di manuale HTML. +Se non impostata viene usato @browser@ . +.TP +.B HTMLPAGER +Il comando da usare per riprodurre le pagine di manuale HTML come testo. +Se non impostata viene usato @htmlpager@ . +.TP +.B LANG +Se +.B LANG + impostata il suo valore definisce il nome della sottodirectory ove man +fa la prima ricerca delle pagine di manuale. Perci il comando `LANG=dk man 1 foo' +far s che man cerchi la pagina di manuale foo in .../dk/man1/foo.1, +e, se non pu trovare tale file, allora in .../man1/foo.1, +dove ... una directory nel percorso di ricerca. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +Le variabili d'ambiente +.B NLSPATH +e +.B LC_MESSAGES +(o +.B LANG +quando l'ultima non esiste) +giocano un ruolo nel localizzare il catalogo messaggi. +(Ma i messaggi in inglese sono compilati nel programma, e per l'inglese +non necessario alcun catalogo). +Notare che anche programmi come +.BR col(1) +chiamati da man usano ad es. LC_CTYPE. +.TP +.B PATH +.B PATH +aiuta a determinare il percorso di ricerca dei file delle pagine di +manuale. Vedere +.BR "PERCORSO DI RICERCA DELLE PAGINE DI MANUALE" . +.TP +.B SYSTEM +.B SYSTEM + usata per ottenere il nome di sistema alternativo (da usare con l' +opzione +.B \-m +). +.SH BACHI +L'opzione +.B \-t +funziona solo se installato un programma tipo troff. +.br +Se si vedono lampeggiare \e255 o invece dei trattini, +mettere `LESSCHARSET=latin1' nel proprio ambiente. +.SH SUGGERIMENTI +Se si aggiunge la linea + + (global-set-key [(f1)] (lambda () (interactive) (manual-entry (current-word)))) + +al proprio file +.IR .emacs , +allora la pressione di F1 dar la pagina di manuale della chiamata di +libreria alla posizione corrente del cursore. +.LP +Per ottenere una versione testuale di una pagina di manuale, senza +backspace e sottolineature, provare + + # man foo | col -b > foo.mantxt +.SH AUTORE +John W. Eaton l'autore originale di +.BR "man" . +Zeyd M. Ben-Halim ha rilasciato man 1.2, e Andries Brouwer le versioni da +1.3 a 1.5p. +Federico Lucifredi il maintainer attuale. +.SH VEDERE ANCHE +apropos(1), whatis(1), less(1), groff(1), man.conf(5). diff --git a/man/it/whatis.man b/man/it/whatis.man new file mode 100644 index 0000000..7c2380d --- /dev/null +++ b/man/it/whatis.man @@ -0,0 +1,39 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" Traduzione italiana by Michele Dalla Silvestra - dalla@maya.dei.unipd.it +.\" Luglio 1996 +.\" Aggiornamento alla versione 1.6d di Giulio Daprel +.\" Agosto 2006 +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH whatis 1 "19 settembre 2005" +.LO 1 +.SH NOME +whatis \- ricerca parole complete nel database di whatis. +.SH SINTASSI +.BI whatis +parola chiave ... +.SH DESCRIZIONE +whatis ricerca una parola chiave in database contenenti brevi +descrizioni dei comandi di sistema e mostra i risultati sullo standard +output. Solo le corrispondenze con parole intere sono mostrate. + +Il database whatis creato usando il comando @makewhatis@. +.SH AUTORE +John W. Eaton l'autore originale di +.BR "man" . +Zeyd M. Ben-Halim ha rilasciato man 1.2, e Andries Brouwer le versioni da +1.3 a 1.5p. +Federico Lucifredi il maintainer attuale. +.SH "VEDERE ANCHE" +apropos(1), man(1). diff --git a/man/ja.txt b/man/ja.txt new file mode 100644 index 0000000..01d5538 --- /dev/null +++ b/man/ja.txt @@ -0,0 +1 @@ +japanese diff --git a/man/ja/apropos.man b/man/ja/apropos.man new file mode 100644 index 0000000..881c9ed --- /dev/null +++ b/man/ja/apropos.man @@ -0,0 +1,34 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Japanese Version Copyright (c) 1996 Tanoshima Hidetohsi +.\" all rights reserved. +.\" Dec 31, 1996 Tanoshima Hidetoshi +.\" +.\" Modified Thu Jan 29 01:53:11 JST 1998 +.\" by HANATAKA Shinya +.\" +.TH apropos 1 "Jan 15, 1991" +.LO 1 +.SH ̾ +apropos \- whatis ǡ١ʸ򸡺롣 +.SH +.BI apropos +keyword ... +.SH +apropos ޥɤϡƥࡦޥɤδñʲ⤬ +ǡ١ե뤫饭ɤ򸡺 +η̤ɸϤɽ롣 +.SH "Ϣ" +whatis(1), man(1). diff --git a/man/ja/man.conf.man b/man/ja/man.conf.man new file mode 100644 index 0000000..1221fe5 --- /dev/null +++ b/man/ja/man.conf.man @@ -0,0 +1,47 @@ +.\" @(#)man.conf +.\" +.\" Japanese Version Copyright (c) 1997 HANATAKA Shinya +.\" all rights reserved. +.\" Translated Thu Jan 29 01:49:33 JST 1998 +.\" by HANATAKA Shinya +.\" +.TH MAN.CONF 5 "30 Mar 1994" +.SH ̾ +man.conf \- man ޥɤΤե +.SH +.LP +Υե +.BR man (1) +ޥɤɤ߹ޤ졢(a) man ΤḡѥɤΤäƹۤ뤫ξ +(b) nroff, eqn, tbl ʤɤΤ褦 man ˤäƻѤ뤤Ĥ +ץδʥѥ̾(c) եγĥҤȤŸˡʤɤ +ޤǤ롣Υե̤ΥСʲΤ褦 +ꤹ뤳ȤǤ롣 +.LP +.RS +man -C private_man.conf ... +.RE +.LP +ޥ̾ˤϥץդ뤳ȤǤ롣 +nroff ˴ؤƤʥץ grotty(1) ˸Ĥ뤳ȤǤ롣 +㤨СǥեȤ +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +Τ +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +Ƚ񤭹ळȤǤŤǤ뤳ȤǤ롣 +.SH Ϣ +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1), compress(1), gzip(1). + diff --git a/man/ja/man.man b/man/ja/man.man new file mode 100644 index 0000000..725981c --- /dev/null +++ b/man/ja/man.man @@ -0,0 +1,262 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" +.\" Japanese Version Copyright (c) 1996 Tanoshima Hidetohsi +.\" all rights reserved. +.\" Dec 31, 1996 Tanoshima Hidetoshi +.\" +.\" Modified Thu Jan 29 01:52:36 JST 1998 +.\" by HANATAKA Shinya +.\" +.TH man 1 "September 12, 1995" +.LO 1 +.SH ̾ +man \- 饤ޥ˥奢ڡɽ롣 +.br +manpath \- 桼ġΥޥ˥奢ڡθѥ롣 +.SH +man [\-adfhktwW] [\-m system] [\-p string] [\-C config_file] [\-M path] +[\-P pager] [\-S section_list] [section] name ... +.SH +.B man +ϥ饤󡦥ޥ˥奢롦ڡɽ롣ΥС + man ޥɤǤϴĶѿ MANPATH (MAN)PAGER Ǥ롣 +ˤꡢĿŪʥޥ˥奢ڡꤷꡢڡ +ɽץ򹥤٤롣 +.I section +ꤹȡ +.B man +ϥޥ˥奢ΤΥΤõޤޥɥ饤󡦥ץ +Ķѿǡ줾Υ򸡺䡢ե +ФƤɤʥץץåѤ뤫ꤷꤹ뤳ȤǤ롣 +.I name + / ޤޤƤȤ man ޥɤϤޤե̾Ȥư +ä +.B "man ./foo.5" +ޤ +.B "man /cd/foo/bar.1.gz\fR\fP" +ȤǤ롣 +.SH ץ +.TP +.B \-\^C " config_file" +Ѥ man.conf եꤹ롣ǥեȤ +.BR @man_config_file@ +(ȡ man.conf(5)) +.TP +.B \-\^M " path" +ޥ˥奢롦ڡõǥ쥯ȥΥꥹȤꤹ롣 +Υץꤷʤ硢Ķѿ +.B MANPATH +ȤδĶѿꤷʤȡ +.BR @man_config_file@ +˻ꤵ줿ǥեȤΥꥹȤȤ +MANPATH ζʸϥǥեȤΥꥹȤ̣롣 +.TP +.B \-\^P " pager" +Ѥڡ㡼ꤹ롣ǥեȤǤ man +.BR @pager@ +ȤΥץϴĶѿ +.B MANPAGER +ͥ褹롣δĶѿ +.B PAGER +ͥ褹롣ǥեȤǤ +.B man + +.BR @pager@ +Ѥ롣 +.TP +.B \-\^S " section_list" +ʬ줿ꥹȤǡޥ˥奢õ +ꤹ롣ΥץϴĶѿ +.B MANSECT +ͥ褵롣 +.TP +.B \-\^a +ǥեȤǤϡman ϸĤäǽΥޥ˥奢ڡɽ +Ƚλ롣ΥץȤȡman ϺǽˤߤĤä +ΤǤʤ +.B name +˥ޥå٤ƤΥڡɽ롣 +.TP +.B \-\^c +ǿ cat ΥڡäƤޥ˥奢ڡΥ +ʤΥץ cat ڡüȰä +ƤȤƤʤɤͭѤǤ롣 +.TP +.B \-\^d +ޥ˥奢롦ڡɽ̤ΥǥХåϤ롣 +.TP +.B \-\^D +ǥХåȥޥ˥奢롦ڡξɽ롣 +.TP +.B \-\^f +.B whatis +ޥɤƱ +.TP +.B \-\^h +1ԥإסåɽƽλ롣 +.TP +.B \-\^k +.B apropos +ޥɤƱ +.B \-\^K +ƤΡץޥ˥奢롦ڡꤷʸõٹ: +٤Τ ꤷɤ(ΥޥǤϡ +ܰ¤Ȥơ500 ڡ򸡺Τ 1ʬ֤롣) +.TP +.B \-\^m " system" +̤ΥƥΥޥ˥奢롦ڡ򸡺褦˻ꤹ롣 +.TP +.B \-\^p " string" +.B nroff + +.B troff +Τޤ˼¹Ԥץץåν֤ꤹ롣 +󥹥ȡξ֤ˤäƤϥե륻åȤ +ץץåѰդƤʤ⤷ʤ +ΥץץåȤؤʸϼΤȤꡧ +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r) +ΥץϴĶѿ +.B MANROFFSEQ +ͥ褵롣 +.TP +.B \-\^t +ޥ˥奢롦ڡ +.B @troff@ +Ȥ +.B stdout +˽Ϥ롣 +.B @troff@ +νϤϰޤˤʤ餫Υե륿ʤɤ̤ɬ +뤫⤷ʤ +.TP +.B \-\^w \fRor\fP \-\-path +ޥ˥奢ڡɽǤ˥եޥåȤޤɽ˻Ѥ +եΰ֤ɽ롣Ϳʤ +.B man +ޥ˥奢ڡ򸡺ǥ쥯ȥΥꥹȤ(ɸϤ)ɽ롣 +.B manpath + man ˥󥯤ƤȤ "manpath" "man --path" +Ʊˤʤ롣 +.TP +.B \-\^W +\-\^w ˻Ƥ뤬ե̾ɲþʤˣԣĤɽ롣 +ϥ +.ft CW +,B "man -aW man | xargs ls -l" +.ft +ʤɤȻȤΤǤ롣 + +.SH "CAT ڡ" +man ޥɤϤǤ줿ޥ˥奢ڡ򡢼ˤ +ڡɬפˤʤäȤ֤Τˡ¸褦 +Ȥ롣ŪˡDIR/manX Ѥߥޥ˥奢 DIR/catX +֤뤬man ǥ쥯ȥ꤫ cat ǥ쥯ȥؤ +¾Υޥåԥˡ +.BR @man_config_file@ +˻Ǥ롣 +cat ǥ쥯ȥ꤬ѰդƤʤä硢cat ڡϥ֤ʤ +.PP +man ޥɤ桼 man suid 뤳ȤǤ롣Τ + cat ǥ쥯ȥΥʡ man ĥ⡼ɤ 0755 (桼 man +񤭹߲)ǡcat եΥʡ man ĥ⡼ɤ 0644 ޤ +0444 (桼 man 񤭹߲ġޤϥ桼٤Ƥ񤭹Բ) +ΤȤ̤Υ桼 cat ڡѹ¾Υե cat ǥ +ȥ֤ꤹ뤳ȤǤʤʤ롣 man ޥɤ suid ƤʤС +٤ƤΥ桼 cat ڡ cat ǥ쥯ȥ֤褦ˡ +cat ǥ쥯ȥΥ⡼ɤ 0777 ˤɬפ롣 +.PP +cat ڡäȤƤ⡢ץ +.B \-c +ĤȶŪ˥ޥ˥奢ڡ롣 + +.SH Ķѿ +.TP +.B MANPATH +.B MANPATH +ꤹȡޥ˥奢롦ڡõȤΥѥȤ +.TP +.B MANROFFSEQ +.B MANROFFSEQ +ꤹȡnroff troff ˼¹Ԥץץå +ꤹΤˤͤȤǥեȤǤϥޥ˥奢ڡ +.B nroff +Τޤ˥ơ֥ѤΥץץå̤롣 +.TP +.B MANSECT +.B MANSECT +ꤹȡͤ򸵤ˤɤΥޥ˥奢롦õ롣 +.TP +.B MANWIDTH +.B MANWIDTH +ꤹȡͤɽޥ˥奢롦ڡȤƻѤ롣 +ꤷʤäˤϲ̤դޤǻѤ롣 +.TP +.B MANPAGER +.B MANPAGER +ꤹȡޥ˥奢롦ڡɽץȤƻѤ롣 +ꤷʤäˤϡ +.B PAGER +Ѥ롣ɤꤵƤʤˤ +.B @pager@ +Ȥ롣 +.TP +.B LANG +.B LANG +ꤹȡman ޥɤ̾Υ֥ǥ쥯ȥ꤫ǽ +ޥ˥奢롦ڡõ椨'LANG=dk man 1 foo' +ȥޥɥ饤󤫤ǤĤȡman ޥɤϤޤ .../dk/man1/foo.1 õ +Ĥʤ .../man1/foo.1 õ ... ϥѥ +Υǥ쥯ȥǤ롣 +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +Ķѿ +.B NLSPATH + +.B LC_MESSAGES +(ޤԤʤȤ +.B LANG +)ϥåΰ֤ꤹ롣 +(ѸΥåϥѥȤ߹ޤƤΤǡѸξ + ɬפʤ) +man ˸ƤӽФ col(1) Τ褦 +moץ Ȥ LC_CTYPE +ȤȤդ뤳ȡ +.TP +.B PATH +.B PATH +ϥޥ˥奢롦ڡΥǥեȤθѥιۤ˻Ȥ롣 +.TP +.B SYSTEM +.B SYSTEM +ϥǥեȤΥƥ̾Τ˻Ȥ롣 +( +.B \-m +ץȤȤ˻Ȥ) +.SH Ϣ +apropos(1), whatis(1), less(1), groff(1). +.SH Х +.B \-t +ץ troff 饤ʥץब󥹥ȡ뤵Ƥ +ΤͭǤ롣 +.br +⤷ϥեΤˡǤ \e255 ɽ줿ˤ +Ķѿ 'LESSCHARSET=latin1' ꤹɤ + +(: ܸѤˤ +'JLESSCHARSET=ja_JP.ujis' ޤ 'LESSCHARSET=ja_JP.ujis' +Ѥ뤿ˡˡǤбǤʤgroff Υץ +\-Tnippon ޤ \-Tascii Ѥ뤳ȡ) diff --git a/man/ja/whatis.man b/man/ja/whatis.man new file mode 100644 index 0000000..d2b27e6 --- /dev/null +++ b/man/ja/whatis.man @@ -0,0 +1,34 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Japanese Version Copyright (c) 1997 HANATAKA Shinya +.\" all rights reserved. +.\" Translated Thu Jan 29 01:52:06 JST 1998 +.\" by HANATAKA Shinya +.\" +.TH whatis 1 "Jan 5, 1991" +.LO 1 +.SH ̾ +whatis \- whatis ǡ١鴰ñ򸡺 +.SH +.BI whatis +keyword ... +.SH +whatis ϥƥΥޥɤ˴ؤȥɤޤǡ +١ν򸡺̤ɸϤɽ롣˥ޥåñ +Τߤɽ롣 + +whatis ǡ١ /usr/sbin/makewhatis ޥɤѤƺ롣 +.SH Ϣ +apropos(1), man(1). diff --git a/man/ko.txt b/man/ko.txt new file mode 100644 index 0000000..69c04c6 --- /dev/null +++ b/man/ko.txt @@ -0,0 +1 @@ +korean diff --git a/man/ko/apropos.man b/man/ko/apropos.man new file mode 100644 index 0000000..d34a72e --- /dev/null +++ b/man/ko/apropos.man @@ -0,0 +1,25 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH apropos 1 "Jan 15, 1991" +.LO 1 +.SH NAME +apropos \- whatis Ÿ̽ ڿ ˻Ѵ +.SH SYNOPSIS +.BI apropos +Ű ... +.SH DESCRIPTION +apropos ý Ű ϴ ̷ Ÿ̽ ˻Ͽ ǥ ش. +.SH "SEE ALSO" +whatis(1), man(1). diff --git a/man/ko/man.conf.man b/man/ko/man.conf.man new file mode 100644 index 0000000..b2f6a8b --- /dev/null +++ b/man/ko/man.conf.man @@ -0,0 +1,42 @@ +.\" @(#)man.conf +.TH MAN.CONF 5 "30 Mar 1994" +.SH ̸ +man.conf \- man ڷ +.SH +.LP + +.BR man (1) + о, (a) man ˻ , +(b) nroff, eqn, tbl man Ǵ α׷ + θ, (c) Ͽ ־ Ȯڸ Ǯ Ʈ ϰ +ִ. ϴ ó ִ. +.LP +.RS +man -C private_man.config ... +.RE +.LP + ̸ ɼǵ ִ. +nroff ɼ grotty(1) ã ִ. + , ⺻ +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP + +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP + ٰ ۾(ü) ϱ 𸥴. +.SH ׸ +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) compress(1), gzip(1). +.SH +輺 , 2000 5 5 + diff --git a/man/ko/man.man b/man/ko/man.man new file mode 100644 index 0000000..109781f --- /dev/null +++ b/man/ko/man.man @@ -0,0 +1,264 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" +.TH man 1 "September 2, 1995" +.LO 1 +.SH ̸ +man \- ¶ Ŵ ȭϰ ǥ +.br +manpath \- ˻ θ +.SH +man [\-acdfFhkKtwW] [\-m system] [\-p string] [\-C config_file] [\-M path] +[\-P pager] [\-S section_list] [section] name ... +.SH +.B man + ¶ Ŵ ȭϰ ǥѴ. + +.B MANPATH + +.B (MAN)PAGER +ȯ νѴ. ׷Ƿ ڽ ְ +ȭ ǥϱ ϴ α׷ ִ. +.I section + Ǹ, +.B man + ǿ Ŵ ã ش. ɼ̳ ȯ ؼ ˻ ҽ Ͽ ó⸦ ִ. + +.I name + / ϸ, ̰ ϸ óȴ. ׷ +.B "man ./foo.5" +Ȥ +.B "man /cd/foo/bar.1.gz" +ó ִ. +.SH ɼ +.TP +.B \-\^C " config_file" + man.conf ; ⺻ +.B @man_config_file@ +̴. +( +.BR man.conf (5) .) +.TP +.B \-\^M " path" + ˻ 丮 Ʈ Ѵ. + ɼ ־ , ȯ +.B MANPATH + Ѵ. ȯ ߰ ϸ +.B @man_config_file@ + ⺻ Ʈ Ѵ. +.B MANPATH + ⺻ Ʈ̴. +.TP +.B \-\^P " pager" + Ѵ. + ɼ +.B MANPAGER +ȯ 켱Ѵ. +environment variable, +.B PAGER + ٵ 켱Ѵ. ⺻ +.B man + +.BR @pager@ ̿Ѵ. +.TP +.B \-\^S " section_list" +˻ Ŵ Ʈ ݷ Ʈ. + ɼ +.B MANSECT +ȯ 켱Ѵ. +.TP +.B \-\^a +⺻ , +.B man + ù° ߰ߵ Ŵ ǥ Ѵ. + ɼ ϸ, +.B man + ù° Ӹ ƴ϶ +.B name + ´ Ŵ ǥѴ. +.TP +.B \-\^c +ֽ cat Ͽ ҽ ȭѴ. + cat ٸ Į ũ ° ȭǾų, +Ȥ, ȭ ջǸ ̰ ǹ̰ ִ. +.TP +.B \-\^d + ǥ ʰ,  ƮѴ. +.TP +.B \-\^D +ǥÿ Ѵ Ѵ. +.TP +.B \-\^f +.BR whatis + . +.TP +.BR \-\^F " or " \-\-preformat +ȭ ϰ ǥ ʴ´. +.TP +.B \-\^h + ޽ ϰ Ѵ. +.TP +.B \-\^k +.BR apropos + . +.TP +.B \-\^K +** ڿ ã´. : ſ ! + ϴ .(ü, 迡 500 ˻ϴµ +1 ɸ.) +.TP +.B \-\^m " system" +־ ý ̸ ؼ ˻ϱ ü Ѵ. +.TP +.B \-\^p " string" +.B nroff +or +.BR troff + տ ϴ ó ʸ Ѵ. + ġ ó ̴ +׵ ϱ Ǵ  õó : +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). + ɼ +.B MANROFFSEQ +ȯ 켱Ѵ. +.TP +.B \-\^t + ȭ +.B @troff@ + ϰ, +.B stdout + Ѵ. +.B @troff@ + μϱ ͸ ų ʿ䰡 𸥴. +.TP +.B \-\^w \fRor\fP \-\-path + ǥ ʰ, ȭ Ȥ ǥõ ġ Ѵ. + ڰ : +.B man + ˻ϴ 丮 Ʈ ǥ(ǥ ¿)Ѵ. + +.B manpath + man Ǿ , "manpath" "man --path" . +.TP +.B \-\^W +\-\^w , ߰ ࿡ ǥѴ. +̰ ɿ ϸ ϴ. +.ft CW +.B "man -aW man | xargs ls -l" +.ft + +.SH "CAT " +Man ȭ ʿϰ Ǿ ȭ +ð ̱ Ѵ. , DIR/manX ȭ +DIR/catX ȴ. man dir ٸ cat dir ϴ +.BR @man_config_file@ + ٸ ִ. +cat 丮 cat ʴ´. +.PP +.B man + man suid ִ. ׷, cat 丮 ڰ man + 0755( man Ⱑ), cat ڰ man 0644 Ȥ +0444( man Ⱑ, Ȥ Ұ), cat +ϰų, ٸ cat 丮 ΰų ϴ . +.B man + suid ƴϸ, cat cat 丮 ִ ó +cat 丮 带 0777 ؾ Ѵ. +.PP + ֱ cat ϴ +.B \-c + ϸ ȭѴ. + +.SH ȯ +.TP +.B MANPATH +.B MANPATH + Ǹ, ̰ Ŵ ˻ η Ѵ. +.TP +.B MANROFFSEQ +.B MANROFFSEQ + Ǹ, ̰ +.B nroff + +.BR troff + տ ϴ ó Ͽ Ѵ. +⺻ , +.BR nroff +տ ̺ ó⸦ Ų. +.TP +.B MANSECT +.B MANSECT + Ǹ, ̰ ˻ Ŵ Ѵ. +.TP +.B MANWIDTH +.B MANWIDTH + Ǹ, ̰ ǥϴ Ѵ. +׷ , ȭ ü ̻ ǥõ ִ. +.TP +.B MANPAGER +.B MANPAGER + Ǹ, ̰ ǥñ Ѵ. ٸ, +.B PAGER + ȴ. Ѵ +.B @pager@ + Ѵ. +.TP +.B LANG +.B LANG + Ǹ, ̰ man ù° ֱ +丮 ̸ Ѵ. , `LANG=dk man 1 foo' +.../dk/man1/foo.1 for ٷ ̰, + file ߰ߵ , .../man1/for.1 ã´. ... ˻ + 丮̴. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +ȯ +.B NLSPATH + +.B LC_MESSAGES +(Ǵ ڰ Ǿ +.B LANG +) ޽ īŻα ġ Ѵ. ( ޽ ϵɶ +ǰ,  īŻα״ ʿ ʴ.) +man ȣǴ col(1) α׷ LC_CTYPE ϴ ض. +.TP +.B PATH +.B PATH + ⺻ ˻ ȴ. +.TP +.B SYSTEM +.B SYSTEM + ⺻ ſ ý ̸ Ѵ. +( +.B \-m +ɼǰ Բ ) +.SH ׸ +apropos(1), whatis(1), less(1), groff(1). +.SH +.B \-t +ɼ troff α׷ ġǾ ִ 쿡 Ѵ. +.br + ſ \e255 Ȥ , +`LESSCHARSET=latin1' ȯ濡 ־. +.SH + (global-set-key [(f1)] (lambda () (interactive) (manual-entry (current-word)))) + + +.IR .emacs +Ͽ ߰ϸ, F1 Ŀ ġ ̺귯 ȣ + ̴. +.SH +輺 , 2000 5 5 + diff --git a/man/ko/whatis.man b/man/ko/whatis.man new file mode 100644 index 0000000..9b80c85 --- /dev/null +++ b/man/ko/whatis.man @@ -0,0 +1,29 @@ +.\" +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH whatis 1 "Jan 5, 1991" +.LO 1 +.SH NAME +whatis \- ܾ ϼŰ whatis Ÿ̽ ã´. +.SH SYNOPSIS +.BI whatis +Ű ... +.SH DESCRIPTION +whatis ý Ű ϴ Ÿ̽ ˻Ͽ ǥ ش. ܾ ġ 츸 ش. + +whatis Ÿ̽ @makewhatis@ ̿Ͽ +.SH "SEE ALSO" +apropos(1), man(1). + diff --git a/man/nl.txt b/man/nl.txt new file mode 100644 index 0000000..909c946 --- /dev/null +++ b/man/nl.txt @@ -0,0 +1 @@ +dutch diff --git a/man/nl/apropos.man b/man/nl/apropos.man new file mode 100644 index 0000000..0c225b7 --- /dev/null +++ b/man/nl/apropos.man @@ -0,0 +1,28 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH apropos 1 "Jan 15, 1991" +.LO 1 +.SH NAAM +apropos \- zoek een gegeven string in de whatis database +.SH SYNTAX +.BI apropos +string ... +.SH BESCHRIJVING +.B apropos +zoekt naar de opgegeven strings in een aantal database bestanden +die korte beschrijvingen van systeem\%commando's bevatten +en stuurt het resultaat naar standaard uitvoer. +.SH "ZIE OOK" +whatis(1), man(1). diff --git a/man/nl/man.conf.man b/man/nl/man.conf.man new file mode 100644 index 0000000..9fccc18 --- /dev/null +++ b/man/nl/man.conf.man @@ -0,0 +1,42 @@ +.\" @(#)man.conf +.TH MAN.CONF 5 "30 Mar 1994" +.SH NAAM +man.conf \- configuratie bestand voor man +.SH BESCHRIJVING +.LP +Dit bestand wordt door +.BR man (1) +gelezen, en bevat (a) informatie over hoe het zoekpad voor man +gemaakt moet worden, (b) volledige padnamen voor de benodigde +programma's, zoals nroff, eqn, tbl enz., en (c) een lijst +van decomprimeerprogramma's voor bestanden met een gegeven extensie. +Een prive versie van dit bestand kan gebruikt worden door +man de -C optie mee te geven: +.LP +.RS +man -C prive_man.conf ... +.RE +.LP +Aan de programmanamen kunnen opties worden meegegeven. +Nuttige opties om bij nroff te gebruiken kunnen in grotty(1) +gevonden worden. Bijvoorbeeld, in plaats van het gebruikelijke +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +kan men +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +schrijven, teneinde onderstrepingen en overprintingen weg te halen. +.SH "ZIE OOK" +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) en compress(1), gzip(1). + diff --git a/man/nl/man.man b/man/nl/man.man new file mode 100644 index 0000000..4dfafdb --- /dev/null +++ b/man/nl/man.man @@ -0,0 +1,259 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" +.TH man 1 "2 September 1995" +.LO 1 +.SH NAAM +man \- formatteer en vertoon documentatie bladzijden +.br +manpath \- geef het zoekpad voor documentatie bladzijden van de gebruiker weer +.SH SYNTAX +man [\-acdfhktwW] [\-m systeem] [\-p preprocessoren] [\-C configuratiebestand] [\-M pad] +[\-P pagineerprogramma] [\-S lijst_van_hoofdstukken] [hoofdstuk] naam ... +.SH BESCHRIJVING +.B man +formatteert en vertoont bladzijden van de programma documentatie. +Deze versie kent de +.B MANPATH +en +.B (MAN)PAGER +omgevings\%variabelen, zodat +je je eigen collectie documentatiebladzijden en je eigen +pagineerprogramma kunt gebruiken. +Als het +.I hoofdstuk +is opgegeven, dan kijkt +.B man +alleen in dat hoofdstuk. +Je kunt ook met omgevings\%variabelen of met programmaopties +opgeven in welke volgorde de hoofdstukken moeten worden +afgezocht, en welke preprocessoren de tekst moeten voorbewerken. +Als +.I naam +een / bevat, dan wordt hij eerst geprobeerd als bestandsnaam, +zodat opdrachten als +.B "man ./foo.5" +of +.B "man /cd/foo/bar.1.gz" +mogelijk zijn. +.SH OPTIES +.TP +.B \-\^C " configuratiebestand" +Geef aan welk configuratiebestand gebruikt moet worden. +Als deze optie niet is opgegeven, dan wordt +@man_config_file@ gebruikt. (Voor een beschrijving van dit +bestand, zie man.conf(5).) +.TP +.B \-\^M " pad" +Geef de lijst van directories waarin gezocht moet worden. +Als deze optie niet is opgegeven, dan wordt de omgevings\%variabele +.B MANPATH +gebruikt. En als er niet zo'n omgevings\%variabele is, dan wordt de +standaardlijst gevonden door @man_config_file@ te raadplegen. +Een lege deelstring in MANPATH wordt vervangen door de standaardlijst. +.TP +.B \-\^P " pagineerprogramma" +Geef aan welk pagineerprogramma gebruikt moet worden. +Als deze optie niet is opgegeven, dan wordt het programma vermeld in +de omgevings\%variabele +.B MANPAGER +of, als deze niet bestaat, +.B PAGER +gebruikt. Is er ook niet zo'n omgevings\%variabele, dan wordt +.B @pager@ +gebruikt. +.TP +.B \-\^S " lijst_van_hoofdstukken" +Deze lijst is een lijst van hoofdstukken, door dubbele punten van elkaar +gescheiden, waarin gezocht wordt. +Als deze optie niet is opgegeven, dan wordt de omgevings\%variabele +.B MANSECT +gebruikt. +.TP +.B \-\^a +Normaal zal +.B man +termineren na het vertonen van de eerste documentatie bladzijde +die hij vindt. Deze optie zegt dat alle bladzijden over +.B naam +vertoond moeten worden. +.TP +.B \-\^c +Formatteer de bron bladzijde, zelfs als er een recente voorgeformatteerde +bladzijde bestaat. Dit kan nuttig zijn als die bladzijde +geformatteerd was voor een scherm met een andere breedte, +of als de voorgeformatteerde bladzijde niet deugt. +.TP +.B \-\^d +Vertoon de bladzijden niet echt, maar vertel gedetailleerd wat +gedaan wordt - deze optie is alleen nuttig om fouten op te sporen. +.TP +.B \-\^D +Als by -d, maar vertoon de bladzijden ook. +.TP +.B \-\^f +Voer het programma +.B whatis +uit. +.TP +.B \-\^h +Druk een hulptekst af. +.TP +.B \-\^k +Voer het programma +.B apropos +uit. +.TP +.B \-\^K +Zoek de opgegeven tekst in *alle* handboekbladzijden. Pas op: dit +kan lang duren! (Op mijn machine kost dit bijvoorbeeld een minuut +voor elke 500 pagina's.) Het helpt om een sectie op te geven. +.TP +.B \-\^m " systeem" +Gebruik een andere collectie documentatie\%bladzijden, afhankelijk +van de opgegeven systeem\%naam. +.TP +.B \-\^p " preprocessoren" +Geef aan welke preprocessoren de tekst moeten voorbewerken voordat +deze aan nroff of troff gevoerd wordt. Enige preprocessoren, en de +letters waarmee ze aangeduid worden, zijn: +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +Niet elke installatie zal al deze programma's hebben. +Als deze optie niet is opgegeven, dan wordt de omgevings\%variabele +.B MANROFFSEQ +gebruikt. +.TP +.B \-\^t +Gebruik +.B @troff@ +om de bladzijde te formatteren, en stuur het resultaat naar +.B stdout. +De uitvoer van +.B @troff@ +moet mogelijk nog door een of ander filter gestuurd worden +voordat hij afgedrukt kan worden. +.TP +.B \-\^w \fRor\fP \-\-path +Vertoon geen documentatie, maar druk de padnamen af van de bestanden +waarin documentatie gevonden werd. Als geen +.I naam +opgegeven is, dan: druk het zoekpad af. Als +.B manpath +een link is naar man, dan is "manpath" equivalent met "man --path". +.TP +.B \-\^W +Als \-\^w, maar druk alleen de padnamen af, zonder additionele informatie. +Dit komt van pas in opdrachten zoals +.ft CW +man -aW man | xargs ls -l +.ft + +.SH "VOORGEFORMATTEERDE BLADZIJDEN" +Man probeert om geformatteerde bladzijden te bewaren, om de volgende +keer dat ze nodig zijn tijd te sparen. Gewoonlijk worden de geformatteerde +versies van de bladzijden uit DIR/manX bewaard in DIR/catX, maar andere +afbeeldingen van man directories naar cat directories kunnen in +@man_config_file@ worden aangegeven. Geformatteerde bladzijden worden +niet bewaard als het bijbehorende cat directory niet bestaat. +.LP +Het is mogelijk om man suid te maken, met eigenaar man. Als dan een +cat directory eigenaar man heeft, en mode 0755 (alleen door man beschrijfbaar), +en de geformatteerde bladzijden hebben eigenaar man en mode 0644 of 0444 +(alleen beschrijfbaar door man, of helemaal niet beschrijfbaar), +dan kan geen gewone gebruiker de geformatteerde bladzijden wijzigen +of andere bestanden opslaan in dat directory. Als man niet suid is, +dan moet een cat directory waar voor alle gebruikers geformatteerde +bladzijden geschreven moeten kunnen worden mode 0777 hebben. +.LP +De optie -c laat man een pagina opnieuw formatteren, zelfs als een +recente geformatteerde pagina bestaat. + +.SH OMGEVINGSVARIABELEN +.TP +.B MANPATH +Als +.B MANPATH +een waarde heeft, dan wordt deze waarde als zoekpad gebruikt. +.TP +.B MANROFFSEQ +Als +.B MANROFFSEQ +een waarde heeft, dan wordt deze waarde gebruikt om te bepalen door +welke preprocessoren de tekst bewerkt moet worden. Standaard wordt +tbl gebruikt. +.TP +.B MANSECT +Als +.B MANSECT +een waarde heeft, dan wordt deze waarde gebruikt om te bepalen in welke +hoofdstukken gezocht wordt. +.TP +.B MANWIDTH +Als +.B MANWIDTH +een waarde heeft, dan geeft deze waarde aan hoeveel kolommen de uitvoer +breed moet zijn. Vooral bij heel brede schermen geven veel mensen er de +voorkeur aan het aantal kolommen tot 80 of 100 te beperken. +.TP +.B MANPAGER +Als +.B MANPAGER +een waarde heeft, dan wordt deze waarde gebruikt als naam van het te gebruiken +pagineerprogramma. Zo niet, dan wordt de waarde van +.B PAGER +gebruikt. Bestaat deze ook niet, dan wordt +.B @pager@ +gebruikt. +.TP +.B LANG +Als +.B LANG +een waarde heeft, dan bepaalt deze de naam van een onderdirectory +waar man eerst in zoekt. Bijvoorbeeld, na `LANG=nl man 1 iets' +zal man eerst in .../nl/man1/iets.1 zoeken, en als dat niet bestaat, +dan in .../man1/iets.1. Hierbij is ... een directory uit het zoekpad. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +De omgevingsvariabelen +.B NLSPATH +en +.B LC_MESSAGES +(of, als deze niet bestaat, +.B LANG\c +) spelen een rol bij het vinden van de versie in de opgegeven taal +van de mededelingen (voornamelijk foutmeldingen) die man produceert. +(Maar de Engelse teksten zijn meegecompileerd, en hoeven niet uit een +bestand gehaald te worden.) +Programma's als col(1) die door man aangeroepen worden, +gebruiken ook LC_CTYPE. +.TP +.B PATH +.B PATH +wordt gebruikt bij het construeren van het standaard zoekpad van man. +.TP +.B SYSTEM +.B SYSTEM +wordt gebruikt als standaard naam bij de optie +.B \-m. +.SH "ZIE OOK" +apropos(1), whatis(1), less(1), groff(1). +.SH FOUTEN +De +.B \-t +optie werkt alleen als een troff-achtig programma geinstalleerd is. +.br +Als je \e255 of ziet knipperen waar afbreekstreepjes hadden +moeten staan, zet dan `LESSCHARSET=latin1' in je omgeving. diff --git a/man/nl/whatis.man b/man/nl/whatis.man new file mode 100644 index 0000000..2b2c38a --- /dev/null +++ b/man/nl/whatis.man @@ -0,0 +1,32 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH whatis 1 "Jan 5, 1991" +.LO 1 +.SH NAAM +whatis \- zoek gegeven woorden in de whatis database +.SH SYNTAX +.BI whatis +woord ... +.SH BESCHRIJVING +.B whatis +zoekt naar de opgegeven woorden in een aantal database bestanden +die korte beschrijvingen van systeem\%commando's bevatten +en stuurt het resultaat naar standaard uitvoer. +De opgegeven woorden moeten als volledige woorden gevonden worden. + +De whatis database bestanden wordem aangemaakt met behulp van +het commando @makewhatis@. +.SH "ZIE OOK" +apropos(1), man(1). diff --git a/man/pl.txt b/man/pl.txt new file mode 100644 index 0000000..88ffee5 --- /dev/null +++ b/man/pl.txt @@ -0,0 +1 @@ +polish diff --git a/man/pl/apropos.man b/man/pl/apropos.man new file mode 100644 index 0000000..8d92ed4 --- /dev/null +++ b/man/pl/apropos.man @@ -0,0 +1,35 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Tumaczenie: 950322 Rafa Maszkowski +.\" +.TH apropos 1 "19 wrzenia 2005" +.LO 1 +.SH NAZWA +apropos \- wyszukuje acuchy znakw w bazie whatis +.SH SKADNIA +.BI apropos +sowo_kluczowe ... +.SH OPIS +apropos wyszukuje sowa kluczowe w plikach bazy danych, ktre +zawieraj krtkie opisy polece systemowych i wywietla wynik +na standardowe wyjcie. +.SH AUTOR +Pierwotnym autorem programu +.BR "man" +jest John W. Eaton. +Zeyd M. Ben-Halim opublikowa man w wersji 1.2, a Andries Brouwer wersje od 1.3 do 1.5p. +Aktualnym opiekunem jest Federico Lucifredi . +.SH "ZOBACZ TAKE" +whatis(1), man(1). diff --git a/man/pl/man.conf.man b/man/pl/man.conf.man new file mode 100644 index 0000000..1df8ccf --- /dev/null +++ b/man/pl/man.conf.man @@ -0,0 +1,49 @@ +.\" @(#)man.conf +.\" Tumaczenie: 950322 Rafa Maszkowski +.TH MAN.CONF 5 "19 wrzenia 2005" +.SH NAZWA +man.conf \- dane konfiguracyjne dla programu man +.SH OPIS +.LP +Ten plik jest czytany przez +.BR man (1) +i zawiera (a) informacj jak utworzy ciek przeszukiwan przez man, +(b) pene cieki do rnych programw jak nroff, eqn, tbl itd., ktre +s uywane przez man oraz (c) list programw rozpakowujcych pliki z +podanymi rozszerzeniami. +Alternatywna wersja pliku man.conf moe by podana przez +.LP +.RS +man -C prywatny_man.conf ... +.RE +.LP +Nazwy polece mog by podane z opcjami. +Uyteczne opcje nroff mona znale w grotty(1). +Na przykad zamiast domylnej linii +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +mona napisa +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +eby wyczy podkrelanie i wytuszczanie. +.SH PLIKI +.I "@man_config_file@" +.SH AUTOR +Pierwotnym autorem programu +.BR "man" +jest John W. Eaton. +Zeyd M. Ben-Halim opublikowa man w wersji 1.2, a Andries Brouwer wersje od 1.3 do 1.5p. +Aktualnym opiekunem jest Federico Lucifredi . +.SH "ZOBACZ TAKE" +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) i compress(1), gzip(1). diff --git a/man/pl/man.man b/man/pl/man.man new file mode 100644 index 0000000..eb29b4e --- /dev/null +++ b/man/pl/man.man @@ -0,0 +1,427 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" +.\" Tumaczenie - 950322 Rafa Maszkowski +.\" 960619 - aktualizacja -K +.\" 20011102 - aktualizacja do wersji z man-1.5i2, czciowo w oparciu +.\" o alternatywne tumaczenie PB z PTM - AMK +.\" +.TH man 1 "2 wrzenia 1995" +.LO 1 +.SH NAZWA +man \- formatowanie i wywietlanie dostpnych stron podrcznika man +.br +manpath \- wyznaczanie cieki poszukiwania stron podrcznika odpowiedniej dla +danego uytkownika +.SH SKADNIA +.TP 4 +.B man +.RB [ \-adfhkKtwW ] +.RB [ \-m +.IR system ] +.RB [ \-p +.IR acuch_znakw ] +.RB [\-C +.IR plik_konfiguracyjny ] +.RB [ \-M +.IR cieka ] +.RB [ \-P +.IR pager ] +.RB [ \-S +.IR lista_rozdziaw ] +.RI [ rozdzia ] +.IR nazwa ... +.SH OPIS +.B man +formatuje i wywietla dostpne w systemie strony podrcznika man. +.\" Ta wersja sprawdza zmienne rodowiskowe +.\" .B MANPATH +.\" i +.\" .BR (MAN)PAGER , +.\" wic moesz mie swj wasny zestaw stron podrcznika man i wybra do ich +.\" wywietlania ulubiony program. +Jeeli zostanie podany +.IR rozdzia , +.B man +sprawdza tylko ten rozdzia podrcznika. +.\" Uywajc opcji lub zmiennych rodowiskowych moesz take poda porzdek, +.\" w jakim naley przeszukiwa rozdziay oraz jakie preprocesory powinny +.\" zosta uyte do wstpnego przetworzenia stron. +Jeeli +.I nazwa +zawiera znak /, to man prbuje najpierw znale podany plik, wic mona np. +wyda polecenie +.B "man ./foo.5" +a nawet +.B "man /cd/foo/bar.1.gz\fR.\fP" +.PP +Niej znajdziesz informacje, gdzie +.B man +szuka plikw stron podrcznika. + +.SH OPCJE +.TP +.B \-\^C " plik_konfiguracyjny" +Okrela plik konfiguracyjny, ktrego naley uy. Domylnym jest +.BR @man_config_file@ . +(Zobacz +.BR man.conf (5).) +.TP +.B \-\^M " cieka" +Okrela list katalogw, w ktrych bd szukane strony podrcznika man. +Katalogi naley rozdziela dwukropkami. Pusta lista jest rwnoznaczna z nie +podaniem tej opcji. Zobacz +.BR "CIEKA PRZESZUKIWANIA DLA STRON PODRCZNIKA" . +.TP +.B \-\^P " pager" +Okrela, ktry pager ma zosta uyty. Jeeli podana jest ta opcja, +ignorowana jest zmienna rodowiskowa +.BR MANPAGER , +ktrej uycie z kolei powoduje zignorowanie zmiennej rodowiskowej +.BR PAGER . +Domylnie +.B man +uywa +.BR @pager@ . +.TP +.B \-\^S " lista_rozdziaw" +Rozdzielona dwukropkami lista rozdziaw podrcznika, ktre maj by +przeszukane. Jeeli podana jest ta opcja, zmienna rodowiskowa +.B MANSECT +jest ignorowana. +.TP +.B \-\^a +Domylnie man koczy dziaanie po wywietleniu pierwszej znalezionej +strony. Podanie tej opcji powoduje wywietlenie wszystkich stron +podrcznika, ktre pasuj do +.BR nazwa , +a nie tylko pierwszej. +.TP +.B \-\^c +Przeformatowuje rdow stron podrcznika, nawet jeeli istnieje aktualna +strona cat. Moe to by istotne, jeeli strona cat jest sformatowana +dla ekranu z inn liczb kolumn. +.TP +.B \-\^d +Zamiast stron podrcznika wywietla mnstwo informacji diagnostycznych. +.TP +.B \-\^D +Wywietla zarwno stron podrcznika jak i informacje diagnostyczne. +.TP +.B \-\^f +Rwnowane +.BR whatis . +.TP +.B \-\^h +Wywietla krtk informacj pomocy i koczy prac. +.TP +.B \-\^k +Rwnowane +.BR apropos . +.TP +.B \-\^K +Szuka podanego acucha znakw we *wszystkich* stronach podrcznika. Uwaga: +bdzie to prawdopodobnie bardzo powolne! Podanie rozdziaw pomaga +przyspieszy szukanie. (Dla oglnej orientacji: na mojej maszynie zajmuje to +ok. minuty na kade 500 stron podrcznika.) +.TP +.B \-\^m " system" +Podanie alternatywnego zestawu stron podrcznika, odpowiedniego dla +systemu o podanej nazwie. +.TP +.B \-\^p " acuch_znakw" +Podanie listy nazw preprocesorw, ktore zostan uruchomione przed +.B nroff +i +.BR troff . +Nie wszystkie intalacje maj peny zestaw preprocesorw. +Niektre z nich oraz oznaczajce je litery to: +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +Podanie tej opcji powoduje zignorowanie zmiennej rodowiskowej +.BR MANROFFSEQ . +.TP +.B \-\^t +Sformatuj stron podrcznika za pomoc +.BR @troff@ , +a wynik wylij na +.B stdout +(standardowe wyjcie). +Moe by konieczne przepuszczenie wyniku z +.B @troff@ +przez jaki filtr przed wydrukowaniem. +.TP +.B \-\^w \fRlub\fP \-\-path +Nie wywietlaj stron podrcznika, podaj tylko gdzie znajduj si pliki, ktre +byyby sformatowane i wywietlone. Jeeli nie podano adnych argumentw: +wywietla (na stdout) list katalogw, w ktrych +.B man +poszukuje stron podrcznika. Jeeli +.B manpath +jest dowizaniem man to "manpath" jest rwnowane "man --path". +.TP +.B \-\^W +Podobne do \-\^w, lecz podaje nazwy plikw, kad w osobnej linii, bez +dodatkowych informacji. Przydaje si w poleceniach powoki, np. +.ft CW +.B "man -aW man | xargs ls -l" +.ft + +.SH "STRONY CAT" +Man bdzie prbowa zachowa sformatowane strony podrcznika aby +skrci czas potrzebny na sformatowanie ich po raz kolejny, +kiedy te strony bd znowu potrzebne. +Tradycyjnie, sformatowane wersje stron podrcznika z katalogu DIR/manX s +zachowywane w DIR/catX, ale mona te w pliku +.BR @man_config_file@ +okreli inne zasady. +Strony cat nie s tworzone, jeeli wymagany katalog nie istnieje. +.PP +Moliwe jest uczynienie programu +.B man +suidowym na uytkownika man. Wtedy, jeli katalogi cat maj waciciela man +i prawa dostpu 0755 (zapisywalne tylko przez uytkownika man), a pliki cat +maj waciciela man i prawa dostpu 0644 lub 0444 (zapisywalne przez +uytkownika man lub przez nikogo), to aden zwyky uytkownik nie moe +zmienia stron cat lub umieszcza w katalogach cat innych plikw. Jeeli +.B man +nie jest suidowy to katalog cat powinien mie prawa dostpu 0777, +o ile wszyscy uytkownicy powinni mie moliwo pozostawiania tam stron cat. +.PP +Opcja +.B \-c +wymusza przeformatowanie strony nawet jeeli istnieje ju odpowiednia strona +cat. + + +.SH "CIEKA PRZESZUKIWANIA DLA STRON PODRCZNIKA" +.B man +stosuje wymyln metod poszukiwania plikw stron podrcznika, opart na +opcjach wywoania, zmiennych rodowiskowych, pliku konfiguracyjnym +.B @man_config_file@ +oraz na pewnych wbudowanych konwencjach i heurystyce. +.PP +Najpierw, gdy argument +.I nazwa +polecenia +.B man +zawiera ukonik +.RB ( / ), +.B man +zakada, e jest on nazw waciwego pliku i nie prowadzi poszukiwania. +.PP +Ale zazwyczaj, gdy +.I nazwa +nie zawiera ukonika, +.B man +poszukuje pliku, ktry mgby stanowi stron podrcznika o zadanym temacie, +w rnych katalogach. +.PP +Jeli zostanie podana opcja +.BI "-M " cieka\fR, +to +.I cieka +jest rozdzielon dwukropkami list przeszukiwanych przez program +.B man +katalogw. +.PP +Gdy opcja +.B -M +nie zostanie podana, ale zostanie zdefiniowana zmienna rodowiskowa +.BR MANPATH , +warto tej zmiennej stanowi list przeszukiwanych przez program +.B man +katalogw. +.PP +Jeli cieka nie zostanie podana w sposb jawny ani za pomoc +.B -M +ani poprzez +.BR MANPATH , +.B man +rozwija swoj wasn ciek w oparciu o zawarto pliku konfiguracyjnego +.BR @man_config_file@ . +Instrukcje +.B MANPATH +w pliku konfiguracyjnym okrelaj poszczeglne katalogi wczane do cieki +przeszukiwania. +.PP +Ponadto, instrukcje +.B MANPATH_MAP +dodaj do cieki przeszukiwania katalogi zalene od cieki przeszukiwania +dla polece (tzn. zawartej w zmiennej rodowiskowej +.B PATH +). +Instrukcja +.B MANPATH_MAP +dodaje do cieki przeszukiwania dla stron podrcznika po jednym katalogu dla +kadego katalogu zawartego w ciece przeszukiwania dla polece. +.B man +przeglda zmienn +.B PATH +i dodaje odpowiednie katalogi do cieki przeszukiwania dla stron podrcznika. +Zatem przy waciwym uyciu +.BR MANPATH_MAP , +po wydaniu polecenia +.BR "man xyz" , +otrzyma si stron podrcznika dla programu, ktry zostaby uruchomiony +poprzez wydanie polecenia +.BR xyz . +.PP +Dodatkowo, dla kadego katalogu w ciece przeszukiwania dla polece +(bdziemy go nazywa "katalogiem polece"), dla ktrego +.I nie +ma instrukcji +.BR MANPATH_MAP , +.B man +automatycznie poszukuje "bliskiego" katalogu stron podrcznika jako +podkatalogu waciwego katalogu polece lub w katalogu nadrzdnym dla katalogu +polece. +.PP +Mona wyczy automatyczne "bliskie" przeszukiwania doczajc instrukcj +.B NOAUTOPATH +do +.BR @man_config_file@ . +.PP +Jak opisano powyej, w kadym z katalogw cieki przeszukiwania +.B man +poszukuje pliku o nazwie +.IB tytu . rozdzia\fR, +z opcjonalnym przyrostkiem dla numeru rozdziau i moliwym przyrostkiem +kompresji. Jeli nie znajdzie takiego pliku, bdzie szuka w podkatalogach +o nazwach +.BI man N +i +.BI cat N\fR, +gdzie +.I N +jest numerem rozdziau podrcznika. +Jeli plik znajduje si w podkatalogu +.BIR cat N , +.B man +zakada, e jest to sformatowany plik strony podrcznika (cat page). +W przeciwnym przypadku, +.B man +zakada, e jest ona niesformatowana. W obu przypadkach, jeli nazwa pliku +zawiera znany przyrostek kompresji (jak +.BR .gz ), +.B man +zakada, e jest ona spakowania gzipem. +.PP +Aby zobaczy, gdzie (lub czy) +.B man +znajdzie stron podrcznika o okrelonym tytule, naley posuyc si opcj +.BR "--path " ( -w ). + +.SH "RODOWISKO" +.TP +.B MANPL +Jeli zmienna +.B MANPL +jest zdefinowana, to jej warto jest uywana do okrelenia dugoci strony. +W przeciwnym przypadku, caa strona podrcznika bdzie stanowi jedn (dug) +stron. +.TP +.B MANROFFSEQ +Jeli zmienna +.B MANROFFSEQ +jest zdefinowana, to jej warto jest uywana do zdefinowania zestawu +preprocesorw uruchamianych przed +.B nroff +i +.BR troff . +Domylnie strony s przepuszczane przez preprocesor tbl przed uyciem nroff. +.TP +.B MANSECT +Jeli zmienna +.B MANSECT +jest zdefiniowana, to jej warto jest uywana do okrelenia jakie rozdziay +podrcznika powinny zosta przeszukane. +.TP +.B MANWIDTH +Jeli zmienna +.B MANWIDTH +jest zdefiniowana, to jej warto jest uywana jako szeroko wywietlanych +stron podrcznika man. W przeciwnym wypadku, strony bd wywietlane na caej +szerokoci ekranu. +.TP +.B MANPAGER +Jeli zmienna +.B MANPAGER +jest zdefiniowana, to jej warto jest uywana jako nazwa programu do +wywietlania strony podrcznika man. Jeli nie jest zdefiniowana, to uywana +jest zmienna +.BR PAGER . +Jeeli ta rwnie nie ma nadanej wartoci, to uywany jest +.BR @pager@ . +.TP +.B LANG +Jeli zmienna +.B LANG +jest zdefiniowana, to jej warto okrela nazw podkatalogu, w ktrym man +najpierw bdzie szuka stron podrcznika. Zatem polecenie `LANG=pl man 1 co' +(w sh lub bash) spowoduje, e man bdzie szuka strony "co" +w .../pl/man1/co.1, a nastpnie, jeeli takiego pliku nie znajdzie, +w .../man1/co.1, gdzie ... jest katalogiem ze cieki przeszukiwania. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +Zmienne rodowiskowe +.B NLSPATH +i +.B LC_MESSAGES +(lub +.BR LANG , +jeeli ta druga nie istnieje) +steruj przeszukiwaniem katalogw z komunikatami. +(Komunikaty angielskie s wkompilowane, wic dla angielskiego taki +katalog nie jest potrzebny.) +Zauwa, e programy takie jak +.BR col(1) , +woane przez man, rwnie uywaj np. LC_TYPE. +.TP +.B PATH +.B PATH +pomaga okreli ciek przeszukiwania dla plikw stron podrcznika. +Zobacz +.BR "CIEKA PRZESZUKIWANIA DLA STRON PODRCZNIKA" . +.TP +.B SYSTEM +.B SYSTEM +jest uywana do pobierania domylnej alternatywnej nazwy systemu (do uywania +razem z opcj +.BR \-m ). +.SH "ZOBACZ TAKE" +apropos(1), whatis(1), less(1), groff(1), man.conf(5). +.SH BDY +Opcja +.B \-t +dziaa tylko jeeli jest zainstalowany jaki program dziaajcy jak troff. +.br +Jeeli zamiast mylnikw pojawi si migajce \e255 lub , to naley +ustawi w rodowisku uytkownika `LESSCHARSET=latin1'. +.SH ZAKOCZENIE +Jeli do pliku +.IR .emacs +uytkownika dodana zostanie linia + + (global-set-key [(f1)] (lambda () (interactive) (manual-entry (current-word)))) + +to nacinicie F1 spowoduje wywietlenie strony podrcznika dla funkcji +bibliotecznej, na ktrej ustawiony jest kursor. +.LP +Aby uzyska czysto tekstow wersj strony podrcznika, bez cofni +i podkrele, naley wyda polecenie + + # man co | col -b > co.mantxt + diff --git a/man/pl/whatis.man b/man/pl/whatis.man new file mode 100644 index 0000000..936627f --- /dev/null +++ b/man/pl/whatis.man @@ -0,0 +1,37 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Tumaczenie - 950322 Rafa Maszkowski +.\" +.TH whatis 1 "19 wrzenia 2005" +.LO 1 +.SH NAZWA +whatis \- wyszukuje sowa w bazie whatis. +.SH SKADNIA +.BI whatis +sowo_kluczowe ... +.SH OPIS +whatis wyszukuje sowa kluczowe w zestawie plikw zawierajcych krtkie +opisy polece systemowych i wywietla rezultat na standardowe wyjcie. +Wywietlane s tylko polecenia, ktrych nazwy pasuj dokadnie. + +Baza whatis jest tworzona przy uyciu polecenia @makewhatis@. +.SH AUTOR +Pierwotnym autorem programu +.BR "man" +jest John W. Eaton. +Zeyd M. Ben-Halim opublikowa man w wersji 1.2, a Andries Brouwer wersje od 1.3 do 1.5p. +Aktualnym opiekunem jest Federico Lucifredi . +.SH "ZOBACZ TAKE" +apropos(1), man(1). diff --git a/man/pt.txt b/man/pt.txt new file mode 100644 index 0000000..5150030 --- /dev/null +++ b/man/pt.txt @@ -0,0 +1 @@ +portuguese diff --git a/man/pt/README b/man/pt/README new file mode 100644 index 0000000..832c6db --- /dev/null +++ b/man/pt/README @@ -0,0 +1,6 @@ +These portuguese man pages were contributed by Vitor Duarte. + +#From vad@fct.unl.pt Tue Jun 21 14:15:01 1994 +#To: Andries.Brouwer@cwi.nl +#Subject: portuguese man +#From: Vitor Duarte diff --git a/man/pt/apropos.man b/man/pt/apropos.man new file mode 100644 index 0000000..477d478 --- /dev/null +++ b/man/pt/apropos.man @@ -0,0 +1,28 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH apropos 1 "15/1/1991" +.LO 1 +.SH NOME +apropos \- procura `strings' na base de dados "whatis" +.SH SINOPSE +.BI apropos +palavra_chave ... +.SH DESCRIO +apropos procura a +.B palavra_chave, +numa base de dados contendo breves descries dos comandos, +mostrando todas as descries onde encontre a referida chave. +.SH "VEJA TAMBM" +whatis(1), man(1). diff --git a/man/pt/man.conf.man b/man/pt/man.conf.man new file mode 100644 index 0000000..c3e71d1 --- /dev/null +++ b/man/pt/man.conf.man @@ -0,0 +1,39 @@ +.\" @(#)man.conf +.TH MAN.CONF 5 "30/3/1994" +.SH NOME +man.conf \- dicheiro de configurao para man +.SH DESCRIO +.LP +Este ficheiro lido por +.BR man (1) +e contm: (a) informao de como construir o manpath; (b) nomes completos +de vrios programas como nroff, eqn, tbl, etc. usados por man; (c) a lista +de descompressores dos ficheiros com determinadas extenses. Um ficheiro +alternativo pode ser indicado com +.LP +.RS +man -C fich_config ... +.RE +.LP +Os nomes de comandos podem ser indicados com opes se pretendido. +Opes uteis para o nroff podem ser encontradas em grotty(1). +Por exemplo, am vez de linha +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +pode-se usar +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +para suprimir sublinhados e carregados. +.SH "VEJA TAMBM" +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) e compress(1), gzip(1). diff --git a/man/pt/man.man b/man/pt/man.man new file mode 100644 index 0000000..87b2001 --- /dev/null +++ b/man/pt/man.man @@ -0,0 +1,156 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" +.TH man 1 "15/3/1994" +.LO 1 +.SH NOME +man \- formatar e mostrar as pginas do manual on-line +.br +manpath \- determinar o manpath inicial para o utilizador +.SH SINOPSE +man [\-acdfhktw] [\-m sistema] [\-p string] [\-C fich_config] [\-M path] +[\-P paginador] [\-S lista_sec] [seco] nome ... +.SH DESCRIO +.B man +formata e mostra as pginas do manual `on-line'. Esta verso reconhece +as variveis de ambiente (environment) +.B MANPATH +e +.B (MAN)PAGER +(vr a seguir). +Se a +.I seco +for indicada, +.B man +apenas procura nessa seco de manuais. +Pode tambm indicar por que ordem das seces deve procurar +e que preprocessamento efectuar nos manuais, por meio de opes na +linha de comando ou variveis de ambiente. +Se +.I nome +contiver uma / tentar primeiro o ficheiro com esse nome, permitindo +fazer +.B "man ./foo.5" +ou mesmo +.B "man /cd/foo/bar.1.gz" +para formatar e vr um ficheiro em particular. +.SH OPES +.TP +.B \-\^C " fich_config" +Indica o ficheiro de configurao a usar; por omisso ser usado +@man_config_file@. (Veja man.conf(5).) +.TP +.B \-\^M " path" +Indica a lista de directrios onde procurar manuais. +Sem esta opo, ser consultada a varivel +.B MANPATH. +Se tambm esta varivel estiver definida, uma lista ser obtida +por consulta de @man_config_file@. Um directrio vazio em MANPATH +representa a lista anterior. +.TP +.B \-\^P " paginador" +Indica qual o paginador/visualisador a usar. Sem esta opo tentar +consultar a varivel +.B PAGER. +Normalmente, man usar +.B @pager@. +.TP +.B \-\^S " lista_sec" +Fornece a lista de seces (separadas por ,) onde procurar e por que +ordem. Esta opo substitui o que indicado pela varivel +.B MANSECT +quando esta est definida. +.TP +.B \-\^a +Normalmente man mostra o primeiro manual que encontrar. Esta opo +faz com que mostre todas as pginas de manuais encontradas para a entrada +.B nome. +.TP +.B \-\^d +No mostra o manual, imprimindo vria informao para `debug'. +.TP +.B \-\^f +Equivalente a +.B whatis. +.TP +.B \-\^h +Imprime apenas uma mensagem de ajuda. +.TP +.B \-\^k +Equivalente a +.B apropos. +.TP +.B \-\^m " sistema" +Indica um conjunto de manuais diferente aplicveis ao sistema indicado. +.TP +.B \-\^p " string" +Especifica uma sequncia de preprocessadores a usar antes de nroff ou +troff (os formatadores). Algumas instalaes podem no ter todos os +preprocessadores. Alguns preprocessadores e as letras a usar para os +indicar so: +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +Esta opo sobrepe-se varivel +.B MANROFFSEQ. +.TP +.B \-\^t +Usar +.B @troff@ +para formatar as pginas do manual. A sada deste comando +pode ter ainda de ser processada por outro antes de a poder +imprimir. +.TP +.B \-\^w \fRor\fP \-\-path +No imprime as pginas do manual, mas mostra a(s) localizao(es) dos +ficheiros a formatar e mostrar, para a entrada de +.B nome +indicado. Se no fornecer mais nenhuma opo mostra a lista de +directrios que sero percorridos por +.B man +nas suas buscas. Se +.B manpath + um `link' para man, ento "manpath" equivalente a "man --path". + +.SH AMBIENTE +.TP \w'MANROFFSEQ\ \ 'u +.B MANPATH +Se +.B MANPATH +estiver definido, o seu valor ser usado como a lista de directrios +(manpath) onde podem estar entradas do manual. +.TP +.B MANROFFSEQ +Se +.B MANROFFSEQ +est definido, o seu valor determina os preprocessamentos a aplicar +antes de nroff ou troff. Normalmente, as pginas de manual, so +preprocessadas pelo tbl antes de nroff. +.TP +.B MANSECT +Se +.B MANSECT +existir, o seu valor indica as seces a percorrer. +.TP +.B PAGER +Se +.B PAGER +est definido, indicar o programa a usar para mostrar o manual. +Normalmente usar +.B @pager@. +.SH "VEJA TAMBM" +apropos(1), whatis(1), less(1), groff(1). +.SH BUGS +.B \-t +s funciona se existir o programa troff ou equivalente. diff --git a/man/pt/whatis.man b/man/pt/whatis.man new file mode 100644 index 0000000..7b39873 --- /dev/null +++ b/man/pt/whatis.man @@ -0,0 +1,30 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH whatis 1 "5/1/1991" +.LO 1 +.SH NOME +whatis \- procura palavras numa base de dados prpria +.SH SINOPSE +.BI whatis +palavra_chave ... +.SH DESCRIO +whatis procura numa base de dados contendo breves descries dos comandos, +as palavras chave indicadas. S quando uma palavra completa igual a uma +.B palavra_chave +ser mostrada a respectiva descrio. + +A base de dados do "whatis" criada usando o comando @makewhatis@. +.SH "VEJA TAMBM" +apropos(1), man(1). diff --git a/man/ro.txt b/man/ro.txt new file mode 100644 index 0000000..1ea12dc --- /dev/null +++ b/man/ro.txt @@ -0,0 +1 @@ +romanian diff --git a/man/ro/apropos.man b/man/ro/apropos.man new file mode 100644 index 0000000..aa86ad2 --- /dev/null +++ b/man/ro/apropos.man @@ -0,0 +1,32 @@ +.\" +.\" Generated automatically from apropos.1.in by the +.\" configure script. +.\" +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Traducere de Ovidiu Constantin +.TH apropos 1 "15 Ian 1991" +.LO 1 +.SH NUME +apropos \- caut iruri de caractere n baza de date whatis +.SH SUMAR +.BI apropos +cuvnt_cheie ... +.SH DESCRIERE +apropos caut cuvinte cheie ntr-un set de baze de date coninnd scurte +descrieri ale comenzilor sistem i afieaz rezultatul la ieirea +standard (stdout). +.SH "VEZI I" +whatis(1), man(1). diff --git a/man/ro/makewhatis.man b/man/ro/makewhatis.man new file mode 100644 index 0000000..e4b1e0e --- /dev/null +++ b/man/ro/makewhatis.man @@ -0,0 +1,96 @@ +.\" Copyright (c) 1999 Ottavio G. Rizzo +.\" +.\" This is free documentation; 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 2 of +.\" the License, or (at your option) any later version. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +.\" USA. +.\" +.\" Traducere de Ovidiu Constantin +.TH MAKEWHATIS 8 "22 Ianuarie 1999" +.SH NUME +makewhatis \- Creaz baza de date whatis +.SH SUMAR +.BI "makewhatis [-u] [-v] [-w] [-s " seciuni " ] [-c [" cale_cat "]] [" cale_man "]" +.SH DESCRIERE +.B makewhatis +citete toate paginile de manual coninute n +.IR seciunile " date n " cale_man +sau paginile preformatate coninute n +.IR seciunile " din " cale_cat . +Pentru fiecare pagin, scrie o linie n baza de date whatis; fiecare +linie const n numele paginii i o scurt descriere, separate de o +liniut. Descrierea este extras folosind coninutul seciunii NUME din +pagina de manual. +.LP +Din moment ce alte limbi folosesc un termen diferit pentru seciunea NUME, +.B makewhatis +recunoate termenii echivaleni n ceh, italian, finlandez, francez, +german i spaniol. +.LP +Dac nici un argument +.I cale_man +nu este furnizat, +.I /usr/man +este considerat implicit. +.SH OPIUNI +.TP +.B -u +Actualizeaz baza de date cu pagini noi. +.TP +.B -v +Operaii explicite +.TP +.B -w +Folosete cale_man obinut din `man --path` +.TP +.BI -s " seciuni" +Caut n +.I seciuni +ale +.IR cale_man " sau " cale_cat . +Dac opiunea este absent, valoarea sa este considerat a fi +.I \'1 2 3 4 5 6 7 8 9 n l\' +.TP +.BI -c " cale_cat" +Paginile preformatate de manual aflate n +.I cale_cat +sunt scanate. Dac argumentul nu este furnizat, este considerat a fi +primul director existent ntre +.IR /usr/man/preformat " i " /usr/man . +.SH EXEMPLE +.PP +Pentru a recrea doar +.IR /usr/X11R6/man/whatis " i " /usr/local/man/whatis +.IP +makewhatis /usr/X11R6/man /usr/local/man +.PP +Pentru a recrea toate bazele de date, inclusiv cele cu traducerile +finlandeze, franceze i italiene +.IP +LANGUAGE=fi:fr:it makewhatis -w +.SH ERORI +.B makewhatis +ar putea s nu manipuleze prea bine paginile de manual scrise cu +macrouri troff nestandard, cum ar fi paginile Tcl/Tk. +.PP +.B makewhatis +nu funcioneaza pentru traducerile preformatate. +.SH VEZI I +.BR apropos (1), +.BR man (1), +.BR whatis (1) diff --git a/man/ro/man.conf.man b/man/ro/man.conf.man new file mode 100644 index 0000000..454c609 --- /dev/null +++ b/man/ro/man.conf.man @@ -0,0 +1,42 @@ +.\" @(#)man.conf +.\" Traducere de Ovidiu Constantin +.TH MAN.CONF 5 "30 Mar 1994" +.SH NUME +man.conf \- date de configurare pentru man +.SH DESCRIERE +.LP +Acest fiier este citit de +.BR man (1) +i conine (a) informaii despre cum se construiete calea de cutare +pentru man, (b) ci complete pentru diferite programe ca nroff, eqn, tbl +etc. folosite de man, i (c) o list cu decomprimatoare pentru fiierele +cu o anumit extensie. O versiune alternativ a acestui fiier poate fi +specificat cu +.LP +.RS +man -C man_privat.conf ... +.RE +.LP +Numele de comenzi pot fi completate cu opiuni. Opiuni folositoare +pentru nroff pot fi gsite n grotty(1). De exemplu, n loc de linia +implicit +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +se poate scrie +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +pentru a elimina sublinierea i tierea. +.SH "VEZI I" +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) i compress(1), gzip(1). + diff --git a/man/ro/man.man b/man/ro/man.man new file mode 100644 index 0000000..62aa3a6 --- /dev/null +++ b/man/ro/man.man @@ -0,0 +1,434 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" +.\" Traducere de Ovidiu Constantin +.TH man 1 "2 Septembrie 1995" +.LO 1 +.SH NUME +man \- formateaz i afieaz paginile de manual +.br +manpath \- determin calea de cutare a utilizatorului pentru paginile +de manual +.SH SUMAR +.B man +.RB [ \-acdfFhkKtwW ] +.RB [ --path ] +.RB [ \-m +.IR sistem ] +.RB [ \-p +.IR ir ] +.RB [ \-C +.IR fiier_configurare ] +.RB [ \-M +.IR list_ci ] +.RB [ \-P +.IR paginator ] +.RB [ \-S +.IR list_seciuni ] +.RI [ seciune ] +.I "nume ..." + +.SH DESCRIERE +.B man +formateaz i afieaz paginile de manual. Dac specificai +.IR seciune , +.B man +caut doar n acea seciune a manualului. +.I nume +este n mod normal numele paginii de manual, care este de obicei numele +unei comenzi, funcii, sau fiier. Totui, dac +.I nume +conine un slash +.RB ( / ) +atunci +.B man +l interpreteaz ca o specificare de fiier, astfel nct putei executa +.B "man ./foo.5" +sau chiar +.B "man /cd/foo/bar.1.gz\fR.\fP" +.PP +Vedei mai jos pentru o descriere a locurilor unde caut +.B man +fiierele cu paginile de manual. + +.SH OPIUNI +.TP +.B \-\^C " fiiier_configurare" +Specific fiierul de configurare care se va folosi; inplicit este +.BR @man_config_file@ . +(Vezi +.BR man.conf (5).) +.TP +.B \-\^M " cale" +Specific lista de directoare unde se caut paginile man. Separai +directoarele cu dou puncte (:). O list goal este echivalent cu a nu +specifica +.B \-M +de loc. Vezi i +.BR "CALEA DE CUTARE A PAGINILOR MAN" . +.TP +.B \-\^P " paginator" +Specific ce paginator de va folosi. +Aceast opiune ignor variabila de mediu +.B MANPAGER +, care n schimb ignor variabila +.BR PAGER . +Implicit, +.B man +folosete +.BR @pager@ . +.TP +.B \-\^S " list_seciuni" +Lista este un ir de seciuni de manual care vor fi cutate, desprite +prin dou puncte (:). Aceast opiune ignor variabila de mediu +.BR MANSECT . +.TP +.B \-\^a +Implicit, executia +.B man +se va termina dup afiarea primei pagini de manual pe care o gsete. +Folosirea acestei opiuni foreaz +.B man +s afieze toate paginila de manual care verific +.B nume, +nu doar prima. +.TP +.B \-\^c +Reformateaz pagina man surs, chiar dac exist o pagin cat +actualizat. Acest lucru poate fi important dac pagina cat a fost +formatat pentru un ecran cu un numr diferit de coloane, sau dac +pagina preformatat este alterat. +.TP +.B \-\^d +Nu afieaz efectiv paginile man, ci tiprete multe informaii de +depanare. +.TP +.B \-\^D +Afieaz att paginile man, ct i informaii de depanare. +.TP +.B \-\^f +Echivalent cu +.BR whatis . +.TP +.BR \-\^F " sau " \-\-preformat +Doar formateaz - nu afieaz. +.TP +.B \-\^h +Tiprete un mesaj de ajutor i termin execuia. +.TP +.B \-\^k +Echivalent cu +.BR apropos . +.TP +.B \-\^K +Caut irul de caractere specificat n *toate* paginile man. +Avertisment: aceasta este probabil o operaie foarte lent! Ajut +specificarea unei seciuni. (Pentru a da o idee general, pe maina mea +aceasta dureaz aproape un minut pentru 500 pagini man.) +.TP +.B \-\^m " sistem" +Specific un set alternativ de pagini man de cutat, bazat pe numele de +sistem dat. +.TP +.B \-\^p " ir" +Specific secvena de preprocesoare ce vor fi rulate nainte de +.B nroff +sau +.BR troff . +Nu toate instalrile vor avea un set complet de preprocesoare. Unele din +preprocesoare i literele folosite pentru a le desemna sunt: eqn (e), +grap (g), pic (p), tbl (t), vgrind (v), refer (r). Aceast opiune duce +la ignorarea variabilei de mediu +.BR MANROFFSEQ . +.TP +.B \-\^t +Folosete +.B @troff@ +pentru a formata pegina man, trimind rezultatul la ieirea standard +.BR (stdout) . +Rezultatul comenzii +.B @troff@ +ar putea necesita s fie trecut printr-un filtru nante de a fi tiprit. +.TP +.B \-\^w \fRsau\fP \-\-path +Nu afieaz efectiv paginile man, ci tiprete locaia(ile) fiierelor +care ar fi formatate sau afiate. Dac nici un argument nu este dat: +afieaz (la ieirea standard (stdout)) lista directoarelor n care sunt +cutate de +.B man +paginile man. Dac +.B manpath +este o legtur la man, atunci "manpath" este echivalent cu "man --path". +.TP +.B \-\^W +Ca \-\^w, dar afieaz numele de fiiere unul pe linie, fr informaii adiionale. +Aceast opiune este util n comenzi shell ca +.ft CW +.B "man -aW man | xargs ls -l" +.ft + +.SH "PAGINILE CAT" +Man va ncerca s salveze paginile man formatate, pentru a reduce timpul +de formatare data viitoare cnd aceste pagini sunt necesare. +Tradiional, versiunile formatate ale paginilor din DIR/manX sunt +salvate n DIR/catX, dar alte mapri de la directorul man la directorul +cat pot fi specificate n +.BR @man_config_file@ . +Nici o pagin cat nu este salvat dac directorul cat necesar nu exist. +.PP +Este posibil s facei +.B man +suid la un utilizator man. Atunci, dac un director cat are proprietar +man i modul 0755 (scriere doar de ctre man), i fiierele cat au +proprietarul man i modul 0644 sau 0444 (scriere doar de ctre man, sau +nici o permisiune de scriere), nici un utilizator normal nu poate +modifica paginile cat sau s pun alte fiiere n directorul cat. Dac +.B man +nu este fcut suid, atunci un director cat ar trebui s aib modul 0777 +dac toi utilizatorii trebuie s poat lsa pagini cat acolo. +.PP +Opiunea +.B \-c +foreaz reformatarea unei pagini, chiar dac exist o pagin cat +recent. + +.SH "CALEA DE CUTARE A PAGINILOR MAN" +.B man +folosete o metod sofisticat pentru a gsi paginile de manual, bazat +pe opiuni de apelare i variabile de mediu, fiierul de configurare +.B @man_config_file@ +i anumite convenii i euristici. +.PP +nainte de toate, cnd argumentul +.I nume +al +.B man +conine un slash +.RB ( / ), +.B man +consider c este un specificator de fiier i nu se efectueaz nici o +cutare. +.PP +Dar n cazul normal n care +.I nume +nu conine un slash, +.B man +caut n o mulime de directoare un fiier care a putea fi o pagin de +manual pentru subiectul numit. +.PP +Dac specificai opiunea +.BI "-M " list_ci\fR, +.I list_ci +este o list de directoare desprite prin dou puncte (:) n care caut +.BR man . +.PP +Dac nu specificai +.B -M +dar setai variabila de mediu +.BR MANPATH , +valoarea acestei variabile este lista de directoare n care caut +.BR man . +.PP +Dac nu specificai explicit o list de ci cu +.B -M +sau +.BR MANPATH , +.B man +i creeaz propria list de ci bazat pe coninutul fiierului de +configurare +.BR @man_config_file@ . +Declaraiile +.B MANPATH +din fiierul de configurare definesc anumite directoare care s fie +incluse n calea de cutare. +.PP +Mai mult, declaraiile +.B MANPATH_MAP +se adaug la calea de cutare depinznd de calea de cutare a +comenzilor (de ex. variabila de mediu +.BR PATH ). +Pentru fiecare director care este n calea de cutare a comenzilor, o +declaraie +.B MANPATH_MAP +specific un director care trebuie c fie adugat la calea de cutare a +fiierelor cu paginile de manual. +.B man +analizeaz variabila +.B PATH +i adaug directoarele corespunztoare la calea de cutare a fiierelor +cu paginile de manual. Astfel, prin folosirea corect a +.BR MANPATH_MAP , +cnd executai comanda +.BR "man xyz" , +obinei o pagin de manual pentru programul care ar rula dac ai +executa comanda +.BR xyz . +.PP +n plus, pentru fiecare director n calea de cutare a comenzilor (o vom +denumi "director de comenzi") pentru care +.I nu +avei o declaraie +.BR MANPATH_MAP , +.B man +caut n mod automat un director cu pagini de manual "nvecinat", +respectiv ca un subdirector al directorului de comenzi sau n directorul +printe al directorului de comenzi. +.PP +Putei dezactiva cutarea "nvecinat" automat incluznd o declaraie +.B NOAUTOPATH +n +.BR @man_config_file@ . +.PP +n fiecare director din calea de cutare descris mai sus, +.B man +caut un fiier numit +.IB topic . section\fR, +cu un sufix opional la numrul seciunii i posibil un sufix de +compresie. Dac nu gsete un astfel de fiier, caut n orice +subdirectoare numite +.BI man N +sau +.BI cat N +unde +.I N +este numrul seciunii de manual. +Dac fiierul este ntr-ul subdirector +.BI cat N\fR, +.B man +consider c este o pagin de manual formatat (pagin cat). Altfel, +.B man +consider c este neformatat. n oricare caz, dac numele fiierului +are un sufix cunoscut de compresie (ca +.BR .gz ), +.B man +consider c este comprimat cu gzip. +.PP +Dac doriie s vedei unde (sau dac) +.B man +ar gsi pagina de manual pentru un anumit subiect, folosii opiunea +.BR "--path " ( -w ). + +.SH "VARIABILE DE MEDIU" +.TP +.B MANPATH +Dac +.B MANPATH +este setat, +.B man +o folosete drept cale de cutare a fiierelor cu paginile de manual. Ignor fiierul de configurare i +calea de cutare automat, dar este ignorat de opiunea de apelare +.BR -M . +Vezi i +.BR "CALEA DE CUTARE A PAGINILOR MAN" . +.TP +.B MANPL +Dac +.B MANPL +este setat, valoarea ei este folosit ca lungimea paginii afiate. +Altfel, ntreaga pagin man va ocupa o singur pagin (lung). +.TP +.B MANROFFSEQ +Dac +.B MANROFFSEQ +este setat, valoarea ei este folosit pentru determinarea setului de +preprocesoare rulate nainte de a rula +.B nroff +sau +.BR troff . +Implicit, paginile sunt trecute prin preprocesorul tbl nainte de +.BR nroff . +.TP +.B MANSECT +Dac +.B MANSECT +este setat, valoare ei este folosit pentru a determina n ce seciune +de manual s se caute. +.TP +.B MANWIDTH +Dac +.B MANWIDTH +este setat, valoare ei este folosit ca limea pe care paginile de +manual ar trebui s fie afiate. Altfel paginile ar putea fi afiate +peste limea ecranului. +.TP +.B MANPAGER +Dac +.B MANPAGER +este setat, valoarea ei este folosit ca numele programului ce va fi +folosit pentru a afia pagina man. Dac nu, atunci +.B PAGER +este folosit. Dac nici aceasta nu are o valoare, +.B @pager@ +este folosit. +.TP +.B LANG +Dac +.B LANG +este setat, valoarea ei definete numele subdirectorului unde man caut +prima dat paginile man. Astfel, comanda `LANG=dk man 1 foo' va +determina man s caute pagina man foo n .../dk/man1/foo.1 i dac nu +poate gsi un astfel de fiier, n .../man1/foo.1, unde ... este un +director n calea de cutare. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +Variabilele de mediu +.B NLSPATH +i +.B LC_MESSAGES +(sau +.B LANG +cnd ultima nu exist) joac un rol n localizarea catalogului de +mesaje. (Dar mesajele n englez sunt incluse la compilare i pentru +englez nu este necesar nici un catalog.) Notai c programe apelate de +man ca +.BR col(1) +folosesc i ele de ex. LC_CTYPE. +.TP +.B PATH +.B PATH +ajut la determinarea cii de cutare a fiierelor cu paginile de +manual. Vezi i +.BR "CALEA DE CUTARE A PAGINILOR MAN" . +.TP +.B SYSTEM +.B SYSTEM +este folosit pentru a obine numele implicit al sistemului alternativ +(pentru a fi utilizat cu opiunea +.BR \-m ). +.SH "VEZI I" +apropos(1), whatis(1), less(1), groff(1), man.conf(5). +.SH ERORI +Opiunea +.B \-t +funcioneaz doar dac un program gen troff este instalat. +.br +Dac vedei \e255 sau clipind n loc de liniue, setai +`LESSCHARSET=latin1' n mediu. +.SH SFATURI +Dac adugai linia + + (global-set-key [(f1)] (lambda () (interactive) (manual-entry (current-word)))) + +n fiierul dumneavoastr +.IR .emacs\fR, +apsnd F1 vei obine pagina man pentru apelul de librrie la poziia +curent a cursorului. +.LP +Pentru a obine o versiune doar text a paginii man, fr backspace i +liniue de subliniere (underscore), ncercai + + # man foo | col -b > foo.mantxt + diff --git a/man/ro/man2html.man b/man/ro/man2html.man new file mode 100644 index 0000000..ebe05d0 --- /dev/null +++ b/man/ro/man2html.man @@ -0,0 +1,144 @@ +'\" t +.\" Man page for man2html +.\" aeb, 980101 +.\" +.\" Traducere de Ovidiu Constantin +.TH man2html 1 "1 Ianuarie 1998" +.LO 1 +.SH NUME +man2html \- formateaz o pagin de manual n html +.SH SUMAR +man2html [opuni] [fiier] +.SH DESCRIERE +.B man2html +convertete o pagin de manual aa cum se gsete n +.I fiier +(sau intrarea standard (stdin), n caz c argumentul fiier lipsete, +sau argumentul "-" este folosit) din stilul man nroff n html, i +tiprete rezultatul la ieirea standard (stdout). Suport tbl dar nu +tie de eqn. Starea de ieire este 0. Dac ceva merge eronat, o pagin +de eroare este tiprit la ieirea standard (stdout). + +Poate fi folosit ca un utilitar de sine stttor, dar este n principal +conceput ca un auxiliar, pentru a permite utilizatorilor s navigheze +prin paginile de manual folosind un navigator html ca +.BR lynx (1), +.BR xmosaic (1) +sau +.BR netscape (1). +./" (Vezi +./" .BR man (1) +./" pentru informaii despre cum s navighezi prin paginile de manual cu +./" .BR man2html . +./" De obicei este suficient adugarea "MANHTMLPAGER=/usr/bin/lynx" +./" la mediu.) + +Partea principal a +.B man2html +este motorul troff-to-html scris de Richard Verhoeven (rcb5@win.tue.nl). +Adaug legturi pentru urmtoarele construcii: +.LP +.TS +l l. +foo(3x) "http://localhost/cgi-bin/man/man2html?3x+foo" +method://ir "method://ir" +www.nume.gazd "http://www.nume.gazd" +ftp.nume.gazd "ftp://ftp.nume.gazd" +nume@gazd "mailto:nume@gazd" + "file:/usr/include/string.h" +.TE +.LP +(Primele din acestea pot fi modificate cu opiuni - vezi mai jos.) Nici +o verificare nu este fcut - legturile generate nu trebuie s existe. +De asemenea, este generat un cuprins cu legturi interne spre diverse +seciuni, astfel nct este mai uor pentru cineva s se descurce n +paginile mari de manual ca +.BR bash (1). + +.SH OPIUNI +Cnd se citete de la intrarea standard, nu este ntotdeauna clar cum s +se fac expansiunea .so. Opiunea \-D permite unui script s defineasc +directorul de lucru. +.LP +.TP +.B \-\^D cale +Elimin ultimele dou pri din cale, i face un +\fIchdir\fP(\fIdir\fP) nainte de a ncepe conversia. +.LP +Opiunea \-E permite generarea uoar a mesajelor de eroare dintr-un +script cgi. +.LP +.TP +.B \-\^E ir +Produce o pagin de eroare coninnd mesajul de eroare dat. +.LP +Forma general a unei legturi generate pentru o referin la o pagin +de manual este +.IP + +.LP +cu o form implicit ca mai sus. Prile acestei legturi sunt +configurate folosind diverse opiuni. +.TP +.B \-\^h +Configureaz metod:cele_cgi ca http://localhost. Aceast opiune este implicit. +.TP +.BI \-\^H " gazd[.domeniu][:port]" +Configureaz metod:cale_cgi ca +.RI http:// gazd.domeniu:port . +.TP +.B \-\^l +Configureaz metod:cale_cgi ca +.RI lynxcgi: /home/httpd . +.TP +.BI \-\^L " dir" +Configureaz metod:cale_cgi ca +.RI lynxcgi: dir . +.TP +.BI \-\^M " cale_man2html" +Configureaz cale_man2html care va fi folosit. Implicit ea este +.IR /cgi-bin/man/man2html . +.TP +.B \-\^p +Configureaz separatorul ca '/'. +.TP +.B \-\^q +Configureaz separatorul ca '?'. Aceast opiune este implicit. +.LP +Pe o main care nu ruleaz +.BR httpd , +se poate folosi +.B lynx +pentru a naviga prin paginile de manual, folosind metoda lynxcgi. Cnd +un demon http ruleaz, lynx, sau orice alt navigator, poate fi folosit +pentru a naviga prin paginile de manual, folosind metoda http. Opiunea +\-l (pentru `lynxcgi') selecteaz comportamentul precedent. Cu ea, +cale_cgi este \fI/home/httpd\fP. + +n general, un script cgi poate fi apelat prin +.IP +/? +.LP +i variabilele de mediu PATH_INFO i QUERY_STRING vor fi configurate ca + i respectiv . Din moment ce lynxcgi nu trateaz +partea PATH_INFO, generm legturi cu `?' drept separator n mod +implicit. Opiunea \-p (de la eng. `path' (cale)) selecteaz '/' ca +separator, n timp ce opiunea \-q (de la eng. `query'(cerere)) +selecteaz '?' ca separator. + +Opiunea \-H \fIgazd\fP va specifica gazda care va fi folosit (n loc +de \fIlocalhost\fP). Un script cgi ar putea folosi +.IP +man2html -H $SERVER_NAME +.LP +dac variabila SERVER_NAME este configurat. Aceasta ar permite mainii +s se comporte ca un server i s exporte pagini de manual. + +.SH ERORI +Sunt multe euristici. Rezultatul nu va fi ntotdeauna perfect. Metoda +lynxcgi nu va funciona dac lynx a fost compilat fr a selecta suport +pentru ea. Ar putea fi probleme de securitate. + +.SH "VEZI I" +.BR lynx (1), +.BR man (1) diff --git a/man/ro/whatis.man b/man/ro/whatis.man new file mode 100644 index 0000000..0efed35 --- /dev/null +++ b/man/ro/whatis.man @@ -0,0 +1,34 @@ +.\" +.\" Generated automatically from whatis.1.in by the +.\" configure script. +.\" +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Traducere de Ovidiu Constantin +.TH whatis 1 "5 Ian 1991" +.LO 1 +.SH NUME +whatis \- caut cuvinte complete n baza de date whatis. +.SH SUMAR +.BI whatis +cuvnt_cheie ... +.SH DESCRIERE +whatis caut ntr-un set de baze de date coninnd scurte descrieri ale +comenzilor sistem cuvinte cheie i afieaz rezultatul la ieirea +standard (stdout). Doar rezultatele complete sunt afiate. + +Baza de date whatis este creat folosind comanda @makewhatis@. +.SH "VEZI I" +apropos(1), man(1). diff --git a/man/sl.txt b/man/sl.txt new file mode 100644 index 0000000..70dd991 --- /dev/null +++ b/man/sl.txt @@ -0,0 +1 @@ +slovenian diff --git a/man/sl/apropos.man b/man/sl/apropos.man new file mode 100644 index 0000000..833441f --- /dev/null +++ b/man/sl/apropos.man @@ -0,0 +1,29 @@ +.\" Man page for apropos +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" Slovenski prevod Primo Peterlin , +.\" julij 1996. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH apropos 1 "15. januar 1991" +.LO 1 +.SH IME +apropos \- poii kljuno besedo v datoteki whatis +.SH SINTAKSA +.BI apropos +kljuna_beseda ... +.SH OPIS +apropos preie za kljuno besedo mnoico datotek, ki vsebujejo +kratke opise sistemskih ukazov, in izpie rezultat na standardni +izhod. +.SH "GLEJ TUDI" +whatis(1), man(1). diff --git a/man/sl/man.conf.man b/man/sl/man.conf.man new file mode 100644 index 0000000..69f275f --- /dev/null +++ b/man/sl/man.conf.man @@ -0,0 +1,42 @@ +.\" @(#)man.conf +.TH MAN.CONF 5 "30. marec 1994" +.SH IME +man.conf \- nastavitvena datoteka za program man +.SH OPIS +.LP +To datoteko prebere program +.BR man (1). +Vsebuje (a) informacijo o sestavljanju poti, v katerih man ie +strani prironika, (b) celotne poti do programov, ki jih man +uporablja, kot npr. nroff, eqn, tbl itd., ter (c) seznam +programov, ki znajo dekompresirati datoteke z doloenimi priponami. +Alternativo privzeti verziji te datoteke lahko doloimo z izbiro +.LP +.RS +man -C privatni_man.conf ... +.RE +.LP +Ukazi so lahko navedeni skupaj z izbirami. Nekaj uporabnih izbir +za nroff lahko najdete na strani grotty(1). +Na primer, namesto privzete vrstice +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 +.fi +.RE +.LP +lahko navedemo +.LP +.RS +.nf +NROFF /usr/bin/groff -mandoc -Tlatin1 -P-u -P-b +.fi +.RE +.LP +in prepreimo podrtanje in polkrepki tisk z vekratnim odtisom +(overstrike). +.SH "GLEJTE TUDI" +col(1), (g)eqn(1), (g)pic(1), groff(1), grotty(1), (g)refer(1), (g)tbl(1), +less(1), man (1) and compress(1), gzip(1). + diff --git a/man/sl/man.man b/man/sl/man.man new file mode 100644 index 0000000..a6856cc --- /dev/null +++ b/man/sl/man.man @@ -0,0 +1,263 @@ +.\" Man page for man (and the former manpath) +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" Slovenski prevod Primo Peterlin , +.\" julij 1996. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.\" Many changes - aeb +.\" +.TH man 1 "2. september 1995" +.LO 1 +.SH IME +man \- oblikovanje in prikaz strani on-line prironika +.br +manpath \- prikaz poti do imenikov, kjer man ie prironike +.SH SINTAKSA +.\" man [\-acdfhkKtwW] [\-m system] [\-p string] [\-C config_file] [\-M path] +.\" [\-P pager] [\-S section_list] [section] name ... +man [\-adfhkKtwW] [\-m sistem] [\-p niz] [\-C nastavitvena_datoteka] +[\-M pot] [\-P paginator] [\-S seznam_poglavij] [poglavje] ime ... +.SH OPIS +.B man +oblikuje in prikae strani on-line prironika. Ta izvedba pozna +spremenljivki +.B MANPATH +in +.BR (MAN)PAGER , +tako da si lahko pripravite +lasten nabor osebnih strani prironika in izberete va najljubi +program za prikaz oblikovanih strani. +e je doloeno +.I poglavje, +.B man +ie samo v tem poglavju prironika. +Iz ukazne vrstice ali prek spremenljivk okolja lahko doloite +tudi vrsti red poglavij, ki jih +.B man +preie, ter katere predprocesorje se pred prikazom uporabijo na +izvornem besedilu. +e +.I ime +vsebuje znak /, se najprej preveri, e obstaja datoteka s tem +imenom. Ukaz +.B "man ./foo.5" +ali celo +.B "man /cd/foo/bar.1.gz\fR.\fP" +sta zato povsem veljavna. +.SH IZBIRE +.TP +.B \-\^C " nastavitvena_datoteka" +Doloimo nastavitveno datoteko man.conf, ki jo elimo +uporabljati; privzeta izbira je +@man_config_file@. (glejte man.conf(5).) +.TP +.B \-\^M " pot" +Doloimo seznam imenikov, v katerih se ie za stranmi +prironika. e izbira ni podana, se uporabi spremenljivka okolja +.B MANPATH +e tudi spremenljivke s tem imenom ni, se uporabi privzeta izbira +iz nastavitvene datoteke @man_config_file@. +Prazen niz v MANPATH implicira privzet seznam imenikov. +.TP +.B \-\^P " paginator" +Doloimo paginator. Ta izbira ima prednost pred spremenljivko +okolja +.B MANPAGER, +ki ima nadalje prednost pred spremenljivko okolja +.B PAGER. +Privzeta izbira za paginator je +.BR @pager@ . +.TP +.B \-\^S " seznam_poglavij" +Seznam_poglavij je z dvopiji loen seznam poglavij prironika, +v katerem se ie geslo. Ta izbira ima prednost pred +spremenljivko okolja +.B MANSECT. +.TP +.B \-\^a +Sam po sebi man prikae prvo stran, ki ustreza imenu +.B name. +S to izbiro zahtevamo, da prikae vse strani, ki ustrezajo +pogoju, ne le prve. +.TP +.B \-\^c +Izrecno zahtevamo ponovno oblikovanje strani, etudi e +oblikovana stran obstaja. Izbira je lahko smiselna, e je bila +stran oblikovana za drugano irino zaslona. +.TP +.B \-\^d +Ne prikai oblikovane strani, ampak le "debugging" informacije. +.TP +.B \-\^D +Prikai tako oblikovano stran kot tudi "debugging" informacije. +.TP +.B \-\^f +Isto kot +.B whatis. +.TP +.B \-\^h +Izpii eno vrstico navodila in konaj. +.TP +.B \-\^k +Isto kot +.B apropos. +.TP +.B \-\^K +Preii *vse* strani prironika za dani niz. Pozor: to zelo +verjetno vzame kar nekaj asa! Hitreje gre, e iskanje omejimo +na poglavje. +(Kot grob primer: na avtorjevem raunalniku traja iskanje prek +500 strani prironika priblino minuto.) +.TP +.B \-\^m " sistem" +Doloimo alternativni nabor strani prironika na podanem +sistemu. +.TP +.B \-\^p " niz" +Doloimo zaporedje predprocesorjev, ki se poenejo pred nroff ali +troff. +Nekateri od predprocesorjev, in njihove enorkovne okrajave: +eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). +Ni nujno, da so na vaem sistemu vsi nateti +predprocesorji na voljo. +Ta izbira ima prednost pred spremenljivko okolja +.B MANROFFSEQ. +.TP +.B \-\^t +Uporabi +.B @troff@ +za oblikovanje strani prironika in usmeri izhod na standardni +izhod +.B stdout. +Lahko, da je izhod iz +.B @troff@ +pred tiskom potrebno obdelati s e kaknim filtrom. +.TP +.B \-\^w \fRali\fP \-\-path +Ne prikai oblikovanih strani prironika, ampak pot do datotek, +ki bi bile oblikovane in prikazane. e je izbira brez argumenta, +prikai pot do imenikov, v katerih +.B man +ie strani prironika. e je +.B manpath +povezava na man, tedaj je "manpath" enakovredno "man --path". +.TP +.B \-\^W +Kot \-\^w, le da prikae po eno ime datoteke v vrstici in brez +dodatnih informacij. +To je lahko uporabno v ukazih ukazne lupine, kot npr. +.ft CW +man -aW man | xargs ls -l +.ft + +.SH "OBLIKOVANE STRANI" +Man poskusi shraniti oblikovane strani in tako prihraniti as, +potreben za oblikovanje, ko se stran naslednji rabi. +Tradicionalno se oblikovane strani iz imenikov DIR/manX +shranjujejo v imenike DIR/catX, drugaen dogovor glede preslikave +med izvornimi in oblikovanimi razliicami pa je mono doloiti v +@man_config_file@. +Oblikovane strani se ne shranijo, e ustrezni imenik ne obstaja. +.TP +Program man je mono pripisati (SUID) uporabniku z imenom man. V +tem primeru, kadar je imenik z oblikovanimi stranmi v lasti man, +nain zaite pa 0755 (dovoljeno pisanje samo lastniku -- man), +oblikovane datoteke pa so zaitene z 0644 ali 0444 (dovoljeno +pisanje samo lastniku, ali pa sploh prepovedano pisanje), nihe +od uporabnikov ne more ne more spreminjati oblikovanih strani ali +puati svojih datotek v imeniku z oblikovanimi stranmi. e man +ni v lasti (SUID) uporabnika man, mora biti imenik z oblikovanimi +stranmi dovoljen za pisanje (0777), e naj bo tam vsem uporabnikom +dovoljeno puati oblikovane strani. +.TP +Izbira \-\^c zahteva ponovno oblikovanje strani, etudi recentna +oblikovana stran e obstaja. + + +.SH SPREMENLJIVKE OKOLJA +.TP +.B MANPATH +e nastavimo spremenljivko +.B MANPATH, +se njena vrednost uporabi za pot do strani prironika. +.TP +.B MANROFFSEQ +e nastavimo spremenljivko +.B MANROFFSEQ, +z njeno vrednostjo doloimo zaporedje predprocesorjev, ki +obdelajo stran pred nroff ali troff. Privzeta izbira je +tabelarni predprocesor tbl. +.TP +.B MANSECT +e nastavimo spremenljivko +.B MANSECT, +njena vrednost doloa poglavja v prironiku, v katerih man ie +zahtevano stran. +.TP +.B MANWIDTH +e nastavimo spremenljivko +.B MANWIDTH, +njena vrednost doloa irino zaslona, za katero se oblikujejo +strani prironika. Privzeta izbira je cela irina zaslona. +.TP +.B MANPAGER +e nastavimo spremenljivko +.B MANPAGER, +njena vrednost doloa paginator -- program, ki prikae oblikovano +stran. e spremenljivka ni nastavljena, se uporabi vrednost +spremenljivke +.B PAGER. +e tudi ta ni nastavljena, se uporabi privzeta izbira +.B @pager@. +.TP +.B LANG +e nastavimo spremenljivko +.B LANG, +njena vrednost doloa podimenik, v katerem man najprej poskusi +poiskati stran prironika. Na primer, pri ukazu ,,LANG=dk man 1 foo'' +man najprej poskusi poiskati ustrezno stran prironika v +datoteki .../dk/man1/foo.1, e ta ne obstaja, pa v .../man1/foo.1. +Pri tem je ... eden od imenikov, v katerih man ie strani. +.TP +.B "NLSPATH, LC_MESSAGES, LANG" +Spremenljivki +.B NLSPATH +in +.B LC_MESSAGES +(ali +.B LANG +e LC_MESSAGES ne obstaja) +doloajo katalog s sporoili programa. +(Angleka sporoila so izjema, ker so e vkljuena v program, +tako da zanje ne potrebujemo posebnega kataloga.) +Programi kot npr. col(1), ki ga klie man, prav tako uporabljajo +lokalizacijske spremenljivke (npr. LC_CTYPE). +.TP +.B PATH +.B PATH +se uporablja za sestavljanje privzete poti, v katerih man ie +strani prironika. +.TP +.B SYSTEM +.B SYSTEM +se uporablja za doloitev imena alternativnega sistema (z izbiro +.B \-m). +.SH "GLEJTE TUDI" +apropos(1), whatis(1), less(1), groff(1). +.SH NAPAKE +The +.B \-t +deluje samo, kadar je na voljo troff ali drug enakovreden program. +.br +e namesto pomiljajev vidite utripajoe \e255 or , dodajte +med spremenljivke okolja `LESSCHARSET=latin1'. diff --git a/man/sl/whatis.man b/man/sl/whatis.man new file mode 100644 index 0000000..40e391d --- /dev/null +++ b/man/sl/whatis.man @@ -0,0 +1,31 @@ +.\" Man page for whatis +.\" +.\" Copyright (c) 1990, 1991, John W. Eaton. +.\" Slovenski prevod Primo Peterlin +.\" avgust 1996 +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" +.\" John W. Eaton +.\" jwe@che.utexas.edu +.\" Department of Chemical Engineering +.\" The University of Texas at Austin +.\" Austin, Texas 78712 +.\" +.TH whatis 1 "5. januar 1991" +.LO 1 +.SH IME +whatis \- poii besedo v zbirki whatis. +.SH SINTAKSA +.BI whatis +kljuna_beseda ... +.SH OPIS +whatis poskusi v podatkovnih zbirkah s kratkimi opisi sistemskih +ukazov poiskati kljune besede in izpie rezultat na standardni +izhod. Samo ujemanja celih besed se izpiejo. + +Podatkovno zbirko whatis napravimo z ukazom @makewhatis@. +.SH "GLEJTE TUDI" +apropos(1), man(1). diff --git a/man2html/Makefile b/man2html/Makefile new file mode 100644 index 0000000..ed1b981 --- /dev/null +++ b/man2html/Makefile @@ -0,0 +1,70 @@ +# +# Generated automatically from Makefile.in by the +# configure script. +# +CC = gcc -O +CFLAGS += -Wall -Wstrict-prototypes -Wmissing-prototypes +OBJECTS = man2html.o cgibase.o abbrev.o strdefs.o +EXEEXT = +bindir = $(DESTDIR)$(PREFIX)/usr/bin +mandir = $(DESTDIR)$(PREFIX)/usr/share/man +vardir = $(DESTDIR)$(PREFIX)/var +httpdir = $(DESTDIR)$(PREFIX)/home/httpd +cgiowner = nobody +cgigroup = nobody + +all: man2html$(EXEEXT) hman + +man2html$(EXEEXT): $(OBJECTS) + $(CC) $(LDFLAGS) -o man2html$(EXEEXT) $(OBJECTS) + +# man2html: ../src/version.h + +# This installs the man2html utility +install: man2html$(EXEEXT) + mkdir -p $(bindir) + install -m 755 man2html$(EXEEXT) $(bindir) + mkdir -p $(mandir)/man1 + install -m 644 man2html.1 $(mandir)/man1/man2html.1 + +install-scripts: install-man-scripts install-glimpse-stuff install-hman + +# These are the scripts that allow pointing a browser at +# http://localhost/cgi-bin/man/man2html +# to work. +install-man-scripts: + mkdir -p $(httpdir)/cgi-bin/man + mkdir -p $(httpdir)/cgi-aux/man + install -m 755 scripts/cgi-bin/man/* $(httpdir)/cgi-bin/man + install -m 644 scripts/cgi-aux/man/* $(httpdir)/cgi-aux/man + install -d -o $(cgiowner) -g $(cgigroup) -m 775 $(vardir)/man2html +# (aux was renamed to cgi-aux since aux causes problems under DOS) + +# If you have installed glimpse, and have compressed man pages, +# then perhaps you also want these filters. +install-glimpse-stuff: + install -m 644 glimpse_filters $(vardir)/man2html/.glimpse_filters + +# In order not to have to type a long command like +# netscape http://localhost/cgi-bin/man/man2html?section+topic +# or +# lynx lynxcgi:/home/httpd/cgi-bin/man/man2html?section+topic +# it is convenient to have some shell script as a wrapper. +# The script hman can be aliased to man. It uses an environment +# variable MANHTMLPAGER to find out which browser you use, and +# you can set MANHTMLHOST if the pages are not on localhost. +hman: hman.sh + rm -f hman + sed -e 's,%version%,man-1.6g,' hman.sh > hman + +install-hman: hman + install -m 555 hman $(bindir)/hman + install -m 644 hman.1 $(mandir)/man1/hman.1 + +clean: + rm -f core hman man2html$(EXEEXT) $(OBJECTS) *~ + +spotless: clean + rm -f Makefile + +$(OBJECTS): defs.h diff --git a/man2html/Makefile.in b/man2html/Makefile.in new file mode 100644 index 0000000..b41eaba --- /dev/null +++ b/man2html/Makefile.in @@ -0,0 +1,66 @@ +CC = @CC@ +CFLAGS += -Wall -Wstrict-prototypes -Wmissing-prototypes +OBJECTS = man2html.o cgibase.o abbrev.o strdefs.o +EXEEXT = @EXEEXT@ +bindir = $(DESTDIR)$(PREFIX)/usr/bin +mandir = $(DESTDIR)$(PREFIX)@mandir@ +vardir = $(DESTDIR)$(PREFIX)/var +httpdir = $(DESTDIR)$(PREFIX)/home/httpd +cgiowner = nobody +cgigroup = nobody + +all: man2html$(EXEEXT) hman + +man2html$(EXEEXT): $(OBJECTS) + $(CC) $(LDFLAGS) -o man2html$(EXEEXT) $(OBJECTS) + +# man2html: ../src/version.h + +# This installs the man2html utility +install: man2html$(EXEEXT) + mkdir -p $(bindir) + install -m 755 man2html$(EXEEXT) $(bindir) + mkdir -p $(mandir)/man1 + install -m 644 man2html.1 $(mandir)/man1/man2html.@man1ext@ + +install-scripts: install-man-scripts install-glimpse-stuff install-hman + +# These are the scripts that allow pointing a browser at +# http://localhost/cgi-bin/man/man2html +# to work. +install-man-scripts: + mkdir -p $(httpdir)/cgi-bin/man + mkdir -p $(httpdir)/cgi-aux/man + install -m 755 scripts/cgi-bin/man/* $(httpdir)/cgi-bin/man + install -m 644 scripts/cgi-aux/man/* $(httpdir)/cgi-aux/man + install -d -o $(cgiowner) -g $(cgigroup) -m 775 $(vardir)/man2html +# (aux was renamed to cgi-aux since aux causes problems under DOS) + +# If you have installed glimpse, and have compressed man pages, +# then perhaps you also want these filters. +install-glimpse-stuff: + install -m 644 glimpse_filters $(vardir)/man2html/.glimpse_filters + +# In order not to have to type a long command like +# netscape http://localhost/cgi-bin/man/man2html?section+topic +# or +# lynx lynxcgi:/home/httpd/cgi-bin/man/man2html?section+topic +# it is convenient to have some shell script as a wrapper. +# The script hman can be aliased to man. It uses an environment +# variable MANHTMLPAGER to find out which browser you use, and +# you can set MANHTMLHOST if the pages are not on localhost. +hman: hman.sh + rm -f hman + sed -e 's,%version%,@version@,' hman.sh > hman + +install-hman: hman + install -m 555 hman $(bindir)/hman + install -m 644 hman.1 $(mandir)/man1/hman.@man1ext@ + +clean: + rm -f core hman man2html$(EXEEXT) $(OBJECTS) *~ + +spotless: clean + rm -f Makefile + +$(OBJECTS): defs.h diff --git a/man2html/README b/man2html/README new file mode 100644 index 0000000..6dabd52 --- /dev/null +++ b/man2html/README @@ -0,0 +1,91 @@ +This directory contains the following. + +1. man2html + +This is a pure manroff -> html converter. +No manpath search etc. + +Call: man2html [-l | -H host.domain:port] [filename] + +The contents of FILENAME (or STDIN, in case FILENAME is "-" or absent) +are converted from man-style nroff to html, and printed on STDOUT. + +With "-l" URLs of the form "lynxcgi:/home/httpd/cgi-bin/..." are generated. +With "-H host" we make URLs of the form "http://host/cgi-bin/...". +The default is "http://localhost/cgi-bin/...". + +2. A collection of scripts + +This part is not installed by "make install" of the global Makefile. +There are security considerations: it is very unlikely that these +scripts (still in alpha) are secure, so for the time being they +should only be used where security is not a major concern. + +If you are not afraid, or are not running a httpd, do +"make install-scripts" in this directory. +This does three things: install man stuff, install glimpse stuff, +and install user interface stuff. + +2A. man stuff + +This first part (that can be done separately with "make install-man-scripts") +puts various scripts under /home/httpd/cgi-bin and /home/httpd/cgi-aux +in a subdirectory man. +It will create a directory /var/man2html to hold the indices. +(This directory should be writable by the cgi scripts; +probably that means that the owner should be nobody. +Choose a group and add all non-httpd users that should be +able to write this directory to that group.) + +Structure of the collection of scripts: + man2html is the main script. + It uses man.aux when called without arguments. + It uses manwhatis when asked for an index of manpages+descriptions. + It uses mansec when asked for a compact index of manpages. + It uses mansearch when asked for a glimpse search. + In its turn mansearch uses mansearch.aux when called + without arguments. It uses mansearchhelp (which uses + mansearchhelp.aux) when asked for help. + +2B. glimpse stuff +The second part (that can be done separately with +"make install-glimpse-stuff") installs .glimpse_filters +in /var/man2html, in order to tell glimpse what decompressors to use. + +2C. user interface stuff +The third part (that can be done separately with "make install-hman") +installs a user interface to these scripts in /usr/bin/hman. +Now people can say + alias man=/usr/bin/hman +and have a man that uses a html browser. +The browser is chosen via environment variables - look at the script. + +3. Glimpse. + +For the glimpse part, I quote Michael Hamilton: +---------------------------------------------------------------------- +To use the Glimpse full text searching, you will need to install +glimpse in /usr/bin. Redhat rpm users can get glimpse from + + ftp://ftp.redhat.com/pub/contrib/i386/glimpse-4.0-6.i386.rpm + +The glimpse home ftp site is cs.arizona.edu. N.B. glimpse is not +freely redistributable for commercial use, I'd be very interested in a +more liberal alternative. Having installed glimpse, you will need to +build a glimpse index in /var/man2html. This doesn't take too long - +about 3 minutes on my 486DX2/66 16MB machine. As root do: + + /usr/bin/glimpseindex -z -H /var/man2html /usr/man/man* /usr/X11R6/man/man* \ + /usr/local/man/man* /opt/man/man* + chmod ugo+r /var/man2html/.glimpse* + +The -z option causes glimpse to apply any filters (for decompression etc) +specified in /var/man2html/.glimpse_filters. + +This could be set up as a cron job in /etc/crontab, e.g. (the following +must be all on one line): + + 21 04 * * 1 root /usr/bin/glimpseindex -z -H /var/man2html /usr/man/man* + /usr/X11R6/man/man* /usr/local/man/man* /opt/man/man* ; + chmod +r /var/man2html/.glimpse* +-------------------------------------------------------------------------- diff --git a/man2html/TODO b/man2html/TODO new file mode 100644 index 0000000..b0101ad --- /dev/null +++ b/man2html/TODO @@ -0,0 +1,43 @@ +There are still many problems with man2html. +Partly these are caused by the imprecise definition +of the man file format. (And the many buggy man pages.) +Partly by the incomplete implementation of the man/doc macro packages. +Partly by the imperfect emulation of troff. +Partly by the variation between various browsers in the +accepted html. +Partly just because man2html is buggy. + +Of course in reality a man2html converter must contain +large parts of the troff source, so that it can be fed +with the defining macro packages and always do the right thing. + +On a RedHat 5.0 system: +- /usr/man/mann/DirDlg.n is not formatted correctly. + (It does not start with .TH) +- bug_readline@prep.ai.mit.edu does not generate + a mailto: link. It should generate + nroff and troff", + "INDEX", "Global Index", + "CPG", "C Programmer's Guide", + "CREF", "C Reference Manual", + "ASSY", "Assembly Language Reference", + "PUL", "Programming Utilities and Libraries", + "DEBUG", "Debugging Tools", + "NETP", "Network Programming", + "DRIVER", "Writing Device Drivers", + "STREAMS", "STREAMS Programming", + "SBDK", "SBus Developer's Kit", + "WDDS", "Writing Device Drivers for the SBus", + "FPOINT", "Floating-Point Programmer's Guide", + "SVPG", "SunView 1 Programmer's Guide", + "SVSPG", "SunView 1 System Programmer's Guide", + "PIXRCT", "Pixrect Reference Manual", + "CGI", "SunCGI Reference Manual", + "CORE", "SunCore Reference Manual", + "4ASSY", "Sun-4 Assembly Language Reference", + "SARCH", "SPARC Architecture Manual", + "KR", "The C Programming Language", + 0, 0 }; + +char *lookup_abbrev (char *s) +{ + int i=0; + + if (!s) + return ""; + while (abbrev_list[i] && strcmp(s, abbrev_list[i])) + i = i+2; + return abbrev_list[i] ? abbrev_list[i+1] : s; +} diff --git a/man2html/cgibase.c b/man2html/cgibase.c new file mode 100644 index 0000000..de31cdf --- /dev/null +++ b/man2html/cgibase.c @@ -0,0 +1,143 @@ +/* + * Here are the routines of man2html that output a HREF string. + */ + +#include +#include +#include +#include /* tolower() */ +#include /* strlen() */ +#include "defs.h" + +/* + * The default is to use cgibase. With relative html style + * we generate URLs of the form "../manX/page.html". + */ +static int relat_html_style = 0; + +/* + * Either the user is non-local (or local, but using httpd), + * in which case we use http:/cgi-bin, or the user is local + * and uses lynx, and we use lynxcgi:/home/httpd/cgi-bin. + */ + +static char *man2htmlpath = "/cgi-bin/man/man2html"; /* default */ +static char *cgibase_format = "http://%s"; /* host.domain:port */ +static char *cgibase_ll_format = "lynxcgi:%s"; /* directory */ +static char *cgibase = "http://localhost"; /* default */ + +/* + * Separator between URL and argument string. + * + * With http:/a/b?c+d+e the script is called + * with PATH_INFO=/a/b and QUERY_STRING=c+d+e and args $1=c, $2=d, $3=e. + * With lynxcgi:?c+d+e no PATH_INFO is possible. + */ +static char sep = '?'; /* or '/' */ + +void +set_separator(char s) { + sep = s; +} + +void +set_lynxcgibase(char *s) { + int n = strlen(cgibase_ll_format) + strlen(s); + char *t = (char *) xmalloc(n); + + sprintf(t, cgibase_ll_format, s); + cgibase = t; +} + +void +set_cgibase(char *s) { + int n = strlen(cgibase_format) + strlen(s); + char *t = (char *) xmalloc(n); + + sprintf(t, cgibase_format, s); + cgibase = t; +} + +void +set_man2htmlpath(char *s) { + man2htmlpath = xstrdup(s); +} + +void +set_relative_html_links(void) { + relat_html_style = 1; +} + +/* What shall we say in case of relat_html_style? */ +static char *signature = "
\n" +"This document was created by\n" +"
man2html,\n" +"using the manual pages.
\n" +"%s\n"; + +#define TIMEFORMAT "%T GMT, %B %d, %Y" +#define TIMEBUFSZ 500 + +void print_sig() +{ + char timebuf[TIMEBUFSZ]; + struct tm *timetm; + time_t clock; + + timebuf[0] = 0; +#ifdef TIMEFORMAT + sprintf(timebuf, "Time: "); + clock=time(NULL); + timetm=gmtime(&clock); + strftime(timebuf+6, TIMEBUFSZ-6, TIMEFORMAT, timetm); + timebuf[TIMEBUFSZ-1] = 0; +#endif + printf(signature, cgibase, man2htmlpath, timebuf); +} + +void +include_file_html(char *g) { + printf("%s>", g,g); +} + +void +man_page_html(char *sec, char *h) { + if (relat_html_style) { + if (!h) + printf("" + "Return to Main Contents"); + else + printf("%s", + sec, h, sec, h); + } else { + if (!h) + printf("Return to Main Contents", + cgibase, man2htmlpath); + else if (!sec) + printf("%s", + cgibase, man2htmlpath, sep, h, h); + else + printf("%s", + cgibase, man2htmlpath, sep, sec, h, h); + } +} + +void +ftp_html(char *f) { + printf("%s", f, f); +} + +void +www_html(char *f) { + printf("%s", f, f); +} + +void +mailto_html(char *g) { + printf("%s", g, g); +} + +void +url_html(char *g) { + printf("%s", g, g); +} diff --git a/man2html/defs.h b/man2html/defs.h new file mode 100644 index 0000000..f3e75ef --- /dev/null +++ b/man2html/defs.h @@ -0,0 +1,41 @@ +extern int nroff; +extern int local_lynx; + +typedef struct STRDEF STRDEF; +struct STRDEF { + int nr,slen; + char *st; + STRDEF *next; +}; + +typedef struct INTDEF INTDEF; +struct INTDEF { + int nr; + int val; + int incr; + INTDEF *next; +}; + +extern STRDEF *chardef, *strdef, *defdef; +extern INTDEF *intdef; + +#define V(A,B) ((A)*256+(B)) + +#include +extern void stdinit(void); +extern void print_sig(void); +extern char *lookup_abbrev(char *); +extern void include_file_html(char *); +extern void man_page_html(char*, char *); +extern void ftp_html(char *); +extern void www_html(char *); +extern void mailto_html(char *); +extern void url_html(char *); +extern void set_separator(char); +extern void set_lynxcgibase(char *); +extern void set_cgibase(char *); +extern void set_man2htmlpath(char *); +extern void set_relative_html_links(void); +extern void *xmalloc(size_t size); +extern void *xrealloc(void *ptr, size_t size); +extern char *xstrdup(const char *s); diff --git a/man2html/glimpse_filters b/man2html/glimpse_filters new file mode 100644 index 0000000..1814e5d --- /dev/null +++ b/man2html/glimpse_filters @@ -0,0 +1,3 @@ +*.gz gzip -d -c +*.Z gzip -d -c + diff --git a/man2html/hman b/man2html/hman new file mode 100644 index 0000000..9426c0d --- /dev/null +++ b/man2html/hman @@ -0,0 +1,96 @@ +#!/bin/sh +# +# hman - interface to the man2html scripts +# +# Michael Hamilton , Apr 1996 +# Andries Brouwer , Jan 1998. +# +# Usage examples: +# hman - get start page +# hman man2html - get man page for man2html +# hman 7 locale - get section 7 man page for locale +# hman 1 - section 1 index of names only +# hman 3 index - section 3 index names+descriptions +# hman -k editor - search all man pages for some string +# hman -P arena ./twm.man - specify browser; specify man page +# +# hman from man-1.6g +# + +if [ x"$1" = x"-v" -o x"$1" = x"-V" ]; then + echo "`basename $0` from man-1.6g" + exit 0 +fi + +# The user has to set MANHTMLPAGER (or he will get httpd-free lynx). +# Pick your favorite browser: lynx, xmosaic, netscape, arena, amaya, grail, ... +BROWSER=${MANHTMLPAGER-lynxcgi} +# +# If the man pages are on a remote host, specify it in MANHTMLHOST. +HOST=${MANHTMLHOST-localhost} + +# Perhaps the browser was specified on the command line? +if [ $# -gt 1 -a "$1" = "-P" ]; then + BROWSER="$2" + shift; shift +fi + +# Perhaps the host was specified on the command line? +if [ $# -gt 1 -a "$1" = "-H" ]; then + HOST="$2" + shift; shift +fi + +# Interface to a live (already running) netscape browser. +function nsfunc () { + if ( /bin/ps xc | grep -q 'netscape$' ) ; then + if [ -x netscape-remote ] ; then + exec netscape-remote -remote "openURL($1,new_window)" + else + exec netscape -remote "openURL($1,new_window)" + fi + else + netscape $1 & + fi +} + +case $BROWSER in + lynxcgi) + BROWSER=lynx + CG="lynxcgi:/home/httpd/cgi-bin/man" + ;; + netscape) + BROWSER=nsfunc + CG="http://$HOST/cgi-bin/man" + ;; + *) + CG="http://$HOST/cgi-bin/man" + ;; +esac + + case $# in + 0) $BROWSER $CG/man2html ;; + 1) case "$1" in + 1|2|3|4|5|6|7|8|l|n) + $BROWSER "$CG/mansec?$CG+$1" ;; + /*) + $BROWSER "$CG/man2html?$1" ;; + */*) + $BROWSER "$CG/man2html?$PWD/$1" ;; + *) + $BROWSER "$CG/man2html?$1" ;; + esac ;; + 2) case "$1" in + -k) + $BROWSER "$CG/mansearch?$2" ;; + *) + if [ "$2" = index ]; then + $BROWSER "$CG/manwhatis?$CG+$1" + else + $BROWSER "$CG/man2html?$1+$2" + fi ;; + esac ;; + *) echo "bad number of args" ;; + esac + +exit 0 diff --git a/man2html/hman.1 b/man2html/hman.1 new file mode 100644 index 0000000..4676f55 --- /dev/null +++ b/man2html/hman.1 @@ -0,0 +1,69 @@ +.\" Copyright (c) 1998 Andries Brouwer +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.TH hman 1 "19 January 1998" +.LO 1 +.SH NAME +hman \- browse the on-line manual pages +.SH SYNOPSIS +.B hman +[ -P \fIbrowser\fP ] [ -H \fIhost\fP ] [ \fIsection\fP ] \fIname\fP +.br +.B hman +[ -P \fIbrowser\fP ] [ -H \fIhost\fP ] [ \fIsection\fP ] [ index ] +.SH DESCRIPTION +The +.B hman +script is an interface to man2html(1) that allows you to enter man page +requests at the command line and view the output in your favourite +browser. +The behaviour reminds of that of +.BR man (1) +so that many people will be able to alias +.B hman +to +.BR man . +If the browser used is netscape, and an incarnation of netscape +is running already, +.B hman +will pass the request to the existing browser. + +.SH OPTIONS +.TP +.B \-\^P " browser" +Specify which browser (like lynx, xmosaic, arena, chimera, +netscape, amaya, ...) to use. +This option overrides the +.B MANHTMLPAGER +environment variable. +The default is the non-httpd version of +.BR lynx . +.TP +.B \-\^H " host" +Specify from what host to get the man pages. +This option overrides the +.B MANHTMLHOST +environment variable. +The default is +.BR localhost . + +.SH ENVIRONMENT +.TP +MANHTMLPAGER +The default browser to use is selected using this environment variable. +.TP +MANHTMLHOST +The default host to use is selected using this environment variable. + +.SH "SEE ALSO" +.BR man (1), +.BR man2html (1), +.BR arena (1), +.BR lynx (1), +.BR netscape (1), +.BR xmosaic (1), +.BR glimpse (1) + +http://www.mcom.com/newsref/std/x-remote.html diff --git a/man2html/hman.sh b/man2html/hman.sh new file mode 100755 index 0000000..c484acc --- /dev/null +++ b/man2html/hman.sh @@ -0,0 +1,96 @@ +#!/bin/sh +# +# hman - interface to the man2html scripts +# +# Michael Hamilton , Apr 1996 +# Andries Brouwer , Jan 1998. +# +# Usage examples: +# hman - get start page +# hman man2html - get man page for man2html +# hman 7 locale - get section 7 man page for locale +# hman 1 - section 1 index of names only +# hman 3 index - section 3 index names+descriptions +# hman -k editor - search all man pages for some string +# hman -P arena ./twm.man - specify browser; specify man page +# +# hman from %version% +# + +if [ x"$1" = x"-v" -o x"$1" = x"-V" ]; then + echo "`basename $0` from %version%" + exit 0 +fi + +# The user has to set MANHTMLPAGER (or he will get httpd-free lynx). +# Pick your favorite browser: lynx, xmosaic, netscape, arena, amaya, grail, ... +BROWSER=${MANHTMLPAGER-lynxcgi} +# +# If the man pages are on a remote host, specify it in MANHTMLHOST. +HOST=${MANHTMLHOST-localhost} + +# Perhaps the browser was specified on the command line? +if [ $# -gt 1 -a "$1" = "-P" ]; then + BROWSER="$2" + shift; shift +fi + +# Perhaps the host was specified on the command line? +if [ $# -gt 1 -a "$1" = "-H" ]; then + HOST="$2" + shift; shift +fi + +# Interface to a live (already running) netscape browser. +function nsfunc () { + if ( /bin/ps xc | grep -q 'netscape$' ) ; then + if [ -x netscape-remote ] ; then + exec netscape-remote -remote "openURL($1,new_window)" + else + exec netscape -remote "openURL($1,new_window)" + fi + else + netscape $1 & + fi +} + +case $BROWSER in + lynxcgi) + BROWSER=lynx + CG="lynxcgi:/home/httpd/cgi-bin/man" + ;; + netscape) + BROWSER=nsfunc + CG="http://$HOST/cgi-bin/man" + ;; + *) + CG="http://$HOST/cgi-bin/man" + ;; +esac + + case $# in + 0) $BROWSER $CG/man2html ;; + 1) case "$1" in + 1|2|3|4|5|6|7|8|l|n) + $BROWSER "$CG/mansec?$CG+$1" ;; + /*) + $BROWSER "$CG/man2html?$1" ;; + */*) + $BROWSER "$CG/man2html?$PWD/$1" ;; + *) + $BROWSER "$CG/man2html?$1" ;; + esac ;; + 2) case "$1" in + -k) + $BROWSER "$CG/mansearch?$2" ;; + *) + if [ "$2" = index ]; then + $BROWSER "$CG/manwhatis?$CG+$1" + else + $BROWSER "$CG/man2html?$1+$2" + fi ;; + esac ;; + *) echo "bad number of args" ;; + esac + +exit 0 diff --git a/man2html/locales/en/hman.1 b/man2html/locales/en/hman.1 new file mode 100644 index 0000000..4676f55 --- /dev/null +++ b/man2html/locales/en/hman.1 @@ -0,0 +1,69 @@ +.\" Copyright (c) 1998 Andries Brouwer +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.TH hman 1 "19 January 1998" +.LO 1 +.SH NAME +hman \- browse the on-line manual pages +.SH SYNOPSIS +.B hman +[ -P \fIbrowser\fP ] [ -H \fIhost\fP ] [ \fIsection\fP ] \fIname\fP +.br +.B hman +[ -P \fIbrowser\fP ] [ -H \fIhost\fP ] [ \fIsection\fP ] [ index ] +.SH DESCRIPTION +The +.B hman +script is an interface to man2html(1) that allows you to enter man page +requests at the command line and view the output in your favourite +browser. +The behaviour reminds of that of +.BR man (1) +so that many people will be able to alias +.B hman +to +.BR man . +If the browser used is netscape, and an incarnation of netscape +is running already, +.B hman +will pass the request to the existing browser. + +.SH OPTIONS +.TP +.B \-\^P " browser" +Specify which browser (like lynx, xmosaic, arena, chimera, +netscape, amaya, ...) to use. +This option overrides the +.B MANHTMLPAGER +environment variable. +The default is the non-httpd version of +.BR lynx . +.TP +.B \-\^H " host" +Specify from what host to get the man pages. +This option overrides the +.B MANHTMLHOST +environment variable. +The default is +.BR localhost . + +.SH ENVIRONMENT +.TP +MANHTMLPAGER +The default browser to use is selected using this environment variable. +.TP +MANHTMLHOST +The default host to use is selected using this environment variable. + +.SH "SEE ALSO" +.BR man (1), +.BR man2html (1), +.BR arena (1), +.BR lynx (1), +.BR netscape (1), +.BR xmosaic (1), +.BR glimpse (1) + +http://www.mcom.com/newsref/std/x-remote.html diff --git a/man2html/locales/en/man2html.1 b/man2html/locales/en/man2html.1 new file mode 100644 index 0000000..c1c25b3 --- /dev/null +++ b/man2html/locales/en/man2html.1 @@ -0,0 +1,151 @@ +'\" t +.\" Man page for man2html +.\" aeb, 980101 +.\" +.TH man2html 1 "1 January 1998" +.LO 1 +.SH NAME +man2html \- format a manual page in html +.SH SYNOPSIS +man2html [options] [file] +.SH DESCRIPTION +.B man2html +converts a manual page as found in +.I file +(or stdin, in case no file argument, or the argument "-", is given) +from man-style nroff into html, and prints the result on stdout. +It does support tbl but does not know about eqn. +The exit status is 0. If something goes wrong, +an error page is printed on stdout. + +This can be used as a stand-alone utility, but is mainly intended +as an auxiliary, to enable users to browse their man pages using +a html browser like +.BR lynx (1), +.BR xmosaic (1) +or +.BR netscape (1). +./" (See +./" .BR man (1) +./" for info on how to browse man pages via +./" .BR man2html . +./" Usually it would suffice to put "MANHTMLPAGER=/usr/bin/lynx" +./" in the environment.) + +The main part of +.B man2html +is the troff-to-html engine written by Richard Verhoeven (rcb5@win.tue.nl). +It adds hyperlinks for the following constructs: +.LP +.TS +l l. +foo(3x) "http://localhost/cgi-bin/man/man2html?3x+foo" +method://string "method://string" +www.host.name "http://www.host.name" +ftp.host.name "ftp://ftp.host.name" +name@host "mailto:name@host" + "file:/usr/include/string.h" +.TE +.LP +(The first of these can be tuned by options - see below.) +No lookup is done - the links generated need not exist. +Also an index with internal hyperlinks to the various sections +is generated, so that it is easier to find one's way +in large man pages like +.BR bash (1). + +.SH OPTIONS +When reading from stdin, it is not always clear how to +do .so expansion. The \-D option allows a script to define +the working directory. +.LP +.TP +.B \-\^D pathname +Strip the last two parts from the pathname, and do a +\fIchdir\fP(\fIdir\fP) before starting the conversion. +.LP +The \-E option allows the easy generation of error messages +from a cgi script. +.LP +.TP +.B \-\^E string +Output an error page containing the given error message. +.LP +The general form of a hyperlink generated for a man page reference is +.IP + +.LP +with a default as shown above. The parts of this hyperlink +are set using the various options. +.TP +.B \-\^h +Set method:cgipath to http://localhost. This is the default. +.TP +.BI \-\^H " host[.domain][:port]" +Set method:cgipath to +.RI http:// host.domain:port . +.TP +.B \-\^l +Set method:cgipath to +.RI lynxcgi: /home/httpd . +.TP +.BI \-\^L " dir" +Set method:cgipath to +.RI lynxcgi: dir . +.TP +.BI \-\^M " man2htmlpath" +Set the man2htmlpath to use. The default is +.IR /cgi-bin/man/man2html . +.TP +.B \-\^p +Set separator to '/'. +.TP +.B \-\^q +Set separator to '?'. This is the default. +.TP +.B \-\^r +Use relative html paths, instead of cgi-bin paths. +.LP +On a machine without running +.BR httpd , +one can use +.B lynx +to browse the man pages, using the lynxcgi method. +When some http daemon is running, lynx, or any other browser, +can be used to browse the man pages, using the http method. +The option \-l (for `lynxcgi') selects the former behaviour. +With it, the default cgipath is \fI/home/httpd\fP. + +In general, a cgi script can be called by +.IP +/? +.LP +and the environment variables PATH_INFO and QUERY_STRING +will be set to and , respectively. +Since lynxcgi does not handle the PATH_INFO part, we generate +hyperlinks with `?' as a separator by default. +The option \-p (for `path') selects '/' as a separator, while +the option \-q (for `query') selects '?' as a separator. + +The option \-H \fIhost\fP will specify the host to use +(instead of \fIlocalhost\fP). A cgi script could use +.IP +man2html -H $SERVER_NAME +.LP +if the variable SERVER_NAME is set. This would allow your machine +to act as a server and export man pages. + +.SH BUGS +There are many heuristics. The output will not always be perfect. +The lynxcgi method will not work if lynx was compiled without +selecting support for it. There may be problems with security. + +.SH AUTHOR +Richard Verhoeven was the original author of +.BR "man2html" . +Michael Hamilton and Andries Brouwer subsequently improved on it. +Federico Lucifredi is the current maintainer. + +.SH "SEE ALSO" +.BR lynx (1), +.BR man (1) diff --git a/man2html/locales/fr/man2html.1 b/man2html/locales/fr/man2html.1 new file mode 100644 index 0000000..1e99cd8 --- /dev/null +++ b/man2html/locales/fr/man2html.1 @@ -0,0 +1,165 @@ +'\" t +.\" Man page for man2html +.\" aeb, 980101 +.\" +.TH man2html 1 "1er janvier 1998" "Manuel Linux" "Commandes utilisateur" +.LO 1 +.SH NOM +man2html \- formate une page de manuel en html +.SH SYNOPSIS +man2html [options] [fichier] +.SH DESCRIPTION +.B man2html +convertit une page de manuel telle que trouve dans +.I fichier +(ou l'entre standard stdin si aucun argument fichier n'est donn +ou si l'argument \ -\ est donn) partir du format nroff +(celui des pages de manuels) vers un format html et affiche le rsultat +sur la sortie standard (stdout). +.B man2html +supporte +.BR tbl (1) +mais ne connat rien propos de +.BR eqn (1). +Le code de sortie est 0. Si quelque chose va mal, une page d'erreur +est affiche sur la sortie standard stdout. + +Cette commande peut tre utilise seule mais a t principalement conue pour +tre un auxiliaire afin que les utilisateurs puissent naviguer dans les pages +de manuel avec un navigateur html comme +.BR lynx (1), +.BR xmosaic (1) +ou +.BR netscape (1). +./" (See +./" .BR man (1) +./" for info on how to browse man pages via +./" .BR man2html . +./" Usually it would suffice to put "MANHTMLPAGER=/usr/bin/lynx" +./" in the environment.) + +La plus grande partie de +.B man2html +est l'engin \ troff-vers-html\ crit par Richard Verhoeven (rcb5@win.tue.nl). +Il ajoute des hyperliens aux constructions suivantes\ : +.LP +.TS +l l. +foo(3x) "http://localhost/cgi-bin/man/man2html?3x+foo" +method://string "method://string" +www.host.name "http://www.host.name" +ftp.host.name "ftp://ftp.host.name" +name@host "mailto:name@host" + "file:/usr/include/string.h" +.TE +.LP +(La premire de celles\-ci peut tre ajuste par des options - voir plus loin.) +Aucune consultation n'est effectue - les liens gnrs n'ont pas besoin +d'exister. Un index avec des hyperliens internes vers les diverses +sections est galement cr rendant plus facile la navigation dans les grandes +pages comme +.BR bash (1). + +.SH OPTIONS +Lorsqu'on lit partir de stdin, il n'est pas toujours vident de savoir +comment se fait l'expansion .so. L'option \-D permet un script de dfinir +le rpertoire de travail. +.LP +.TP +.B \-\^D chemin +Retire les deux derniers lments du chemin et effectue un changement +de rpertoire courant \fIchdir\fP(\fIdir\fP) avant de dbuter la conversion. +.LP +L'option \-E option facilite la production de messages d'erreurs partir +de scripts cgi. +.LP +.TP +.B \-\^E chane +Produire en sortie une page d'erreur contenant le message d'erreur donn. +.LP +La forme gnrale d'un hyperlien gnr pour rfrencer une page de manuel est +.IP + +.LP +qui est d'ailleurs la forme par dfaut. Les lments de cet hyperlien sont +positionns en utilisant diverses options. +.TP +.B \-\^h +Positionner method:cgipath http://localhost. +C'est le comportement par dfaut. +.TP +.BI \-\^H " hte[.domaine][:port]" +Positionner method:cgipath +.RI http:// hte.domaine:port . +.TP +.B \-\^l +Positionner method:cgipath +.RI lynxcgi: /home/httpd . +.TP +.BI \-\^L " dir" +Positionner method:cgipath +.RI lynxcgi: dir . +.TP +.BI \-\^M " man2htmlpath" +Positionner le chemin vers man2html utiliser. La valeur par dfaut est +.IR /cgi-bin/man/man2html . +.TP +.B \-\^p +Positionner le sparateur \ /\ . +.TP +.B \-\^q +Positionner le sparateur \ ?\ . C'est la valeur par dfaut. +.TP +.B \-\^r +Utiliser des chemins html relatifs plutt que les chemins cgi-bin. +.LP +Sur une machine sur laquelle +.BR httpd +ne tourne pas, vous pouvez utiliser +.B lynx +pour naviguer dans les pages de manuel en utilisant la mthode lynxcgi. +Lorsqu'un dmon http est en service, vous pouvez utiliser lynx ou n'importe +quel autre navigateur pour parcourir les pages de manuel en utilisant +la mthode http. +L'option \-l (pour \ lynxcgi\ ) slectionne ce fonctionnement. +Avec elle, le chemin cgi par dfaut est \fI/home/httpd\fP. + +En gnral, un script cgi peut tre appel de la faon suivante +.IP +/? +.LP +et les variables d'environnement PATH_INFO et QUERY_STRING seront positionnes +respectivement et . +Puisque lynxcgi ne gre pas l'lment PATH_INFO, nous allons gnrer des +hyperliens avec \ ?\ comme sparateur par dfaut. +L'option \-p (pour \ path\ ) slectionne \ /\ comme sparateur, alors que +l'option \-q (for \ query\ ) slectionne \ ?\ . + +L'option \-H \fIhost\fP spcifiera l'hte utiliser +( la place \fIlocalhost\fP). Un script cgi pourra utiliser +.IP +man2html -H $SERVER_NAME +.LP +si la variable SERVER_NAME est positionne. Cela permettra votre machine +de fonctionner en tant que serveur et d'exporter les pages manuel. + +.SH BOGUES +Il y a beaucoup d'heuristiques. La sortie produite ne sera pas toujours +parfaite. La mthode lynxcgi ne fonctionnera pas si lynx a t compil sans +le support de celle-ci. Il peut y avoir des problmes de scurit. + +.SH "VOIR AUSSI" +.BR lynx (1), +.BR man (1) + +.SH TRADUCTION +.PP +Ce document est une traduction ralise par Alain Portal + le 1er juin 2005 et mise jour +le 7 novembre 2005. +.PP +L'quipe de traduction a fait le maximum pour raliser une adaptation +franaise de qualit. La version anglaise la plus jour de ce document est +toujours consultable via la commande\ : \ \fBLANG=en\ man\ 1\ man2html\fR\ . +N'hsitez pas signaler l'auteur ou au traducteur, selon le cas, toute +erreur dans cette page de manuel. diff --git a/man2html/locales/it/hman.1 b/man2html/locales/it/hman.1 new file mode 100644 index 0000000..730de9c --- /dev/null +++ b/man2html/locales/it/hman.1 @@ -0,0 +1,71 @@ +.\" Copyright (c) 1998 Andries Brouwer +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License as specified in the README file that comes with the man 1.0 +.\" distribution. +.\" Traduzione da man-1.6d di Giulio Daprel +.\" Revisione a cura di Vieri Giugni +.\" agosto 2006 +.\" +.TH hman 1 "19 Gennaio 1998" +.LO 1 +.SH NOME +hman \- naviga le pagine di manuale on-line +.SH SINTASSI +.B hman +[ -P \fIbrowser\fP ] [ -H \fIhost\fP ] [ \fIsection\fP ] \fIname\fP +.br +.B hman +[ -P \fIbrowser\fP ] [ -H \fIhost\fP ] [ \fIsection\fP ] [ index ] +.SH DESCRIZIONE +Lo script +.B hman + un'interfaccia per man2html(1), che permette di inserire richieste di man +page dalla linea di comando e vedere l'output nel browser +preferito. +Il comportamento ricorda quello di +.BR man (1) +perci molte persone potranno utilizzare un alias da +.B hman +a +.BR man . +Se il browser usato netscape, e una copia di netscape + gi in esecuzione, +.B hman +passer la richiesta a quest'ultima + +.SH OPZIONI +.TP +.B \-\^P " browser" +Specifica quale browser (lynx, xmosaic, arena, chimera, +netscape, amaya, ...) usare. +Questa opzione sovrascrive la variabile d'ambiente +.B MANHTMLPAGER . +Il valore predefinito la versione non-httpd di +.BR lynx . +.TP +.B \-\^H " host" +Specifica da quale host prendere le man page. +Questa opzione sovrascrive la variabile d'ambiente +.B MANHTMLHOST . +Il valore predefinito +.BR localhost . + +.SH AMBIENTE +.TP +MANHTMLPAGER +Il browser predefinito in uso selezionato da questa variabile d'ambiente. +.TP +MANHTMLHOST +L'host predefinito in uso selezionato da questa variabile d'ambiente. + +.SH "VEDERE ANCHE" +.BR man (1), +.BR man2html (1), +.BR arena (1), +.BR lynx (1), +.BR netscape (1), +.BR xmosaic (1), +.BR glimpse (1) + +http://www.mcom.com/newsref/std/x-remote.html diff --git a/man2html/locales/it/man2html.1 b/man2html/locales/it/man2html.1 new file mode 100644 index 0000000..45feef0 --- /dev/null +++ b/man2html/locales/it/man2html.1 @@ -0,0 +1,153 @@ +'\" t +.\" Man page for man2html +.\" aeb, 980101 +.\" +.\" Traduzione da man-1.6d di Giulio Daprel +.\" Revisione a cura di Vieri Giugni +.\" giugno 2006 +.\" +.TH man2html 1 "1 gennaio 1998" +.LO 1 +.SH NOME +man2html \- formatta una pagina di manuale in html +.SH SINTASSI +man2html [options] [file] +.SH DESCRIZIONE +.B man2html +converte una pagina di manuale che si trova in +.I file +(o standard input (stdin); nel caso non venga fornito alcun file come +argomento, o sia indicato "-", come argomento) +dallo stile man nroff in html, e stampa il risultato in standard output (stdout). +Supporta tbl, ma non conosce eqn. +Lo stato di uscita 0. Se qualcosa va male +viene stampata su stdout una pagina di errore. + +Pu essere usato come utilit stand-alone, ma pensato principalmente +come ausilio per permettere agli utenti di navigare le proprie man page +usando un browser html come +.BR lynx (1), +.BR xmosaic (1) +o +.BR netscape (1). +./" (See +./" .BR man (1) +./" for info on how to browse man pages via +./" .BR man2html . +./" Usually it would suffice to put "MANHTMLPAGER=/usr/bin/lynx" +./" in the environment.) + +La parte principale di +.B man2html + il motore da troff a html scritto da Richard Verhoeven (rcb5@win.tue.nl). +Esso aggiunge dei collegamenti ipertestuali per i seguenti costrutti: +.LP +.TS +l l. +foo(3x) "http://localhost/cgi-bin/man/man2html?3x+foo" +method://string "method://string" +www.host.name "http://www.host.name" +ftp.host.name "ftp://ftp.host.name" +name@host "mailto:name@host" + "file:/usr/include/string.h" +.TE +.LP +(Il primo di questi pu essere controllato dalle opzioni - vedere sotto). +Non viene fatto nessun controllo - i collegamenti generati non sono +necessari o indispensabili. +Inoltre viene generato un indice con collegamenti interni alle varie sezioni, +in modo che sia pi facile effettuare ricerche personalizzate in pagine di +manuale grandi come +.BR bash (1). + +.SH OPZIONI +Quando si legge da stdin non sempre chiaro come effettuare l'espansione +.so . L'opzione \-D permette a uno script di definire la +directory di lavoro. +.LP +.TP +.B \-\^D pathname +Estrae le ultime due parti dal percorso, ed esegue +\fIchdir\fP(\fIdir\fP) prima di iniziare la conversione. +.LP +L'opzione \-E permette una facile generazione di messaggi di errore +da uno script cgi. +.LP +.TP +.B \-\^E string +Genera una pagina di errore contenente il messaggio di errore che si verificato. +.LP +La forma generale di un collegamento ipertestuale creato per una +man page di riferimento +.IP + +.LP +con un valore predefinito come mostrato sopra. Le parti di questo collegamento +ipertestuale sono impostate usando le varie opzioni. +.TP +.B \-\^h +Set method:cgipath to http://localhost. Questo il valore predefinito. +.TP +.BI \-\^H " host[.domain][:port]" +Set method:cgipath to +.RI http:// host.domain:port . +.TP +.B \-\^l +Set method:cgipath to +.RI lynxcgi: /home/httpd . +.TP +.BI \-\^L " dir" +Set method:cgipath to +.RI lynxcgi: dir . +.TP +.BI \-\^M " man2htmlpath" +Imposta il man2htmlpath da usare. Il valore predefinito +.IR /cgi-bin/man/man2html . +.TP +.B \-\^p +Imposta '/' come separatore. +.TP +.B \-\^q +Imposta '?' come separatore. Questo il valore predefinito. +.TP +.B \-\^r +Usa percorsi html relativi, invece dei percorsi cgi-bin. +.LP +Su una macchina, senza eseguire +.BR httpd , +si pu usare +.B lynx +per navigare le man page, usando il metodo lynxcgi. +Quando attivo qualche demone http, lynx, o qualunque altro browser, +pu essere usato per navigare le man page, usando il metodo http. +L'opzione \-l (per `lynxcgi') seleziona il comportamento precedente. +Con esso, il valore predefinito di cgipath \fI/home/httpd\fP. + +In generale, uno script cgi pu essere chiamato da +.IP +/? +.LP +e le variabili d'ambiente PATH_INFO e QUERY_STRING +verranno impostate rispettivamente in e . +Poich lynxcgi non gestisce la parte PATH_INFO, vengono generati +collegamenti ipertestualil con `?' come separatore predefinito. +L'opzione \-p (per `path') seleziona '/' come separatore, mentre +l'opzione \-q (per `query') seleziona '?' come separatore. + +L'opzione \-H \fIhost\fP specificher l'host da usare +(invece di \fIlocalhost\fP). Uno script cgi pu usare +.IP +man2html -H $SERVER_NAME +.LP +se impostata la variabile SERVER_NAME . Questo permetter alla propria +macchina di comportarsi come un server ed esportare man page. + +.SH BUG +Ci sono molti fattori difficilmente prevedibili. L'output potrebbe non +essere sempre perfetto. Il metodo lynxcgi non funzioner se lynx stato +compilato senza selezionare il supporto per quest'ultimo. Ci potrebbero +essere problemi di sicurezza. + +.SH "VEDERE ANCHE" +.BR lynx (1), +.BR man (1) diff --git a/man2html/man2html.1 b/man2html/man2html.1 new file mode 100644 index 0000000..c1c25b3 --- /dev/null +++ b/man2html/man2html.1 @@ -0,0 +1,151 @@ +'\" t +.\" Man page for man2html +.\" aeb, 980101 +.\" +.TH man2html 1 "1 January 1998" +.LO 1 +.SH NAME +man2html \- format a manual page in html +.SH SYNOPSIS +man2html [options] [file] +.SH DESCRIPTION +.B man2html +converts a manual page as found in +.I file +(or stdin, in case no file argument, or the argument "-", is given) +from man-style nroff into html, and prints the result on stdout. +It does support tbl but does not know about eqn. +The exit status is 0. If something goes wrong, +an error page is printed on stdout. + +This can be used as a stand-alone utility, but is mainly intended +as an auxiliary, to enable users to browse their man pages using +a html browser like +.BR lynx (1), +.BR xmosaic (1) +or +.BR netscape (1). +./" (See +./" .BR man (1) +./" for info on how to browse man pages via +./" .BR man2html . +./" Usually it would suffice to put "MANHTMLPAGER=/usr/bin/lynx" +./" in the environment.) + +The main part of +.B man2html +is the troff-to-html engine written by Richard Verhoeven (rcb5@win.tue.nl). +It adds hyperlinks for the following constructs: +.LP +.TS +l l. +foo(3x) "http://localhost/cgi-bin/man/man2html?3x+foo" +method://string "method://string" +www.host.name "http://www.host.name" +ftp.host.name "ftp://ftp.host.name" +name@host "mailto:name@host" + "file:/usr/include/string.h" +.TE +.LP +(The first of these can be tuned by options - see below.) +No lookup is done - the links generated need not exist. +Also an index with internal hyperlinks to the various sections +is generated, so that it is easier to find one's way +in large man pages like +.BR bash (1). + +.SH OPTIONS +When reading from stdin, it is not always clear how to +do .so expansion. The \-D option allows a script to define +the working directory. +.LP +.TP +.B \-\^D pathname +Strip the last two parts from the pathname, and do a +\fIchdir\fP(\fIdir\fP) before starting the conversion. +.LP +The \-E option allows the easy generation of error messages +from a cgi script. +.LP +.TP +.B \-\^E string +Output an error page containing the given error message. +.LP +The general form of a hyperlink generated for a man page reference is +.IP + +.LP +with a default as shown above. The parts of this hyperlink +are set using the various options. +.TP +.B \-\^h +Set method:cgipath to http://localhost. This is the default. +.TP +.BI \-\^H " host[.domain][:port]" +Set method:cgipath to +.RI http:// host.domain:port . +.TP +.B \-\^l +Set method:cgipath to +.RI lynxcgi: /home/httpd . +.TP +.BI \-\^L " dir" +Set method:cgipath to +.RI lynxcgi: dir . +.TP +.BI \-\^M " man2htmlpath" +Set the man2htmlpath to use. The default is +.IR /cgi-bin/man/man2html . +.TP +.B \-\^p +Set separator to '/'. +.TP +.B \-\^q +Set separator to '?'. This is the default. +.TP +.B \-\^r +Use relative html paths, instead of cgi-bin paths. +.LP +On a machine without running +.BR httpd , +one can use +.B lynx +to browse the man pages, using the lynxcgi method. +When some http daemon is running, lynx, or any other browser, +can be used to browse the man pages, using the http method. +The option \-l (for `lynxcgi') selects the former behaviour. +With it, the default cgipath is \fI/home/httpd\fP. + +In general, a cgi script can be called by +.IP +/? +.LP +and the environment variables PATH_INFO and QUERY_STRING +will be set to and , respectively. +Since lynxcgi does not handle the PATH_INFO part, we generate +hyperlinks with `?' as a separator by default. +The option \-p (for `path') selects '/' as a separator, while +the option \-q (for `query') selects '?' as a separator. + +The option \-H \fIhost\fP will specify the host to use +(instead of \fIlocalhost\fP). A cgi script could use +.IP +man2html -H $SERVER_NAME +.LP +if the variable SERVER_NAME is set. This would allow your machine +to act as a server and export man pages. + +.SH BUGS +There are many heuristics. The output will not always be perfect. +The lynxcgi method will not work if lynx was compiled without +selecting support for it. There may be problems with security. + +.SH AUTHOR +Richard Verhoeven was the original author of +.BR "man2html" . +Michael Hamilton and Andries Brouwer subsequently improved on it. +Federico Lucifredi is the current maintainer. + +.SH "SEE ALSO" +.BR lynx (1), +.BR man (1) diff --git a/man2html/man2html.c b/man2html/man2html.c new file mode 100644 index 0000000..b37eef6 --- /dev/null +++ b/man2html/man2html.c @@ -0,0 +1,3241 @@ +/* +** This program was written by Richard Verhoeven (NL:5482ZX35) +** at the Eindhoven University of Technology. Email: rcb5@win.tue.nl +** +** Permission is granted to distribute, modify and use this program +** as long as this comment is not removed or changed. +*/ + +/* BSD mandoc stuff added by Michael Hamilton. */ + +/* This program is rather buggy, but in spite of that it often works. + Improved things a little - April 1997 & January 1998 & Dec 2001 - + aeb@cwi.nl. */ + +#include +#include +#include +#include +#include +#include +#include +#include "defs.h" +#include "../src/version.h" + +/* BSD mandoc Bd/Ed example(?) blocks */ +#define BD_LITERAL 1 +#define BD_INDENT 2 + +#define SIZE(a) (sizeof(a)/sizeof(*a)) + +static char NEWLINE[2]="\n"; +static char idxlabel[6] = "ixAAA"; + +#define INDEXFILE "/tmp/manindex.list" + +char *fname; +char *directory; +FILE *idxfile; + +char eqndelimopen=0, eqndelimclose=0; +char escapesym='\\', nobreaksym='\'', controlsym='.', fieldsym=0, padsym=0; + +char *buffer=NULL; +int buffpos=0, buffmax=0; +int scaninbuff=0; +int still_dd=0; +int tabstops[20] = { 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96 }; +int maxtstop=12; +int curpos=0; + +static char *scan_troff(char *c, int san, char **result); +static char *scan_troff_mandoc(char *c, int san, char **result); + +static char **argument=NULL; + +static char charb[3]; + +static char * +expand_char(int nr) +{ + STRDEF *h; + + if (!nr) + return NULL; + + h = chardef; + if (h->nr != V('*','*')) { + printf("chardef corrupted\n"); + exit(1); + } + + for (h = chardef; h; h = h->next) + if (h->nr == nr) { + curpos += h->slen; + return h->st; + } + charb[0] = nr/256; + charb[1] = nr%256; + charb[2] = 0; + curpos += 2; + return charb; +} + +static char * +expand_string(int nr) +{ + STRDEF *h; + + if (!nr) + return NULL; + for (h = strdef; h; h = h->next) + if (h->nr == nr) { + curpos += h->slen; + return h->st; + } + return NULL; +} + + +static char outbuffer[1024]; +static int obp=0; +static int no_newline_output=0; /* boolean, set by \c */ +static int newline_for_fun=0; +static int output_possible=0; +static int out_length=0; + +static void +add_links(char *c) +{ + /* + ** Add the links to the output. + ** At the moment the following are recognized: + ** + ** name(*) -> ../man?/name.* + ** method://string -> method://string + ** www.host.name -> http://www.host.name + ** ftp.host.name -> ftp://ftp.host.name + ** name@host -> mailto:name@host + ** -> file:/usr/include/name.h (guess) + ** + ** Other possible links to add in the future: + ** + ** /dir/dir/file -> file:/dir/dir/file + */ + int i,j,nr; + char *f, *g, *h; + char *idtest[6]; /* url, mailto, www, ftp, manpage, include file */ + + out_length+=strlen(c); + + nr=0; + idtest[0]=strstr(c+1,"://"); + idtest[1]=strchr(c+1,'@'); + idtest[2]=strstr(c,"www."); + idtest[3]=strstr(c,"ftp."); + idtest[4]=strchr(c+1,'('); + idtest[5]=strstr(c+1,".h>"); + for (i=0; i<6; i++) nr += (idtest[i]!=NULL); + while (nr) { + j=-1; + for (i=0; i<6; i++) + if (idtest[i] && (j<0 || idtest[i] */ + f=idtest[5]; + h=f+2; + g=f; + while (g>c && g[-1]!=';') g--; + if (g!=c) { + char t; + t=*g; + *g=0; + printf("%s",c); + *g=t;*h=0; + include_file_html(g); + c=f+6; + } else { + f[5]=0; + printf("%s",c); + f[5]=';'; + c=f+5; + } + break; + case 4: /* manpage? */ + f=idtest[j]; + /* find section - accept (1), (3F), (3Xt), (n), (l) */ + g=strchr(f,')'); + if (g && g-f<7 /* section has length at most 5, like 3Xlib */ + /* preceded by name or html markup */ + && (isalnum(f[-1]) || f[-1]=='>') + /* section is n or l or starts with a digit */ + && strchr("123456789nl", f[1]) + && (g-f == 2 || (g-f == 3 && isdigit(f[1]) && isalpha(f[2])) + || (f[2] == 'X' && isdigit(f[1]))) + ) { + /* this might be a link */ + h=f-1; + /* skip html markup */ + while (h>c && *h=='>') { + while (h!=c && *h!='<') h--; + if (h!=c) h--; + } + if (isalnum(*h)) { + char t,te,tg,*e; + e=h+1; + while (h>c && (isalnum(h[-1]) || h[-1]=='_' || + h[-1]=='-' || h[-1]=='.' || h[-1]==':')) + h--; + t=*h; *h=0; + printf("%s", c); + *h=t; + tg=*g; *g=0; + te=*e; *e=0; + man_page_html(f+1, h); /* section, page */ + *e=te; + *g=tg; + c=e; + } + } + *f=0; + printf("%s", c); + *f='('; + idtest[4]=f-1; + c=f; + break; /* manpage */ + case 3: /* ftp */ + case 2: /* www */ + g=f=idtest[j]; + while (*g && (isalnum(*g) || *g=='_' || *g=='-' || *g=='+' || + *g=='.')) g++; + if (g[-1]=='.') g--; + if (g-f>4) { + char t; + t=*f; *f=0; + printf("%s",c); + *f=t; t=*g;*g=0; + if (j==3) + ftp_html(f); + else + www_html(f); + *g=t; + c=g; + } else { + f[3]=0; + printf("%s",c); + c=f+3; + f[3]='.'; + } + break; + case 1: /* mailto */ + g=f=idtest[1]; + while (g>c && (isalnum(g[-1]) || g[-1]=='_' || g[-1]=='-' || + g[-1]=='+' || g[-1]=='.' || g[-1]=='%')) g--; + h=f+1; + while (*h && (isalnum(*h) || *h=='_' || *h=='-' || *h=='+' || + *h=='.')) h++; + if (h[-1]=='.') h--; + if (h-f>4 && f-g>1) { + char t; + t=*g; + *g=0; + printf("%s",c); + *g=t;t=*h;*h=0; + mailto_html(g); + *h=t; + c=h; + } else { + *f=0; + printf("%s",c); + *f='@'; + idtest[1]=c; + c=f; + } + break; + case 0: /* url */ + g=f=idtest[0]; + while (g>c && isalpha(g[-1]) && islower(g[-1])) g--; + h=f+3; + while (*h && !isspace(*h) && *h!='<' && *h!='>' && *h!='"' && + *h!='&') h++; + if (f-g>2 && f-g<7 && h-f>3) { + char t; + t=*g; + *g=0; + printf("%s", c); + *g=t; t=*h; *h=0; + url_html(g); + *h=t; + c=h; + } else { + f[1]=0; + printf("%s", c); + f[1]='/'; + c=f+1; + } + break; + default: + break; + } + nr=0; + if (idtest[0] && idtest[0]= buffmax) { + buffer = xrealloc(buffer, buffmax*2); + buffmax = buffmax*2; + } + if (*c != '\a') + buffer[buffpos++] = *c; + c++; + } + } else if (output_possible) { + while (*c) { + if (*c != '\a') + outbuffer[obp++] = *c; + if (*c == '\n' || obp > 1000) { + outbuffer[obp] = 0; + add_links(outbuffer); + obp = 0; + } + c++; + } + } +} + +/* --------------------------------------------------------------- */ +/* All references to dl_set and itemdepth are here. */ +/* --------------------------------------------------------------- */ +static int itemdepth=0; +static int dl_set[30]= { 0 }; +#define noDL 0 +#define DL 1 +#define UL 2 +#define OL 3 +static char *dl_open[4] = { "", "
\n", "
    ", "
      " }; +static char *dl_close[4] = { "", "
\n", "", "" }; + +static inline void +dl_begin(void) { + if (itemdepth < SIZE(dl_set) && dl_set[itemdepth] == noDL) { + out_html(dl_open[DL]); + dl_set[itemdepth]=DL; + } + out_html("
"); +} + +static inline void +dl_end(void) { + if (itemdepth < SIZE(dl_set)) { + int type = dl_set[itemdepth]; + if (type == DL) { + out_html(dl_close[type]); + dl_set[itemdepth]=noDL; + } + } +} + +static inline void +dl_newlevel(void) { + itemdepth++; + if (itemdepth < SIZE(dl_set)) + dl_set[itemdepth]=noDL; + out_html("
"); +} + +static inline void +dl_endlevel(void) { + if (itemdepth) { + dl_end(); + out_html("
\n"); + itemdepth--; + } +} + +static inline void +dl_down(void) { + while (itemdepth) + dl_endlevel(); + dl_end(); +} + +static inline int +dl_type(int type) { + return (itemdepth < SIZE(dl_set) && dl_set[itemdepth] == type); +} + +static inline void +dl_newlevel_type(int type) { + itemdepth++; + if (itemdepth < SIZE(dl_set)) { + dl_set[itemdepth]=type; + out_html(dl_open[type]); + } +} + +static inline void +dl_endlevel_type(void) { + if (itemdepth) { + if (itemdepth < SIZE(dl_set)) + out_html(dl_close[dl_set[itemdepth]]); + itemdepth--; + } +} +/* --------------------------------------------------------------- */ +/* This stuff is broken. +It generates +
TIOCLINUX, subcode=0
+ Dump the screen. + argp points to a +from + .IP "\fBTIOCLINUX, subcode=0" + Dump the screen. + \fIargp\fP points to a +Bug 1: incorrect nesting: is needed before
. +Bug 2: incorrect font: after the .IP things are roman again. +*/ + +#define FO0 "" +#define FC0 "" +#define FO1 "" +#define FC1 "" +#define FO2 "" +#define FC2 "" +#define FO3 "" +#define FC3 "" + +char *switchfont[16] = { "" , FC0 FO1, FC0 FO2, FC0 FO3, + FC1 FO0, "" , FC1 FO2, FC1 FO3, + FC2 FO0, FC2 FO1, "" , FC2 FO3, + FC3 FO0, FC3 FO1, FC3 FO2, "" }; + +static char * +change_to_font(int nr) +{ + int i; + switch (nr) { + case '0': nr++; + case '1': case '2': case '3': case '4': + nr = nr-'1'; break; + case V('C','W'): break; + case 'L': nr=3; break; + case 'B': nr=2; break; + case 'I': nr=1; break; + case 0: case 1: case 2: case 3: + break; + case 'P': case 'R': + default: nr=0; break; + } + i= current_font*4+nr%4; + current_font=nr%4; + return switchfont[i]; +} + +static char sizebuf[200]; + +static char * +change_to_size(int nr) +{ + int i; + switch (nr) { + case '0': case '1': case '2': case '3': case '4': case '5': case '6': + case '7': case '8': case '9': nr=nr-'0'; break; + case '\0': break; + default: nr=current_size+nr; if (nr>9) nr=9; if (nr< -9) nr=-9; break; + } + if (nr==current_size) return ""; + i=current_font; + sizebuf[0]=0; + strcat(sizebuf, change_to_font(0)); + if (current_size) strcat(sizebuf, ""); + current_size=nr; + if (nr) { + int l; + strcat(sizebuf, "0) sizebuf[l++]='+'; else sizebuf[l++]='-',nr=-nr; + sizebuf[l++]=nr+'0'; + sizebuf[l++]='"'; + sizebuf[l++]='>'; + sizebuf[l]=0; + } + strcat(sizebuf, change_to_font(i)); + return sizebuf; +} + +int asint=0; +int intresult=0; + +#define SKIPEOL while (*c && *c++!='\n') + +static int skip_escape=0; +static int single_escape=0; + +static char * +scan_escape(char *c) { + char *h=NULL; + char b[5]; + INTDEF *intd; + int exoutputp,exskipescape; + int i,j; + + intresult=0; + switch (*c) { + case 'e': h="\\"; curpos++;break; + case '0': + case ' ': h=" ";curpos++; break; + case '|': h=""; break; + case '"': SKIPEOL; c--; h=""; break; + case '$': + if (argument) { + c++; + i=(*c -'1'); + if (!(h=argument[i])) h=""; + } + break; + case 'z': + c++; + if (*c=='\\') { c=scan_escape(c+1); c--;h=""; } + else { + b[0]=*c; + b[1]=0; + h=""; + } + break; + case 'k': c++; if (*c=='(') c+=2; + case '^': + case '!': + case '%': + case 'a': + case 'd': + case 'r': + case 'u': + case '\n': + case '&': h=""; break; + case '(': + c++; + i= c[0]*256+c[1]; + c++; + h = expand_char(i); + break; + case '*': + c++; + if (*c=='(') { + c++; + i= c[0]*256+c[1]; + c++; + } else + i= *c *256+' '; + h = expand_string(i); + break; + case 'f': + c++; + if (*c=='\\') { + c++; + c=scan_escape(c); + c--; + i=intresult; + } else if (*c != '(') + i=*c; + else { + c++; + i=c[0]*256+c[1]; + c++; + } + if (!skip_escape) h=change_to_font(i); else h=""; + break; + case 's': + c++; + j=0;i=0; + if (*c=='-') {j= -1; c++;} else if (*c=='+') {j=1; c++;} + if (*c=='0') c++; else if (*c=='\\') { + c++; + c=scan_escape(c); + i=intresult; if (!j) j=1; + } else + while (isdigit(*c) && (!i || (!j && i<4))) i=i*10+(*c++)-'0'; + if (!j) { j=1; if (i) i=i-10; } + if (!skip_escape) h=change_to_size(i*j); else h=""; + c--; + break; + case 'n': + c++; + j=0; + switch (*c) { + case '+': j=1; c++; break; + case '-': j=-1; c++; break; + default: break; + } + if (*c=='(') { + c++; + i=V(c[0],c[1]); + c=c+1; + } else { + i=V(c[0],' '); + } + intd=intdef; + while (intd && intd->nr!=i) intd=intd->next; + if (intd) { + intd->val=intd->val+j*intd->incr; + intresult=intd->val; + } else { + switch (i) { + case V('.','s'): intresult=current_size; break; + case V('.','f'): intresult=current_font; break; + default: intresult=0; break; + } + } + h=""; + break; + case 'w': + c++; + i=*c; + c++; + exoutputp=output_possible; + exskipescape=skip_escape; + output_possible=0; + skip_escape=1; + j=0; + while (*c!=i) { + j++; + if (*c==escapesym) c=scan_escape(c+1); else c++; + } + output_possible=exoutputp; + skip_escape=exskipescape; + intresult=j; + break; + case 'l': h="
"; curpos=0; + case 'b': + case 'v': + case 'x': + case 'o': + case 'L': + case 'h': + c++; + i=*c; + c++; + exoutputp=output_possible; + exskipescape=skip_escape; + output_possible=0; + skip_escape=1; + while (*c != i) + if (*c==escapesym) c=scan_escape(c+1); + else c++; + output_possible=exoutputp; + skip_escape=exskipescape; + break; + case 'c': no_newline_output=1; break; + case '{': newline_for_fun++; h="";break; + case '}': if (newline_for_fun) newline_for_fun--; h="";break; + case 'p': h="
\n";curpos=0; break; + case 't': h="\t";curpos=(curpos+8)&0xfff8; break; + case '<': h="<";curpos++; break; + case '>': h=">";curpos++; break; + case '\\': if (single_escape) { c--; break;} + default: b[0]=*c; b[1]=0; h=b; curpos++; break; + } + c++; + if (!skip_escape) out_html(h); + return c; +} + +typedef struct TABLEITEM TABLEITEM; + +struct TABLEITEM { + char *contents; + int size,align,valign,colspan,rowspan,font,vleft,vright,space,width; + TABLEITEM *next; +}; + +static TABLEITEM emptyfield = {NULL,0,0,0,1,1,0,0,0,0,0,NULL}; +typedef struct TABLEROW TABLEROW; + +struct TABLEROW { + TABLEITEM *first; + TABLEROW *prev, *next; +}; + +static char *tableopt[]= { "center", "expand", "box", "allbox", "doublebox", + "tab", "linesize", "delim", NULL }; +static int tableoptl[] = { 6,6,3,6,9,3,8,5,0}; + + +static void clear_table(TABLEROW *table) +{ + TABLEROW *tr1,*tr2; + TABLEITEM *ti1,*ti2; + + tr1=table; + while (tr1->prev) tr1=tr1->prev; + while (tr1) { + ti1=tr1->first; + while (ti1) { + ti2=ti1->next; + if (ti1->contents) free(ti1->contents); + free(ti1); + ti1=ti2; + } + tr2=tr1; + tr1=tr1->next; + free(tr2); + } +} + +char *scan_expression(char *c, int *result); + +static char *scan_format(char *c, TABLEROW **result, int *maxcol) +{ + TABLEROW *layout, *currow; + TABLEITEM *curfield; + int i,j; + if (*result) { + clear_table(*result); + } + layout= currow=(TABLEROW*) xmalloc(sizeof(TABLEROW)); + currow->next=currow->prev=NULL; + currow->first=curfield=(TABLEITEM*) xmalloc(sizeof(TABLEITEM)); + *curfield=emptyfield; + while (*c && *c!='.') { + switch (*c) { + case 'C': case 'c': case 'N': case 'n': + case 'R': case 'r': case 'A': case 'a': + case 'L': case 'l': case 'S': case 's': + case '^': case '_': + if (curfield->align) { + curfield->next=(TABLEITEM*)xmalloc(sizeof(TABLEITEM)); + curfield=curfield->next; + *curfield=emptyfield; + } + curfield->align=toupper(*c); + c++; + break; + case 'i': case 'I': case 'B': case 'b': + curfield->font = toupper(*c); + c++; + break; + case 'f': case 'F': + c++; + curfield->font = toupper(*c); + c++; + if (!isspace(*c)) c++; + break; + case 't': case 'T': curfield->valign='t'; c++; break; + case 'p': case 'P': + c++; + i=j=0; + if (*c=='+') { j=1; c++; } + if (*c=='-') { j=-1; c++; } + while (isdigit(*c)) i=i*10+(*c++)-'0'; + if (j) curfield->size= i*j; else curfield->size=j-10; + break; + case 'v': case 'V': + case 'w': case 'W': +// c=scan_expression(c+2,&curfield->width); + c++; + if (*c == '(') { + c=scan_expression(c+1,&curfield->width); + } else { + i=0; + while (isdigit(*c)) i=i*10+(*c++)-'0'; + curfield->width=i; + } + break; + case '|': + if (curfield->align) curfield->vleft++; + else curfield->vright++; + c++; + break; + case 'e': case 'E': + c++; + break; + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + i=0; + while (isdigit(*c)) i=i*10+(*c++)-'0'; + curfield->space=i; + break; + case ',': case '\n': + currow->next=(TABLEROW*)xmalloc(sizeof(TABLEROW)); + currow->next->prev=currow; + currow=currow->next; + currow->next=NULL; + curfield=currow->first=(TABLEITEM*)xmalloc(sizeof(TABLEITEM)); + *curfield=emptyfield; + c++; + break; + default: + c++; + break; + } + } + if (*c=='.') while (*c++!='\n'); + *maxcol=0; + currow=layout; + while (currow) { + curfield=layout->first; + i=0; + while (curfield) { + i++; + curfield=curfield->next; + } + if (i>*maxcol) *maxcol=i; + currow=currow->next; + } + *result=layout; + return c; +} + +static TABLEROW * +next_row(TABLEROW *tr) +{ + if (tr->next) { + tr=tr->next; + if (!tr->next) next_row(tr); + return tr; + } else { + TABLEITEM *ti, *ti2; + tr->next=(TABLEROW*)xmalloc(sizeof(TABLEROW)); + tr->next->prev=tr; + ti=tr->first; + tr=tr->next; + tr->next=NULL; + if (ti) tr->first=ti2=(TABLEITEM*) xmalloc(sizeof(TABLEITEM)); + else tr->first=ti2=NULL; + while (ti!=ti2) { + *ti2=*ti; + ti2->contents=NULL; + if ((ti=ti->next)) { + ti2->next=(TABLEITEM*) xmalloc(sizeof(TABLEITEM)); + } + ti2=ti2->next; + } + return tr; + } +} + +char itemreset[20]="\\fR\\s0"; + +static char * +scan_table(char *c) { + char *h; + char *g; + int center=0, expand=0, box=0, border=0, linesize=1; + int i,j,maxcol=0, finished=0; + int oldfont, oldsize,oldfillout; + char itemsep='\t'; + TABLEROW *layout=NULL, *currow; + TABLEITEM *curfield; + while (*c++!='\n'); /* skip TS */ + h=c; + if (*h=='.') return c-1; + oldfont=current_font; + oldsize=current_size; + oldfillout=fillout; + out_html(change_to_font(0)); + out_html(change_to_size(0)); + if (!fillout) { + fillout=1; + out_html(""); + } + while (*h && *h!='\n') h++; + if (h[-1]==';') { + /* scan table options */ + while (cfirst; + i=0; + while (!finished && *c) { + /* search item */ + h=c; + if ((*c=='_' || *c=='=') && (c[1]==itemsep || c[1]=='\n')) { + if (c[-1]=='\n' && c[1]=='\n') { + if (currow->prev) { + currow->prev->next=(TABLEROW*) xmalloc(sizeof(TABLEROW)); + currow->prev->next->next=currow; + currow->prev->next->prev=currow->prev; + currow->prev=currow->prev->next; + } else { + currow->prev=layout=(TABLEROW*) xmalloc(sizeof(TABLEROW)); + currow->prev->prev=NULL; + currow->prev->next=currow; + } + curfield=currow->prev->first= + (TABLEITEM*) xmalloc(sizeof(TABLEITEM)); + *curfield=emptyfield; + curfield->align=*c; + curfield->colspan=maxcol; + curfield=currow->first; + c=c+2; + } else { + if (curfield) { + curfield->align=*c; + do { + curfield=curfield->next; + } while (curfield && curfield->align=='S'); + } + if (c[1]=='\n') { + currow=next_row(currow); + curfield=currow->first; + } + c=c+2; + } + } else if (*c=='T' && c[1]=='{') { + h=c+2; + c=strstr(h,"\nT}"); + c++; + *c=0; + g=NULL; + scan_troff(h, 0, &g); + scan_troff(itemreset, 0, &g); + *c='T'; + c+=3; + if (curfield) { + curfield->contents=g; + do { + curfield=curfield->next; + } while (curfield && curfield->align=='S'); + } else + if (g) free(g); + if (c[-1]=='\n') { + currow=next_row(currow); + curfield=currow->first; + } + } else if (*c=='.' && c[1]=='T' && c[2]=='&' && c[-1]=='\n') { + TABLEROW *hr; + while (*c++!='\n'); + hr=currow; + currow=currow->prev; + hr->prev=NULL; + c=scan_format(c,&hr, &i); + hr->prev=currow; + currow->next=hr; + currow=hr; + next_row(currow); + curfield=currow->first; + } else if (*c=='.' && c[1]=='T' && c[2]=='E' && c[-1]=='\n') { + finished=1; + while (*c++!='\n'); + if (currow->prev) + currow->prev->next=NULL; + currow->prev=NULL; + clear_table(currow); + } else if (*c=='.' && c[-1]=='\n' && !isdigit(c[1])) { + /* skip troff request inside table (usually only .sp ) */ + while (*c++!='\n'); + } else { + h=c; + while (*c && (*c!=itemsep || c[-1]=='\\') && + (*c!='\n' || c[-1]=='\\')) c++; + i=0; + if (*c==itemsep) {i=1; *c='\n'; } + if (h[0]=='\\' && h[2]=='\n' && + (h[1]=='_' || h[1]=='^')) { + if (curfield) { + curfield->align=h[1]; + do { + curfield=curfield->next; + } while (curfield && curfield->align=='S'); + } + h=h+3; + } else { + g=NULL; + h=scan_troff(h,1,&g); + scan_troff(itemreset,0,&g); + if (curfield) { + curfield->contents=g; + do { + curfield=curfield->next; + } while (curfield && curfield->align=='S'); + } else if (g) free(g); + } + if (i) *c=itemsep; + c=h; + if (c[-1]=='\n') { + currow=next_row(currow); + curfield=currow->first; + } + } + } + /* calculate colspan and rowspan */ + currow=layout; + while (currow->next) currow=currow->next; + while (currow) { + TABLEITEM *ti, *ti1=NULL, *ti2=NULL; + ti=currow->first; + if (currow->prev) ti1=currow->prev->first; + while (ti) { + switch (ti->align) { + case 'S': + if (ti2) { + ti2->colspan++; + if (ti2->rowspanrowspan) ti2->rowspan=ti->rowspan; + } + break; + case '^': + if (ti1) ti1->rowspan++; + default: + if (!ti2) ti2=ti; + else { + do { + ti2=ti2->next; + } while (ti2 && curfield->align=='S'); + } + break; + } + ti=ti->next; + if (ti1) ti1=ti1->next; + } + currow=currow->prev; + } + /* produce html output */ + if (center) out_html("
"); + if (box==2) out_html(""); + curfield=currow->first; + while (curfield) { + if (curfield->align!='S' && curfield->align!='^') { + out_html("align) { + case 'N': + curfield->space+=4; + case 'R': + out_html(" ALIGN=right"); + break; + case 'C': + out_html(" ALIGN=center"); + default: + break; + } + if (!curfield->valign && curfield->rowspan>1) + out_html(" VALIGN=center"); + if (curfield->colspan>1) { + char buf[5]; + out_html(" COLSPAN="); + sprintf(buf, "%i", curfield->colspan); + out_html(buf); + } + if (curfield->rowspan>1) { + char buf[5]; + out_html(" ROWSPAN="); + sprintf(buf, "%i", curfield->rowspan); + out_html(buf); + } + j=j+curfield->colspan; + out_html(">"); + if (curfield->size) out_html(change_to_size(curfield->size)); + if (curfield->font) out_html(change_to_font(curfield->font)); + switch (curfield->align) { + case '=': out_html("

"); break; + case '_': out_html("
"); break; + default: + if (curfield->contents) out_html(curfield->contents); + break; + } + if (curfield->space) + for (i=0; ispace;i++) out_html(" "); + if (curfield->font) out_html(change_to_font(0)); + if (curfield->size) out_html(change_to_size(0)); + if (j>=maxcol && curfield->align>'@' && curfield->align!='_') + out_html("
"); + out_html(""); + } + curfield=curfield->next; + } + out_html("
\n"); + currow=currow->next; + } + if (box && !border) out_html("
"); + out_html("
\n"); + currow=layout; + while (currow) { + j=0; + out_html("
"); + out_html(""); + if (box==2) out_html(""); + if (center) out_html("
\n"); + else out_html("\n"); + if (!oldfillout) out_html("
");
+    fillout=oldfillout;
+    out_html(change_to_size(oldsize));
+    out_html(change_to_font(oldfont));
+    return c;
+}
+
+char *scan_expression(char *c, int *result) {
+    int value=0,value2,sign=1,opex=0;
+    char oper='c';
+
+    if (*c=='!') {
+	c=scan_expression(c+1, &value);
+	value= (!value);
+    } else if (*c=='n') {
+	c++;
+	value=nroff;
+    } else if (*c=='t') {
+	c++;
+	value=1-nroff;
+    } else if (*c=='\'' || *c=='"' || *c<' ' || (*c=='\\' && c[1]=='(')) {
+	/* ?string1?string2?
+	** test if string1 equals string2.
+	*/
+	char *st1=NULL, *st2=NULL, *h;
+	char *tcmp=NULL;
+	char sep;
+	sep=*c;
+	if (sep=='\\') {
+	    tcmp=c;
+	    c=c+3;
+	}
+	c++;
+	h=c;
+	while (*c!= sep && (!tcmp || strncmp(c,tcmp,4))) c++;
+	*c='\n';
+	scan_troff(h, 1, &st1);
+	*c=sep;
+	if (tcmp) c=c+3;
+	c++;
+	h=c;
+	while (*c!=sep && (!tcmp || strncmp(c,tcmp,4))) c++;
+	*c='\n';
+	scan_troff(h,1,&st2);
+	*c=sep;
+	if (!st1 && !st2) value=1;
+	else if (!st1 || !st2) value=0;
+	else value=(!strcmp(st1, st2));
+	if (st1) free(st1);
+	if (st2) free(st2);
+	if (tcmp) c=c+3;
+	c++;
+    } else {
+	while (*c && !isspace(*c) && *c!=')') {
+	    opex=0;
+	    switch (*c) {
+	    case '(':
+		c=scan_expression(c+1, &value2);
+		value2=sign*value2;
+		opex=1;
+		break;
+	    case '.':
+	    case '0': case '1':
+	    case '2': case '3':
+	    case '4': case '5':
+	    case '6': case '7':
+	    case '8': case '9': {
+		int num=0,denum=1;
+		value2=0;
+		while (isdigit(*c)) value2=value2*10+((*c++)-'0');
+		if (*c=='.') {
+		    c++;
+		    while (isdigit(*c)) {
+			num=num*10+((*c++)-'0');
+			denum=denum*10;
+		    }
+		}
+		if (isalpha(*c)) {
+		    /* scale indicator */
+		    switch (*c) {
+		    case 'i': /* inch -> 10pt */
+			value2=value2*10+(num*10+denum/2)/denum;
+			num=0;
+			break;
+		    default:
+			break;
+		    }
+		    c++;
+		}
+		value2=value2+(num+denum/2)/denum;
+		value2=sign*value2;
+		opex=1;
+		break;
+	    }
+	    case '\\':
+		c=scan_escape(c+1);
+		value2=intresult*sign;
+		if (isalpha(*c)) c++; /* scale indicator */
+		opex=1;
+		break;
+	    case '-':
+		if (oper) { sign=-1; c++; break; }
+	    case '>':
+	    case '<':
+	    case '+':
+	    case '/':
+	    case '*':
+	    case '%':
+	    case '&':
+	    case '=':
+	    case ':':
+		if (c[1]=='=') oper=(*c++) +16; else oper=*c;
+		c++;
+		break;
+	    default: c++; break;
+	    }
+	    if (opex) {
+		sign=1;
+		switch (oper) {
+		case 'c': value=value2; break;
+		case '-': value=value-value2; break;
+		case '+': value=value+value2; break;
+		case '*': value=value*value2; break;
+		case '/': if (value2) value=value/value2; break;
+		case '%': if (value2) value=value%value2; break;
+		case '<': value=(value': value=(value>value2); break;
+		case '>'+16: value=(value>=value2); break;
+		case '<'+16: value=(value<=value2); break;
+		case '=': case '='+16: value=(value==value2); break;
+		case '&': value = (value && value2); break;
+		case ':': value = (value || value2); break;
+		default: fprintf(stderr,
+				 "man2html: Unknown operator %c.\n", oper);
+		}
+		oper=0;
+	    }
+	}
+	if (*c==')') c++;
+    }
+    *result=value;
+    return c;
+}
+
+static void
+trans_char(char *c, char s, char t) {
+	char *sl = c;
+	int slash = 0;
+
+	while (*sl && (*sl != '\n' || slash)) {
+		if (!slash) {
+			if (*sl == escapesym)
+				slash = 1;
+			else if (*sl == s)
+				*sl = t;
+		} else
+			slash = 0;
+		sl++;
+	}
+}
+
+/*
+ * Read STR until end-of-line (not preceded by \).
+ * Find whitespace separated words, and store starts in WORDS of lth MAXN.
+ * Return number of words in N.
+ * Replace each end-of-word by the character EOW (usually \n or 0).
+ * Return pointer to last char seen (either \n or 0).
+ *
+ * A part \"... is skipped.
+ * Quotes not preceded by \ are replaced by \a.
+ */
+static char *
+fill_words(char *str, char *words[], int maxn, int *n, char eow) {
+	char *s = str;
+	int backslash = 0;
+	int skipspace = 0;	/* 1 if space is not end-of-word */
+
+	*n = 0;
+	words[*n] = s;
+	while (*s && (*s != '\n' || backslash)) {
+		if (!backslash) {
+			if (*s == '"') {
+				*s = '\a';
+				skipspace = !skipspace;
+			} else if (*s == escapesym) {
+				backslash = 1;
+			} else if ((*s == ' ' || *s == '\t') && !skipspace) {
+				*s = eow;
+				if (words[*n] != s && *n < maxn-1)
+					(*n)++;
+				words[*n] = s+1;
+			}
+		} else {
+			if (*s == '"') {
+				s--;
+				*s = eow;
+				if (words[*n] != s && *n < maxn-1)
+					(*n)++;
+				s++;
+				while (*s && *s != '\n') s++;
+				words[*n] = s;
+				s--;
+			}
+			backslash = 0;
+		}
+		s++;
+	}
+	if (s != words[*n])
+		(*n)++;
+	return s;
+}
+
+
+char *section_list[] = {
+    "1", "User Commands ",
+    "1C", "User Commands",
+    "1G", "User Commands",
+    "1S", "User Commands",
+    "1V", "User Commands ",
+    "2", "System Calls",
+    "2V", "System Calls",
+    "3", "C Library Functions",
+    "3C", "Compatibility Functions",
+    "3F", "Fortran Library Routines",
+    "3K", "Kernel VM Library Functions",
+    "3L", "Lightweight Processes Library",
+    "3M", "Mathematical Library",
+    "3N", "Network Functions",
+    "3R", "RPC Services Library",
+    "3S", "Standard I/O Functions",
+    "3V", "C Library Functions",
+    "3X", "Miscellaneous Library Functions",
+    "4", "Devices and Network Interfaces",
+    "4F", "Protocol Families",
+    "4I", "Devices and Network Interfaces",
+    "4M", "Devices and Network Interfaces",
+    "4N", "Devices and Network Interfaces",
+    "4P", "Protocols",
+    "4S", "Devices and Network Interfaces",
+    "4V", "Devices and Network Interfaces",
+    "5", "File Formats",
+    "5V", "File Formats",
+    "6", "Games and Demos",
+    "7", "Environments, Tables, and Troff Macros",
+    "7V", "Environments, Tables, and Troff Macros",
+    "8", "Maintenance Commands",
+    "8C", "Maintenance Commands",
+    "8S", "Maintenance Commands",
+    "8V", "Maintenance Commands",
+    "L", "Local Commands",
+/* for Solaris: 
+    "1", "User Commands",
+    "1B", "SunOS/BSD Compatibility Package Commands",
+    "1b", "SunOS/BSD Compatibility Package Commands",
+    "1C", "Communication Commands ",
+    "1c", "Communication Commands",
+    "1F", "FMLI Commands ",
+    "1f", "FMLI Commands",
+    "1G", "Graphics and CAD Commands ",
+    "1g", "Graphics and CAD Commands ",
+    "1M", "Maintenance Commands",
+    "1m", "Maintenance Commands",
+    "1S", "SunOS Specific Commands",
+    "1s", "SunOS Specific Commands",
+    "2", "System Calls",
+    "3", "C Library Functions",
+    "3B", "SunOS/BSD Compatibility Library Functions",
+    "3b", "SunOS/BSD Compatibility Library Functions",
+    "3C", "C Library Functions",
+    "3c", "C Library Functions",
+    "3E", "C Library Functions",
+    "3e", "C Library Functions",
+    "3F", "Fortran Library Routines",
+    "3f", "Fortran Library Routines",
+    "3G", "C Library Functions",
+    "3g", "C Library Functions",
+    "3I", "Wide Character Functions",
+    "3i", "Wide Character Functions",
+    "3K", "Kernel VM Library Functions",
+    "3k", "Kernel VM Library Functions",
+    "3L", "Lightweight Processes Library",
+    "3l", "Lightweight Processes Library",
+    "3M", "Mathematical Library",
+    "3m", "Mathematical Library",
+    "3N", "Network Functions",
+    "3n", "Network Functions",
+    "3R", "Realtime Library",
+    "3r", "Realtime Library",
+    "3S", "Standard I/O Functions",
+    "3s", "Standard I/O Functions",
+    "3T", "Threads Library",
+    "3t", "Threads Library",
+    "3W", "C Library Functions",
+    "3w", "C Library Functions",
+    "3X", "Miscellaneous Library Functions",
+    "3x", "Miscellaneous Library Functions",
+    "4", "File Formats",
+    "4B", "SunOS/BSD Compatibility Package File Formats",
+    "4b", "SunOS/BSD Compatibility Package File Formats",
+    "5", "Headers, Tables, and Macros",
+    "6", "Games and Demos",
+    "7", "Special Files",
+    "7B", "SunOS/BSD Compatibility Special Files",
+    "7b", "SunOS/BSD Compatibility Special Files",
+    "8", "Maintenance Procedures",
+    "8C", "Maintenance Procedures",
+    "8c", "Maintenance Procedures",
+    "8S", "Maintenance Procedures",
+    "8s", "Maintenance Procedures",
+    "9", "DDI and DKI",
+    "9E", "DDI and DKI Driver Entry Points",
+    "9e", "DDI and DKI Driver Entry Points",
+    "9F", "DDI and DKI Kernel Functions",
+    "9f", "DDI and DKI Kernel Functions",
+    "9S", "DDI and DKI Data Structures",
+    "9s", "DDI and DKI Data Structures",
+    "L", "Local Commands",
+*/
+    NULL, "Misc. Reference Manual Pages",
+    NULL, NULL
+};
+
+static char *
+section_name(char *c)
+{
+    int i=0;
+
+    if (!c) return "";
+    while (section_list[i] && strcmp(c,section_list[i])) i=i+2;
+    if (section_list[i+1]) return section_list[i+1];
+    else return c;
+}
+
+int manidxlen = 0;
+char *manidx = NULL;
+int subs = 0;
+int mip = 0;	/* current offset in manidx[] */
+char label[5]="lbAA";
+
+static void
+manidx_need(int m) {
+	if (mip + m >= manidxlen) {
+		manidxlen += 10000;
+		manidx = xrealloc(manidx, manidxlen);
+	}
+}
+
+static void
+add_to_index(int level, char *item)
+{
+    char *c = NULL;
+
+    label[3]++;
+    if (label[3]>'Z') {
+	label[3]='A';
+	label[2]++;
+    }
+
+    if (level != subs) {
+	manidx_need(6);
+	if (subs) {
+	    strcpy(manidx+mip, "\n");
+	    mip += 6;
+	} else {
+	    strcpy(manidx+mip, "
\n"); + mip += 5; + } + } + subs = level; + + scan_troff(item, 1, &c); + manidx_need(100 + strlen(c)); + sprintf(manidx+mip, "
%s
\n", label, c); + if (c) free(c); + while (manidx[mip]) mip++; +} + +static char * +skip_till_newline(char *c) +{ + int lvl=0; + + while (*c && (*c!='\n' || lvl>0)) { + if (*c=='\\') { + c++; + if (*c=='}') lvl--; else if (*c=='{') lvl++; + } + c++; + } + c++; + if (lvl<0 && newline_for_fun) { + newline_for_fun = newline_for_fun+lvl; + if (newline_for_fun<0) newline_for_fun=0; + } + return c; +} + +int ifelseval=0; + +static char * +scan_request(char *c) { + /* BSD Mandoc stuff - by Michael Hamilton */ + static int mandoc_synopsis=0; /* True if we are in the synopsis section */ + static int mandoc_command=0; /* True if this is mandoc page */ + static int mandoc_bd_options; /* Only copes with non-nested Bd's */ + static int inXo=0; + + int i,j,mode = 0; + char *h; + char *wordlist[20]; + int words; + char *sl; + STRDEF *owndef; + + while (*c == ' ' || *c == '\t') + c++; + if (c[0] == '\n') + return c+1; + if (c[1] == '\n') + j = 1; + else + j = 2; + while (c[j] == ' ' || c[j] == '\t') + j++; + if (c[0] == escapesym) { + /* some pages use .\" .\$1 .\} */ + /* .\$1 is too difficult/stupid */ + if (c[1] == '$') + c = skip_till_newline(c); + else + c = scan_escape(c+1); + } else { + i=V(c[0],c[1]); + switch (i) { + case V('a','b'): + h=c+j; + while (*h && *h !='\n') h++; + *h=0; + if (scaninbuff && buffpos) { + buffer[buffpos]=0; + printf("%s\n", buffer); + } + fprintf(stderr, "%s\n", c+2); /* XXX */ + exit(0); + break; + case V('d','i'): + { + STRDEF *de; + c=c+j; + i=V(c[0],c[1]); + if (*c == '\n') { c++;break; } + while (*c && *c!='\n') c++; + c++; + h=c; + while (*c && strncmp(c,".di",3)) while (*c && *c++!='\n'); + *c=0; + de=strdef; + while (de && de->nr !=i) de=de->next; + if (!de) { + de=(STRDEF*) xmalloc(sizeof(STRDEF)); + de->nr=i; + de->slen=0; + de->next=strdef; + de->st=NULL; + strdef=de; + } else { + if (de->st) free(de->st); + de->slen=0; + de->st=NULL; + } + scan_troff(h,0,&de->st); + *c='.'; + while (*c && *c++!='\n'); + break; + } + case V('d','s'): + mode=1; + case V('a','s'): + { + STRDEF *de; + int oldcurpos=curpos; + c=c+j; + while (*c == ' ') c++; + i=V(c[0],c[1]); + j=0; + while (c[j] && c[j]!='\n') j++; + if (j<3) { c=c+j; break; } + if (c[1] == ' ') c=c+1; else c=c+2; + while (isspace(*c)) c++; + if (*c == '"') c++; + de=strdef; + while (de && de->nr != i) de=de->next; + single_escape=1; + curpos=0; + if (!de) { + char *h; + de=(STRDEF*) xmalloc(sizeof(STRDEF)); + de->nr=i; + de->slen=0; + de->next=strdef; + de->st=NULL; + strdef=de; + h=NULL; + c=scan_troff(c, 1, &h); + de->st=h; + de->slen=curpos; + } else { + if (mode) { /* .ds */ + char *h=NULL; + c=scan_troff(c, 1, &h); + free(de->st); /* segfault XXX */ + de->slen=curpos; + de->st=h; + } else { /* .as */ + c=scan_troff(c,1,&de->st); /* XXX */ + de->slen+=curpos; + } + } + single_escape=0; + curpos=oldcurpos; + } + break; + case V('b','r'): + if (still_dd) out_html("
"); + else out_html("
\n"); + curpos=0; + c=c+j; + if (c[0] == escapesym) { c=scan_escape(c+1); } + c=skip_till_newline(c);break; + case V('c','2'): + c=c+j; + if (*c!='\n') { nobreaksym=*c; } + else nobreaksym='\''; + c=skip_till_newline(c); + break; + case V('c','c'): + c=c+j; + if (*c!='\n') { controlsym=*c; } + else controlsym='.'; + c=skip_till_newline(c); + break; + case V('c','e'): + c=c+j; + if (*c == '\n') { i=1; } + else { + i=0; + while ('0'<=*c && *c<='9') { + i=i*10+*c-'0'; + c++; + } + } + c=skip_till_newline(c); + /* center next i lines */ + if (i>0) { + out_html("
\n"); + while (i && *c) { + char *line=NULL; + c=scan_troff(c,1, &line); + if (line && strncmp(line, "
", 4)) { + out_html(line); + out_html("
\n"); + i--; + } + } + out_html("
\n"); + curpos=0; + } + break; + case V('e','c'): + c=c+j; + if (*c!='\n') { escapesym=*c; } + else escapesym='\\'; + break; + c=skip_till_newline(c); + case V('e','o'): + escapesym=0; + c=skip_till_newline(c); + break; + case V('e','x'): + exit(0); + break; + case V('f','c'): + c=c+j; + if (*c == '\n') { + fieldsym=padsym=0; + } else { + fieldsym=c[0]; + padsym=c[1]; + } + c=skip_till_newline(c); + break; + case V('f','i'): + if (!fillout) { + out_html(change_to_font(0)); + out_html(change_to_size('0')); + out_html("
\n"); + } + curpos=0; + fillout=1; + c=skip_till_newline(c); + break; + case V('f','t'): + c=c+j; + if (*c == '\n') { + out_html(change_to_font(0)); + } else { + if (*c == escapesym) { + int fn; + c=scan_expression(c, &fn); + c--; + out_html(change_to_font(fn)); + } else { + out_html(change_to_font(*c)); + c++; + } + } + c=skip_till_newline(c); + break; + case V('e','l'): + /* .el anything : else part of if else */ + if (ifelseval) { + c=c+j; + c[-1]='\n'; + c=scan_troff(c,1,NULL); + } else + c=skip_till_newline(c+j); + break; + case V('i','e'): + /* .ie c anything : then part of if else */ + case V('i','f'): + /* .if c anything + * .if !c anything + * .if N anything + * .if !N anything + * .if 'string1'string2' anything + * .if !'string1'string2' anything + */ + c=c+j; + c=scan_expression(c, &i); + ifelseval=!i; + if (i) { + *c='\n'; + c++; + c=scan_troff(c,1,NULL); + } else + c=skip_till_newline(c); + break; + case V('i','g'): /* .ig: ignore until .. */ + { + char *endwith="..\n"; + i=3; + c=c+j; + while (*c == ' ') c++; + if (*c == escapesym && c[1] == '"') + while (*c != '\n') c++; + if (*c!='\n') { /* .ig yy: ignore until .yy, then call .yy */ + endwith=c-1;i=1; + c[-1]='.'; + while (*c && *c!='\n') c++,i++; + } + c++; + while (*c && strncmp(c,endwith,i)) + while (*c && *c++!='\n'); + while (*c && *c++!='\n'); + break; + } + case V('n','f'): + if (fillout) { + out_html(change_to_font(0)); + out_html(change_to_size('0')); + out_html("
\n");
+	    }
+	    curpos=0;
+	    fillout=0;
+	    c=skip_till_newline(c);
+	    break;
+	case V('p','s'):
+	    c=c+j;
+	    if (*c == '\n') {
+		out_html(change_to_size('0'));
+	    } else {
+		j=0;i=0;
+		if (*c == '-') { j= -1;c++; } else if (*c == '+') { j=1;c++;}
+		c=scan_expression(c, &i);
+		if (!j) { j=1; if (i>5) i=i-10; }
+		out_html(change_to_size(i*j));
+	    }
+	    c=skip_till_newline(c);
+	    break;
+	case V('s','p'):
+	    c=c+j;
+	    if (fillout) out_html("

"); else { + out_html(NEWLINE); + NEWLINE[0]='\n'; + } + curpos=0; + c=skip_till_newline(c); + break; + case V('s','o'): + { + FILE *f; + struct stat stbuf; + int l; char *buf; + char *name = NULL; + + curpos=0; + c += j; /* skip .so part and whitespace */ + if (*c == '/') { + h = c; + } else { /* .so man3/cpow.3 -> ../man3/cpow.3 */ + h = c-3; + h[0] = '.'; + h[1] = '.'; + h[2] = '/'; + } + while (*c != '\n') c++; + while (c[-1] == ' ') c--; + while (*c != '\n') *c++ = 0; + *c = 0; + scan_troff(h,1, &name); + if (name[3] == '/') h=name+3; else h=name; + l = 0; + if (stat(h, &stbuf)!=-1) l=stbuf.st_size; + buf = (char*) xmalloc((l+4)*sizeof(char)); +#if NOCGI + if (!out_length) { + char *t,*s; + t=strrchr(fname, '/'); + if (!t) t=fname; + fprintf(stderr, "ln -s %s.html %s.html\n", h, t); + s=strrchr(t, '.');if (!s) s=t; + printf(" Manpage of %s\n" + "\n" + "See the manpage for %s.\n" + "\n", + s, h, h); + } else +#endif + { + /* this works alright, except for section 3 */ + if (!l || !(f = fopen(h,"r"))) { + fprintf(stderr, + "man2html: unable to open or read file %s\n", h); + out_html("

" + "man2html: unable to open or read file\n"); + out_html(h); + out_html("
\n"); + } else { + i=fread(buf+1,1,l,f); + fclose(f); + buf[0]=buf[l]='\n'; + buf[l+1]=buf[l+2]=0; + scan_troff(buf+1,0,NULL); + } + if (buf) free(buf); + } + *c++='\n'; + break; + } + case V('t','a'): + c=c+j; + j=0; + while (*c!='\n') { + sl=scan_expression(c, &tabstops[j]); + if (*c == '-' || *c == '+') tabstops[j]+=tabstops[j-1]; + c=sl; + while (*c == ' ' || *c == '\t') c++; + if (j+1 < SIZE(tabstops)) + j++; + } + maxtstop=j; + curpos=0; + break; + case V('t','i'): +#if 0 + dl_down(); +#endif + out_html("
\n"); + c=c+j; + c=scan_expression(c, &j); + for (i=0; ia b ] */ + mode=1; + c[0]='B'; c[1]='I'; + out_html(change_to_font('R')); + out_html("["); + curpos++; + case V('B','R'): + case V('B','I'): + case V('I','B'): + case V('I','R'): + case V('R','B'): + case V('R','I'): + { + char font[2]; + font[0] = c[0]; font[1] = c[1]; + c = c+j; + if (*c == '\n') c++; + sl = fill_words(c, wordlist, SIZE(wordlist), &words, '\n'); + c = sl+1; + /* .BR name (section) + ** indicates a link. It will be added in the output routine. + */ + for (i=0; i"); + curpos = 0; + break; + case V('T','P'): + dl_begin(); + c=skip_till_newline(c); + /* somewhere a definition ends with '.TP' */ + if (!*c) still_dd=1; else { + c=scan_troff(c,1,NULL); + out_html("
"); + } + curpos=0; + break; + case V('I','X'): + /* general index */ + sl = fill_words(c+j, wordlist, SIZE(wordlist), &words, '\n'); + c = sl+1; + j = 4; + while (idxlabel[j] == 'Z') idxlabel[j--]='A'; + idxlabel[j]++; +#ifdef MAKEINDEX + if (idxfile) { + fprintf(idxfile, "%s@%s@", fname, idxlabel); + for (j=0; j' and '<' solves it, but creates + ** some space. A normal space does not work. + */ + out_html("\">"); + break; + case V('L','P'): + case V('P','P'): + dl_end(); + if (fillout) out_html("

\n"); else { + out_html(NEWLINE); + NEWLINE[0]='\n'; + } + curpos=0; + c=skip_till_newline(c); + break; + case V('H','P'): + dl_begin(); + still_dd=1; + c=skip_till_newline(c); + curpos=0; + break; + case V('P','D'): + c=skip_till_newline(c); + break; + case V('R','s'): /* BSD mandoc */ + case V('R','S'): + sl = fill_words(c+j, wordlist, SIZE(wordlist), &words, '\n'); + j = 1; + if (words>0) scan_expression(wordlist[0], &j); + if (j>=0) { + dl_newlevel(); + c=skip_till_newline(c); + curpos=0; + break; + } + case V('R','e'): /* BSD mandoc */ + case V('R','E'): + dl_endlevel(); + c=skip_till_newline(c); + curpos=0; + break; + case V('S','B'): + out_html(change_to_size(-1)); + out_html(change_to_font('B')); + c=scan_troff(c+j, 1, NULL); + out_html(change_to_font('R')); + out_html(change_to_size('0')); + break; + case V('S','M'): + c=c+j; + if (*c == '\n') c++; + out_html(change_to_size(-1)); + trans_char(c,'"','\a'); + c=scan_troff(c,1,NULL); + out_html(change_to_size('0')); + break; + case V('S','s'): /* BSD mandoc */ + mandoc_command = 1; + case V('S','S'): + mode=1; + goto sh_below; + case V('S','h'): /* BSD mandoc */ + mandoc_command = 1; + case V('S','H'): + sh_below: + c=c+j; + if (*c == '\n') c++; + dl_down(); + out_html(change_to_font(0)); + out_html(change_to_size(0)); + if (!fillout) { + fillout=1; + out_html("

"); + } + trans_char(c,'"', '\a'); + add_to_index(mode, c); + out_html(" \n

"); + else out_html("\"> \n

"); + mandoc_synopsis = (strncmp(c, "SYNOPSIS", 8) == 0); + c = (mandoc_command ? scan_troff_mandoc : scan_troff)(c,1,NULL); + if (mode) out_html("

\n"); + else out_html("\n"); + curpos=0; + break; + case V('T','S'): + c=scan_table(c); + break; + case V('D','t'): /* BSD mandoc */ + mandoc_command = 1; + case V('T','H'): + if (!output_possible) { + sl = fill_words(c+j, wordlist, SIZE(wordlist), &words, 0); + *sl = 0; + if (words > 1) { + output_possible=1; + out_html("Manpage of "); + out_html(wordlist[0]); + out_html("\n\n

"); + out_html(wordlist[0]); + out_html("

\nSection: "); + if (words>4) + out_html(wordlist[4]); + else + out_html(section_name(wordlist[1])); + out_html(" ("); + out_html(wordlist[1]); + if (words>2) { + out_html(")
Updated: "); + scan_troff(wordlist[2], 1, NULL); + } else out_html(")"); + out_html("
Index\n"); + man_page_html(0,0); /* Return to Main Contents */ + *sl='\n'; + out_html("
\n"); + if (mandoc_command) out_html("
BSD mandoc
"); + } + c = sl+1; + } else + c = skip_till_newline(c); + curpos=0; + break; + case V('T','X'): + sl=fill_words(c+j, wordlist, SIZE(wordlist), &words, '\n'); + *sl=0; + out_html(change_to_font('I')); + if (words>1) wordlist[1][-1]=0; + c=lookup_abbrev(wordlist[0]); + curpos+=strlen(c); + out_html(c); + out_html(change_to_font('R')); + if (words>1) + out_html(wordlist[1]); + *sl='\n'; + c=sl+1; + break; + case V('r','m'): + /* .rm xx : Remove request, macro or string */ + case V('r','n'): + /* .rn xx yy : Rename request, macro or string xx to yy */ + { + STRDEF *de; + c=c+j; + i=V(c[0],c[1]); + c=c+2; + while (isspace(*c) && *c!='\n') c++; + j=V(c[0],c[1]); + while (*c && *c!='\n') c++; + c++; + de=strdef; + while (de && de->nr!=j) de=de->next; + if (de) { + if (de->st) free(de->st); + de->nr=0; + } + de=strdef; + while (de && de->nr!=i) de=de->next; + if (de) de->nr=j; + break; + } + case V('n','x'): + /* .nx filename : next file. */ + case V('i','n'): + /* .in +-N : Indent */ + c=skip_till_newline(c); + break; + case V('n','r'): + /* .nr R +-N M: define and set number register R by +-N; + ** auto-increment by M + */ + { + INTDEF *intd; + c=c+j; + i=V(c[0],c[1]); + c=c+2; + intd=intdef; + while (intd && intd->nr!=i) intd=intd->next; + if (!intd) { + intd = (INTDEF*) xmalloc(sizeof(INTDEF)); + intd->nr=i; + intd->val=0; + intd->incr=0; + intd->next=intdef; + intdef=intd; + } + while (*c == ' ' || *c == '\t') c++; + c=scan_expression(c,&intd->val); + if (*c!='\n') { + while (*c == ' ' || *c == '\t') c++; + c=scan_expression(c,&intd->incr); + } + c=skip_till_newline(c); + break; + } + case V('a','m'): + /* .am xx yy : append to a macro. */ + /* define or handle as .ig yy */ + mode=1; + case V('d','e'): + /* .de xx yy : define or redefine macro xx; end at .yy (..) */ + /* define or handle as .ig yy */ + { + STRDEF *de; + int olen=0; + c=c+j; + sl=fill_words(c, wordlist, SIZE(wordlist), &words, '\n'); + i=V(c[0],c[1]);j=2; + if (words == 1) wordlist[1]=".."; else { + wordlist[1]--; + wordlist[1][0]='.'; + j=3; + } + c=sl+1; + sl=c; + while (*c && strncmp(c,wordlist[1],j)) c=skip_till_newline(c); + de=defdef; + while (de && de->nr!= i) de=de->next; + if (mode && de) olen=strlen(de->st); + j=olen+c-sl; + h= (char*) xmalloc((j*2+4)*sizeof(char)); + if (h) { + for (j=0; jst[j]; + if (!j || h[j-1]!='\n') + h[j++]='\n'; + while (sl!=c) { + if (sl[0] == '\\' && sl[1] == '\\') { + h[j++]='\\'; sl++; + } else + h[j++]=*sl; + sl++; + } + h[j]=0; + if (de) { + if (de->st) free(de->st); + de->st=h; + } else { + de = (STRDEF*) xmalloc(sizeof(STRDEF)); + de->nr=i; + de->next=defdef; + de->st=h; + defdef=de; + } + } + } + c=skip_till_newline(c); + break; + + /* ----- BSD mandoc stuff below ----- */ + case V('U','x'): /* BSD mandoc */ + c=c+j; + out_html("UNIX"); + c=skip_till_newline(c); + break; + case V('A','t'): /* BSD mandoc - called with arg V */ + c=c+j; + out_html("AT&T System"); + break; + case V('B','l'): /* BSD mandoc */ + { + char *nl, t=0 /* just for gcc */; + c=c+j; + nl = strchr(c,'\n'); + if (nl) { + t = *nl; + *nl = 0; + } + if (strstr(c, "-bullet")) /* HTML Unnumbered List */ + dl_newlevel_type(UL); + else if (strstr(c, "-enum")) /* HTML Ordered List */ + dl_newlevel_type(OL); + else /* HTML Descriptive List */ + dl_newlevel_type(DL); + if (nl) + *nl = t; + if (fillout) out_html("

\n"); else { + out_html(NEWLINE); + NEWLINE[0]='\n'; + } + curpos=0; + c=skip_till_newline(c); + break; + } + case V('E','l'): /* BSD mandoc */ + c=c+j; + dl_endlevel_type(); + if (fillout) out_html("

\n"); else { + out_html(NEWLINE); + NEWLINE[0]='\n'; + } + curpos=0; + c=skip_till_newline(c); + break; + case V('I','t'): /* BSD mandoc */ + c=c+j; + if (dl_type(DL)) { + out_html("

"); + out_html(change_to_font('B')); + if (*c == '\n') { + /* Don't allow embedded comms after a newline */ + c++; + c=scan_troff(c,1,NULL); + } else { + /* Do allow embedded comms on the same line. */ + c=scan_troff_mandoc(c,1,NULL); + } + out_html(change_to_font('R')); + out_html(NEWLINE); + if (inXo) + still_dd = 1; + else + out_html("
"); + } else if (dl_type(UL) || dl_type(OL)) { + out_html("
  • "); + c=scan_troff_mandoc(c,1,NULL); + out_html(NEWLINE); + } + if (fillout) curpos++; else curpos=0; + break; + case V('X','o'): /* BSD mandoc */ + c=c+j; + inXo = 1; + break; + case V('X','c'): /* BSD mandoc - Xc closes an Xo */ + c=c+j; + if (inXo) { + if (still_dd) + out_html("
    "); + inXo = 0; + } + break; + case V('S','m'): /* BSD mandoc - called with arg on/off */ + c=skip_till_newline(c); + break; + case V('B','k'): /* BSD mandoc */ + case V('E','k'): /* BSD mandoc */ + case V('D','d'): /* BSD mandoc */ + case V('O','s'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + c=scan_troff_mandoc(c, 1, NULL); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + case V('B','t'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + out_html(" is currently in beta test."); + if (fillout) curpos++; else curpos=0; + break; + case V('B','x'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + out_html("BSD "); + c=scan_troff_mandoc(c, 1, NULL); + if (fillout) curpos++; else curpos=0; + break; + case V('D','l'): /* BSD mandoc */ + c=c+j; + out_html(NEWLINE); + out_html("
    "); + out_html(change_to_font('L')); + if (*c == '\n') c++; + c=scan_troff_mandoc(c, 1, NULL); + out_html(change_to_font('R')); + out_html("
    "); + if (fillout) curpos++; else curpos=0; + break; + case V('B','d'): /* BSD mandoc */ + { /* Seems like a kind of example/literal mode */ + char *nl, t=0 /* just for gcc */; + c=c+j; + nl = strchr(c,'\n'); + if (nl) { + t = *nl; + *nl = 0; + } + out_html(NEWLINE); + mandoc_bd_options = 0; /* Remember options for terminating Bl */ + if (strstr(c, "-offset indent")) { + mandoc_bd_options |= BD_INDENT; + out_html("
    \n"); + } + if (strstr(c, "-literal") || strstr(c, "-unfilled")) { + if (fillout) { + mandoc_bd_options |= BD_LITERAL; + out_html(change_to_font(0)); + out_html(change_to_size('0')); + out_html("
    \n");
    +		  }
    +		  curpos=0;
    +		  fillout=0;
    +	     }
    +	     if (nl)
    +		  *nl = t;
    +	     c=skip_till_newline(c);
    +	     break;
    +	}
    +	case V('E','d'):	/* BSD mandoc */
    +	     if (mandoc_bd_options & BD_LITERAL) {
    +		  if (!fillout) {
    +		       out_html(change_to_font(0));
    +		       out_html(change_to_size('0'));
    +		       out_html("
    \n"); + } + } + if (mandoc_bd_options & BD_INDENT) + out_html("
    \n"); + curpos=0; + fillout=1; + c=skip_till_newline(c); + break; + case V('B','e'): /* BSD mandoc */ + c=c+j; + if (fillout) out_html("

    "); else { + out_html(NEWLINE); + NEWLINE[0]='\n'; + } + curpos=0; + c=skip_till_newline(c); + break; + case V('X','r'): /* BSD mandoc */ + { + /* Translate xyz 1 to xyz(1) + * Allow for multiple spaces. Allow the section to be missing. + */ + char buff[100]; + char *bufptr; + trans_char(c,'"','\a'); + bufptr = buff; + c = c+j; + if (*c == '\n') c++; /* Skip spaces */ + while (isspace(*c) && *c != '\n') c++; + while (isalnum(*c) && bufptr < buff + SIZE(buff)-4) { + /* Copy the xyz part */ + *bufptr++ = *c++; + } + while (isspace(*c) && *c != '\n') c++; /* Skip spaces */ + if (isdigit(*c)) { /* Convert the number if there is one */ + *bufptr++ = '('; + while (isalnum(*c) && bufptr < buff + SIZE(buff)-3) { + *bufptr++ = *c++; + } + *bufptr++ = ')'; + } + while (*c != '\n' && bufptr < buff + SIZE(buff)-2) { + /* Copy the remainder */ + if (!isspace(*c)) { + *bufptr++ = *c; + } + c++; + } + *bufptr++ = '\n'; + *bufptr = 0; + scan_troff_mandoc(buff, 1, NULL); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + } + break; + case V('F','l'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + out_html("-"); + if (*c!='\n') { + out_html(change_to_font('B')); + c=scan_troff_mandoc(c, 1, NULL); + out_html(change_to_font('R')); + } + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + case V('P','a'): /* BSD mandoc */ + case V('P','f'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + c=scan_troff_mandoc(c, 1, NULL); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + case V('P','p'): /* BSD mandoc */ + if (fillout) out_html("

    \n"); else { + out_html(NEWLINE); + NEWLINE[0]='\n'; + } + curpos=0; + c=skip_till_newline(c); + break; + case V('D','q'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + out_html("``"); + c=scan_troff_mandoc(c, 1, NULL); + out_html("''"); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + case V('O','p'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + out_html(change_to_font('R')); + out_html("["); + c=scan_troff_mandoc(c, 1, NULL); + out_html(change_to_font('R')); + out_html("]"); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + case V('O','o'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + out_html(change_to_font('R')); + out_html("["); + c=scan_troff_mandoc(c, 1, NULL); + if (fillout) curpos++; else curpos=0; + break; + case V('O','c'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + c=scan_troff_mandoc(c, 1, NULL); + out_html(change_to_font('R')); + out_html("]"); + if (fillout) curpos++; else curpos=0; + break; + case V('P','q'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + out_html("("); + c=scan_troff_mandoc(c, 1, NULL); + out_html(")"); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + case V('Q','l'): /* BSD mandoc */ + { /* Single quote first word in the line */ + char *sp; + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + sp = c; + do { /* Find first whitespace after the + * first word that isn't a mandoc macro + */ + while (*sp && isspace(*sp)) sp++; + while (*sp && !isspace(*sp)) sp++; + } while (*sp && isupper(*(sp-2)) && islower(*(sp-1))); + + /* Use a newline to mark the end of text to + * be quoted + */ + if (*sp) *sp = '\n'; + out_html("`"); /* Quote the text */ + c=scan_troff_mandoc(c, 1, NULL); + out_html("'"); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + } + case V('S','q'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + out_html("`"); + c=scan_troff_mandoc(c, 1, NULL); + out_html("'"); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + case V('A','r'): /* BSD mandoc */ + /* parse one line in italics */ + out_html(change_to_font('I')); + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') { /* An empty Ar means "file ..." */ + out_html("file ..."); + } else { + c=scan_troff_mandoc(c, 1, NULL); + } + out_html(change_to_font('R')); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + case V('A','d'): /* BSD mandoc */ + case V('E','m'): /* BSD mandoc */ + case V('V','a'): /* BSD mandoc */ + /* parse one line in italics */ + out_html(change_to_font('I')); + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + c=scan_troff_mandoc(c, 1, NULL); + out_html(change_to_font('R')); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + case V('N','d'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + out_html(" - "); + c=scan_troff_mandoc(c, 1, NULL); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + case V('N','m'): /* BSD mandoc */ + { + static char *mandoc_name = 0; + trans_char(c,'"','\a'); + c=c+j; + if (mandoc_synopsis) { + /* + * Break lines only in the Synopsis. + * The Synopsis section seems to be treated + * as a special case - Bummer! + */ + static int count = 0; /* Don't break on the first Nm */ + if (count) { + out_html("
    "); + } else { + char *end, t=0 /* just for gcc */; + end = strchr(c, '\n'); + if (end) { + t = *end; + *end = 0; + } + if (mandoc_name) + free(mandoc_name); + mandoc_name = xstrdup(c); + if (end) + *end = t; + } + count++; + } + out_html(change_to_font('B')); + while (*c == ' ' || *c == '\t') c++; + if (*c == '\n') { + /* + * If Nm has no argument, use one from an earlier + * Nm command that did have one. Hope there aren't + * too many commands that do this. + */ + if (mandoc_name) + out_html(mandoc_name); + } else { + c=scan_troff_mandoc(c, 1, NULL); + } + out_html(change_to_font('R')); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + } + case V('C','d'): /* BSD mandoc */ + case V('C','m'): /* BSD mandoc */ + case V('I','c'): /* BSD mandoc */ + case V('M','s'): /* BSD mandoc */ + case V('O','r'): /* BSD mandoc */ + case V('S','y'): /* BSD mandoc */ + /* parse one line in bold */ + out_html(change_to_font('B')); + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + c=scan_troff_mandoc(c, 1, NULL); + out_html(change_to_font('R')); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + case V('D','v'): /* BSD mandoc */ + case V('E','v'): /* BSD mandoc */ + case V('F','r'): /* BSD mandoc */ + case V('L','i'): /* BSD mandoc */ + case V('N','o'): /* BSD mandoc */ + case V('N','s'): /* BSD mandoc */ + case V('T','n'): /* BSD mandoc */ + case V('n','N'): /* BSD mandoc */ + trans_char(c,'"','\a'); + c=c+j; + if (*c == '\n') c++; + out_html(change_to_font('B')); + c=scan_troff_mandoc(c, 1, NULL); + out_html(change_to_font('R')); + out_html(NEWLINE); + if (fillout) curpos++; else curpos=0; + break; + case V('%','A'): /* BSD mandoc biblio stuff */ + case V('%','D'): + case V('%','N'): + case V('%','O'): + case V('%','P'): + case V('%','Q'): + case V('%','V'): + c=c+j; + if (*c == '\n') c++; + c=scan_troff(c, 1, NULL); /* Don't allow embedded mandoc coms */ + if (fillout) curpos++; else curpos=0; + break; + case V('%','B'): + case V('%','J'): + case V('%','R'): + case V('%','T'): + c=c+j; + out_html(change_to_font('I')); + if (*c == '\n') c++; + c=scan_troff(c, 1, NULL); /* Don't allow embedded mandoc coms */ + out_html(change_to_font('R')); + if (fillout) curpos++; else curpos=0; + break; + /* ----- end of BSD mandoc stuff ----- */ + + default: + /* search macro database of self-defined macros */ + owndef = defdef; + while (owndef && owndef->nr!=i) owndef=owndef->next; + if (owndef) { + char **oldargument; + int deflen; + int onff; + sl=fill_words(c+j, wordlist, SIZE(wordlist), &words, '\n'); + c=sl+1; + *sl=0; + for (i=1; ist); + owndef->st[deflen+1]='a'; + for (i=0; (owndef->st[deflen+2+i] = owndef->st[i]); i++); + oldargument=argument; + argument=wordlist; + onff=newline_for_fun; + if (mandoc_command) + scan_troff_mandoc(owndef->st+deflen+2, 0, NULL); + else + scan_troff(owndef->st+deflen+2, 0, NULL); + newline_for_fun=onff; + argument=oldargument; + for (i=0; i"); + curpos=0; + still_dd=0; + } + switch (*h) { + case '&': + intbuff[ibp++]='&'; + intbuff[ibp++]='a'; + intbuff[ibp++]='m'; + intbuff[ibp++]='p'; + intbuff[ibp++]=';'; + curpos++; + break; + case '<': + intbuff[ibp++]='&'; + intbuff[ibp++]='l'; + intbuff[ibp++]='t'; + intbuff[ibp++]=';'; + curpos++; + break; + case '>': + intbuff[ibp++]='&'; + intbuff[ibp++]='g'; + intbuff[ibp++]='t'; + intbuff[ibp++]=';'; + curpos++; + break; + case '"': + intbuff[ibp++]='&'; + intbuff[ibp++]='q'; + intbuff[ibp++]='u'; + intbuff[ibp++]='o'; + intbuff[ibp++]='t'; + intbuff[ibp++]=';'; + curpos++; + break; + case '\n': + if (h[-1] == '\n' && fillout) { + intbuff[ibp++]='<'; + intbuff[ibp++]='P'; + intbuff[ibp++]='>'; + } + if (contained_tab && fillout) { + intbuff[ibp++]='<'; + intbuff[ibp++]='B'; + intbuff[ibp++]='R'; + intbuff[ibp++]='>'; + } + contained_tab=0; + curpos=0; + usenbsp=0; + intbuff[ibp++]='\n'; + break; + case '\t': + { + int curtab=0; + contained_tab=1; + FLUSHIBP; + /* like a typewriter, not like TeX */ + tabstops[SIZE(tabstops)-1] = curpos+1; + while (curtab < maxtstop && tabstops[curtab] <= curpos) + curtab++; + if (curtab < maxtstop) { + if (!fillout) { + while (curpos480) { FLUSHIBP; } + curpos++; + } + } else { + out_html(""); + while (curpos < tabstops[curtab]) { + out_html(" "); + curpos++; + } + out_html(""); + } + } + } + break; + default: + if (*h == ' ' && (h[-1] == '\n' || usenbsp)) { + FLUSHIBP; + if (!usenbsp && fillout) { + out_html("
    "); + curpos=0; + } + usenbsp=fillout; + if (usenbsp) out_html(" "); else intbuff[ibp++]=' '; + } else if (*h > 31 && *h < 127) { + intbuff[ibp++]=*h; + } else if (((unsigned char)(*h)) > 127) { +#ifdef NO_8BIT + intbuff[ibp++]='&'; + intbuff[ibp++]='#'; + intbuff[ibp++]='0'+((unsigned char)(*h))/100; + intbuff[ibp++]='0'+(((unsigned char)(*h))%100)/10; + intbuff[ibp++]='0'+((unsigned char)(*h))%10; + intbuff[ibp++]=';'; +#else + intbuff[ibp++]=*h; +#endif + } + curpos++; + break; + } + if (ibp>480) FLUSHIBP; + h++; + } + } + FLUSHIBP; + if (buffer) buffer[buffpos]=0; + if (san && *h) h++; + newline_for_fun=exnewline_for_fun; + if (result) { + *result = buffer; + buffer=exbuffer; + buffpos=exbuffpos; + buffmax=exbuffmax; + scaninbuff=exscaninbuff; + } + return h; +} + +static char *scan_troff_mandoc(char *c, int san, char **result) { + char *ret, *end = c; + int oldval = mandoc_line; + mandoc_line = 1; + while (*end && *end != '\n') { + end++; + } + + if (end > c + 2 + && ispunct(*(end - 1)) + && isspace(*(end - 2)) && *(end - 2) != '\n') { + /* + * Don't format lonely punctuation. E.g. in "xyz ," format + * the xyz and then append the comma removing the space. + */ + *(end - 2) = '\n'; + ret = scan_troff(c, san, result); + *(end - 2) = *(end - 1); + *(end - 1) = ' '; + } else { + ret = scan_troff(c, san, result); + } + mandoc_line = oldval; + return ret; +} + +STRDEF *foundpages=NULL; + +static void +error_page(char *s, char *t, ...) { + va_list p; + + printf("%s\n" + "\n

    %s

    \n", s, s); + va_start(p, t); + vfprintf(stdout, t, p); + va_end(p); + printf("\n"); + exit(0); +} + +char * +xstrdup(const char *s) { + char *p = strdup(s); + if (p == NULL) + error_page("Out of memory", + "Sorry, out of memory, aborting...\n"); + return p; +} + +void * +xmalloc(size_t size) { + void *p = malloc(size); + if (p == NULL) + error_page("Out of memory", + "Sorry, out of memory, aborting...\n"); + return p; +} + +void * +xrealloc(void *ptr, size_t size) { + void *p = realloc(ptr,size); + if (p == NULL) + error_page("Out of memory", + "Sorry, out of memory, aborting...\n"); + return p; +} + +static void +usage(void) { + error_page("man2html: bad invocation", + "Call: man2html [-l|-h host.domain:port] [-p|-q] [filename]\n" + "or: man2html -r [filename]\n"); +} + +static void +goto_dir(char *path, char **dir, char **name) { + char *s, *t, *u; + + s = xstrdup(path); + t = strrchr(s, '/'); + if (t) { + *t = 0; + u = strrchr(s, '/'); + *t = '/'; + if (u) { + *u = 0; + if (chdir(s) == 0) { + if (dir) + *dir = s; + if (name) + *name = u+1; + } +#if 0 + else /* complain or not - this need not be fatal */ + error_page("Error", "man2html: could not chdir to %s", s); +#endif + } + } +} + +/* + * Call: man2html [-l] [filename] + * + * The contents of FILENAME (or STDIN, in case FILENAME is "-" or absent) + * are converted from man-style nroff to html, and printed on STDOUT. + * + * Possible errors are reflected in the output. The return status is 0. + */ +int +main(int argc, char **argv) { + FILE *f; + struct stat stbuf; + int l, c; + char *buf, *filename, *fnam = NULL; + +#ifdef __CYGWIN__ + int opterr; + + extern int optind; + extern char *optarg; +#endif + + printf("Content-type: text/html\n\n"); + + opterr = 0; /* no stderr error messages */ + while ((c = getopt (argc, argv, "D:E:hH:lL:M:pqr?vVf")) != -1) { + switch(c) { + case 'D': + goto_dir(optarg, 0, 0); break; + case 'E': + error_page("Error", "%s", optarg); break; + case 'h': + set_cgibase("localhost"); break; + case 'H': + set_cgibase(optarg); break; + case 'l': + set_lynxcgibase("/home/httpd"); break; + case 'L': + set_lynxcgibase(optarg); break; + case 'M': + set_man2htmlpath(optarg); break; + case 'p': + set_separator('/'); break; + case 'q': + set_separator('?'); break; + case 'r': + set_relative_html_links(); break; + case 'v': + case 'V': + error_page("Version", "%s from man-%s", argv[0], version); + exit(0); + case '?': + default: + usage(); + case 'f': /* It is rumoured that some other + incarnation of man2html uses this flag; + ignore when given for compatibility. */ + /* case 'F': this will assign a format for man_page_html() */ + break; + } + } + + /* Find filename */ + if (argc == optind+1) + fnam = argv[optind]; + else if (argc != optind) + usage(); + + filename = fnam; + directory = 0; + + /* Open input file */ + if (!fnam || !strcmp(fnam, "-")) { + f = stdin; + fname = "(stdin)"; + } else { + /* do a chdir() first, to get .so expansion right */ + goto_dir(fnam, &directory, &fnam); + + f = fopen(fnam, "r"); + if (f == NULL) + error_page("File not found", "Could not open %s\n", filename); + fname = fnam; + } + + /* Read entire file into buf[1..l] */ +#define XTRA 5 + /* buf has 1 extra byte at the start, and XTRA extra bytes at the end */ + if (f == stdin) { + int sz = 1024; + int ct = 1, tot = 0; + char *p = NULL; + + clearerr(stdin); + while (ct > 0) { + tot += ct; + if (feof(stdin)) + break; + sz = 2*sz+tot; + p = xrealloc(p, sz); + ct = fread(p+tot,1,sz-tot-XTRA,stdin); + } + + buf = p; + l = tot-1; + } else { + int ct; + + l = 0; + if (fstat(fileno(f), &stbuf) != -1) + l = stbuf.st_size; + buf = (char *) xmalloc((l+1+XTRA)*sizeof(char)); + ct = fread(buf+1,1,l,f); + if (ct < l) + l = ct; + fclose(f); + } + + buf[0] = '\n'; + buf[l+1] = '\n'; + buf[l+2] = buf[l+3] = 0; + +#ifdef MAKEINDEX + idxfile = fopen(INDEXFILE, "a"); +#endif + stdinit(); + + scan_troff(buf+1,0,NULL); + dl_down(); + out_html(change_to_font(0)); + out_html(change_to_size(0)); + if (!fillout) { + fillout=1; + out_html(""); + } + out_html(NEWLINE); + if (output_possible) { + /*   for mosaic users */ + printf("
    \n 

    Index

    \n
    \n"); + manidx[mip]=0; + printf("%s", manidx); + if (subs) printf("
    \n"); + printf("\n"); + print_sig(); + printf("\n\n"); + } else { + if (!filename) + filename = fname; + if (*filename == '/') + error_page("Invalid Manpage", + "The requested file %s is not a valid (unformatted) " + "man page.\nIf the file is a formatted manpage, " + "you could try to load the\n" + "plain file.\n", + filename, filename); + else + error_page("Invalid Manpage", + "The requested file %s is not a valid (unformatted) " + "man page.", filename); + } + if (idxfile) + fclose(idxfile); + if (buf) + free(buf); + return 0; +} diff --git a/man2html/scripts/cgi-aux/man/man.aux b/man2html/scripts/cgi-aux/man/man.aux new file mode 100644 index 0000000..e381b01 --- /dev/null +++ b/man2html/scripts/cgi-aux/man/man.aux @@ -0,0 +1,75 @@ +Content-type: text/html + + + +Manual Pages - Main Contents + + + + +

    Manual Pages - Main Contents

    +
    + +

    Name and Section lookup

    + + +%lynx Start a query by typing an s. +You can enter a program name, possibly preceded by the section, +the directories to search (with -M) or a full name. +For example: +
      +
    • find +
    • 1 find +
    • -M /usr/man:/usr/X11R6/man:/usr/lib/perl5/man find +
    • /local/gcc/man/man1/gperf.1 +
    + +
    + +

    Index of pages by name and description

    +Sections: + 1. User Commands; + 2. System Calls; + 3. Library Functions; + 4. Special Files; + 5. File Formats; + 6. Games; + 7. Miscellany; + 8. Administration and Privileged Commands; + l. Postgresql Commands; + n. Tcl Commands. +

    +


    +

    Index of pages by name only

    + 1. User Commands; + 2. System Calls; + 3. Library Functions; + 4. Special Files; + 5. File Formats; + 6. Games; + 7. Miscellany; + 8. Administration and Privileged Commands; + l. Postgresql Commands; + n. Tcl Commands; + All Sections. +

    +


    + +

    Manual Pages full text search

    + + +Search the full text of the Manual Pages. + + +

    +


    + +The original man2html program and scripts are due to + +Richard Verhoeven and + +Michael Hamilton. +This version is from man-1.6g maintained by +Federico Lucifredi. + + diff --git a/man2html/scripts/cgi-aux/man/mansearch.aux b/man2html/scripts/cgi-aux/man/mansearch.aux new file mode 100644 index 0000000..f1d19a2 --- /dev/null +++ b/man2html/scripts/cgi-aux/man/mansearch.aux @@ -0,0 +1,49 @@ +Content-type: text/html + + + +Manual Pages - Text Search + + + + +

    Manual Pages - Text Search

    + +Return to Main Contents +

    + + +%lynx Start a query by typing an s. + +Examples: +

      +
    • pwd;directory - Find both in the same man page. +
    • pwd,directory - Find either. +
    • pwd directory - Find the exact phrase. +
    • -F 1 pwd - Look in section 1 only. +
    • -B glipmse - Find the best match (allow for misspelling). +
    • -L 0:10 pwd - Only show the first 10 man pages matched. +
    + +
    +

    +The index uses the Glimpse +(glimpse(1)) +text indexing system. Many of the glimpse +options, regular expressions, and wildcards are valid: +see the help page for a summary. +

    +


    + +

    +Glimpse +was developed by Udi Manber and Burra Gopal of the University of +Arizona, and Sun Wu of the National Chung-Cheng University, Taiwan. +You may contact the authors at +glimpse@cs.arizona.edu +

    +The Manual Page text search interface was created for Linux by + +Michael Hamilton. + + diff --git a/man2html/scripts/cgi-aux/man/mansearchhelp.aux b/man2html/scripts/cgi-aux/man/mansearchhelp.aux new file mode 100644 index 0000000..200b509 --- /dev/null +++ b/man2html/scripts/cgi-aux/man/mansearchhelp.aux @@ -0,0 +1,295 @@ +Content-type: text/html + + + +Manual Pages - Search Help + + + + +

    Manual Pages - Search Help

    + +Perform another search +
    +Return to Main Contents +

    +


    +

    +The full text index uses the Glimpse text indexing system. +The +glimpse(1) +manual page documents glimpse in full. This summary documents those +features of glimpse that are valid when searching through the manual pages. +

    +


    + +

    Search Options

    + +The following search options must be at the start of the search string. + +
    + +
    - # +
    +# is an integer between 1 and 8 +specifying the maximum number of errors +permitted in finding the approximate matches (the default is zero). +Generally, each insertion, deletion, or substitution counts as one error. +Since the index stores only lower case characters, errors of +substituting upper case with lower case may be missed. + +
    -B +
    +Best match mode. (Warning: -B sometimes misses matches. It is safer +to specify the number of errors explicitly.) +When -B is specified and no exact matches are found, glimpse +will continue to search until the closest matches (i.e., the ones +with minimum number of errors) +are found. +In general, -B may be slower than -#, but not by very much. +Since the index stores only lower case characters, errors of +substituting upper case with lower case may be missed. + +
    -L x | x:y | x:y:z +
    +A non-zero value of x limits the number of matches +that will be shown. +A non-zero value of y limits the number of man pages +that will be shown. +A non-zero valye of z will only show pages that have +less that z matches. +For example, -L 0:10 will output all matches for the first 10 files that +contain a match. + +
    -F pattern +
    +The -F option provides a pattern that restricts the search results to +those filenames that match the pattern. +or example, -F 8 effectively restricts matches to section 8. + +
    -w +
    +Search for the pattern as a word - i.e., surrounded by non-alphanumeric +characters. For example, +-w -1 car will match cars, but not characters and not +car10. +The non-alphanumeric must +surround the match; they cannot be counted as errors. +This option does not work with regular expressions. + +
    -W +
    +The default for Boolean AND queries is that they cover one record +(the default for a record is one line) at a time. +For example, glimpse 'good;bad' will output all lines containing +both 'good' and 'bad'. +The -W option changes the scope of Booleans to be the whole file. +Within a file glimpse will output all matches to any of the patterns. +So, glimpse -W 'good;bad' will output all lines containing 'good' +or 'bad', but only in files that contain both patterns. + +
    -k +
    +No symbol in the pattern is treated as a meta character. +For example, -k a(b|c)*d will find +the occurrences of a(b|c)*d whereas a(b|c)*d +will find substrings that match the regular expression 'a(b|c)*d'. +(The only exception is ^ at the beginning of the pattern and $ at the +end of the pattern, which are still interpreted in the usual way. +Use \^ or \$ if you need them verbatim.) + +
    + +

    +


    + +

    Patterns

    + +Glimpse +supports a large variety of patterns, including simple +strings, strings with classes of characters, sets of strings, +wild cards, and regular expressions (see LIMITATIONS). + +
    +
    Strings
    +Strings are any sequence of characters, including the special symbols +`^' for beginning of line and `$' for end of line. +The following special characters ( +`$', + +`^', + +`*', + +`[', + +`^', + +`|', + +`(', + +`)', + +`!', + +and +`\' + +) +as well as the following meta characters special to glimpse (and agrep): +`;', + +`,', + +`#', + +`<', + +`>', + +`-', + +and +`.', + +should be preceded by `\' if they are to be matched as regular +characters. For example, \^abc\\ corresponds to the string ^abc\, +whereas ^abc corresponds to the string abc at the beginning of a +line. +
    Classes of characters
    +a list of characters inside [] (in order) corresponds to any character +from the list. For example, [a-ho-z] is any character between a and h +or between o and z. The symbol `^' inside [] complements the list. +For example, [^i-n] denote any character in the character set except +character 'i' to 'n'. +The symbol `^' thus has two meanings, but this is consistent with +egrep. +The symbol `.' (don't care) stands for any symbol (except for the +newline symbol). +
    Boolean operations
    +Glimpse + +supports an `AND' operation denoted by the symbol `;' +an `OR' operation denoted by the symbol `,', +or any combination. +For example, +glimpse 'pizza;cheeseburger' will output all lines containing +both patterns. +glimpse -F 'gnu;\.c$' 'define;DEFAULT' +will output all lines containing both 'define' and 'DEFAULT' +(anywhere in the line, not necessarily in order) in +files whose name contains 'gnu' and ends with .c. +glimpse '{political,computer};science' will match 'political science' +or 'science of computers'. +
    Wild cards
    +The symbol '#' is used to denote a sequence +of any number (including 0) +of arbitrary characters (see LIMITATIONS). +The symbol # is equivalent to .* in egrep. +In fact, .* will work too, because it is a valid regular expression +(see below), but unless this is part of an actual regular expression, +# will work faster. +(Currently glimpse is experiencing some problems with #.) +
    Combination of exact and approximate matching
    +Any pattern inside angle brackets <> must match the text exactly even +if the match is with errors. For example, <mathemat>ics matches +mathematical with one error (replacing the last s with an a), but +mathe<matics> does not match mathematical no matter how many errors are +allowed. +(This option is buggy at the moment.) +
    Regular expressions
    +Since the index is word based, a regular expression must match +words that appear in the index for glimpse to find it. +Glimpse first strips the regular expression from all non-alphabetic +characters, and searches the index for all remaining words. +It then applies the regular expression matching algorithm to the +files found in the index. +For example, glimpse 'abc.*xyz' will search the index +for all files that contain both 'abc' and 'xyz', and then +search directly for 'abc.*xyz' in those files. +(If you use glimpse -w 'abc.*xyz', then 'abcxyz' will not be found, +because glimpse +will think that abc and xyz need to be matches to whole words.) +The syntax of regular expressions in glimpse is in general the same as +that for agrep. The union operation `|', Kleene closure `*', +and parentheses () are all supported. +Currently '+' is not supported. +Regular expressions are currently limited to approximately 30 +characters (generally excluding meta characters). Some options +(-d, -w, -t, -x, -D, -I, -S) do not +currently work with regular expressions. +The maximal number of errors for regular expressions that use '*' +or '|' is 4. (See LIMITATIONS.) + +
    + +
    + +

    Limitations

    + +The index of glimpse is word based. A pattern that contains more than +one word cannot be found in the index. The way glimpse overcomes this +weakness is by splitting any multi-word pattern into its set of words +and looking for all of them in the index. +For example, glimpse 'linear programming' will first consult the index +to find all files containing both linear and programming, +and then apply agrep to find the combined pattern. +This is usually an effective solution, but it can be slow for +cases where both words are very common, but their combination is not. +

    + +As was mentioned in the section on PATTERNS above, some characters +serve as meta characters for glimpse and need to be +preceded by '\' to search for them. The most common +examples are the characters '.' (which stands for a wild card), +and '*' (the Kleene closure). +So, "glimpse ab.de" will match abcde, but "glimpse ab\.de" +will not, and "glimpse ab*de" will not match ab*de, but +"glimpse ab\*de" will. +The meta character - is translated automatically to a hyphen +unless it appears between [] (in which case it denotes a range of +characters). +

    + +The index of glimpse stores all patterns in lower case. +When glimpse searches the index it first converts +all patterns to lower case, finds the appropriate files, +and then searches the actual files using the original +patterns. +So, for example, glimpse ABCXYZ will first find all +files containing abcxyz in any combination of lower and upper +cases, and then searches these files directly, so only the +right cases will be found. +One problem with this approach is discovering misspellings +that are caused by wrong cases. +For example, glimpse -B abcXYZ will first search the +index for the best match to abcxyz (because the pattern is +converted to lower case); it will find that there are matches +with no errors, and will go to those files to search them +directly, this time with the original upper cases. +If the closest match is, say AbcXYZ, glimpse may miss it, +because it doesn't expect an error. +Another problem is speed. If you search for "ATT", it will look +at the index for "att". Unless you use -w to match the whole word, +glimpse may have to search all files containing, for example, "Seattle" +which has "att" in it. +

    + +There is no size limit for simple patterns and simple patterns +within Boolean expressions. +More complicated patterns, such as regular expressions, +are currently limited to approximately 30 characters. +Lines are limited to 1024 characters. +Records are limited to 48K, and may be truncated if they are larger +than that. +The limit of record length can be +changed by modifying the parameter Max_record in agrep.h. +

    + +Glimpseindex does not index words of size > 64. +  + +


    + + diff --git a/man2html/scripts/cgi-bin/man/man2html b/man2html/scripts/cgi-bin/man/man2html new file mode 100755 index 0000000..7c515d1 --- /dev/null +++ b/man2html/scripts/cgi-bin/man/man2html @@ -0,0 +1,109 @@ +#!/bin/sh +# man2html cgi script - uses /usr/bin/man2html to format man pages +# auxiliary text files in /home/httpd/cgi-aux/man +# aeb@cwi.nl - 980109 + +MAN2HTML="/usr/bin/man2html" +MANX="/home/httpd/cgi-aux/man/man.aux" + +# Do we need lynxcgi URLs? For the moment our criterion is +# 1) HTTP_USER_AGENT=Lynx* and 2) HTTP_HOST is unset. +AGENT="${HTTP_USER_AGENT-unknown}" + +case "$AGENT" in + Lynx*|lynx*) + HH="${HTTP_HOST-nohh}" + SED="s/%lynx //" + ;; + *) + HH=nolynx + SED="/%lynx/d" + ;; +esac + +SERVER="${SERVER_NAME-localhost}" +case "$HH" in + nohh) + LL="-l" + CG="lynxcgi:/home/httpd/cgi-bin/man" + ;; + *) + LL="-H$SERVER" + CG="http://$SERVER/cgi-bin/man" + ;; +esac + +# Find the required page - expect to be called with "man2html [sec] page". +# There may a prefixed "-M manpath" option. +if [ $# -ge 2 -a x"$1" = x-M ]; then + MANPATH="$2" + export MANPATH + shift; shift + MP=" using the given MANPATH" +else + MP="" +fi + +# If no arguments given, show a start page. +if [ $# = 0 ]; then + if [ -r $MANX ]; then + cat $MANX | sed "s#%cg#$CG#g; $SED" + else + "$MAN2HTML" -E "man2html: cannot open $MANX" + fi + exit 0 +fi + +if [ $# -gt 2 ]; then + "$MAN2HTML" -E "man2html: bad invocation: too many arguments" + exit 0 +fi + +# A single argument may be an explicitly give path name +# Otherwise, ask man where to find it +if [ $# = 1 ]; then + case "$1" in + /*) + PAGE="$1" + ;; + *) + PAGE=`man -w -c "$@" 2>/dev/null` + ;; + esac +else + PAGE=`man -w -c "$@" 2>/dev/null` +fi + +if [ x"$PAGE" = x ]; then + complaint="man2html: cannot find a page" + if [ $# = 1 ]; then + "$MAN2HTML" -E "$complaint for $1$MP" + else + "$MAN2HTML" -E "$complaint for $2 in section $1$MP" + fi + exit 0 +fi + +if [ -r "$PAGE" ] +then + case "$PAGE" in + *.gz) + zcat "$PAGE" | "$MAN2HTML" "$LL" -D "$PAGE" + ;; + *.bz2) + bzcat "$PAGE" | "$MAN2HTML" "$LL" -D "$PAGE" + ;; + *) + "$MAN2HTML" "$LL" "$PAGE" + ;; + esac +elif [ -r "$PAGE".gz ] +then + zcat "$PAGE".gz | "$MAN2HTML" "$LL" -D "$PAGE" +elif [ -r "$PAGE".bz2 ] +then + bzcat "$PAGE".bz2 | "$MAN2HTML" "$LL" -D "$PAGE" +else + "$MAN2HTML" -E "Strange... Cannot find (or read) $PAGE." +fi +exit 0 diff --git a/man2html/scripts/cgi-bin/man/mansearch b/man2html/scripts/cgi-bin/man/mansearch new file mode 100755 index 0000000..2644db6 --- /dev/null +++ b/man2html/scripts/cgi-bin/man/mansearch @@ -0,0 +1,192 @@ +#!/bin/sh +# +# Interface to a glimpse search of the man pages. +# Michael Hamilton +# Small changes - aeb, 980109 +# + +# Do we need lynxcgi URLs? For the moment our criterion is +# 1) HTTP_USER_AGENT=Lynx* and 2) HTTP_HOST is unset. +AGENT="${HTTP_USER_AGENT-unknown}" + +case "$AGENT" in + Lynx*|lynx*) + HH="${HTTP_HOST-nohh}" + SED="s/%lynx //" + ;; + *) + HH=nolynx + SED="/%lynx/d" + ;; +esac + +SERVER="${SERVER_NAME-localhost}" +case "$HH" in + nohh) + CG="lynxcgi:/home/httpd/cgi-bin/man" + ;; + *) + CG="http://$SERVER/cgi-bin/man" + ;; +esac +QUOTE="'" +export CG QUOTE SED + +exec awk ' +function removeopts(string) { + gsub(/^[ \t]/, "", string); # Remove leading spaces + gsub(/[ \t]$/, "", string); # Remove trailing spaces + gsub(/[ \t\\];/, ";", string); # Remove spaces before ; + gsub(/[ \t];/, ",", string); # Remove spaces before , + while (match(string, /^-[FLBwk1-8]/)) { + if (match(string, /^-[FL]( |.)[^ \t]+[ \t]+/)) { # Option with arg + options = options " " substr(string, RSTART, RLENGTH); + string = substr(string, RSTART + RLENGTH); + } + else if (match(string, /^-[Bwk1-8][ \t]+/)) { # Option without arg + options = options " " substr(string, RSTART, RLENGTH); + string = substr(string, RSTART + RLENGTH); + } + else if (match(string, /^-[^ \t]/)) { # Remove it + string = substr(string, RSTART + RLENGTH); + } + } + return string; +} + +BEGIN { + + searchdocument = "/home/httpd/cgi-aux/man/mansearch.aux"; + quote = ENVIRON["QUOTE"]; + cgipath = ENVIRON["CG"]; + sedcmd = ENVIRON["SED"]; + truncate_at = 11; # Single page display match limit. + + glimpse_cmd = "glimpse -z -H /var/man2html -y -W -i " + + for (i = 1; i < ARGC; i++) { + string = string " " ARGV[i]; + } + # Have to be careful to single quote this + # string later. + gsub(/[^a-zA-Z0-9-_+ \t\/@%:;,$*|]/, " ", string); + + string = removeopts(string); + + gsub(/[^a-zA-Z0-9-_+ \t\/@%:,]/, " ", options); + + if (!string) { + if (system("test -r " searchdocument ) != 0) { + print "Content-type: text/html\n\n"; + print ""; + print "mansearch - file not found"; + print "\n"; + print "Sorry - cannot read " searchdocument "."; + print ""; + exit; + } + system("sed " quote "s#%cg#" cgipath "#g;" sedcmd quote " " searchdocument ); + exit; + } + + print "Content-type: text/html"; + print ""; + print ""; + print ""; + print "Manual Pages - Search Results: " string ""; + print ""; + print ""; + + print "

    Manual Pages - Search Results

    "; + print "

    Target text: " options " " string "

    "; + + print ""; + print "Perform another search"; + print "
    "; + print ""; + print "Return to Main Contents"; + print ""; + + print "
    "; + + print "
    "; + # Unless you like being hacked, the single + # forward quotes are most important. + cmd = glimpse_cmd " " options " " quote string quote " 2>/dev/null" ; + + while ((cmd | getline matchline) > 0) { + if (split(matchline, part, ": ") == 1) { + continue; + } + else { + fullname = part[1]; + } + + if (fullname == "glimpse") { + print "
    "fullname":"; + } + else if (fullname != last_fullname) { + mcount++; + tcount = 0; + last_fullname = fullname ; + last_text = ""; + + if (match(fullname, ".*/")) { + dirname = substr(fullname, 1, RLENGTH); + filename = substr(fullname, RLENGTH + 1); + if (dirname != last_dirname) { + last_dirname = dirname; + print "
    "; + print "

    Location: " dirname "

    "; + print "
    "; + } + } + else { + filename = fullname; + } + + if (match(filename, /\.[^.]+$/)) { + ref = substr(filename, 1, RSTART - 1) "+" substr(filename, RSTART + 1); + } + else { + ref = filename; + } + print "
    "; + textname = filename; + sub(/\.(gz)|Z|z$/, "", textname); + sub(/\./, "(", textname); + textname = textname ")"; + print textname; + print ""; + } + + text = substr(matchline, length(fullname) + 2); + tcount++; + if (tcount < truncate_at) { + sub(/^ *.[^ ]+ /, "", text); + sub(/ +$/, "", text); + gsub(/\\f./, "", text); + gsub(/\\&/, "", text); + gsub(/\\/, "", text); + print "
    " text; + } + else if (tcount == truncate_at) { + print "
    ...additional matches not shown."; + } + } + + print "
    "; + if (mcount == 0) { + print "No matches found."; + } + else if (mcount == 1) { + print "
    \n

    1 match found." + } + else { + print "


    \n

    " mcount " matches found." + } + print ""; + print ""; + exit; +}' "$@" + diff --git a/man2html/scripts/cgi-bin/man/mansearchhelp b/man2html/scripts/cgi-bin/man/mansearchhelp new file mode 100755 index 0000000..a96e796 --- /dev/null +++ b/man2html/scripts/cgi-bin/man/mansearchhelp @@ -0,0 +1,32 @@ +#!/bin/sh +MAN2HTML=/usr/bin/man2html +MANSH=/home/httpd/cgi-aux/man/mansearchhelp.aux + +# Do we need lynxcgi URLs? For the moment our criterion is +# 1) HTTP_USER_AGENT=Lynx* and 2) HTTP_HOST is unset. +AGENT="${HTTP_USER_AGENT-unknown}" +case "$AGENT" in + Lynx*|lynx*) + HH="${HTTP_HOST-nohh}" + ;; + *) + HH=nolynx + ;; +esac + +SERVER="${SERVER_NAME-localhost}" +case "$HH" in + nohh) + CG="lynxcgi:/home/httpd/cgi-bin/man" + ;; + *) + CG="http://$SERVER/cgi-bin/man" + ;; +esac + +if [ -r $MANSH ]; then + sed s#%cg#$CG#g $MANSH +else + $MAN2HTML -E "man2html: cannot open $MANSH" +fi +exit 0 diff --git a/man2html/scripts/cgi-bin/man/mansec b/man2html/scripts/cgi-bin/man/mansec new file mode 100755 index 0000000..24c189e --- /dev/null +++ b/man2html/scripts/cgi-bin/man/mansec @@ -0,0 +1,183 @@ +#!/usr/bin/awk -f +# +# Generate an index into a manual section by using find. +# Michael Hamilton +# Small changes - aeb, 980109 +# +BEGIN { + + OFS=""; + + if (ARGC != 3) { + print "Content-type: text/html\n\n"; + print ""; + print "manwhatis - bad call"; + print "\n"; + print "manwhatis: wrong number of arguments"; + print ""; + exit; + } + cgipath = ARGV[1]; + section = ARGV[2]; + + if (section !~ /^[1-8ln]$/ && section != "all") { + print "Content-type: text/html\n\n"; + print ""; + print "Manual - Illegal section"; + print ""; + print "Illegal section number '" section "'." ; + print "Must be one of 1,2,3,4,5,6,7,8,l,n or all"; + print ""; + exit; + } + + "echo $PPID" | getline pid; + + if (cgipath ~ /lynxcgi/) { + cache_suffix = "l"; + } + else { + cache_suffix = "h"; + } + + cache_dir = "/var/man2html"; + cache_file = "manindex" cache_suffix "-" section ".html"; + cache = cache_dir "/" cache_file; + cache_tmp = cache "_" pid; + buffer_tmp = cache "_items_" pid; + + # Find out the man path + "man -w" | getline man_path + man_path = man_path ":"; + gsub(":", " ", man_path); + # See if anything is out of date. + # Check all man[1-8] dir dates vs cache date + if (section == "all") { + if (system("test -f " cache) == 0) { + cmd = "find " man_path " -maxdepth 1 -name 'man[1-8]' -newer " cache; + cmd | getline need_update; + } + else { + need_update = 1; + } + } + else { + if (system("test -f " cache) == 0) { + cmd = "find " man_path " -maxdepth 1 -name man" section " -newer " cache; + cmd | getline need_update; + } + else { + need_update = 1; + } + } + + if (need_update != "") { + if (system("test -w " cache_dir "/.") != 0) { + print "Content-type: text/html\n\n"; + print ""; + print "mansec - no cache"; + print "\n"; + print "Sorry - cannot create index."; + print "No writable cache directory " cache_dir " exists."; + print ""; + exit; + } + + sec_name[1] = "User Commands"; + sec_name[2] = "System Calls"; + sec_name[3] = "Library Functions"; + sec_name[4] = "Special Files"; + sec_name[5] = "File Formats"; + sec_name[6] = "Games"; + sec_name[7] = "Miscellany"; + sec_name[8] = "Administration and Privileged Commands"; + sec_name["all"] = "All available manual pages"; + num_sections = 8; + + # Print heading + print "Content-type: text/html\n\n" > cache_tmp; + print "\n" > cache_tmp; + print "Manual Pages - Names: " section ". " sec_name[section] ""> cache_tmp; + print "\n" > cache_tmp; + print "

    Manual Pages - Page Names

    " > cache_tmp; + print "

    Section " section ": " sec_name[section] "

    " > cache_tmp; + + "hostname" | getline hostname; + "date" | getline date; + print hostname " (" date ")" > cache_tmp; + + if (section != "all") { + sec_sub_dir = "/man" section; + } + else { + sec_sub_dir = "/man*"; + } + gsub(" ", sec_sub_dir " ", man_path); + + print "

    Manual pages found under " man_path "." > cache_tmp; + + # Find any man[1-8]/filenames + while ((("find " man_path " -follow -type f -printf '%f\n' | sort -f ") | getline manpage) > 0) { + # Check for new letter of alphabet + letter = tolower(substr(manpage,1,1)); + if (letter != last_letter) { + last_letter = letter; + letter_index[++num_letters] = letter; + # Start a new alphabetic heading + print "

    ", toupper(letter), "

    " > buffer_tmp; + # Print out alphabetic quick index and other links + } + # Split page.n into "page" and "n" and generate an entry + sub(/[.]([zZ]|(gz))$/, "", manpage); + match(manpage, /[.][^.]+$/); + title = substr(manpage, 1, RSTART - 1); + if (section != "all") { + print "", title, "(", substr(manpage, RSTART + 1), ")" > buffer_tmp; + } + else { + sec = substr(manpage, RSTART + 1) + print "", title, "(", sec, ")" > buffer_tmp; + } + } + + close(buffer_tmp); + + print "

    " > cache_tmp; + + # Print out alphabetic quick index and other links + for (i = 1; i <= num_letters; i++) { + print "" toupper(letter_index[i]) "" > cache_tmp; + } + + print "


    " > cache_tmp; + print "Return to Main Contents" > cache_tmp; + + print "

    Other sections:" > cache_tmp; + for (i=1; i<=num_sections; i++) { + if (i != section) { # Dont print an entry for the section we are in + print "" i ". " sec_name[i] " " > cache_tmp; + } + } + print "


    " > cache_tmp; + # Print out the accumulated index entries + while ((getline < buffer_tmp) > 0) print > cache_tmp; + print "


    " > cache_tmp; + # Print out alphabetic quick index and other links + for (i = 1; i <= num_letters; i++) { + print "" toupper(letter_index[i]) "" > cache_tmp; + } + print "


    " > cache_tmp; + print "

    Return to Main Contents" > cache_tmp; + print "

    Other sections:" > cache_tmp; + for (i=1; i<=num_sections; i++) { + if (i != section) { # Dont print an entry for the section we are in + print "" i ". " sec_name[i] " " > cache_tmp; + } + } + print "\n" > cache_tmp; + system("/bin/mv " cache_tmp " " cache); + system("/bin/rm -f " buffer_tmp); + } + system("/bin/cat " cache); + exit; +} diff --git a/man2html/scripts/cgi-bin/man/manwhatis b/man2html/scripts/cgi-bin/man/manwhatis new file mode 100755 index 0000000..d14a516 --- /dev/null +++ b/man2html/scripts/cgi-bin/man/manwhatis @@ -0,0 +1,208 @@ +#!/usr/bin/awk -f +# +# Generate a whatis index into the manual pages by using find to +# locate all the whatis files. +# Michael Hamilton +# Small changes - aeb, 980109 +# +BEGIN { + + OFS=""; + + if (ARGC != 3) { + print "Content-type: text/html\n\n"; + print ""; + print "manwhatis - bad call"; + print "\n"; + print "manwhatis: wrong number of arguments"; + print ""; + exit; + } + cgipath = ARGV[1]; + section = ARGV[2]; + + if (section !~ /^[1-8ln]$/) { + print "Content-type: text/html\n\n"; + print ""; + print "Manual - Illegal section"; + print "\n"; + print "Illegal section number '" section "'." ; + print "Must be one of 1,2,3,4,5,6,7,8,l,n"; + print ""; + exit; + } + + if (cgipath ~ /lynxcgi/) { + cache_suffix = "l"; + } + else { + cache_suffix = "h"; + } + + cache_dir = "/var/man2html"; + cache_file = "whatis" cache_suffix "-" section ".html"; + cache = cache_dir "/" cache_file; + + + # Find out the man path + "man -w" | getline man_path + gsub(":", " ", man_path); + # See if anything is out of date. + if (system("test -f " cache) == 0) { + cmd = "find " man_path " -maxdepth 1 -name whatis -newer " cache; + cmd | getline need_update; + } + else { + need_update = 1; + } + + if (need_update != "") { + + if (system("test -w " cache_dir "/.") != 0) { + print "Content-type: text/html\n\n"; + print ""; + print "manwhatis - no cache"; + print "\n"; + print "Sorry - cannot create index."; + print "No writable cache directory " cache_dir " exists."; + print ""; + exit; + } + + "echo $PPID" | getline pid; + + cache_tmp = cache "_" pid; + sort_tmp = cache_dir "/manwhatis_tmp_" pid ; + buffer_tmp = cache_dir "/manwhatis_tmp2_" pid; + + sec_name[1] = "User Commands"; + sec_name[2] = "System Calls"; + sec_name[3] = "Library Functions"; + sec_name[4] = "Special Files"; + sec_name[5] = "File Formats"; + sec_name[6] = "Games"; + sec_name[7] = "Miscellany"; + sec_name[8] = "Administration and Privileged Commands"; + num_sections = 8; + # Print heading + print "Content-type: text/html\n\n" > cache_tmp; + print "\n" > cache_tmp; + print "Manual Pages - Names and Descriptions: " section ". " sec_name[section] "" > cache_tmp; + + print "\n" > cache_tmp; + print "

    Manual Pages - Names and Descriptions

    " > cache_tmp; + print "

    Section " section ": " sec_name[section] "

    " > cache_tmp; + "hostname" | getline hostname; + "date" | getline date; + print hostname " (" date ")" > cache_tmp; + # Find out the man path + "man -w" | getline; + $1 = $1 ":"; + gsub(":", " ", $1); + + find_cmd = "find " man_path " -maxdepth 1 -name whatis -printf '%p '"; + find_cmd | getline whatis_files; + close(find_cmd); + + if (whatis_files == "") { + print "Content-type: text/html\n\n"; + print ""; + print "Manwhatis - Error updating index"; + print "\n"; + print "Unable to find whatis files - Sorry." + print ""; + exit; + } + # Try to parse valid entries - those that contain ([0-9]) + # Note that egrep is sometimes in /bin, sometimes in /usr/bin + extract_cmd = "egrep -h '\\(" section "[A-Za-z]*\\)' " whatis_files ; + + print "
    Manual pages referenced in " whatis_files "

    " > cache_tmp; + + # Note that sort sometimes lives in /bin and sometimes in /usr/bin + sort_cmd = "sort -f >> " sort_tmp; + + while ( (extract_cmd | getline) > 0 ) { + if (bracket_pos = index($0, "(")) { + sec_full_num = substr($0, bracket_pos + 1, index($0, ")") - bracket_pos - 1); + names = substr($0, 1, bracket_pos - 2); + # Get rid of blanks and commas. + n = split(names, name_list, " *, *"); + description = substr($0, bracket_pos + length(sec_full_num) + 2); + # Get rid of AT&T + gsub("&", "\&", description); + # Generate a entry for each name + for (i = 1; i <= n; i++) { + print name_list[i] " " sec_full_num " " name_list[1] " / " description | sort_cmd; + } + } + } + close(extract_cmd); + close(sort_cmd); + + while ((getline < sort_tmp) > 0) { + + letter = tolower(substr($1,1,1)); + if (letter != last_letter) { + if (last_letter) { + print "

    " > buffer_tmp; + } + last_letter = letter; + letter_index[++num_letters] = letter; + # Terminate list, start a new one + + print "

    ", toupper(letter), "

    \n
    " > buffer_tmp ; + } + # Generate a
    for the name + if ($3 != last_file || $1 != last_name) { # Don't repeat the same entry link. + print "
    ", $1, "(", $2, ")", "" > buffer_tmp; + last_file = $3; + last_name = $1; + } + print "
    ", substr($0, match($0, "/") + 1) > buffer_tmp; + } + # Finish off last list + + print "\n

    " > buffer_tmp; + close(buffer_tmp); + + system("/bin/rm " sort_tmp); + + # Print out alphabetic quick index and other links + for (i = 1; i <= num_letters; i++) { + print "" toupper(letter_index[i]) "" > cache_tmp; + } + print "


    " > cache_tmp; + print "Return to Main Contents" > cache_tmp; + + print "

    Other sections:" > cache_tmp; + for (i=1; i<=num_sections; i++) { + if (i != section) { # Dont print an entry for the section we are in + print "" i ". " sec_name[i] " " > cache_tmp; + } + } + print "


    " > cache_tmp; + # Print out the accumulated contents entries + while ((getline < buffer_tmp) > 0) print > cache_tmp; + print "


    " > cache_tmp; + + for (i = 1; i <= num_letters; i++) { + print "" toupper(letter_index[i]) "" > cache_tmp; + } + print "


    " > cache_tmp; + print "

    Return to Main Contents" > cache_tmp; + + print "

    Other sections:" > cache_tmp; + for (i=1; i<=num_sections; i++) { + if (i != section) { # Dont print an entry for the section we are in + print "" i ". " sec_name[i] " " > cache_tmp; + } + } + print "" > cache_tmp; + print "" > cache_tmp; + system("/bin/mv " cache_tmp " " cache); + system("/bin/rm " buffer_tmp); + } + system("/bin/cat " cache); + exit; +} diff --git a/man2html/strdefs.c b/man2html/strdefs.c new file mode 100644 index 0000000..8515b82 --- /dev/null +++ b/man2html/strdefs.c @@ -0,0 +1,176 @@ +#include "defs.h" + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +int nroff = 1; + +#define NROFF (-666) +#define TROFF (-667) + +STRDEF *chardef, *strdef, *defdef; +INTDEF *intdef; + +static INTDEF standardint[] = { + { V('n',' '), NROFF, 0, NULL }, + { V('t',' '), TROFF, 0, NULL }, + { V('o',' '), 1, 0, NULL }, + { V('e',' '), 0, 0, NULL }, + { V('.','l'), 70, 0, NULL }, + { V('.','$'), 0, 0, NULL }, + { V('.','A'), NROFF, 0, NULL }, + { V('.','T'), TROFF, 0, NULL }, + { V('.','V'), 1, 0, NULL }, /* the me package tests for this */ + { 0, 0, 0, NULL } }; + +static STRDEF standardstring[] = { + { V('R',' '), 1, "®", NULL }, + { V('l','q'), 2, "``", NULL }, + { V('r','q'), 2, "''", NULL }, + { 0, 0, NULL, NULL} +}; + + +static STRDEF standardchar[] = { + { V('*','*'), 1, "*", NULL }, /* math star */ + { V('*','A'), 1, "A", NULL }, + { V('*','B'), 1, "B", NULL }, + { V('*','C'), 2, "Xi", NULL }, + { V('*','D'), 5, "Delta", NULL }, + { V('*','E'), 1, "E", NULL }, + { V('*','F'), 3, "Phi", NULL }, + { V('*','G'), 5, "Gamma", NULL }, + { V('*','H'), 5, "Theta", NULL }, + { V('*','I'), 1, "I", NULL }, + { V('*','K'), 1, "K", NULL }, + { V('*','L'), 6, "Lambda", NULL }, + { V('*','M'), 1, "M", NULL }, + { V('*','N'), 1, "N", NULL }, + { V('*','O'), 1, "O", NULL }, + { V('*','P'), 2, "Pi", NULL }, + { V('*','Q'), 3, "Psi", NULL }, + { V('*','R'), 1, "P", NULL }, + { V('*','S'), 5, "Sigma", NULL }, + { V('*','T'), 1, "T", NULL }, + { V('*','U'), 1, "Y", NULL }, + { V('*','W'), 5, "Omega", NULL }, + { V('*','X'), 1, "X", NULL }, + { V('*','Y'), 1, "H", NULL }, + { V('*','Z'), 1, "Z", NULL }, + { V('*','a'), 5, "alpha", NULL }, + { V('*','b'), 4, "beta", NULL }, + { V('*','c'), 2, "xi", NULL }, + { V('*','d'), 5, "delta", NULL }, + { V('*','e'), 7, "epsilon", NULL }, + { V('*','f'), 3, "phi", NULL }, + { V('*','g'), 5, "gamma", NULL }, + { V('*','h'), 5, "theta", NULL }, + { V('*','i'), 4, "iota", NULL }, + { V('*','k'), 5, "kappa", NULL }, + { V('*','l'), 6, "lambda", NULL }, + { V('*','m'), 1, "µ", NULL }, + { V('*','n'), 2, "nu", NULL }, + { V('*','o'), 1, "o", NULL }, + { V('*','p'), 2, "pi", NULL }, + { V('*','q'), 3, "psi", NULL }, + { V('*','r'), 3, "rho", NULL }, + { V('*','s'), 5, "sigma", NULL }, + { V('*','t'), 3, "tau", NULL }, + { V('*','u'), 7, "upsilon", NULL }, + { V('*','w'), 5, "omega", NULL }, + { V('*','x'), 3, "chi", NULL }, + { V('*','y'), 3, "eta", NULL }, + { V('*','z'), 4, "zeta", NULL }, + { V('+','-'), 1, "±", NULL }, + { V('1','2'), 1, "½", NULL }, + { V('1','4'), 1, "¼", NULL }, + { V('3','4'), 1, "¾", NULL }, + { V('F','i'), 3, "ffi", NULL }, + { V('F','l'), 3, "ffl", NULL }, + { V('a','a'), 1, "´", NULL }, + { V('a','p'), 1, "~", NULL }, + { V('b','r'), 1, "|", NULL }, + { V('b','u'), 1, "*", NULL }, /* bullet */ + { V('b','v'), 1, "|", NULL }, + { V('c','i'), 1, "o", NULL }, /* circle */ + { V('c','o'), 1, "©", NULL }, + { V('c','t'), 1, "¢", NULL }, + { V('d','e'), 1, "°", NULL }, + { V('d','g'), 1, "+", NULL }, /* dagger */ + { V('d','i'), 1, "÷", NULL }, + { V('e','m'), 3, "---", NULL }, /* em dash */ + { V('e','n'), 1, "-", NULL }, /* en dash */ + { V('e','q'), 1, "=", NULL }, + { V('e','s'), 1, "Ø", NULL }, + { V('f','f'), 2, "ff", NULL }, + { V('f','i'), 2, "fi", NULL }, + { V('f','l'), 2, "fl", NULL }, + { V('f','m'), 1, "´", NULL }, + { V('g','a'), 1, "`", NULL }, + { V('h','y'), 1, "-", NULL }, + { V('l','c'), 2, "|¯", NULL }, + { V('i','f'), 8, "Infinity", NULL }, /* infinity sign */ + { V('i','s'), 8, "Integral", NULL }, /* integral sign */ + { V('l','f'), 2, "|_", NULL }, + { V('l','k'), 1, "{", NULL }, + { V('m','i'), 1, "-", NULL }, + { V('m','u'), 1, "×", NULL }, + { V('n','o'), 1, "¬", NULL }, + { V('o','r'), 1, "|", NULL }, + { V('p','d'), 1, "d", NULL }, /* partial derivative */ + { V('p','l'), 1, "+", NULL }, + { V('r','c'), 2, "¯|", NULL }, + { V('r','f'), 2, "_|", NULL }, + { V('r','g'), 1, "®", NULL }, + { V('r','k'), 1, "}", NULL }, + { V('r','n'), 1, "¯", NULL }, + { V('r','u'), 1, "_", NULL }, + { V('s','c'), 1, "§", NULL }, + { V('s','l'), 1, "/", NULL }, + { V('s','q'), 2, "[]", NULL }, + { V('t','s'), 1, "s", NULL }, /* should be terminal sigma */ + { V('u','l'), 1, "_", NULL }, + { V('>','='), 1, ">", NULL }, + { V('<','='), 1, "<", NULL }, + { 0, 0, NULL, NULL } +}; + +void stdinit(void) { + STRDEF *stdf; + int i; + + stdf = &standardchar[0]; + i = 0; + while (stdf->nr) { + if (stdf->st) stdf->st = xstrdup(stdf->st); + stdf->next = &standardchar[i]; + stdf = stdf->next; + i++; + } + chardef=&standardchar[0]; + + stdf=&standardstring[0]; + i=0; + while (stdf->nr) { + /* waste a little memory, and make a copy, to avoid + the segfault when we free non-malloced memory */ + if (stdf->st) stdf->st = xstrdup(stdf->st); + stdf->next = &standardstring[i]; + stdf = stdf->next; + i++; + } + strdef=&standardstring[0]; + + intdef=&standardint[0]; + i=0; + while (intdef->nr) { + if (intdef->nr == NROFF) intdef->nr = nroff; else + if (intdef->nr == TROFF) intdef->nr = !nroff; + intdef->next = &standardint[i]; + intdef = intdef->next; + i++; + } + intdef = &standardint[0]; + defdef = NULL; +} diff --git a/misc/README b/misc/README new file mode 100644 index 0000000..5d20cf1 --- /dev/null +++ b/misc/README @@ -0,0 +1,4 @@ +Here a contributed program to preformat man pages. Untested. +Comments, suggestions and patches are welcome. + +flc, . diff --git a/misc/locales/it/manlint.1 b/misc/locales/it/manlint.1 new file mode 100644 index 0000000..11aac7e --- /dev/null +++ b/misc/locales/it/manlint.1 @@ -0,0 +1,66 @@ +'\" +.\" (C) Copyright 1999 David A. Wheeler (dwheeler@ida.org) +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" +.\" Modified Wed Jul 14 23:00:00 1999 by David A. Wheeler (dwheeler@ida.org) +.\" +.\" Traduzione da man-1.6d di Giulio Daprel +.\" Revisione a cura di Vieri Giugni +.\" giugno 2006 +.\" +.TH MANLINT 1 "14 luglio 1999" "Linux" "Linux Programmer's Manual" +.SH NOME +manlint \- programma per identificare errori di formattazione in pagine man o mdoc +.SH SINTASSI +.BR manlint " [ " options " ] [ " "list of files" " ] " +.SH DESCRIZIONE +manlint + un programma che identifica lint (errori) nella formattazione di pagine +man o mdoc page, in modo simile a quello di un controllo ortografico per un testo +ordinario. Manlint ha un elenco di macro e sequenze di escape ammesse, +e segnala l'uso di qualunque macro o sequenza di escape che non sia +nell'elenco di riferimento. +Questo elenco di riferimento include tutte le macro definite in +.BR man (7), +.BR mdoc (7), +e un sottoinsieme sicuro di troff definito in +.BR man (7). +manlint inoltre verifica la conformit alle varie regole. +.PP +Se una man page supera la verifica di manlint, dovrebbe risultare +ampiamente portabile, anche con strumenti come +.BR man2html (1) +che non implementano completamente troff. +.PP +Se non viene indicato un elenco di file, viene letto lo standard input. +Un file con il nome "-" viene interpretato come standard input. +.SH BUG +Attualmente il programma alquanto incompleto. +Non ha nessuna opzione, non verifica le sequenze di escape, +e non in grado di gestire il formato mdoc. +Inoltre, chiaro cosa deve fare, e anche nella sua forma attuale +pu trovare tantissimi problemi nei file man esistenti. +.SH AUTORE +David A. Wheeler (dwheeler@ida.org) +.SH "VEDERE ANCHE" +.BR man (7), +.BR mdoc (7). diff --git a/misc/man-preformat.c b/misc/man-preformat.c new file mode 100644 index 0000000..79f4d45 --- /dev/null +++ b/misc/man-preformat.c @@ -0,0 +1,332 @@ +From bryanh@giraffe.giraffe.netgate.net Sat Nov 16 09:32:59 1996 +Received: from giraffe.giraffe.netgate.net by hera.cwi.nl with SMTP + id ; Sat, 16 Nov 1996 09:32:53 +0100 +Received: (from bryanh@localhost) by giraffe.giraffe.netgate.net (8.6.11/8.6.9) id AAA00639; Sat, 16 Nov 1996 00:32:46 -0800 +Date: Sat, 16 Nov 1996 00:32:46 -0800 +Message-Id: <199611160832.AAA00639@giraffe.giraffe.netgate.net> +From: bryanh@giraffe.netgate.net (Bryan Henderson) +To: Andries.Brouwer@cwi.nl +In-Reply-To: <9611151043.AA01606=aeb@zeus.cwi.nl> (Andries.Brouwer@cwi.nl) +Subject: Re: cross references for Linux man page package +Status: RO + +>I hope a shell script or perl script? + +Well, no. Shell scripts are too hard and I don't know perl. So it's in +tortured C. It also needs the shhopt package (from sunsite), which +effortlessly parses a command line, but not many people know about it. +So maybe this isn't up to distributions standards. + + +Here it is anyway. You invoke it just like this: + + preformat ls.1 + +Or for a whole directory, + + preformat * + +Or if you keep preformatted man pages elsewhere than /usr/man/preformat/catN, + + preformat --mandir=/usr/local/doc/package_xyz/man * + +It makes the target directories where necessary and groffs and gzips the +man pages into them. If it finds a man page that looks like ".so whatever", +it just does a symbolic link to the base file instead. + +-------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include + +#define TRUE 1 +#define FALSE 0 + + + +void +compute_mkdir_command(const char *installed_path, + char *mkdir_cmd, const int mkdir_cmd_l) { +/*---------------------------------------------------------------------------- + Figure out what, if any, mkdir command we need to create the directories + in which to put the file whose full pathname is . +----------------------------------------------------------------------------*/ + char *slash_p; /* pointer to last slash in installed_path. */ + char need_dir[strlen(installed_path)+1]; + /* pathname of directory which must exist so we can install the man + page into it. If we're just defaulting to the current directory, + then this is a null string. + */ + + slash_p = strrchr(installed_path, '/'); + if (slash_p == NULL) need_dir[0] = '\0'; + else { + int need_dir_l; /* length for need_dir */ + need_dir_l = slash_p - installed_path + 1; /* includes slash */ + strncpy(need_dir, installed_path, need_dir_l); + need_dir[need_dir_l] = '\0'; /* need that string terminator */ + } + + if (need_dir[0] == '\0') + mkdir_cmd[0] = '\0'; + else { + struct stat stat_buf; /* results of a stat system call */ + int rc; /* return code from stat() */ + + rc = stat(need_dir, &stat_buf); + if (rc == 0) + mkdir_cmd[0] = '\0'; + else + sprintf(mkdir_cmd, "umask 002;mkdir --parents %s; ", need_dir); + } +} + + + +void +extract_dot_so_stmt(const char *man_page_source_path, + char *dot_so_stmt, const int dot_so_stmt_l) { + + FILE *source_file; + + source_file = fopen(man_page_source_path, "r"); + if (source_file != NULL) { + char buffer[200]; /* First line of file */ + + fgets(buffer, sizeof(buffer), source_file); + fclose(source_file); + + if (strncmp(buffer, ".so ", 4) == 0) + snprintf(dot_so_stmt, dot_so_stmt_l, "%s", buffer); + else dot_so_stmt[0] = '\0'; + } else dot_so_stmt[0] = '\0'; +} + + + +void +format_page(const char *installed_path, const char *man_page_source_path, + const char *mkdir_cmd, int *rc_p) { +/*---------------------------------------------------------------------------- + Format and compress the groff source in file + and put the output in . Execute the possible mkdir + command too. +-----------------------------------------------------------------------------*/ + char shell_command[100+strlen(installed_path) + + strlen(man_page_source_path) + + strlen(mkdir_cmd)]; + /* A pipeline we have the shell execute */ + int rc; /* local return code */ + + snprintf(shell_command, sizeof(shell_command), + "%sgroff -Tlatin1 -mandoc %s | gzip >%s", + mkdir_cmd, man_page_source_path, installed_path); + + printf("%s\n", shell_command); + rc = system(shell_command); + if (rc != 0) { + fprintf(stderr, "groff pipeline failed, rc = %d\n", rc); + *rc_p = 10; + } else { + *rc_p = 0; + chmod(installed_path, + S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH + ); + } +} + + + +void +create_symlink(const char *installed_path, const char *dot_so_stmt, + const char *mkdir_cmd, int *rc_p) { +/*---------------------------------------------------------------------------- + Create a symlink from to the installed name of the man + page identified by . + + We make some large assumptions about the .so statement, so this may return + gibberish. + + Execute the possible mkdir command too. +-----------------------------------------------------------------------------*/ + char shell_command[100+strlen(mkdir_cmd) + + strlen(installed_path) + + strlen(dot_so_stmt)]; + /* A pipeline we have the shell execute */ + int rc; /* local return code */ + char *slash_p; /* pointer to last slash in .so statement, or NULL */ + + slash_p = strrchr(dot_so_stmt, '/'); + if (slash_p == NULL) { + fprintf(stderr, "Cannot find the base filename " + "in the .so statement '%s'. There is no slash ('/').\n", + dot_so_stmt); + *rc_p = 15; + } else if (*(slash_p+1) == '\0') { + fprintf(stderr, "Cannot find the base filename " + "in the .so statement '%s'. There is nothing after the " + "last slash ('/').", + dot_so_stmt); + *rc_p = 13; + } else { + char link_contents[200]; + + strncpy(link_contents, slash_p+1, sizeof(link_contents)-10); + if (link_contents[strlen(link_contents)-1] == '\n') + link_contents[strlen(link_contents)-1] = '\0'; + strcat(link_contents, ".gz"); + + sprintf(shell_command, "%sln --symbolic %s %s", + mkdir_cmd, link_contents, installed_path); + + printf("%s\n", shell_command); + rc = system(shell_command); + if (rc != 0) { + fprintf(stderr, "ln pipeline failed, rc = %d\n", rc); + *rc_p = 10; + } else *rc_p = 0; + } +} + + + +void +install_it(char *installed_path, char *man_page_source_path, int *rc_p){ +/*---------------------------------------------------------------------------- + Take the man page groff source in file , format + it, compress it, and place it in file . + + Special case: If the file appears to be just a groff .so statement, + don't format it; instead, create a symbolic link that will do the same + thing as formatting the .so. A .so statement looks like: + + .so man3/basepage.3 + + and means to include all the groff source from the file man3/basepage.3. + So we just create a symbolic link to cat3/basepage.3.gz and save some + redundancy. + + + Make any directories necessary to create file . + +-----------------------------------------------------------------------------*/ + char mkdir_cmd[30 + strlen(installed_path)]; + /* A mkdir shell command to create the necessary directories. Null + string if no directory needs creating. + */ + char dot_so_stmt[200]; + /* The .so statement from the man page source, if the man page appears + to be one that consists solely of a .so statement. If it doesn't + appear so, this is an empty string. + */ + + /* We have to remove the file first, because it may be a symbolic link + for the purposes of having the same man page come up for multiple + commands. If we just overwrite, we will be replacing the base file, + which we don't want to do. + */ + unlink(installed_path); + + compute_mkdir_command(installed_path, mkdir_cmd, sizeof(mkdir_cmd)); + + extract_dot_so_stmt(man_page_source_path, dot_so_stmt, sizeof(dot_so_stmt)); + + if (*dot_so_stmt != '\0') + create_symlink(installed_path, dot_so_stmt, mkdir_cmd, rc_p); + else + format_page(installed_path, man_page_source_path, mkdir_cmd, rc_p); +} + + + +char * +just_filename(const char *full_path) { +/*---------------------------------------------------------------------------- + Return pointer into of start of filename part. + Return NULL if pathname ends with a slash (i.e. it's a directory). +-----------------------------------------------------------------------------*/ + char *slash_p; /* Pointer to last slash in */ + char *filename; /* Our eventual result */ + + slash_p = strrchr(full_path, '/'); + if (slash_p == NULL) filename = (char *) full_path; + else if (*(slash_p+1) == '\0') { + filename = NULL; + } else filename = slash_p+1; + return(filename); +} + + + +int main(int argc, char *argv[]) { + char *mandir; + /* The directory in which the formatted man pages are to go. This is + the parent directory of the cat1, cat2, etc. directories. + */ + char default_mandir[] = "/usr/man/preformat"; + /* default value for mandir, if user doesn't give --mandir option */ + int error; /* boolean: we've encountered an error */ + int i; /* local for loop index */ + + const optStruct option_def[] = { + { 0, (char *) "mandir", OPT_STRING, &mandir, 0}, + { 0, 0, OPT_END, 0, 0} + }; + int argc_parse; /* argc, except we modify it as we parse */ + char **argv_parse; /* argv, except we modify it as we parse */ + + mandir = default_mandir; /* initial assumption - default */ + argc_parse = argc; argv_parse = argv; + optParseOptions(&argc_parse, argv_parse, option_def, 0); + /* uses and sets argc_parse, argv_parse. */ + /* sets mandir (via option_def) */ + + error = FALSE; /* no error yet */ + + for (i=1;i <= argc_parse-1 && !error; i++) { + /* Do one of the man pages specified in the program arguments */ + char *man_page_source_path; + /* string: pathname of man page source file we're supposed to install + */ + char *man_page_source_fn; /* pointer within pathname to filename */ + char *dot_p; /* pointer within filename to last dot */ + + char man_section; /* man section number to which this page belongs */ + char installed_path[100]; /* full pathname for installed man page file */ + + man_page_source_path = argv_parse[i]; + + man_page_source_fn = just_filename(man_page_source_path); + if (man_page_source_fn == NULL) + fprintf(stderr, "Need filename at the end of pathname: %s\n", + man_page_source_path); + else { + dot_p = strrchr(man_page_source_fn, '.'); + if (dot_p == NULL) { + fprintf(stderr, "Invalid source file -- contains no period: %s\n", + man_page_source_fn); + } else if (*(dot_p+1) == '\0') { + fprintf(stderr, "Invalid source file -- need at least one character " + "after the last period: %s\n", man_page_source_fn); + } else { + int rc; /* local return code */ + /* Filename has a dot with at least one character after it. + Manual section number is the character right after that dot. + */ + man_section = *(dot_p+1); + + sprintf(installed_path, "%s/cat%c/%s.gz", + mandir, man_section, man_page_source_fn); + + install_it(installed_path, man_page_source_path, &rc); + if (rc != 0) error = TRUE; + } + } + } + return(error); +} + diff --git a/misc/manlint b/misc/manlint new file mode 100644 index 0000000..c919a94 --- /dev/null +++ b/misc/manlint @@ -0,0 +1,225 @@ +#!/usr/bin/perl -w + +# manlint - report "errors" in man page(s). + +# USAGE: +# manlint [list of files to check] +# +# EXAMPLE: +# manlint /usr/man/man*/*.* | less + +# An error is anything not known to be a safe construct in a man page; +# see man(7) for more information. +# Currently it's excessively paranoid, but that's the point -- this +# program assumes there's a problem, and if it isn't we can add that to the +# ruleset so that what's safe is explicitly spelled out. +# Currently this program only examines tmac.an based pages, the normal +# kind encountered in Linux. This is different than the BSD manddoc format, +# which is used by a number of man pages. + +# (C) 1999 David A. Wheeler (dwheeler@ida.org) + +# 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +require 5.002; # Requires Perl 5.002 because functions are prototyped. + +# First, set up configuration. + +$debug = 0; +$errs = $totalerrs = 0; +$goodfiles = $badfiles = $skipfiles = 0; +$filename = ''; + +# Allow options for small or large safe set; just printing if a file fails +# instead of detail; auto-skip BSD files. + +# This is a list of "safe" macros, with their value being the +# maximum number of allowed parameters (-1 = any, 0=no parameters allowed) +%safemacros = ( + 'TH' => 5, + # Font Control: + 'B' => -1, 'BI' => -1, 'BR' => -1, + 'I' => -1, 'IB' => -1, 'IR' => -1, + 'RB' => -1, 'RI' => -1, 'SB' => -1, 'SM' => -1, + # tmac.an other macros: + 'SH' => 1, + 'LP' => 0, 'P' => 0, + 'PP' => 0, + 'RS' => 1, 'RE' => 0, + 'HP' => 1, 'IP' => 2, 'TP' => 1, + 'DT' => 0, 'PD' => 1, 'SS' => 1, + # We'll allow IX (indexing). + 'IX' => -1, + # I'm adding the UR, UN, and UE macros that will permit embedded URIs. + 'UR' => 1, + 'UN' => 1, + 'UE' => 0, + # allowed troff macros + '\\"' => -1, # troff comments + 'ps' => 1, # Point size + 'ft' => 1, # Font commands (not recommended, may be ignored in some cases) + 'hy' => 1, # Hyphenation (probably ignored in translation) + 'bp' => 0, # Force page break; optional parameter forbidden. + 'ne' => 1, # Need lines (likely to be ignored in translation) + 'br' => 0, + 'nf' => 0, # No-fill; insert breaks at end of each line. + 'fi' => 0, + 'ig' => 1, + '.' => 0, # standard end-of-ignore/end-of-definition. + 'ce' => 1, # Center next N lines + 'ad' => 1, + 'na' => 0, + # Will probably need to handle some if. + 'if' => -1, # LIMITED VERSION. + 'ie' => -1, # LIMITED VERSION. + 'el' => -1, + 'so' => 1, # Handle 'so' for shared man pages + 'sp' => 1, # Vertical Space - only permit positive values. + 'de' => 1, # Handling 'macro define' is a pain, but many pages require it. + 'ds' => -1, # Allow string defines. + 'in' => 1, # Require that every indent be paired with a negative indent. + 'ti' => 1, # Temporary indent may be ignored + 'hy' => 1, # Hypenation almost certainly ignored by anyone else. + 'nh' => 1, # Again, hyphenation likely ignored. + 'tr' => 1, # Translations limited, see below. +); + +# Allowed parameters for the ft (font) troff command. +%allowed_ft_parameter = ( + '1' => 1, + '2' => 1, + '3' => 1, + '4' => 1, + 'R' => 1, + 'I' => 1, + 'B' => 1, + 'P' => 1, + 'CW' => 1, + '' => 1, +); + +%allowed_tr = ( + '\\(ts"' => 1, + '\\(is\'' => 1, + '\\(if`' => 1, + '\\(pd"' => 1, + '\\(*W-|\(bv\*(Tr' => 1, + '\\*(Tr' => 1, +); + +sub problem($) { + # Report a problem, if you should. + my $message = shift; + print "${ARGV}: $message\n"; + $errs++; +} + +sub clean_state { + %defined_macros = (); + $is_skipped = 0; +} + +sub process_line { + # Process line already read in $_ (default input line). + my $macro; + my $parameters; + if (m/^[.']\s*([^\s]+)\s*(.*)?/) { + $macro=$1; + $parameters=$2; + $macro =~ s/\s//g; + print "Found macro: #${macro}#\n" if $debug; + if ($macro =~ m/Dd/) { # Is this the BSD macro set and not a tmac.an set? + problem("Uses BSD mandoc conventions instead of tmac.an"); + $errs--; # Patch up error count. + # print "${ARGV}: Uses BSD mandoc conventions instead of tmac.an.\n"; + close(ARGV); # Skip the rest of this file. + $is_skipped = 1; + return; + } + if ($macro =~ m/\\"/) {return;} # Skip troff comments. + if (exists($defined_macros{$macro})) { + return; # ??? Should examine the macro parameters. + } + if (exists($safemacros{$macro}) ) { + # ??? Check parameter count. + # ??? Check that .TH is the first macro (note: bash.1, etc., break this) + if ( ($macro eq 'if') || ($macro eq 'ie' )) { + # Only permit checking 't' or 'n' for now. + if ($parameters =~ m/^[tn]\s/) { + $_ = $parameters; + s/^[tn]\s+//; + process_line(); # Re-examine line without the if statement. + } else { + problem("unsafe use of if/ie"); + } + # ??? sp: only no-parameter or positive values. + } elsif ($macro eq 'de') { + $parameters =~ m/^([^\s]+)/; + $is_defining = $1; + $defined_macros{$is_defining} = 1; + } elsif ($macro eq 'so') { + $parameters =~ m/^([^\s]+)/; + $new_file = $1; + while (<$new_file>) { process_line(); } + } elsif (($macro eq 'ft') && (defined($parameters)) + && (! exists($allowed_ft_parameter{$parameters}))) { + problem("forbidden ft parameter $parameters"); + } elsif (($macro eq 'tr') && (defined($parameters)) + && (! exists($allowed_tr{$parameters}))) { + problem("forbidden tr parameter $parameters"); + } + # ??? 'in': Require that every indent be paired with a negative indent. + # ??? For macros with text after them, check their text's escapes. + } else { + problem("unsafe macro $macro"); + } + } else { + # ??? Regular text; check escape clauses. + } +} + + +# Main loop: Process files, looking for errors. + +clean_state(); + +while (<>) { + if ($ARGV ne $filename) { + print "Processing $ARGV; up to now good=$goodfiles bad=$badfiles skip=$skipfiles\n"; + $filename=$ARGV; + } + process_line(); +} continue { + if (eof) { # End of processing this file. + close ARGV; # Perl magic to get line #s to be accurate. + $totalerrs += $errs; + if ($errs) { $badfiles++ } else { + if ($is_skipped) {$skipfiles++} else {$goodfiles++}; + } + $errs = 0; + clean_state(); + } +} + +print "Number of good files = $goodfiles\n"; +print "Number of bad files = $badfiles\n"; +print "Number of skipped files = $skipfiles\n"; +exit $errs; + +# ??? Handle .so better (esp. the error messages) +# currently error messages don't report the traceback & they should. + + diff --git a/misc/manlint.1 b/misc/manlint.1 new file mode 100644 index 0000000..ab76009 --- /dev/null +++ b/misc/manlint.1 @@ -0,0 +1,63 @@ +'\" +.\" (C) Copyright 1999 David A. Wheeler (dwheeler@ida.org) +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" +.\" Modified Wed Jul 14 23:00:00 1999 by David A. Wheeler (dwheeler@ida.org) +.TH MANLINT 1 "14 July 1999" "Linux" "Linux Programmer's Manual" +.SH NAME +manlint \- program to report errors in man or mdoc pages +.SH SYNOPSIS +.BR manlint " [ " options " ] [ " "list of files" " ] " +.SH DESCRIPTION +manlint +is a program that identifies lint (errors) in man or mdoc page formatting, +similar to a spelling checker for ordinary text. +Manlint has a list of permitted macros and escape sequences, +and reports the use of any macro or escape sequence not in the +permitted list. +This permitted list includes all the macros defined in +.BR man (7), +.BR mdoc (7), +and the safe subset of troff defined in +.BR man (7). +manlint also checks for conformance to various rules. +.PP +If a man page passes manlint, it should be widely portable, even +to tools such as +.BR man2html (1) +which don't implement all of troff. +.PP +If a list of files is omitted, the standard input is used. +A file by the name "-" is interpreted as the standard input. +.SH BUGS +Currently the program is very incomplete. +It doesn't have any options, it doesn't actually check escape sequences, +and it can't handle mdoc format. +Still, it's clear what it should do, and even in its current form +it can find lots of problems in existing man files. +.SH AUTHOR +David A. Wheeler (dwheeler@ida.org) was the original author of +.BR "manlint" . +Federico Lucifredi is the current maintainer. +.SH "SEE ALSO" +.BR man (7), +.BR mdoc (7). diff --git a/msgs/Makefile.in b/msgs/Makefile.in new file mode 100644 index 0000000..fdfb457 --- /dev/null +++ b/msgs/Makefile.in @@ -0,0 +1,34 @@ + +all: ../src/makemsg gencat + @for i in mess.??; do ../src/makemsg -c $$i $$i.catin; \ + cat $$i.codeset $$i.catin > $$i.catin2; \ + echo "==== Making $$i.cat ====" ;\ + LC_ALL=en_US.UTF-8 ./gencat $$i.cat $$i.catin2; done; \ + rm -f core *.catin *.catin2 + +install: + sh ./inst.sh "@languages@" "$(DESTDIR)@locale@" + +clean: + rm -f gencat gencat.out core *~ *.cat *.catin *.catin2 + +spotless: + rm -f Makefile + +# Various versions of libc use different format message catalog files +# So we have to use the installed /usr/bin/gencat if possible. +# On the other hand, /usr/bin/gencat doesnt work in glibc 2.0.7 +# The source in ../gencat is OK for libc4 and libc5, not for glibc. +gencat: + if [ -f /usr/bin/gencat ]; then \ + if gencat gencat.out gencat.in 2>/dev/null; then \ + ln -s /usr/bin/gencat gencat; \ + else \ + cp gencat207fix.sh gencat; \ + fi \ + else \ + ln -s ../gencat/gencat gencat; \ + cd ../gencat; \ + make; \ + fi + diff --git a/msgs/README b/msgs/README new file mode 100644 index 0000000..1422044 --- /dev/null +++ b/msgs/README @@ -0,0 +1,25 @@ +The English messages are compiled into man, and are used +when it cannot find a message catalog. + +Before printing a message, man does a catopen("man_messages", 0); +which means that it tries to open the file obtained from the environment +variable NLSPATH by substituting "man_messages" for %N, and $LC_MESSAGES +for %L (older implementations use $LANG instead) +When NLSPATH is not set, the value + "/usr/lib/locale/%L/%N.cat:/usr/lib/locale/%N/%L" +is used. If no information about the language is available, "C" is used. + +Because the catalog routines are not generally available, I have enclosed +a copy of the gencat source. + +If you add a new message catalog, say for language da, then verify that +the labels are used correctly by doing + ../src/makemsg mess.en x.en.h x.en.c + ../src/makemsg mess.da x.da.h x.da.c + diff x.en.h x.da.h + rm x* +The files x.en.h and x.da.h should be identical. + + +Recent gencat wants to know what codeset the messages are in. +Please report incorrect codesets to flucifredi@acm.org. diff --git a/msgs/gencat.in b/msgs/gencat.in new file mode 100644 index 0000000..640363e --- /dev/null +++ b/msgs/gencat.in @@ -0,0 +1,3 @@ +$quote " +$set 1 +1 "test for gencat\n" diff --git a/msgs/gencat207fix.sh b/msgs/gencat207fix.sh new file mode 100755 index 0000000..ae38f8b --- /dev/null +++ b/msgs/gencat207fix.sh @@ -0,0 +1,2 @@ +#!/bin/sh +/usr/bin/gencat --new $1 $2 diff --git a/msgs/inst.sh b/msgs/inst.sh new file mode 100755 index 0000000..cea72d2 --- /dev/null +++ b/msgs/inst.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +# install message catalogs - very primitive + +lgs=$1 +locdir=$2 +M= + +# if no locale then do nothing +if [ "$locdir" = "" ]; then + exit 0 +fi + +if [ "$lgs" = "??" ]; then + M=mess.*.cat +else + for i in $lgs + do + if [ -f mess.$i.cat ]; then + M="$M mess.$i.cat" + else + echo "==== No mess.$i.cat found. ====" + fi + done +fi + +for j in $M; do + if [ -f $j ]; then + i=`echo $j | sed -e 's/mess.//; s/.cat//'` + dest=`echo $locdir | sed -e "s/%N/man/; s/%L/$i/"` + dest=${PREFIX}$dest + echo "mkdir -p `dirname $dest`" + mkdir -p `dirname $dest`; + echo "install -c -m 644 $j $dest" + install -c -m 644 $j $dest + fi +done + diff --git a/msgs/mess.bg b/msgs/mess.bg new file mode 100644 index 0000000..42dc574 --- /dev/null +++ b/msgs/mess.bg @@ -0,0 +1,191 @@ +BAD_CONFIG_FILE + " %s .\n" +CONFIG_OPEN_ERROR + ": %s .\n" +PARSE_ERROR_IN_CONFIG + " .\n" +INCOMPAT + " - %s %s\n" +NO_ALTERNATE + " .\n" +NO_COMPRESS + "Man , \n\ + COMPRESS.\n" +NO_NAME_FROM_SECTION + " %s ?\n" +NO_NAME_NO_SECTION + " ?\n" +NO_SUCH_ENTRY_IN_SECTION + " %s %s\n" +NO_SUCH_ENTRY + " %s\n" +PAGER_IS + "\n %s\n" +SYSTEM_FAILED + " .\n\ + %s %d.\n" +VERSION + "%s, %s\n\n" +OUT_OF_MEMORY + " - %d \n" +ROFF_CMD_FROM_FILE_ERROR + " *roff %s\n" +MANROFFSEQ_ERROR + " MANROFFSEQ.\n\ + .\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + " *roff .\n" +UNRECOGNIZED_LINE + " ( ) \n%s\n" +GETVAL_ERROR + " man-config.c: %s \n" +FOUND_MANDIR + " %s\n" +FOUND_MAP + " %s --> %s\n" +FOUND_CATDIR + " %s\n" +LINE_TOO_LONG + " \n" +SECTION + "\n %s\n" +UNLINKED + " %s \n" +GLOBBING + " %s\n" +EXPANSION_FAILED + " [%s] \n" +OPEN_ERROR + " %s \n" +READ_ERROR + " %s \n" +FOUND_EQN + " eqn(1)\n" +FOUND_GRAP + " grap(1)\n" +FOUND_PIC + " pic(1)\n" +FOUND_TBL + " tbl(1)\n" +FOUND_VGRIND + " vgrind(1)\n" +FOUND_REFER + " refer(1)\n" +ROFF_FROM_COMMAND_LINE + " \n" +ROFF_FROM_FILE + " %s\n" +ROFF_FROM_ENV + " \n" +USING_DEFAULT + " \n" +PLEASE_WAIT + " , ...\n" +CHANGED_MODE + " %s %o\n" +CAT_OPEN_ERROR + " %s .\n" +PROPOSED_CATFILE + " , %s\n" +IS_NEWER_RESULT + " is_newer() = %d\n" +TRYING_SECTION + " %s\n" +SEARCHING + "\n %s\n" +ALREADY_IN_MANPATH + " %s \n" +CANNOT_STAT + ": stat() %s!\n" +IS_NO_DIR + ": %s !\n" +ADDING_TO_MANPATH + "%s \n" +PATH_DIR + "\n %s " +IS_IN_CONFIG + " \n" +IS_NOT_IN_CONFIG + " \n" +MAN_NEARBY + " \n" +NO_MAN_NEARBY + " \n" +ADDING_MANDIRS + "\n \n\n" +CATNAME_IS + "cat_name convert_to_cat () : %s\n" +NO_EXEC + "\n :\n %s\n" +USAGE1 + ": %s [-adfhktwW] [] [-M ] [-P ] [-S ]\n\t" +USAGE2 + "[-m ] " +USAGE3 + "[-p ] ...\n\n" +USAGE4 + " a : \n\ + c : \n\ + d : \n\ + D : -d, \n\ + f : whatis(1)\n\ + h : \n\ + k : apropos(1)\n\ + K : \n" +USAGE5 + " t : troff \n" +USAGE6 + "\ + w : \n\ + , ( -\n\ + , )\n\ + W : -w, \n\n\ + C : \n\ + M : \n\ + P : \n\ + S : , , \n" +USAGE7 + " m : \n" +USAGE8 + " p : \n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + " \n" +USER_CAN_OPEN_CAT + " \n" +CANNOT_FORK + " _%s_\n" +WAIT_FAILED + " _%s_\n" +GOT_WRONG_PID + " ..., \n\ + \n" +CHILD_TERMINATED_ABNORMALLY + " : _%s_ \n" +IDENTICAL + " %s %s\n" +MAN_FOUND + " () :\n" +NO_TROFF + ": %s TROFF\n" +NO_CAT_FOR_NONSTD_LL + " \n" +BROWSER_IS + "\n HTML %s\n" +HTMLPAGER_IS + "\n HTML %s\n" +FOUND_FILE + "manfile_from_sec_and_dir() %s\n" +CALLTRACE1 + "manfile_from_sec_and_dir(.=%s, =%s, =%s, =0x%0x)\n" +CALLTRACE2 + "glob_for_file(.=%s, =%s, =%s, =0x%0x, ...)\n" +NO_MATCH + "glob_for_file .\n" +GLOB_FOR_FILE + "glob_for_file %s.\n" +CALLTRACE3 + "glob_for_file_ext_glob(.=%s, =%s, =%s, ext=%s, hpx=%s, =%d, =0x%0x);\n" +ABOUT_TO_GLOB + "glob_for_file_ext_glob %s\n" diff --git a/msgs/mess.bg.codeset b/msgs/mess.bg.codeset new file mode 100644 index 0000000..c9dc4dd --- /dev/null +++ b/msgs/mess.bg.codeset @@ -0,0 +1 @@ +$ codeset=cp1251 diff --git a/msgs/mess.cs b/msgs/mess.cs new file mode 100644 index 0000000..6025461 --- /dev/null +++ b/msgs/mess.cs @@ -0,0 +1,170 @@ +BAD_CONFIG_FILE + "nemohu pochopit obsah souboru %s\n" +CONFIG_OPEN_ERROR + "Varovn: nemohu otevt konfiguran soubor %s\n" +PARSE_ERROR_IN_CONFIG + "Chyba v analze konfiguranho souboru\n" +INCOMPAT + "nekompatibiln volby %s a %s\n" +NO_ALTERNATE + "Promite, ale podpora pro jin systmy nebyla zkompilovna\n" +NO_COMPRESS + "Man byl konfigurovn pro automatickou kompresi formtovanch strnek,\n\ +ale konfiguran soubor nedefinuje COMPRESS.\n" +NO_NAME_FROM_SECTION + "Kterou manulovou strnku ze sekce %s chcete?\n" +NO_NAME_NO_SECTION + "Kterou manulovou strnku chcete?\n" +NO_SUCH_ENTRY_IN_SECTION + "dn zznam o strnce %s v sekci %s manulu\n" +NO_SUCH_ENTRY + "dn zznam pro %s\n" +PAGER_IS + "\npouvm %s jako strnkova\n" +SYSTEM_FAILED + "Nastala chyba pi sputn formtovacho nebo zobrazovacho pkazu.\n\ +Pkaz %s skonil a vrtil chybovou hodnotu %d.\n" +VERSION + "%s, verze %s\n\n" +OUT_OF_MEMORY + "Nedostatek pamti - nemohu alokovat %d byt\n" +ROFF_CMD_FROM_FILE_ERROR + "Chyba pi analze *roff pkazu v souboru %s\n" +MANROFFSEQ_ERROR + "Chybn analza MANROFFSEQ. Pouiji systmov standard.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Chyba pi analze *roff pkazu z pkazov dky.\n" +UNRECOGNIZED_LINE + "Nerozpoznal jsem dek v konfiguranm souboru (ignoruji jej)\n%s\n" +GETVAL_ERROR + "man-config.c: vnitn chyba: etzec %s nebyl nalezen\n" +FOUND_MANDIR + "nael jsem manulov adres %s\n" +FOUND_MAP + "nalezen manulov cesta je mapovna jako %s --> %s\n" +FOUND_CATDIR + "odpovdajc adres zformtovanch strnek je %s\n" +LINE_TOO_LONG + "Pli dlouh dek v konfiguranm souboru\n" +SECTION + "\nsekce: %s\n" +UNLINKED + "nespojeno %s\n" +GLOBBING + "provdm nahrazovn %s\n" +EXPANSION_FAILED + "Pokus [%s] o formtovn manulov strnky selhal\n" +OPEN_ERROR + "Nemohu otevt manulovou strnku %s\n" +READ_ERROR + "Chyba pi ten manulov strnky %s\n" +FOUND_EQN + "nalezen pkaz pro eqn(1)\n" +FOUND_GRAP + "nalezen pkaz pro grap(1)\n" +FOUND_PIC + "nalezen pkaz pro pic(1)\n" +FOUND_TBL + "nalezen pkaz pro tbl(1)\n" +FOUND_VGRIND + "nalezen pkaz pro vgrind(1)\n" +FOUND_REFER + "nalezen pkaz pro refer(1)\n" +ROFF_FROM_COMMAND_LINE + "analyzuji pkazy z pkazov dky\n" +ROFF_FROM_FILE + "analyzuji pkazy ze souboru %s\n" +ROFF_FROM_ENV + "analyzuji pkazy z prosted\n" +USING_DEFAULT + "pouvm standardn voln preprocesoru\n" +PLEASE_WAIT + "Formtuji strnku, prosm pokejte...\n" +CHANGED_MODE + "zmnn md z %s na %o\n" +CAT_OPEN_ERROR + "Nemohu otevt %s pro zpis.\n" +PROPOSED_CATFILE + "bude-li teba zkusm zapisovat do %s\n" +IS_NEWER_RESULT + "nvratov hodnota z is_newer() = %d\n" +TRYING_SECTION + "zkoum sekci %s\n" +SEARCHING + "\nhledm v %s\n" +ALREADY_IN_MANPATH + "ale %s u je v manulov cest\n" +CANNOT_STAT + "Varovn: nemohu nalzt soubor %s!\n" +IS_NO_DIR + "Varovn: %s nen adres!\n" +ADDING_TO_MANPATH + "pidvm %s do manulov cesty\n" +PATH_DIR + "\nadres cesty %s " +IS_IN_CONFIG + "je v konfiguranm souboru\n" +IS_NOT_IN_CONFIG + "nen v konfiguranm souboru\n" +MAN_NEARBY + "ale pobl je manulov adres\n" +NO_MAN_NEARBY + "a pobl jsem nenalezl dn manulov adres\n" +ADDING_MANDIRS + "\npidvm povinn manulov adres\n\n" +CATNAME_IS + "cat_name v convert_to_cat () je: %s\n" +NO_EXEC + "\nnespoutm pkaz:\n %s\n" +USAGE1 + "pouit: %s [-adfhktwW] [sekce] [-M cesta] [-P strnkova] [-S seznam]\n\t" +USAGE2 + "[-m systm] " +USAGE3 + "[-p etzec] jmno ...\n\n" +USAGE4 + " a : najdi vechny odpovdajc strnky\n\ + c : nepouvej ji zformtovanou strnku\n\ + d : tiskni ladc informace\n\ + D : jako -d, ale zobraz tak manulovou strnku\n\ + f : tot jako whatis(1)\n\ + h : vytiskni tuto pomocnou zprvu\n\ + k : tot jako apropos(1)\n\ + K : hledej etzec ve vech strnkch\n" +USAGE5 + " t : ke zformtovn pouij program troff\n" +USAGE6 + "\ + w : vytiskni umstn manulovch strnek, kter by byly zobrazeny\n\ + (nen-li uvedeno dn jmno, zobraz prohledvan adrese)\n\ + W : jako -w, ale zobraz pouze jmna soubor;\n\n\ + C soubor : pouij `soubor' jako konfiguran soubor\n\ + M cesta : nastav manulov cesty na `cesta'\n\ + P strnkova : pouij program `strnkova' k zobrazen strnek\n\ + S seznam : rkou oddlen seznam manulovch sekc\n" +USAGE7 + " m systm : hledej manulov strnky jinho systmu\n" +USAGE8 + " p etzec : etzec uruje preprocesor, kter bude sputn\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "a skuten uivatel tak neme otevt ji zformtovanou strnku\n" +USER_CAN_OPEN_CAT + "ale skuten uivatel me otevt ji zformtovanou strnku\n" +CANNOT_FORK + "nemohu vytvoit dal proces pro _%s_\n" +WAIT_FAILED + "chyba pi ekn na potomka _%s_\n" +GOT_WRONG_PID + "velmi podivn ..., dostal jsem patn PID pi ekn na potomka\n" +CHILD_TERMINATED_ABNORMALLY + "fatl chyba: pkaz _%s_ byl abnormln ukonen\n" +IDENTICAL + "Manulov strnka %s je shodn s %s\n" +MAN_FOUND + "Nalezen() manulov() strnky:\n" +NO_TROFF + "chyba: pkaz TROFF nebyl specifikovn v %s\n" +NO_CAT_FOR_NONSTD_LL + "dn zformtovan strnka nebyla uloena (nestandardn dlka dku)\n" diff --git a/msgs/mess.cs.codeset b/msgs/mess.cs.codeset new file mode 100644 index 0000000..6d0d028 --- /dev/null +++ b/msgs/mess.cs.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-2 diff --git a/msgs/mess.da b/msgs/mess.da new file mode 100644 index 0000000..7b97974 --- /dev/null +++ b/msgs/mess.da @@ -0,0 +1,170 @@ +BAD_CONFIG_FILE + "Konfigurationsfilen er uforstelig\n" +CONFIG_OPEN_ERROR + "Advarsel: kan ikke bne konfigurationsfilen %s\n" +PARSE_ERROR_IN_CONFIG + "Fejl ved analyse af konfigurationsfilen\n" +INCOMPAT + "Inkompatible parametre %s og %s\n" +NO_ALTERNATE + "Desvrre er der ingen understttelse af alternative systemer\n" +NO_COMPRESS + "Man var oversat med automatisk komprimering af preformaterede sider,\n\ +men konfigurationsfilen definerer ikke COMPRESS.\n" +NO_NAME_FROM_SECTION + "Hvilken manualside nskes fra kapitel %s?\n" +NO_NAME_NO_SECTION + "Hvilken manualside nskes?\n" +NO_SUCH_ENTRY_IN_SECTION + "Intet opslag for %s i kapitel %s af manualen\n" +NO_SUCH_ENTRY + "Intet opslag for %s\n" +PAGER_IS + "\nbruger %s til visning af sider\n" +SYSTEM_FAILED + "Fejl ved udfrsel af formaterings- eller udskriftskommando.\n\ +System kommandoen %s returnerede med status %d.\n" +VERSION + "%s, version %s\n\n" +OUT_OF_MEMORY + "Ingen ledig hukommelse - kan ikke allokere %d bytes\n" +ROFF_CMD_FROM_FILE_ERROR + "Fejl ved analyse af *roff kommando fra filen %s\n" +MANROFFSEQ_ERROR + "Fejl ved analyse af MANROFFSEQ. Bruger derfor systemets normalvrdier.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Fejl ved analyse af *roff kommando fra kommandolinien.\n" +UNRECOGNIZED_LINE + "Uforstelig linie i konfigurationsfilen (ignoreret)\n%s\n" +GETVAL_ERROR + "man-config.c: intern fejl: strengen %s er ikke fundet\n" +FOUND_MANDIR + "har fundet manual katalog %s\n" +FOUND_MAP + "har fundet mansti map %s --> %s\n" +FOUND_CATDIR + "korresponderende katalog til preformaterede sider er %s\n" +LINE_TOO_LONG + "Linien i konfigurationsfilen er for lang\n" +SECTION + "\nkapitel: %s\n" +UNLINKED + "unlinked %s\n" +GLOBBING + "globbing %s\n" +EXPANSION_FAILED + "Forsg [%s] p at udpakke manualsiden fejlede\n" +OPEN_ERROR + "Kan ikke bne manualsiden %s\n" +READ_ERROR + "Fejl ved lsning af manualsiden %s\n" +FOUND_EQN + "eqn(1) direktiv fundet\n" +FOUND_GRAP + "grap(1) direktiv fundet\n" +FOUND_PIC + "pic(1) direktiv fundet\n" +FOUND_TBL + "tbl(1) direktiv fundet\n" +FOUND_VGRIND + "vgrind(1) direktiv fundet\n" +FOUND_REFER + "refer(1) direktiv fundet\n" +ROFF_FROM_COMMAND_LINE + "analyserer direktiv fra kommandolinien\n" +ROFF_FROM_FILE + "analyserer direktiv fra filen %s\n" +ROFF_FROM_ENV + "analyserer direktiv fra parameterblokken\n" +USING_DEFAULT + "anvender standard preprocessor sekvens\n" +PLEASE_WAIT + "et jeblik, siden formateres...\n" +CHANGED_MODE + "fil status for %s ndret til %o\n" +CAT_OPEN_ERROR + "filen %s kan ikke bnes for skrivning.\n" +PROPOSED_CATFILE + "vil om ndvendigt skrive filen %s\n" +IS_NEWER_RESULT + "status fra is_newer() = %d\n" +TRYING_SECTION + "prver kapitel %s\n" +SEARCHING + "\nsger i %s\n" +ALREADY_IN_MANPATH + "men %s er allerede i manualstien\n" +CANNOT_STAT + "Advarsel: stat() af fil %s er slet fejl!\n" +IS_NO_DIR + "Advarsel: %s er ikke et katalog!\n" +ADDING_TO_MANPATH + "tilfjer %s til manualstien\n" +PATH_DIR + "\nsti katalog %s " +IS_IN_CONFIG + "findes i konfigurationsfilen\n" +IS_NOT_IN_CONFIG + "findes ikke i konfigurationsfilen\n" +MAN_NEARBY + "men der findes et manual katalog i nrheden\n" +NO_MAN_NEARBY + "intet manual katalog fundet i nrheden\n" +ADDING_MANDIRS + "\ntilfjer obligatoriske manual kataloger\n\n" +CATNAME_IS + "cat_name i convert_to_cat () er: %s\n" +NO_EXEC + "\nudfrer ikke kommando:\n %s\n" +USAGE1 + "syntaks: %s [-adfhktwW] [kapitel] [-M sti] [-P pager] [-S liste]\n\t" +USAGE2 + "[-m system] " +USAGE3 + "[-p streng] opslagsord ...\n\n" +USAGE4 + " a : find alle matchende opslag\n\ + c : brug ikke preformateret side\n\ + d : udskriver fejlsgningsinformation\n\ + D : som -d, men udskriver ogs siden\n\ + f : kvivalent med whatis(1)\n\ + h : udskriv denne hjlpetekst\n\ + k : kvivalent med apropos(1)\n\ + K : sg efter en tekststreng i alle siderne\n" +USAGE5 + " t : brug troff til formatering af siderne for printer udskrift\n" +USAGE6 + "\ + w : udskriv lokaliteten p manualsiden eller siderne som ville blive vist\n\ + (hvis intet navn er givet: udskriv katalogerne der ville blive gennemsgt)\n\ + W : som -w, men kun filnavn vises\n\ + C fil : anvend `fil' som konfigurationsfil\n\ + M sti : set sgestien for manualsiderne til `sti'\n\ + P pager : brug programmet `pager' til at vise siderne med\n\ + S liste : kolon separeret kapitel liste\n" +USAGE7 + " m system : gennemsg et alternativt manualside system\n" +USAGE8 + " p streng : streng angiver hvilken preprocessore som skal udfres\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "og den rigtige bruger kan heller ikke bne den preformaterede side\n" +USER_CAN_OPEN_CAT + "men den rigtige bruger kan bne den preformaterede side\n" +CANNOT_FORK + "Afgrening af kommandoen _%s_ er slet fejl\n" +WAIT_FAILED + "Fejl mens der afventes afslutning af barneproces _%s_\n" +GOT_WRONG_PID + "Forkert pid returneret mens der afventes afslutning af barneproces\n" +CHILD_TERMINATED_ABNORMALLY + "fatal fejl: kommandoen _%s_ er afsluttet unormalt\n" +IDENTICAL + "Manualside %s er identisk med %s\n" +MAN_FOUND + "Har fundet manualsiden:\n" +NO_TROFF + "Fejl: ingen TROFF kommando specificeret i %s\n" +NO_CAT_FOR_NONSTD_LL + "ingen preformateret side er gemt p grund af unormal linielngde\n" diff --git a/msgs/mess.da.codeset b/msgs/mess.da.codeset new file mode 100644 index 0000000..f5baf26 --- /dev/null +++ b/msgs/mess.da.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-1 diff --git a/msgs/mess.de b/msgs/mess.de new file mode 100644 index 0000000..984de0d --- /dev/null +++ b/msgs/mess.de @@ -0,0 +1,186 @@ +BAD_CONFIG_FILE + "Die Konfigurationsdatei %s ist fehlerhaft\n" +CONFIG_OPEN_ERROR + "Warnung: Die Konfigurationsdatei %s kann nicht geöffnet werden\n" +PARSE_ERROR_IN_CONFIG + "Fehler beim Parsen der Konfigurationsdatei\n" +INCOMPAT + "Unverträgliche Optionen %s und %s\n" +NO_ALTERNATE + "Sorry - Kein Support für alternative Systeme möglich\n" +NO_COMPRESS + "Das man-Programm ist mit automatischer Kompression der cat-Seiten\n\ +übersetzt worden, aber in der Konfigurationsdatei fehlt die Definition\n\ +von COMPRESS.\n" +NO_NAME_FROM_SECTION + "Welche Handbuchseite aus der Sektion %s soll angezeigt werden?\n" +NO_NAME_NO_SECTION + "Welche Handbuchseite soll angezeigt werden?\n" +NO_SUCH_ENTRY_IN_SECTION + "Keine Handbuchseite %s in der Sektion %s\n" +NO_SUCH_ENTRY + "Keine Handbuchseite für %s\n" +PAGER_IS + "\nAls Anzeigeprogramm wird %s benutzt\n" +SYSTEM_FAILED + "Fehler bei der Ausführung des Formatierungs- oder Anzeigeprogramms.\n\ +Das Programm %s lieferte den Rückgabe-Wert %d.\n" +VERSION + "%s, Version %s\n\n" +OUT_OF_MEMORY + "Nicht genügend Speicher verfügbar - %d Bytes können nicht bereitgestellt werden\n" +ROFF_CMD_FROM_FILE_ERROR + "Fehler beim Parsen des *roff Kommandos der Datei %s\n" +MANROFFSEQ_ERROR + "Fehler beim Parsen von MANROFFSEQ. Die System-Vorgabewerte werden benutzt.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Fehler beim Parsen des *roff Kommandos aus der Kommando-Zeile.\n" +UNRECOGNIZED_LINE + "Unbekannte Zeile in der Konfigurationsdatei (ignoriert)\n%s\n" +GETVAL_ERROR + "man-config.c: Interner Fehler: String %s nicht gefunden\n" +FOUND_MANDIR + "man Verzeichnis %s gefunden\n" +FOUND_MAP + "manpath Zuordnung %s --> %s gefunden\n" +FOUND_CATDIR + "Zugehöriges cat-Verzeichnis ist %s\n" +LINE_TOO_LONG + "Zeile zu lang in der Konfigurationsdatei\n" +SECTION + "\nSektion: %s\n" +UNLINKED + "unlinked %s\n" +GLOBBING + "globbing %s\n" +EXPANSION_FAILED + "Versuch [%s] die Handbuchseite zu expandieren schlug fehl.\n" +OPEN_ERROR + "Die Handbuchseite %s kann nicht gelesen werden\n" +READ_ERROR + "Fehler beim Lesen der Handbuchseite %s\n" +FOUND_EQN + "eqn(1) Anweisung gefunden\n" +FOUND_GRAP + "grap(1) Anweisung gefunden\n" +FOUND_PIC + "pic(1) Anweisung gefunden\n" +FOUND_TBL + "tbl(1) Anweisung gefunden\n" +FOUND_VGRIND + "vgrind(1) Anweisung gefunden\n" +FOUND_REFER + "refer(1) Anweisung gefunden\n" +ROFF_FROM_COMMAND_LINE + "Parsen der Anweisungen aus der Kommandozeile\n" +ROFF_FROM_FILE + "Parsen der Anweisungen aus der Datei %s\n" +ROFF_FROM_ENV + "Parsen der Anweisung aus den Umgebungsvariablen\n" +USING_DEFAULT + "Es wird die Standard-Abfolge der Präprozessoren benutzt\n" +PLEASE_WAIT + "Die Handbuchseite wird formatiert, bitte warten Sie...\n" +CHANGED_MODE + "Zugriffsschutz der Datei %s geändert zu %o\n" +CAT_OPEN_ERROR + "Die Datei %s kann nicht für Ausgaben geöffnet werden.\n" +PROPOSED_CATFILE + "Wenn nötig wird die Datei %s geschrieben\n" +IS_NEWER_RESULT + "Status der Funktion is_newer() = %d\n" +TRYING_SECTION + "Versuche Sektion %s\n" +SEARCHING + "\nSuche in %s\n" +ALREADY_IN_MANPATH + "%s ist bereits im man-Suchpfad\n" +CANNOT_STAT + "Warnung: stat() der Datei %s fehlgeschlagen!\n" +IS_NO_DIR + "Warnung: %s ist kein Verzeichnis!\n" +ADDING_TO_MANPATH + "Aufnehmen von %s in den man-Suchpfad\n" +PATH_DIR + "\nPfad-Verzeichnis %s " +IS_IN_CONFIG + "ist in der Konfigurationsdatei\n" +IS_NOT_IN_CONFIG + "ist nicht in der Konfigurationsdatei\n" +MAN_NEARBY + "Aber da ist ein man-Verzeichnis ganz in der Nähe\n" +NO_MAN_NEARBY + "und kein man-Verzeichnis in der Nähe gefunden\n" +ADDING_MANDIRS + "\nHinzufügen von notwendigen man-Verzeichnissen\n\n" +CATNAME_IS + "cat_name in convert_to_cat () ist: %s\n" +NO_EXEC + "\nFolgendes Kommando wird nicht ausgeführt:\n %s\n" +USAGE1 + "Aufruf: %s [-adfhktwW] [Sektion] [-M Pfad] [-P Pager] [-S Liste]\n\t" +USAGE2 + "[-m System] " +USAGE3 + "[-p String] Name ...\n\n" +USAGE4 + " a : findet alle passenden Handbucheinträge\n\ + d : Ausgabe von Meldungen zur Fehlersuche\n\ + f : Ersatz für whatis(1)\n\ + h : Ausgabe dieser Hilfe\n\ + k : Ersatz für apropos(1)\n" +USAGE5 + " t : Verwende troff zum Formatieren der Seiten vor der Ausgabe\n" +USAGE6 + "\ + w : Ausgabe der Fundorte der Handbuchseite(n), die angezeigt würde(n)\n\ + (Wenn kein Name angegeben wurde: die Verzeichnisse ausgeben, die\n\ + durchsucht würden)\n\n\ + M Pfad : Verwende `Pfad' als Suchpfad nach Handbuchseiten\n\ + P Pager : Verwende das Programm `Pager' um Handbuchseiten anzuzeigen\n\ + S List : Durch Doppelpunkte getrennte Liste von Sektionen\n" +USAGE7 + " m System : Suche nach alternativen Handbuchseiten\n" +USAGE8 + " p String : Zeichenkette, die angibt welche Präprozessoren\n\ + verwendet werden sollen\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "und auch der reale User kann das cat File nicht öffnen\n" +USER_CAN_OPEN_CAT + "aber der reale User kann das cat File öffnen\n" +CANNOT_FORK + "Kann das Kommando _%s_ nicht starten\n" +WAIT_FAILED + "Fehler während des Wartens auf Kindprozeß _%s_\n" +GOT_WRONG_PID + "Sehr seltsam ..., habe während des Wartens auf meinen Kindprozeß die falsche pid bekommen\n" +CHILD_TERMINATED_ABNORMALLY + "Fataler Fehler: Das Kommando _%s_ terminierte abnormal\n" +IDENTICAL + "man Seite %s ist identisch zu %s\n" +MAN_FOUND + "man Seite(n) gefunden:\n" +NO_TROFF + "Fehler: Kein TROFF Kommando in %s spezifiziert\n" +NO_CAT_FOR_NONSTD_LL + "Wegen nicht Standardzeilenlänge keine cat Seite gespeichert\n" +BROWSER_IS + "\Benutze %s als Browser\n" +HTMLPAGER_IS + "\Benutze %s um HTML-Seiten als Text auszugeben" +FOUND_FILE + "manfile_from_sec_and_dir() gefunden %s\n" +CALLTRACE1 + "manfile_from_sec_and_dir(dir=%s, sec=%s, name=%s, flags=0x%0x)\n" +CALLTRACE2 + "glob_for_file(dir=%s, sec=%s, name=%s, type=0x%0x, ...)\n" +NO_MATCH + "glob_for_file fand keine Übereinstimmungen.\n" +GLOB_FOR_FILE + "glob_for_file gibt %s zurück.\n" +CALLTRACE3 + "glob_for_file_ext_glob(dir=%s, sec=%s, name=%s, ext=%s, hpx=%s, glob=%d, type=0x%0x);\n" +ABOUT_TO_GLOB + "glob_for_file_ext_glob will %s expandieren\n" diff --git a/msgs/mess.de.codeset b/msgs/mess.de.codeset new file mode 100644 index 0000000..f5baf26 --- /dev/null +++ b/msgs/mess.de.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-1 diff --git a/msgs/mess.el b/msgs/mess.el new file mode 100644 index 0000000..77c84de --- /dev/null +++ b/msgs/mess.el @@ -0,0 +1,171 @@ +BAD_CONFIG_FILE + " %s\n" +CONFIG_OPEN_ERROR + ": ' %s\n" +PARSE_ERROR_IN_CONFIG + " \n" +INCOMPAT + " %s %s \n" +NO_ALTERNATE + " - \n" +NO_COMPRESS + " man ,\n\ + \n\ + COMPRESS.\n" +NO_NAME_FROM_SECTION + " %s;\n" +NO_NAME_NO_SECTION + " ;\n" +NO_SUCH_ENTRY_IN_SECTION + " %s %s \n" +NO_SUCH_ENTRY + " %s\n" +PAGER_IS + "\n %s \n" +SYSTEM_FAILED + " .\n\ + %s %d.\n" +VERSION + "%s, %s\n\n" +OUT_OF_MEMORY + " - %d \n" +ROFF_CMD_FROM_FILE_ERROR + " *roff %s\n" +MANROFFSEQ_ERROR + " MANROFFSEQ. .\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + " *roff .\n" +UNRECOGNIZED_LINE + " %s ().\n" +GETVAL_ERROR + "man-config.c: : %s \n" +FOUND_MANDIR + " man %s\n" +FOUND_MAP + " %s --> %s\n" +FOUND_CATDIR + " cat %s\n" +LINE_TOO_LONG + " \n" +SECTION + "\n: %s\n" +UNLINKED + " %s\n" +GLOBBING + " %s\n" +EXPANSION_FAILED + " [%s] \n" +OPEN_ERROR + " ' %s\n" +READ_ERROR + " %s\n" +FOUND_EQN + " eqn(1)\n" +FOUND_GRAP + " grap(1)\n" +FOUND_PIC + " pic(1)\n" +FOUND_TBL + " tbl(1)\n" +FOUND_VGRIND + " vgrind(1)\n" +FOUND_REFER + " refer(1)\n" +ROFF_FROM_COMMAND_LINE + " \n" +ROFF_FROM_FILE + " %s\n" +ROFF_FROM_ENV + " \n" +USING_DEFAULT + " \n" +PLEASE_WAIT + " , ...\n" +CHANGED_MODE + " %s %o\n" +CAT_OPEN_ERROR + " %s .\n" +PROPOSED_CATFILE + " %s \n" +IS_NEWER_RESULT + " is_newer() = %d\n" +TRYING_SECTION + " %s\n" +SEARCHING + "\n %s\n" +ALREADY_IN_MANPATH + " %s \n" +CANNOT_STAT + ": %s!\n" +IS_NO_DIR + ": %s !\n" +ADDING_TO_MANPATH + " %s \n" +PATH_DIR + "\n %s " +IS_IN_CONFIG + " \n" +IS_NOT_IN_CONFIG + " \n" +MAN_NEARBY + " man \n" +NO_MAN_NEARBY + " man \n" +ADDING_MANDIRS + "\n man\n\n" +CATNAME_IS + " convert_to_cat (), cat_name : %s\n" +NO_EXEC + "\n :\n %s\n" +USAGE1 + ": %s [-adfhktwW] [] [-M ] [-P ] [-S ]\n\t" +USAGE2 + "[-m ] " +USAGE3 + "[-p ] ...\n\n" +USAGE4 + " a : \n\ + c : cat\n\ + d : \n\ + D : -d, \n\ + f : whatis(1)\n\ + h : \n\ + k : apropos(1)\n\ + K : ' \n" +USAGE5 + " t : troff \n" +USAGE6 + "\ + w : \n\ + ( : )\n\ + W : -w, \n\n\ + C : \n\ + M : ޻\n\ + P : \n\ + S : \n" +USAGE7 + " m : \n" +USAGE8 + " p : \n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + " ' cat\n" +USER_CAN_OPEN_CAT + " ' cat\n" +CANNOT_FORK + " _%s_\n" +WAIT_FAILED + " _%s_\n" +GOT_WRONG_PID + " ..., pid \n" +CHILD_TERMINATED_ABNORMALLY + " : _%s_ \n" +IDENTICAL + " %s %s\n" +MAN_FOUND + " () ():\n" +NO_TROFF + ": TROFF %s\n" +NO_CAT_FOR_NONSTD_LL + " cat \n" diff --git a/msgs/mess.el.codeset b/msgs/mess.el.codeset new file mode 100644 index 0000000..c7f7f08 --- /dev/null +++ b/msgs/mess.el.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-7 diff --git a/msgs/mess.en b/msgs/mess.en new file mode 100644 index 0000000..e92369c --- /dev/null +++ b/msgs/mess.en @@ -0,0 +1,188 @@ +BAD_CONFIG_FILE + "unable to make sense of the file %s\n" +CONFIG_OPEN_ERROR + "Warning: cannot open configuration file %s\n" +PARSE_ERROR_IN_CONFIG + "Error parsing config file\n" +INCOMPAT + "incompatible options %s and %s\n" +NO_ALTERNATE + "Sorry - no support for alternate systems compiled in\n" +NO_COMPRESS + "Man was compiled with automatic cat page compression,\n\ +but the configuration file does not define COMPRESS.\n" +NO_NAME_FROM_SECTION + "What manual page do you want from section %s?\n" +NO_NAME_NO_SECTION + "What manual page do you want?\n" +NO_SUCH_ENTRY_IN_SECTION + "No entry for %s in section %s of the manual\n" +NO_SUCH_ENTRY + "No manual entry for %s\n" +PAGER_IS + "\nusing %s as pager\n" +SYSTEM_FAILED + "Error executing formatting or display command.\n\ +System command %s exited with status %d.\n" +VERSION + "%s, version %s\n\n" +OUT_OF_MEMORY + "Out of memory - can't malloc %d bytes\n" +ROFF_CMD_FROM_FILE_ERROR + "Error parsing *roff command from file %s\n" +MANROFFSEQ_ERROR + "Error parsing MANROFFSEQ. Using system defaults.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Error parsing *roff command from command line.\n" +UNRECOGNIZED_LINE + "Unrecognized line in config file (ignored)\n%s\n" +GETVAL_ERROR + "man-config.c: internal error: string %s not found\n" +FOUND_MANDIR + "found man directory %s\n" +FOUND_MAP + "found manpath map %s --> %s\n" +FOUND_CATDIR + "corresponding catdir is %s\n" +LINE_TOO_LONG + "Line too long in config file\n" +SECTION + "\nsection: %s\n" +UNLINKED + "unlinked %s\n" +GLOBBING + "globbing %s\n" +EXPANSION_FAILED + "Attempt [%s] to expand man page failed\n" +OPEN_ERROR + "Cannot open man page %s\n" +READ_ERROR + "Error reading man page %s\n" +FOUND_EQN + "found eqn(1) directive\n" +FOUND_GRAP + "found grap(1) directive\n" +FOUND_PIC + "found pic(1) directive\n" +FOUND_TBL + "found tbl(1) directive\n" +FOUND_VGRIND + "found vgrind(1) directive\n" +FOUND_REFER + "found refer(1) directive\n" +ROFF_FROM_COMMAND_LINE + "parsing directive from command line\n" +ROFF_FROM_FILE + "parsing directive from file %s\n" +ROFF_FROM_ENV + "parsing directive from environment\n" +USING_DEFAULT + "using default preprocessor sequence\n" +PLEASE_WAIT + "Formatting page, please wait...\n" +CHANGED_MODE + "changed mode of %s to %o\n" +CAT_OPEN_ERROR + "Couldn't open %s for writing.\n" +PROPOSED_CATFILE + "will try to write %s if needed\n" +IS_NEWER_RESULT + "status from is_newer() = %d\n" +TRYING_SECTION + "trying section %s\n" +SEARCHING + "\nsearching in %s\n" +ALREADY_IN_MANPATH + "but %s is already in the manpath\n" +CANNOT_STAT + "Warning: cannot stat file %s!\n" +IS_NO_DIR + "Warning: %s isn't a directory!\n" +ADDING_TO_MANPATH + "adding %s to manpath\n" +PATH_DIR + "\npath directory %s " +IS_IN_CONFIG + "is in the config file\n" +IS_NOT_IN_CONFIG + "is not in the config file\n" +MAN_NEARBY + "but there is a man directory nearby\n" +NO_MAN_NEARBY + "and we found no man directory nearby\n" +ADDING_MANDIRS + "\nadding mandatory man directories\n\n" +CATNAME_IS + "cat_name in convert_to_cat () is: %s\n" +NO_EXEC + "\nnot executing command:\n %s\n" +USAGE1 + "usage: %s [-adfhktwW] [section] [-M path] [-P pager] [-S list]\n\t" +USAGE2 + "[-m system] " +USAGE3 + "[-p string] name ...\n\n" +USAGE4 + " a : find all matching entries\n\ + c : do not use cat file\n\ + d : print gobs of debugging information\n\ + D : as for -d, but also display the pages\n\ + f : same as whatis(1)\n\ + h : print this help message\n\ + k : same as apropos(1)\n\ + K : search for a string in all pages\n" +USAGE5 + " t : use troff to format pages for printing\n" +USAGE6 + "\ + w : print location of man page(s) that would be displayed\n\ + (if no name given: print directories that would be searched)\n\ + W : as for -w, but display filenames only\n\n\ + C file : use `file' as configuration file\n\ + M path : set search path for manual pages to `path'\n\ + P pager : use program `pager' to display pages\n\ + S list : colon separated section list\n" +USAGE7 + " m system : search for alternate system's man pages\n" +USAGE8 + " p string : string tells which preprocessors to run\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "and the real user cannot open the cat file either\n" +USER_CAN_OPEN_CAT + "but the real user can open the cat file\n" +CANNOT_FORK + "failed to fork off the command _%s_\n" +WAIT_FAILED + "error while waiting for child _%s_\n" +GOT_WRONG_PID + "very strange ..., got wrong pid while waiting for my child\n" +CHILD_TERMINATED_ABNORMALLY + "fatal error: the command _%s_ terminated abnormally\n" +IDENTICAL + "Man page %s is identical to %s\n" +MAN_FOUND + "Found the man page(s):\n" +NO_TROFF + "error: no TROFF command specified in %s\n" +NO_CAT_FOR_NONSTD_LL + "no cat page stored because of nonstandard line length\n" +BROWSER_IS + "\nusing %s as browser\n" +HTMLPAGER_IS + "\nusing %s to dump HTML pages as text\n" +FOUND_FILE + "manfile_from_sec_and_dir() found %s\n" +CALLTRACE1 + "manfile_from_sec_and_dir(dir=%s, sec=%s, name=%s, flags=0x%0x)\n" +CALLTRACE2 + "glob_for_file(dir=%s, sec=%s, name=%s, type=0x%0x, ...)\n" +NO_MATCH + "glob_for_file found no matches.\n" +GLOB_FOR_FILE + "glob_for_file returns %s.\n" +CALLTRACE3 + "glob_for_file_ext_glob(dir=%s, sec=%s, name=%s, ext=%s, hpx=%s, glob=%d, type=0x%0x);\n" +ABOUT_TO_GLOB + "glob_for_file_ext_glob will expand %s\n" diff --git a/msgs/mess.en.codeset b/msgs/mess.en.codeset new file mode 100644 index 0000000..f5baf26 --- /dev/null +++ b/msgs/mess.en.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-1 diff --git a/msgs/mess.es b/msgs/mess.es new file mode 100644 index 0000000..f179718 --- /dev/null +++ b/msgs/mess.es @@ -0,0 +1,170 @@ +BAD_CONFIG_FILE + "imposible entender el fichero %s\n" +CONFIG_OPEN_ERROR + "Aviso: imposible abrir el fichero de configuracin %s\n" +PARSE_ERROR_IN_CONFIG + "Error en el fichero de configuracin\n" +INCOMPAT + "opciones %s y %s incompatibles\n" +NO_ALTERNATE + "Perdn - el programa no soporta sistemas alternativos\n" +NO_COMPRESS + "Man automticamente trata de comprimir las pginas, pero\n\ +en el fichero de configuracin no se define COMPRESS.\n" +NO_NAME_FROM_SECTION + "Qu pgina de manual de la seccin %s desea?\n" +NO_NAME_NO_SECTION + "Qu pgina de manual desea?\n" +NO_SUCH_ENTRY_IN_SECTION + "No hay ninguna pgina sobre %s en la seccin %s\n" +NO_SUCH_ENTRY + "No hay ninguna pgina sobre %s\n" +PAGER_IS + "\nusando %s como paginador\n" +SYSTEM_FAILED + "Error de preparacin o visualizacin del manual.\n\ +El comando %s termin con el error %d.\n" +VERSION + "%s, versin %s\n\n" +OUT_OF_MEMORY + "Memoria agotada - imposible obtener %d bytes\n" +ROFF_CMD_FROM_FILE_ERROR + "Error en el procesamiento *roff del fichero %s\n" +MANROFFSEQ_ERROR + "Error procesano MANROFFSEQ. Usando opciones por omisin.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Error en el procesamiento *roff de la lnea de comandos.\n" +UNRECOGNIZED_LINE + "Lnea desconocida en el fichero de configuracin (ignorada)\n%s\n" +GETVAL_ERROR + "man-config.c: error interno: no se encuentra la cadena %s\n" +FOUND_MANDIR + "encontrado el directorio del manual %s\n" +FOUND_MAP + "encontrada la correspondencia %s --> %s\n" +FOUND_CATDIR + "el catdir correspondiente es %s\n" +LINE_TOO_LONG + "Lnea demasiado larga en el fichero de configuracin\n" +SECTION + "\nseccin: %s\n" +UNLINKED + "%s eliminado\n" +GLOBBING + "expandiendo %s\n" +EXPANSION_FAILED + "Tentativa [%s] de descomprimir el manual fallida\n" +OPEN_ERROR + "Imposible abrir la pgina sobre %s\n" +READ_ERROR + "Error durante la lectura de la pgina sobre %s\n" +FOUND_EQN + "encontrada la directiva eqn(1)\n" +FOUND_GRAP + "encontrada la directiva grap(1)\n" +FOUND_PIC + "encontrada la directiva pic(1)\n" +FOUND_TBL + "encontrada la directiva tbl(1)\n" +FOUND_VGRIND + "encontrada la directiva vgrind(1)\n" +FOUND_REFER + "encontrada la directiva refer(1)\n" +ROFF_FROM_COMMAND_LINE + "procesando directiva en la lnea de comandos\n" +ROFF_FROM_FILE + "procesando directiva en el fichero %s\n" +ROFF_FROM_ENV + "procesando directiva en el entorno\n" +USING_DEFAULT + "usando la secuencia de preprocesadores por omisin\n" +PLEASE_WAIT + "Dando formato a la pgina, espere por favor...\n" +CHANGED_MODE + "cambio del modo %s a %o\n" +CAT_OPEN_ERROR + "Imposible escribir en %s.\n" +PROPOSED_CATFILE + "si es necesario se intentar escribir en %s\n" +IS_NEWER_RESULT + "resultado de is_newer() = %d\n" +TRYING_SECTION + "probando en la seccin %s\n" +SEARCHING + "\nbuscando en %s\n" +ALREADY_IN_MANPATH + "pero %s ya est en la ruta de bsqueda del manual\n" +CANNOT_STAT + "Aviso: no vale el fichero %s!\n" +IS_NO_DIR + "Aviso: %s no es un directorio!\n" +ADDING_TO_MANPATH + "aadiendo %s a la ruta de bsqueda del manual\n" +PATH_DIR + "\ndirectorio %s de la ruta" +IS_IN_CONFIG + "est en el fichero de configuracin\n" +IS_NOT_IN_CONFIG + "no est en el fichero de configuracin\n" +MAN_NEARBY + "pero existe un directorio del manual cercano\n" +NO_MAN_NEARBY + "y no se encontr cerca ningn directorio del manual\n" +ADDING_MANDIRS + "\naadiendo los directorios de man obligatorios\n\n" +CATNAME_IS + "cat_name de convert_to_cat () vale: %s\n" +NO_EXEC + "\nomitiendo el comando:\n %s\n" +USAGE1 + "uso: %s [-adfhktwW] [seccin] [-M ruta] [-P paginador] [-S lista]\n\t" +USAGE2 + "[-m sistema] " +USAGE3 + "[-p cadena] nombre ...\n\n" +USAGE4 + " a : buscar todas las entradas coincidentes\n\ + c : no usar las pginas preprocesadas\n\ + d : mostrar informacin adicional para depuracin de fallos\n\ + D : igual que -d, pero mostrando tambin las pginas\n\ + f : iqual que whatis(1)\n\ + h : mostrar estos mensajes de ayuda\n\ + k : igual que apropos(1)\n\ + K : buscar una cadena en todas las pginas del manual\n" +USAGE5 + " t : usar troff para preparar las pginas solicitadas\n" +USAGE6 + "\ + w : mostrar la ubicacin de las pginas solicitadas\n\ + (sin argumento: mostar todos los directorios utilizados)\n\ + W : igual que -w, pero mostrando slo nombres de ficheros\n\n\ + C fichero : usar fichero de configuracin alternativo\n\ + M ruta : establecer la ruta de busqueda de pginas\n\ + P paginador : usar paginador para ver las pginas\n\ + S lista : lista de secciones (separadas por dos puntos)\n" +USAGE7 + " m sistema : buscar manuales para el sistema indicado\n" +USAGE8 + " p cadena : preprocesamiento a efectuar\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "y el usuario real tampoco puede abrir el fichero preprocesado\n" +USER_CAN_OPEN_CAT + "pero el usuario real s puede abrir el fichero preprocesado\n" +CANNOT_FORK + "error al lanzar el comando _%s_\n" +WAIT_FAILED + "error durante la espera del proceso hijo _%s_\n" +GOT_WRONG_PID + "extrao... pid incorrecto mientras esperaba un proceso hijo\n" +CHILD_TERMINATED_ABNORMALLY + "error fatal: _%s_ termin anormalmente\n" +IDENTICAL + "La pgina de manual sobre %s es idntica a la de %s\n" +MAN_FOUND + "Encontrada la(s) pgina(s):\n" +NO_TROFF + "error: no se especifica ningn comando TROFF en %s\n" +NO_CAT_FOR_NONSTD_LL + "eliminada pgina preformateada con lneas de dimensin no estndar\n" diff --git a/msgs/mess.es.codeset b/msgs/mess.es.codeset new file mode 100644 index 0000000..f5baf26 --- /dev/null +++ b/msgs/mess.es.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-1 diff --git a/msgs/mess.fi b/msgs/mess.fi new file mode 100644 index 0000000..ca39755 --- /dev/null +++ b/msgs/mess.fi @@ -0,0 +1,170 @@ +BAD_CONFIG_FILE + "en ymmrr tiedoston %s formaattia\n" +CONFIG_OPEN_ERROR + "Varoitus: en voi avata konfigurointitiedostoa %s\n" +PARSE_ERROR_IN_CONFIG + "Virhe tulkittaessa konfigurointitiedostoa\n" +INCOMPAT + "epyhteensopivat optiot %s ja %s\n" +NO_ALTERNATE + "Valitan - vaihtoehtoisille jrjestelmille ei ole knnetty tukea\n" +NO_COMPRESS + "Man on knnetty automaattisella cat-sivujen pakkauksella,\n\ +mutta konfigurointitiedostossa ei ole COMPRESS-mrittely.\n" +NO_NAME_FROM_SECTION + "Mink man-sivun haluat sektiosta %s?\n" +NO_NAME_NO_SECTION + "Mink man-sivun haluat?\n" +NO_SUCH_ENTRY_IN_SECTION + "Ei sivua %s sektiossa %s\n" +NO_SUCH_ENTRY + "Man-sivua %s ei lydy\n" +PAGER_IS + "\nkytn ohjelmaa %s selaajana\n" +SYSTEM_FAILED + "Virhe muotoilu- tai nyttkomentoa suorittaessa.\n\ +Jrjestelmn komento %s antoi paluuarvon %d.\n" +VERSION + "%s, versio %s\n\n" +OUT_OF_MEMORY + "Muisti loppu - malloc %d tavua eponnistui\n" +ROFF_CMD_FROM_FILE_ERROR + "Virhe tulkitessa *roff-komentoa tiedostossa %s\n" +MANROFFSEQ_ERROR + "Virhe tulkittaessa MANROFFSEQ:a. Kytn jrjestelmn oletuksia.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Virhe tulkitessa *roff-komentoa komentorivilt.\n" +UNRECOGNIZED_LINE + "Tunetematon rivi konfigurointitiedostossa (ohitan)\n%s\n" +GETVAL_ERROR + "man-config.c: sisinen virhe: merkkijonoa %s ei lydy\n" +FOUND_MANDIR + "lysin man-hakemiston %s\n" +FOUND_MAP + "lysin manpath linkin %s --> %s\n" +FOUND_CATDIR + "vastaava catdir on %s\n" +LINE_TOO_LONG + "Rivi liian pitk konfigurointitiedostossa\n" +SECTION + "\nsektio: %s\n" +UNLINKED + "linkittmtn %s\n" +GLOBBING + "globbing %s\n" +EXPANSION_FAILED + "Yritys [%s] purkaa man-sivua eponnistui\n" +OPEN_ERROR + "En voi avata man-sivua %s\n" +READ_ERROR + "Virhe luettaessa man-sivua %s\n" +FOUND_EQN + "lysin eqn(1) direktiivin\n" +FOUND_GRAP + "lysin grap(1) direktiivin\n" +FOUND_PIC + "lysin pic(1) direktiivin\n" +FOUND_TBL + "lysin tbl(1) direktiivin\n" +FOUND_VGRIND + "lysin vgrind(1) direktiivin\n" +FOUND_REFER + "lysin refer(1) direktiivin\n" +ROFF_FROM_COMMAND_LINE + "tulkitessa direktiivi komentorivilt\n" +ROFF_FROM_FILE + "tulkitessa direktiivi tiedostosta %s\n" +ROFF_FROM_ENV + "tulkitessa direktiivi ympristmuuttujasta\n" +USING_DEFAULT + "kytn oletusesiksittelijn vaihetta\n" +PLEASE_WAIT + "Muotoilen sivua, odota...\n" +CHANGED_MODE + "muutin %s:n moodia %o:ksi\n" +CAT_OPEN_ERROR + "En voinut avata %s:a kirjoitusta varten.\n" +PROPOSED_CATFILE + "yritn kirjoittaa %s tarvittaessa\n" +IS_NEWER_RESULT + "tila funktiosta is_newer() = %d\n" +TRYING_SECTION + "yritn sektiota %s\n" +SEARCHING + "\nhaen %s:sta\n" +ALREADY_IN_MANPATH + "mutta %s on jo manpath:ssa\n" +CANNOT_STAT + "Varoitus: cannot stat file %s!\n" +IS_NO_DIR + "Varoitus: %s ei ole hakemisto!\n" +ADDING_TO_MANPATH + "lisn %s:n manpath:iin\n" +PATH_DIR + "\npolku hakemisto %s " +IS_IN_CONFIG + "on konfigurointitiedostossa\n" +IS_NOT_IN_CONFIG + "ei ole konfigurointitiedostossa\n" +MAN_NEARBY + "mutta man-hakemisto on lhell\n" +NO_MAN_NEARBY + "ja man-hakemistoa ei lytynut lhelt\n" +ADDING_MANDIRS + "\nlisn pakolliset man-hakemistot\n\n" +CATNAME_IS + "cat_name funktiossa convert_to_cat () on: %s\n" +NO_EXEC + "\nen suorita komentoa:\n %s\n" +USAGE1 + "kytt: %s [-adfhktwW] [sektio] [-M polku] [-P selaaja] [-S lista]\n\t" +USAGE2 + "[-m jrjestelm] " +USAGE3 + "[-p merkkijono] nimi ...\n\n" +USAGE4 + " a : etsi kaikki soveltuvat kohdat\n\ + c : l kyt cat-tiedostoa\n\ + d : tulosta paljon virheenetsinttietoja\n\ + D : sama kuin -d, mutta nyt mys sivut\n\ + f : sama kuin whatis(1)\n\ + h : tulosta tm ohjeteksti\n\ + k : sama kuin apropos(1)\n\ + K : etsi merkkijonoa kaikilta sivuilta\n" +USAGE5 + " t : kyt troff-ohjelmaa paperitulostuksen muotoiluun\n" +USAGE6 + "\ + w : tulosta man-sivujen sijainto, jotka nytettisiin\n\ + (jos ei anneta nime: tulosta hakemistot, joista etsittisiin)\n\ + W : sama kuin -w, mutta tulosta vain tiedostonimet\n\n\ + C tiedosto : kyt `tiedosto' konfigurointitiedostona\n\ + M polku : kyt man-sivujen hakupolkuna `polku'\n\ + P selaaja : kyt ohjelmaa `selaaja' sivujen nyttn\n\ + S lista : puolipistein erotettu sektioiden lista\n" +USAGE7 + " m jrjestelm : etsi vaihtoehtoisen jrjestelmn man-sivuja\n" +USAGE8 + " p merkkijono : merkkijono kertoo, mit esiksittelij kytetn\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "ja oikea kyttjkn ei voi avata cat-tiedostoa\n" +USER_CAN_OPEN_CAT + "mutta oikea kyttj voi avata cat-tiedoston\n" +CANNOT_FORK + "komennon _%s_ kynnistys fork-kutsulla eponnistui\n" +WAIT_FAILED + "virhe odottaessa lapsiprosessia _%s_\n" +GOT_WRONG_PID + "hyvin outoa ..., sain vrn pid:n odottaessa lapsiprosessia\n" +CHILD_TERMINATED_ABNORMALLY + "vakava virhe: komento _%s_ pttyi virheeseen\n" +IDENTICAL + "man-sivu %s on sama kuin %s\n" +MAN_FOUND + "Lysin man-sivuja:\n" +NO_TROFF + "virhe: TROFF-komentoa ei mritelty %s:ssa\n" +NO_CAT_FOR_NONSTD_LL + "cat-sivua ei talletettu eptavallisen rivipituuden takia\n" diff --git a/msgs/mess.fi.codeset b/msgs/mess.fi.codeset new file mode 100644 index 0000000..f5baf26 --- /dev/null +++ b/msgs/mess.fi.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-1 diff --git a/msgs/mess.fr b/msgs/mess.fr new file mode 100644 index 0000000..712ef0a --- /dev/null +++ b/msgs/mess.fr @@ -0,0 +1,190 @@ +BAD_CONFIG_FILE + "impossible d'interprter le fichier %s\n" +CONFIG_OPEN_ERROR + "Attention: impossible d'ouvrir le fichier de configuration %s\n" +PARSE_ERROR_IN_CONFIG + "Erreur pendant l'analyse du fichier de configuration\n" +INCOMPAT + "options %s et %s incompatibles\n" +NO_ALTERNATE + "Dsol - pas de support pour d'autre systmes de pages\n" +NO_COMPRESS + "Man a t compil de sorte qu'il ralise la compression automatique\n\ +des pages formates, mais le fichier de configuration ne contient pas\n\ +la dfinition du compacteur (COMPRESS).\n" +NO_NAME_FROM_SECTION + "Quelle page de manuel de la section %s dsirez-vous consulter ?\n" +NO_NAME_NO_SECTION + "Quelle page de manuel dsirez-vous consulter ?\n" +NO_SUCH_ENTRY_IN_SECTION + "Il n'y a pas d'entre %s dans la section %s du manuel.\n" +NO_SUCH_ENTRY + "Il n'y a pas de page de manuel pour %s.\n" +PAGER_IS + "\nutilisation de %s pour la consultation\n" +SYSTEM_FAILED + "Erreur pendant l'excution du formatage ou de l'affichage.\n\ +Le systme retourne pour %s l'erreur %d.\n" +VERSION + "%s, version %s\n\n" +OUT_OF_MEMORY + "Plus assez de mmoire - impossible d'allouer %d octets\n" +ROFF_CMD_FROM_FILE_ERROR + "Erreur pendant l'interprtation *roff du fichier %s\n" +MANROFFSEQ_ERROR + "Erreur dans MANROFFSEQ. Utilisation du choix par dfaut.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Erreur pendant l'interprtation *roff sur la ligne de commandes.\n" +UNRECOGNIZED_LINE + "Ligne %s non reconnue dans le fichier de configuration (ignore).\n" +GETVAL_ERROR + "man-config.c : erreur interne : chane %s non trouve\n" +FOUND_MANDIR + "trouv le rpertoire man %s\n" +FOUND_MAP + "trouv la correspondance %s --> %s\n" +FOUND_CATDIR + "le rpertoire cat correspondant est %s\n" +LINE_TOO_LONG + "Ligne trop longue dans le fichier de configuration\n" +SECTION + "\nsection: %s\n" +UNLINKED + "supprim %s\n" +GLOBBING + "expansion de %s\n" +EXPANSION_FAILED + "Tentative [%s] d'expansion de la page de manuel infructueuse" +OPEN_ERROR + "Impossible d'ouvrir la page de manuel %s\n" +READ_ERROR + "Erreur de lecture de la page de manuel %s\n" +FOUND_EQN + "directive eqn(1) rencontre\n" +FOUND_GRAP + "directive grap(1) rencontre\n" +FOUND_PIC + "directive pic(1) rencontre\n" +FOUND_TBL + "directive tbl(1) rencontre\n" +FOUND_VGRIND + "directive vgrind(1) rencontre\n" +FOUND_REFER + "directive refer(1) rencontre\n" +ROFF_FROM_COMMAND_LINE + "analyse des directives depuis la ligne de commandes\n" +ROFF_FROM_FILE + "analyse des directives depuis le fichier %s\n" +ROFF_FROM_ENV + "analyse des directives depuis l'environnement\n" +USING_DEFAULT + "utilisation squence prprocesseur par dfaut\n" +PLEASE_WAIT + "Formatage de la page en cours, patientez...\n" +CHANGED_MODE + "changement du mode %s %o\n" +CAT_OPEN_ERROR + "Impossible d'ouvrir %s en criture.\n" +PROPOSED_CATFILE + "nous tenterons d'crire %s si besoin est\n" +IS_NEWER_RESULT + "statut de is_newer() = %d\n" +TRYING_SECTION + "essai section %s\n" +SEARCHING + "\nrecherche dans %s\n" +ALREADY_IN_MANPATH + "mais %s est dj dans le chemin de recherche\n" +CANNOT_STAT + "Attention: impossible de tester le fichier %s !\n" +IS_NO_DIR + "Attention: %s n'est pas un rpertoire !\n" +ADDING_TO_MANPATH + "ajout de %s au chemin de recherche\n" +PATH_DIR + "\npath directory %s " +IS_IN_CONFIG + "est dans le fichier de configuration\n" +IS_NOT_IN_CONFIG + "n'est pas dans le fichier de configuration\n" +MAN_NEARBY + "mais il y a un rpertoire de manuel pas loin\n" +NO_MAN_NEARBY + "et nous ne trouvons pas de rpertoire de manuel dans le coin\n" +ADDING_MANDIRS + "\najout des rpertoires de manuel obligatoires\n\n" +CATNAME_IS + "dans convert_to_cat (), cat_name vaut: %s\n" +NO_EXEC + "\nn'excute pas la commande:\n %s\n" +USAGE1 + "syntaxe: %s [-adfhktwW] [section] [-M chemin] [-P visu] [-S liste]\n\t" +USAGE2 + " [-m systme] " +USAGE3 + "[-p chane] nom ...\n\n" +USAGE4 + " a : rechercher toutes les entres correspondantes\n\ + c : ne pas utiliser de fichier cat\n\ + d : afficher une floppe d'informations de dbogage\n\ + D : comme -d, mais afficher aussi les pages\n\ + f : quivalent whatis(1)\n\ + h : afficher ce message d'aide\n\ + k : quivalent apropos(1)\n" + K : rechercher une chane dans toutes les pages\n" +USAGE5 + " t : utilise troff pour le formatage des pages\n" +USAGE6 + "\ + w : indiquer l'emplacement des pages de manuel qui seraient affiches\n\ + (si aucun nom n'est donn, afficher les rpertoires qui seraient scruts)\n\ + W : comme -w, mais n'afficher que les noms de fichiers\n\n\ + C fichier : prendre fichier comme fichier de configuration\n\ + M chemin : positionner le chemin de recherche des pages chemin \n\ + P visu : utiliser le programme visu pour afficher les pages\n\ + S liste : liste de sections spares par des deux points\n" +USAGE7 + " m systme : rechercher d'autres systmes de pages de manuel\n" +USAGE8 + " p chane : la chane dtermine les prprocesseurs employer\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "et l'utilisateur rel ne peut pas non plus ouvrir le fichier format\n" +USER_CAN_OPEN_CAT + "mais l'utilisateur rel peut ouvrir le fichier format\n" +CANNOT_FORK + "erreur lors du fork() de la commande _%s_\n" +WAIT_FAILED + "erreur lors de l'attente du fils _%s_\n" +GOT_WRONG_PID + "trs bizarre... rcupr le mauvais pid lors de l'attente de mon fils\n" +CHILD_TERMINATED_ABNORMALLY + "erreur fatale: la commande _%s_ s'est termine anormalement\n" +IDENTICAL + "La page de manuel %s est identique %s\n" +MAN_FOUND + "Trouv la (les) page(s):\n" +NO_TROFF + "erreur: aucune commande TROFF spcifie dans %s\n" +NO_CAT_FOR_NONSTD_LL + "pas de page cat enregistre en raison d'une taille de ligne non standard\n" +BROWSER_IS + "\nutilisation de %s comme navigateur\n" +HTMLPAGER_IS + "\nutilisation de %s pour transformer les pages HTML en texte\n" +FOUND_FILE + "manfile_from_sec_and_dir() a trouv %s\n" +CALLTRACE1 + "manfile_from_sec_and_dir(rp=%s, sec=%s, nom=%s, flags=0x%0x)\n" +CALLTRACE2 + "glob_for_file(rp=%s, sec=%s, nom=%s, type=0x%0x, ...)\n" +NO_MATCH + "glob_for_file n'a pas trouv de correspondance.\n" +GLOB_FOR_FILE + "glob_for_file renvoie %s.\n" +CALLTRACE3 + "glob_for_file_ext_glob(rp=%s, sec=%s, nom=%s, ext=%s, hpx=%s, glob=%d, type=0x%0x);\n" +ABOUT_TO_GLOB + "glob_for_file_ext_glob dveloppera %s\n" + diff --git a/msgs/mess.fr.codeset b/msgs/mess.fr.codeset new file mode 100644 index 0000000..f5baf26 --- /dev/null +++ b/msgs/mess.fr.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-1 diff --git a/msgs/mess.hr b/msgs/mess.hr new file mode 100644 index 0000000..c423d71 --- /dev/null +++ b/msgs/mess.hr @@ -0,0 +1,170 @@ +BAD_CONFIG_FILE + "datoteka %s nema smisla\n" +CONFIG_OPEN_ERROR + "Upozorenje: konfiguracijska datoteka %s se ne moe otvoriti\n" +PARSE_ERROR_IN_CONFIG + "Greka pri obradi konfiguracijske datoteke\n" +INCOMPAT + "opcije %s i %s nekompatibilne\n" +NO_ALTERNATE + "Naalost, podrka za druge sustave nije ugraena\n" +NO_COMPRESS + "Man je kompajliran za automatsko saimanje cat stranica,\n\ +no konfiguracijska datoteka ne navodi COMPRESS.\n" +NO_NAME_FROM_SECTION + "Koju man stranicu iz dijela %s elite?\n" +NO_NAME_NO_SECTION + "Koju man stranicu elite?\n" +NO_SUCH_ENTRY_IN_SECTION + "Stranice %s nema u dijelu %s\n" +NO_SUCH_ENTRY + "Stranice %s nema\n" +PAGER_IS + "\nkao preglednik se koristi %s\n" +SYSTEM_FAILED + "Greka pri izvravanju naredbe za formatiranje ili prikaz.\n\ +Naredba sustava %s zavrila uz stanje %d.\n" +VERSION + "%s, verzija %s\n\n" +OUT_OF_MEMORY + "Bez memorije -- malloc %d bajtova nije mogu\n" +ROFF_CMD_FROM_FILE_ERROR + "Greka pri obradi *roff naredbe iz datoteke %s\n" +MANROFFSEQ_ERROR + "Greka pri obradi MANROFFSEQ. Koriste se predodreene vrijednosti sustava.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Greka pri obradi *roff naredbe s naredbenog reda.\n" +UNRECOGNIZED_LINE + "Neprepoznat red u konfiguracijskoj datoteci (zanemaren)\n%s\n" +GETVAL_ERROR + "man-config.c: interna greka: niz %s nije naen\n" +FOUND_MANDIR + "naen man direktorij %s\n" +FOUND_MAP + "naeno mapiranje man staze %s u %s\n" +FOUND_CATDIR + "odgovarajui catdir je %s\n" +LINE_TOO_LONG + "Red predug u konfiguracijskoj datoteci\n" +SECTION + "\ndio: %s\n" +UNLINKED + "%s je obrisan\n" +GLOBBING + "%s se proiruje\n" +EXPANSION_FAILED + "Pokuaj [%s] proirivanja man stranice nije uspio\n" +OPEN_ERROR + "Man stranica %s se ne moe otvoriti\n" +READ_ERROR + "Greka pri itanju man stranice %s\n" +FOUND_EQN + "naena eqn(1) odrednica\n" +FOUND_GRAP + "naena grap(1) odrednica\n" +FOUND_PIC + "naena pic(1) odrednica\n" +FOUND_TBL + "naena tbl(1) odrednica\n" +FOUND_VGRIND + "naena vgrind(1) odrednica\n" +FOUND_REFER + "naena refer(1) odrednica\n" +ROFF_FROM_COMMAND_LINE + "obrauje se odrednica s naredbenog reda\n" +ROFF_FROM_FILE + "obrauje se odrednica iz datoteke %s\n" +ROFF_FROM_ENV + "obrauje se odrednica iz okruja\n" +USING_DEFAULT + "koristi se predodreeni niz preprocesora\n" +PLEASE_WAIT + "Stranica se formatira, molim priekajte...\n" +CHANGED_MODE + "dozvole %s promijenjene u %o\n" +CAT_OPEN_ERROR + "%s se nije mogla otvoriti za pisanje.\n" +PROPOSED_CATFILE + "ako bude potrebno, pokuat e se pisati u %s\n" +IS_NEWER_RESULT + "stanje is_newer() = %d\n" +TRYING_SECTION + "pokuava se u dijelu %s\n" +SEARCHING + "\npretraga u %s\n" +ALREADY_IN_MANPATH + "no %s se ve nalazi u man stazi\n" +CANNOT_STAT + "Upozorenje: stat datoteke %s nije mogu!\n" +IS_NO_DIR + "Upozorenje: %s nije direktorij!\n" +ADDING_TO_MANPATH + "%s se dodaje man stazi\n" +PATH_DIR + "\ndirektorij staze %s " +IS_IN_CONFIG + "je u konfiguracijskoj datoteci\n" +IS_NOT_IN_CONFIG + "nije u konfiguracijskoj datoteci\n" +MAN_NEARBY + "ali u blizini postoji man direktorij\n" +NO_MAN_NEARBY + "a u blizini nije pronaen nijedan man direktorij\n" +ADDING_MANDIRS + "\ndodaju se obvezni man direktoriji\n\n" +CATNAME_IS + "cat_name u convert_to_cat () je: %s\n" +NO_EXEC + "\nnaredba se ne izvrava:\n %s\n" +USAGE1 + "koritenje: %s [-adfhktwW] [dio] [-M staza] [-P preglednik] [-S popis]\n\t" +USAGE2 + "[-m sustav] " +USAGE3 + "[-p niz] ime ...\n\n" +USAGE4 + " a: pronalazi sve odgovarajue man stranice\n\ + c: ne koristi cat datoteku\n\ + d: ispisuje gomilu informacija za otklanjanje greaka\n\ + D: kao i za -d, ali takoer prikazuje stranice\n\ + f: isto to i whatis(1)\n\ + h: ispisuje ovu poruku o koritenju\n\ + k: isto to i apropos(1)\n\ + K: trai niz u svim stranicama\n" +USAGE5 + " t: koristi troff za formatiranje stranica za tiskanje\n" +USAGE6 + "\ + w: ispisuje lokacije man stranica koje bi se prikazale\n\ + (ako ime nije dano, ispisuje direktorije koji bi se pretraili)\n\ + W: kao i za -w, no prikazuje samo imena datoteka\n\n\ + C datoteka: kao konfiguracijsku datoteku koristi `datoteka'\n\ + M staza: stazu traenja man stranica postavlja na `staza'\n\ + P preglednik: za prikaz stranica koristi program `preglednik'\n\ + S popis: popis dvotokama razdvojenih dijelova\n" +USAGE7 + " m sustav: pretrauje man stranice drugog sustava\n" +USAGE8 + " p niz: niz govori koje preprocesore treba pokrenuti\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "a ni pravi korisnik ne moe otvoriti cat datoteku\n" +USER_CAN_OPEN_CAT + "no pravi korisnik moe otvoriti cat datoteku\n" +CANNOT_FORK + "fork naredbom _%s_ nije uspio\n" +WAIT_FAILED + "greka pri ekanju na dijete _%s_\n" +GOT_WRONG_PID + "vrlo udno...; pri ekanju na moje dijete dobijen krivi PID\n" +CHILD_TERMINATED_ABNORMALLY + "kobna greka: naredba _%s_ zavrila abnormalno\n" +IDENTICAL + "Man stranica %s je istovjetna stranici %s\n" +MAN_FOUND + "Naene man stranice:\n" +NO_TROFF + "greka: u %s nema TROFF naredbi\n" +NO_CAT_FOR_NONSTD_LL + "zbog nestandardne duljine reda cat stranica nije pohranjena\n" diff --git a/msgs/mess.hr.codeset b/msgs/mess.hr.codeset new file mode 100644 index 0000000..6d0d028 --- /dev/null +++ b/msgs/mess.hr.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-2 diff --git a/msgs/mess.it b/msgs/mess.it new file mode 100644 index 0000000..d7fe013 --- /dev/null +++ b/msgs/mess.it @@ -0,0 +1,190 @@ +BAD_CONFIG_FILE + "incapace di comprendere il file %s\n" +CONFIG_OPEN_ERROR + "Attenzione: impossibile aprire il file di configurazione %s\n" +PARSE_ERROR_IN_CONFIG + "Errore nell'analisi del file di configurazione\n" +INCOMPAT + "opzioni incompatibili %s e %s\n" +NO_ALTERNATE + "Spiacente - supporto per sistemi alternativi compilato mancante\n" +NO_COMPRESS + "Man stato compilato con la compressione automatica delle pagine \ +cat,\nma il file di configurazione non definisce COMPRESS.\n" +NO_NAME_FROM_SECTION + "Quale pagina di guida vuoi dalla sezione %s?\n" +NO_NAME_NO_SECTION + "Quale pagina di guida vuoi?\n" +NO_SUCH_ENTRY_IN_SECTION + "Non c' la voce %s nella sezione %s del manuale\n" +NO_SUCH_ENTRY + "Non c' una voce per %s\n" +PAGER_IS + "\nuso %s come visualizzatore\n" +SYSTEM_FAILED + "Errore nell'esecuzione del comando di formattazione o visualizzazione.\n\ +Il comando &s uscito con lo stato %d.\n" +VERSION + "%s, versione %s\n\n" +OUT_OF_MEMORY + "Memoria insufficiente - impossibile allocare %d byte\n" +ROFF_CMD_FROM_FILE_ERROR + "Errore analizzando comandi *roff dal file %s\n" +MANROFFSEQ_ERROR + "Errore analizzando MANROFFSEQ. Uso le impostazioni di default del sistema.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Errore analizzando comandi *roff dalla linea di comando.\n" +UNRECOGNIZED_LINE + "Linea non riconosciuta nel file di configurazione (ignorata)\n%s\n" +GETVAL_ERROR + "man-config.c: errore interno: stringa %s non trovata\n" +FOUND_MANDIR + "trovata la directory man %s\n" +FOUND_MAP + "trovata la mappa manpath %s --> %s\n" +FOUND_CATDIR + "la catdir corrispondente %s\n" +LINE_TOO_LONG + "Linea troppo lunga nel file di configurazione\n" +SECTION + "\nsezione: %s\n" +UNLINKED + "%s non collegata\n" +GLOBBING + "espandendo %s\n" +EXPANSION_FAILED + "Tentativo [%s] di espansione della pagina di guida fallito\n" +OPEN_ERROR + "Impossibile aprire la pagina di guida %s\n" +READ_ERROR + "Errore leggendo la pagina di guida %s\n" +FOUND_EQN + "trovata la direttiva eqn(1)\n" +FOUND_GRAP + "trovata la direttiva grap(1)\n" +FOUND_PIC + "trovata la direttiva pic(1)\n" +FOUND_TBL + "trovata la direttiva tbl(1)\n" +FOUND_VGRIND + "trovata la direttiva vgrind(1)\n" +FOUND_REFER + "trovata la direttiva refer(1)\n" +ROFF_FROM_COMMAND_LINE + "analisi della direttiva da linea di comando\n" +ROFF_FROM_FILE + "analisi della direttiva dal file %s\n" +ROFF_FROM_ENV + "analisi della direttiva dall'ambiente\n" +USING_DEFAULT + "uso della sequenza di default dei preprocessori\n" +PLEASE_WAIT + "Formattazione pagina, attendere prego...\n" +CHANGED_MODE + "impostazioni dei permessi di %s a %o\n" +CAT_OPEN_ERROR + "Impossibile aprire %s in scrittura.\n" +PROPOSED_CATFILE + "tenter di scrivere %s se necessario\n" +IS_NEWER_RESULT + "situazione da is_newer() = %d\n" +TRYING_SECTION + "provando la sezione %s\n" +SEARCHING + "\nricerca in %s\n" +ALREADY_IN_MANPATH + "ma %s gi in manpath\n" +CANNOT_STAT + "Attenzione: impossibile controllare il file %s!\n" +IS_NO_DIR + "Attenzione: %s non una directory!\n" +ADDING_TO_MANPATH + "aggiunto %s a manpath\n" +PATH_DIR + "\npercorso directory %s " +IS_IN_CONFIG + " nel file di configurazione\n" +IS_NOT_IN_CONFIG + "non nel file di configurazione\n" +MAN_NEARBY + "ma c' una directory man vicina\n" +NO_MAN_NEARBY + "e non sono state trovate directory man vicine\n" +ADDING_MANDIRS + "\naggiunte directory man\n\n" +CATNAME_IS + "cat_name in convert_to_cat () : %s\n" +NO_EXEC + "\ncomando non in esecuzione:\n %s\n" +USAGE1 + "uso: %s [-adfhktwW] [sezione] [-M percorso] [-P paginatore] [-S list]\n\t" +USAGE2 + "[-m sistema] " +USAGE3 + "[-p stringa] nome ...\n\n" +USAGE4 + " a : trova tutte le voci corrispondenti\n\ + c : non usa il file cat (formattato)\n\ + d : stampa informazioni di debug\n\ + D : come -d, ma mostra anche la pagina\n\ + f : come whatis(1)\n\ + h : stampa questo messaggio di aiuto\n\ + k : come apropos(1)\n\ + K : cerca una stringa in tutte le pagine di guida\n" +USAGE5 + " t : usa troff per formattare le pagine per la stampa\n" +USAGE6 + "\ + w : stampa la posizione delle pagine di guida che saranno mostrate\n\ + (se non dato nessun nome: stampa le directory di ricerca)\n\ + W : come -w, ma mostra solo i filename\n\n\ + C file : usa `file' come file di configurazione\n\ + M percorso : imposta il percorso di ricerca per le pagine a `percorso'\n\ + P paginatore : usa il programma `paginatore' per mostrare le pagine\n\ + S lista : lista di sezioni separate dal carattere due punti\n" +USAGE7 + " m sistema : cerca pagine di guida per sistemi alternativi\n" +USAGE8 + " p stringa : la stringa comunica quale preprocessore eseguire\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "e l'utente reale non pu aprire neanche il file formattato\n" +USER_CAN_OPEN_CAT + "ma l'utente reale pu aprire il file formattato\n" +CANNOT_FORK + "fallito il fork del comando _%s_\n" +WAIT_FAILED + "errore nell'attesa del processo figlio _%s_\n" +GOT_WRONG_PID + "molto strano..., ottenuto un pid errato nell'attesa di un mio\n\ +processo figlio\n" +CHILD_TERMINATED_ABNORMALLY + "errore fatale: il comando _%s_ terminato in modo non normale\n" +IDENTICAL + "La pagina di guida %s identica a %s\n" +MAN_FOUND + "Trovate la(le) pagina(e) di guida:\n" +NO_TROFF + "errore: nessun comando TROFF specificato in %s\n" +NO_CAT_FOR_NONSTD_LL + "nessuna pagina formattata registrata a causa di una lunghezza di\n\ +linea non standard\n" +BROWSER_IS + "\nutilizzando %s come browser\n" +HTMLPAGER_IS + "\nimpiegando %s per convertire pagine HTML in puro testo\n" +FOUND_FILE + "manfile_from_sec_and_dir() ha trovato %s\n" +CALLTRACE1 + "manfile_from_sec_and_dir(dir=%s, sec=%s, name=%s, flags=0x%0x)\n" +CALLTRACE2 + "glob_for_file(dir=%s, sec=%s, name=%s, type=0x%0x, ...)\n" +NO_MATCH + "glob_for_file non ha trovato alcuna corrispondenza.\n" +GLOB_FOR_FILE + "glob_for_file ha restituito %s.\n" +CALLTRACE3 + "glob_for_file_ext_glob(dir=%s, sec=%s, name=%s, ext=%s, hpx=%s, glob=%d, type=0x%0x);\n" +ABOUT_TO_GLOB + "glob_for_file_ext_glob espander %s\n" diff --git a/msgs/mess.it.codeset b/msgs/mess.it.codeset new file mode 100644 index 0000000..f5baf26 --- /dev/null +++ b/msgs/mess.it.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-1 diff --git a/msgs/mess.ja b/msgs/mess.ja new file mode 100644 index 0000000..14774ef --- /dev/null +++ b/msgs/mess.ja @@ -0,0 +1,171 @@ +BAD_CONFIG_FILE + "ե %s ˸꤬ޤ\n" +CONFIG_OPEN_ERROR + "ٹ: ե %s Υץ󤬤ǤޤǤ\n" +PARSE_ERROR_IN_CONFIG + "եβ˥顼Ĥޤ\n" +INCOMPAT + "%s ץ %s ץƱ˻ѤǤޤ\n" +NO_ALTERNATE + "¾Υƥǥѥ뤵줿ΤϥݡȤƤޤ\n" +NO_COMPRESS + "man ޥɤϥեޥåȤ cat ڡưŪ˰̤褦\n\ +ѥ뤵Ƥޤե COMPRESS ޤ\n" +NO_NAME_FROM_SECTION + " %s ΤɤΥޥ˥奢ɽޤ?\n" +NO_NAME_NO_SECTION + "ɤΥޥ˥奢ɽޤ?\n" +NO_SUCH_ENTRY_IN_SECTION + " %2$s ˤ %1$s Υޥ˥奢Ϥޤ\n" +NO_SUCH_ENTRY + "%s Υޥ˥奢Ϥޤ\n" +PAGER_IS + "\n%s ڡ㡼ȤƻѤޤ\n" +SYSTEM_FAILED + "եޥåȡޥɤɽޥɤμ¹ԥ顼ޤ\n\ +ޥ %s λơ %d ǽλޤ\n" +VERSION + "%s, С %s\n\n" +OUT_OF_MEMORY + "꤬­ޤ- %d ХȤݤǤޤ\n" +ROFF_CMD_FROM_FILE_ERROR + "ե %s Υץץȥåؼβ˥顼ȯޤ\n" +MANROFFSEQ_ERROR + "MANROFFSEQ Υץץåؼβ˥顼ȯޤ\n\ +˥ƥࡦǥեȤѤޤ\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "ޥɥ饤Υץץåؼβ˥顼ȯޤ\n" +UNRECOGNIZED_LINE + "եǤʤԤޤ(̵뤷ޤ)\n%s\n" +GETVAL_ERROR + "man-config.c: 顼: ʸ %s Ĥޤ\n" +FOUND_MANDIR + "man ǥ쥯ȥ %s 򸫤Ĥޤ\n" +FOUND_MAP + "manpath map %s --> %s 򸫤Ĥޤ\n" +FOUND_CATDIR + "б catdir %s Ǥ\n" +LINE_TOO_LONG + "եιԤĹ᤮ޤ\n" +SECTION + "\n: %s\n" +UNLINKED + "%s ޤ\n" +GLOBBING + "%s Ÿޤ\n" +EXPANSION_FAILED + "[%s] ޥ˥奢롦ڡŸǤޤǤ\n" +OPEN_ERROR + "ޥ˥奢롦ڡ %s ץǤޤǤ\n" +READ_ERROR + "ޥ˥奢롦ڡ %s ɤޤǤ\n" +FOUND_EQN + "eqn(1) ̿򸫤Ĥޤ\n" +FOUND_GRAP + "grap(1) ̿򸫤Ĥޤ\n" +FOUND_PIC + "pic(1) ̿򸫤Ĥޤ\n" +FOUND_TBL + "tbl(1) ̿򸫤Ĥޤ\n" +FOUND_VGRIND + "vgrind(1) ̿򸫤Ĥޤ\n" +FOUND_REFER + "refer(1) ̿򸫤Ĥޤ\n" +ROFF_FROM_COMMAND_LINE + "ޥɡ饤󤫤̿Ǥ\n" +ROFF_FROM_FILE + "ե %s ̿βǤ\n" +ROFF_FROM_ENV + "Ķѿ̿βǤ\n" +USING_DEFAULT + "ǥեȤ󥹤Ѥޤ\n" +PLEASE_WAIT + "ڡΥեޥåǤԤ...\n" +CHANGED_MODE + "⡼ɤ %s %o ѹޤ\n" +CAT_OPEN_ERROR + "%s 񤭹ߤΤ˥ץǤޤǤ\n" +PROPOSED_CATFILE + "ɬפʤС%s ˽񤭹ߤߤޤ\n" +IS_NEWER_RESULT + "is_newer() = %d\n" +TRYING_SECTION + " %s ߤޤ\n" +SEARCHING + "\n%s 򸡺Ǥ\n" +ALREADY_IN_MANPATH + "%s ϤǤ manpath ˴ޤޤƤޤ\n" +CANNOT_STAT + "ٹ: ե %s ξ(stat)Ǥޤ\n" +IS_NO_DIR + "ٹ: %s ϥǥ쥯ȥǤϤޤ\n" +ADDING_TO_MANPATH + "%s manpath ˲äޤ\n" +PATH_DIR + "\nѥΥǥ쥯ȥ %s " +IS_IN_CONFIG + "եˤޤ\n" +IS_NOT_IN_CONFIG + "եˤޤ\n" +MAN_NEARBY + "᤯˥ޥ˥奢롦ǥ쥯ȥ꤬ޤ\n" +NO_MAN_NEARBY + "ˡ᤯ˤޥ˥奢롦ǥ쥯ȥ꤬ޤ\n" +ADDING_MANDIRS + "\nޥ˥奢롦ǥ쥯ȥŪɲäޤ\n\n" +CATNAME_IS + "convert_to_cat() ˤ cat_name %s Ǥ\n" +NO_EXEC + "\nޥɤ¹Ԥޤ:\n %s\n" +USAGE1 + "usage: %s [-adfhktwW] [section] [-M path] [-P pager] [-S list]\n\t" +USAGE2 + "[-m system] " +USAGE3 + "[-p string] name ...\n\n" +USAGE4 + " a : Ƥΰפ򸫤Ĥ\n\ + c : cat եѤʤ\n\ + d : ǥХå󥰾ɽ\n\ + D : -d ˲äޥ˥奢롦ڡɽ\n\ + f : whatis(1) Ʊ\n\ + h : Υإסåɽ\n\ + k : apropos(1) Ʊ\n\ + K : ƤΥڡʸ򸡺\n" +USAGE5 + " t : ڡΥեޥå troff Ѥ\n" +USAGE6 + "\ + w : ޥ˥奢롦ڡΰ֤ɽ\n\ + (̾ꤷʤä: ǥ쥯ȥɽ)\n\ + W : -w Ʊ, ե̾ɽʤ\n\n\ + C file : եȤ `file' Ѥ\n\ + M path : `path' ޥ˥奢롦ڡθѥꤹ\n\ + P pager : `pager' ڡɽץȤƻѤ\n\ + S list : ̾Υꥹ(Ƕڤ)\n" +USAGE7 + " m system : ¾ΥƥѤΥޥ˥奢롦ڡ򸡺\n" +USAGE8 + " p string : ɤ¹Ԥꤹʸ\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "ơμ¥桼Ǥ cat ե򥪡ץǤޤ\n" +USER_CAN_OPEN_CAT + "μ¥桼 cat ե뤬ץǤޤ\n" +CANNOT_FORK + "ޥ _%s_ Τ fork ǤޤǤ\n" +WAIT_FAILED + "ҥץ _%s_ wait Ƥ֤˥顼ȯޤ\n" +GOT_WRONG_PID + "۾Ǥ???, wait ƤҥץȤϰ㤦 PID ޤ\n" +CHILD_TERMINATED_ABNORMALLY + "̿Ū顼: ޥ _%s_ ۾ェλޤ\n" +IDENTICAL + "ޥ˥奢롦ڡ %s %s ƱǤ\n" +MAN_FOUND + "ޥ˥奢롦ڡ򸫤Ĥޤ:\n" +NO_TROFF + "顼: %s ˻ꤵƤ TROFF ޥɤĤޤ\n" +NO_CAT_FOR_NONSTD_LL + "ԤĹɸŪǤʤ cat ڡ¸ޤǤ\n" diff --git a/msgs/mess.ja.codeset b/msgs/mess.ja.codeset new file mode 100644 index 0000000..7d83d8d --- /dev/null +++ b/msgs/mess.ja.codeset @@ -0,0 +1 @@ +$ codeset=euc-jp diff --git a/msgs/mess.ko b/msgs/mess.ko new file mode 100644 index 0000000..8935787 --- /dev/null +++ b/msgs/mess.ko @@ -0,0 +1,171 @@ +BAD_CONFIG_FILE + " %s ߸ ֽϴ.\n" +CONFIG_OPEN_ERROR + ": %s ϴ.\n" +PARSE_ERROR_IN_CONFIG + " ؼ߿ ߰ߵǾϴ.\n" +INCOMPAT + "%s ɼǰ %s ɼ ÿ ϴ.\n" +NO_ALTERNATE + "ٸ ý ʽϴ.\n" +NO_COMPRESS + "man ɴ cat ڵ ϵ \n\ + Ǿ , Ͽ COMPRESS ǰ ϴ.\n" +NO_NAME_FROM_SECTION + " %s ޴ ǥմϱ?\n" +NO_NAME_NO_SECTION + " ޴ ǥմϱ?\n" +NO_SUCH_ENTRY_IN_SECTION + " %2$s %1$s ޴ ϴ.\n" +NO_SUCH_ENTRY + "%s ޴ ϴ.\n" +PAGER_IS + "\n%s pagerμ մϴ.\n" +SYSTEM_FAILED + "ˡ̳ ǥ ߻߽ϴ.\n\ +Ŀ %s ͽ %d ߽ϴ.\n" +VERSION + "%s, %s\n\n" +OUT_OF_MEMORY + "޸𸮰 ʽϴ.- %d Ʈ Ȯ ϴ.\n" +ROFF_CMD_FROM_FILE_ERROR + " %s μ ؼ߿ ߻߽ϴ.\n" +MANROFFSEQ_ERROR + "MANROFFSEQ μ ؼ߿ ߻߽ϴ.\n\ +ſ ýۡƮ մϴ.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + " μ ؼ߿ ߻߽ϴ.\n" +UNRECOGNIZED_LINE + " Ͽ ֽϴ.\n%s\n" +GETVAL_ERROR + "man-config.c: : %s ߰ߵ ʽϴ.\n" +FOUND_MANDIR + "man 丮 %s ãƳ½ϴ.\n" +FOUND_MAP + "manpath map %s --> %s ãƳ½ϴ.\n" +FOUND_CATDIR + "ϴ catdir %sԴϴ.\n" +LINE_TOO_LONG + " ʹ ϴ.\n" +SECTION + "\n: %s\n" +UNLINKED + "%s մϴ.\n" +GLOBBING + "%s ϴ.\n" +EXPANSION_FAILED + "[%s] ޴ ϴ.\n" +OPEN_ERROR + "޴ %s ϴ.\n" +READ_ERROR + "޴ %s ϴ.\n" +FOUND_EQN + "eqn(1) ãƳ½ϴ.\n" +FOUND_GRAP + "grap(1) ãƳ½ϴ.\n" +FOUND_PIC + "pic(1) ãƳ½ϴ.\n" +FOUND_TBL + "tbl(1) ãƳ½ϴ.\n" +FOUND_VGRIND + "vgrind(1) ãƳ½ϴ.\n" +FOUND_REFER + "refer(1) ãƳ½ϴ.\n" +ROFF_FROM_COMMAND_LINE + "ɡκ ؼԴϴ.\n" +ROFF_FROM_FILE + " %s κ ؼԴϴ.\n" +ROFF_FROM_ENV + "ȯ κ ؼԴϴ.\n" +USING_DEFAULT + "Ʈ ó մϴ.\n" +PLEASE_WAIT + " Դϴ. ٷ ּ...\n" +CHANGED_MODE + "带 %s κ %o մϴ.\n" +CAT_OPEN_ERROR + "%s ؼ ϴ.\n" +PROPOSED_CATFILE + "ʿϸ, %s õմϴ.\n" +IS_NEWER_RESULT + "is_newer() = %d\n" +TRYING_SECTION + " %s õմϴ.\n" +SEARCHING + "\n%s ˻Դϴ.\n" +ALREADY_IN_MANPATH + "׷, %s ̹ manpath ԵǾ ֽϴ.\n" +CANNOT_STAT + ": %s (stat) ϴ.\n" +IS_NO_DIR + ": %s 丮 ƴմϴ.\n" +ADDING_TO_MANPATH + "%s manpath մϴ.\n" +PATH_DIR + "\nн 丮 %s " +IS_IN_CONFIG + "() Ͽ ֽϴ.\n" +IS_NOT_IN_CONFIG + "() Ͽ ϴ.\n" +MAN_NEARBY + "׷, ó ޴󡤵丮 ֽϴ.\n" +NO_MAN_NEARBY + " ޴󡤵丮 ϴ.\n" +ADDING_MANDIRS + "\n޴󡤵丮 ߰մϴ.\n\n" +CATNAME_IS + "convert_to_cat() ־ cat_name %s Դϴ.\n" +NO_EXEC + "\nĿ带 ʽϴ :\n %s\n" +USAGE1 + "usage: %s [-adfhktwW] [section] [-M path] [-P pager] [-S list]\n\t" +USAGE2 + "[-m system] " +USAGE3 + "[-p string] name ...\n\n" +USAGE4 + " a : ġϴ ãƳ \n\ + c : cat ʴ \n\ + d : ǥϴ \n\ + D : -d ޴ ǥϴ \n\ + f : whatis(1) \n\ + h : ޼ ǥϴ \n\ + k : apropos(1) \n\ + K : ij ˻ϴ \n" +USAGE5 + " t : troff ϴ \n" +USAGE6 + "\ + w : ޴ ġ ǥϴ \n\ + (̸ ʾҴ : ˻ϴ 丮 ǥѴ) \n\ + W : -w , ׷ ϸ ۿ ǥ ʴ \n\n\ + C file : Ϸμ `file' ϴ \n\ + M path : `path' ޴ ˻ н ϴ \n\ + P pager : `pager' ǥ α׷μ ϴ \n\ + S list : Ǹ Ʈ(ڷ ܶ´) \n" +USAGE7 + " m system : ٸ ýۿ ޴ ˻ϴ \n" +USAGE8 + " p string : ó ϴ ij \n\ + e - [n]eqn(1) p - pic(1) t - tbl(1) \n\ + g - grap(1) r - refer(1) v - vgrind(1) \n" +USER_CANNOT_OPEN_CAT + "׸, cat ϴ.\n" +USER_CAN_OPEN_CAT + "׷, cat ֽϴ.\n" +CANNOT_FORK + "Ŀ _%s_ fork ϴ.\n" +WAIT_FAILED + "child process _%s_ wait ϰ ִ ȿ ߻߽ϴ.\n" +GOT_WRONG_PID + "Դϴ???, wait ϰ ִ child processʹ ٸ PID ޾ҽϴ.\n" +CHILD_TERMINATED_ABNORMALLY + "ġ : Ŀ _%s_ ̻(ABEND) ߽ϴ.\n" +IDENTICAL + "޴ %s %s ϴ.\n" +MAN_FOUND + "޴ ãҽϴ :\n" +NO_TROFF + ": %s Ǿ ִ TROFF ߰ߵ ʽϴ.\n" +NO_CAT_FOR_NONSTD_LL + " ̰ ǥ ƴϱ cat ʾҽϴ.\n" diff --git a/msgs/mess.ko.codeset b/msgs/mess.ko.codeset new file mode 100644 index 0000000..ee4ff3a --- /dev/null +++ b/msgs/mess.ko.codeset @@ -0,0 +1 @@ +$ codeset=euc-kr diff --git a/msgs/mess.nl b/msgs/mess.nl new file mode 100644 index 0000000..b47f4be --- /dev/null +++ b/msgs/mess.nl @@ -0,0 +1,189 @@ +BAD_CONFIG_FILE + "De inhoud van bestand %s is onbegrijpelijk.\n" +CONFIG_OPEN_ERROR + "Waarschuwing: kan configuratiebestand %s niet openen.\n" +PARSE_ERROR_IN_CONFIG + "Syntaxfout in configuratiebestand.\n" +INCOMPAT + "Opties %s en %s gaan niet samen.\n" +NO_ALTERNATE + "Sorry, ondersteuning voor andere systemen is niet meegecompileerd.\n" +NO_COMPRESS + "Deze 'man' is gecompileerd met automatische compressie van cat-pagina's,\n\ +maar het configuratiebestand definieert COMPRESS niet.\n" +NO_NAME_FROM_SECTION + "Welke man-pagina wilt u zien uit sectie %s?\n" +NO_NAME_NO_SECTION + "Welke man-pagina wilt u zien?\n" +NO_SUCH_ENTRY_IN_SECTION + "Er is geen pagina over '%s' in sectie %s.\n" +NO_SUCH_ENTRY + "Er is geen pagina over '%s'.\n" +PAGER_IS + "\n'%s' wordt gebruikt als om de uitvoer te tonen\n" +SYSTEM_FAILED + "Fout tijdens opmaak- of uitvoeropdracht.\n\ +De afsluitwaarde van '%s' was %d.\n" +VERSION + "Dit is '%s', versie %s.\n\n\ +Toont de handleiding ('man-pagina') van de gegeven opdrachtnaam.\n\n" +OUT_OF_MEMORY + "Onvoldoende geheugen beschikbaar -- kan geen %d bytes reserveren\n" +ROFF_CMD_FROM_FILE_ERROR + "Fout tijdens ontleden van een '*roff'-opdracht uit bestand '%s'.\n" +MANROFFSEQ_ERROR + "Fout tijdens ontleden van MANROFFSEQ -- standaardvolgorde wordt gebruikt.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Fout tijdens ontleden van '*roff'-opdracht van de opdrachtregel.\n" +UNRECOGNIZED_LINE + "Onbegrepen regel in het configuratiebestand -- wordt genegeerd\n%s\n" +GETVAL_ERROR + "man-config.c: **interne fout**: kan tekenreeks '%s' niet vinden\n" +FOUND_MANDIR + "man-map %s gevonden\n" +FOUND_MAP + "man-pad-afbeelding %s --> %s gevonden\n" +FOUND_CATDIR + "de overeenkomstige cat-map is %s\n" +LINE_TOO_LONG + "Te lange regel in het configuratiebestand.\n" +SECTION + "\nsectie: %s\n" +UNLINKED + "%s is verwijderd\n" +GLOBBING + "globben van %s\n" +EXPANSION_FAILED + "Poging [%s] om de man-pagina te decomprimeren is mislukt.\n" +OPEN_ERROR + "Kan man-pagina %s niet openen.\n" +READ_ERROR + "Fout tijdens lezen van man-pagina %s.\n" +FOUND_EQN + "eqn(1)-aanwijzing gevonden\n" +FOUND_GRAP + "grap(1)-aanwijzing gevonden\n" +FOUND_PIC + "pic(1)-aanwijzing gevonden\n" +FOUND_TBL + "tbl(1)-aanwijzing gevonden\n" +FOUND_VGRIND + "vgrind(1)-aanwijzing gevonden\n" +FOUND_REFER + "refer(1)-aanwijzing gevonden\n" +ROFF_FROM_COMMAND_LINE + "ontleden van aanwijzingen van de opdrachtregel\n" +ROFF_FROM_FILE + "ontleden van aanwijzingen uit bestand %s\n" +ROFF_FROM_ENV + "ontleden van aanwijzingen uit de omgeving\n" +USING_DEFAULT + "de standaard preprocessor-volgorde wordt gebruikt\n" +PLEASE_WAIT + "Opmaken van de pagina...\n" +CHANGED_MODE + "De modus van %s is gewijzigd in %o.\n" +CAT_OPEN_ERROR + "Kan niet schrijven naar %s.\n" +PROPOSED_CATFILE + "indien nodig wordt bestand %s geschreven\n" +IS_NEWER_RESULT + "afsluitwaarde van is_newer() = %d\n" +TRYING_SECTION + "sectie %s wordt bekeken\n" +SEARCHING + "\nzoeken in %s\n" +ALREADY_IN_MANPATH + "maar %s zit al in het zoekpad\n" +CANNOT_STAT + "Waarschuwing: kan status van bestand '%s' niet opvragen!\n" +IS_NO_DIR + "Waarschuwing: '%s' is geen map!\n" +ADDING_TO_MANPATH + "%s is toegevoegd aan het zoekpad\n" +PATH_DIR + "\nzoekpad-map %s " +IS_IN_CONFIG + "staat in het configuratiebestand\n" +IS_NOT_IN_CONFIG + "staat niet in het configuratiebestand\n" +MAN_NEARBY + "maar er is een man-map in de buurt\n" +NO_MAN_NEARBY + "en er is geen man-map in de buurt\n" +ADDING_MANDIRS + "\nstandaard man-mappen worden toegevoegd\n\n" +CATNAME_IS + "cat_name in convert_to_cat() is: %s\n" +NO_EXEC + "\nNiet-uitgevoerde opdracht:\n %s\n" +USAGE1 + "Gebruik: %s [-adfhktwW] [-M zoekpad] [-P viewer] [-S secties]\n\t " +USAGE2 + " [-m systeem]" +USAGE3 + " [-p tekenreeks] [sectie] naam...\n\n" +USAGE4 + " -a alle overeenkomende pagina's tonen, niet slechts de eerste\n\ + -c geen cat-bestanden gebruiken\n\ + -d uitgebreide debug-informatie produceren\n\ + -D als '-d', maar ook de pagina's tonen\n\ + -f als 'whatis' fungeren\n\ + -h deze hulptekst tonen\n\ + -k als 'apropos' fungeren\n\ + -K in alle man-pagina's naar een tekenreeks zoeken\n" +USAGE5 + " -t 'troff' gebruiken om pagina's op te maken (om ze af te drukken)\n" +USAGE6 + "\ + -w het volledige pad weergeven van de pagina die getoond zou worden\n\ + (als geen naam gegeven is, dan tonen welke mappen doorzocht worden)\n\ + -W als '-w', maar alleen de bestandsnamen tonen, niet het volledige pad\n\n\ + -C bestand te gebruiken configuratiebestand\n\ + -M pad pad waarin naar man-pagina's gezocht moet worden\n\ + -P viewer dit programma gebruiken om de uitvoer te tonen\n\ + -S secties te doorzoeken secties (scheiden met dubbele punten)\n" +USAGE7 + " -m systeem naar man-pagina's van dit Unix-systeem zoeken\n" +USAGE8 + " -p letters uit te voeren voorverwerkingsprogramma's:\n\ + e - [n]eqn p - pic t - tbl\n\ + g - grap r - refer v - vgrind\n" +USER_CANNOT_OPEN_CAT + "en de werkelijke gebruiker kan het cat-bestand ook niet openen\n" +USER_CAN_OPEN_CAT + "maar de werkelijke gebruiker kan het cat-bestand wel openen\n" +CANNOT_FORK + "Kan geen nieuw proces starten voor opdracht '%s'\n" +WAIT_FAILED + "Fout tijdens wachten op dochterproces '%s'\n" +GOT_WRONG_PID + "Vreemd..., kreeg een verkeerd PID tijdens wachten op dochterproces\n" +CHILD_TERMINATED_ABNORMALLY + "Fatale fout: opdracht '%s' werd abnormaal beindigd\n" +IDENTICAL + "Man-pagina %s is identiek aan %s\n" +MAN_FOUND + "Gevonden man-pagina('s):\n" +NO_TROFF + "Fout: er is in %s geen TROFF-commando gegeven\n" +NO_CAT_FOR_NONSTD_LL + "Geen cat-pagina aangemaakt vanwege de afwijkende regellengte.\n" +BROWSER_IS + "\n'%s' wordt gebruikt als browser\n" +HTMLPAGER_IS + "\n'%s' wordt gebruikt voor het omzetten van HTML-pagina's naar tekst\n" +FOUND_FILE + "manfile_from_sec_and_dir() vond %s\n" +CALLTRACE1 + "manfile_from_sec_and_dir(map=%s, sectie=%s, naam=%s, vlaggen=0x%0x)\n" +CALLTRACE2 + "glob_for_file(map=%s, sectie=%s, naam=%s, type=0x%0x, ...)\n" +NO_MATCH + "glob_for_file() heeft geen overeenkomsten gevonden\n" +GLOB_FOR_FILE + "glob_for_file() geeft %s terug\n" +CALLTRACE3 + "glob_for_file_ext_glob(map=%s, sectie=%s, naam=%s, extensie=%s, hpx=%s, glob=%d, type=0x%0x)\n" +ABOUT_TO_GLOB + "glob_for_file_ext_glob() zal %s expanderen\n" diff --git a/msgs/mess.nl.codeset b/msgs/mess.nl.codeset new file mode 100644 index 0000000..f5baf26 --- /dev/null +++ b/msgs/mess.nl.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-1 diff --git a/msgs/mess.pl b/msgs/mess.pl new file mode 100644 index 0000000..12e7507 --- /dev/null +++ b/msgs/mess.pl @@ -0,0 +1,188 @@ +BAD_CONFIG_FILE + "nie mona zrozumie zawartoci pliku %s\n" +CONFIG_OPEN_ERROR + "Ostrzeenie: nie mona otworzy pliku konfiguracyjnego %s\n" +PARSE_ERROR_IN_CONFIG + "Bd podczas interpretacji pliku konfiguracyjnego\n" +INCOMPAT + "niepasujce wzajemnie opcje %s i %s\n" +NO_ALTERNATE + "Niestety - brak wkompilowanej obsugi alternatywnych systemw\n" +NO_COMPRESS + "Man zosta skompilowany z automatyczn kompresj stron cat,\n\ +ale plik konfiguracyjny nie definiuje COMPRESS.\n" +NO_NAME_FROM_SECTION + "Ktr stron podrcznika z sekcji %s chcesz przeczyta?\n" +NO_NAME_NO_SECTION + "Ktr stron podrcznika chcesz przeczyta?\n" +NO_SUCH_ENTRY_IN_SECTION + "Nie ma strony %s w sekcji %s podrcznika\n" +NO_SUCH_ENTRY + "Nie ma strony podrcznika dla %s\n" +PAGER_IS + "\nuywanie %s jako pagera\n" +SYSTEM_FAILED + "Bd podczas wykonywania polecenia formatowania lub wywietlania.\n\ +Polecenie systemowe %s zwrcio status %d.\n" +VERSION + "%s, wersja %s\n\n" +OUT_OF_MEMORY + "Brak pamici - nie mona przydzieli %d bajtw pamici\n" +ROFF_CMD_FROM_FILE_ERROR + "Bd podczas przetwarzania polecenia *roff z pliku %s\n" +MANROFFSEQ_ERROR + "Bd podczas przetwarzania MANROFFSEQ. Uywanie ustawie domylnych systemu.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Bd podczas przetwarzania polecenia *roff podanego w linii polece.\n" +UNRECOGNIZED_LINE + "Nierozpoznana linia w pliku konfiguracyjnym (zignorowana)\n%s\n" +GETVAL_ERROR + "man-config.c: bd wewntrzny: nie znaleziono acucha znakw %s\n" +FOUND_MANDIR + "znaleziono katalog man %s\n" +FOUND_MAP + "znaleziono map manpath %s --> %s\n" +FOUND_CATDIR + "odpowiadajcy katalog cat to %s\n" +LINE_TOO_LONG + "Za duga linia w pliku konfiguracyjnym\n" +SECTION + "\nsekcja: %s\n" +UNLINKED + "skasowany %s\n" +GLOBBING + "globbing %s\n" +EXPANSION_FAILED + "Prba [%s] rozwinicia strony podrcznika nie powioda si\n" +OPEN_ERROR + "Nie mona otworzy strony podrcznika %s\n" +READ_ERROR + "Bd podczas odczytu strony podrcznika %s\n" +FOUND_EQN + "znaleziono dyrektyw eqn(1)\n" +FOUND_GRAP + "znaleziono dyrektyw grap(1)\n" +FOUND_PIC + "znaleziono dyrektyw pic(1)\n" +FOUND_TBL + "znaleziono dyrektyw tbl(1)\n" +FOUND_VGRIND + "znaleziono dyrektyw vgrind(1)\n" +FOUND_REFER + "znaleziono dyrektyw refer(1)\n" +ROFF_FROM_COMMAND_LINE + "przetwarzanie dyrektywy podanej w linii polece\n" +ROFF_FROM_FILE + "przetwarzanie dyrektywy z pliku %s\n" +ROFF_FROM_ENV + "przetwarzanie dyrektywy ze zmiennej rodowiskowej\n" +USING_DEFAULT + "uywanie domylnej sekwencji preprocesora\n" +PLEASE_WAIT + "Formatowanie strony, prosz czeka...\n" +CHANGED_MODE + "zmieniono uprawnienia %s na %o\n" +CAT_OPEN_ERROR + "Nie mona otworzy %s do zapisu.\n" +PROPOSED_CATFILE + "w razie potrzeby man bdzie prbowa zapisa %s\n" +IS_NEWER_RESULT + "status z is_newer() = %d\n" +TRYING_SECTION + "prbowanie sekcji %s\n" +SEARCHING + "\nwyszukiwanie w %s\n" +ALREADY_IN_MANPATH + "ale %s jest ju w manpath\n" +CANNOT_STAT + "Ostrzeenie: nie mona uy stat na pliku %s!\n" +IS_NO_DIR + "Ostrzeenie: %s nie jest katalogiem!\n" +ADDING_TO_MANPATH + "dodawanie %s do manpath\n" +PATH_DIR + "\ncieka katalogu %s " +IS_IN_CONFIG + "jest w pliku konfiguracyjnym\n" +IS_NOT_IN_CONFIG + "nie jest obecna w pliku konfiguracyjnym\n" +MAN_NEARBY + "ale jest katalog man niedaleko\n" +NO_MAN_NEARBY + "i nie ma katalogu man niedaleko\n" +ADDING_MANDIRS + "\ndodawanie obowizkowych katalogw man\n\n" +CATNAME_IS + "cat_name w convert_to_cat () jest: %s\n" +NO_EXEC + "\nniewykonywanie polecenia:\n %s\n" +USAGE1 + "uycie: %s [-adfhktwW] [sekcja] [-M cieka] [-P pager] [-S lista]\n\t" +USAGE2 + "[-m system] " +USAGE3 + "[-p acuch_znakw] nazwa ...\n\n" +USAGE4 + " a : znajduje wszystkie pasujce strony\n\ + c : nie uywa pliku cat\n\ + d : wywietla mnstwo informacji debugowania\n\ + D : jak -d, ale wywietla te strony\n\ + f : to samo co whatis(1)\n\ + h : wywietla ten komunikat pomocy\n\ + k : to samo co apropos(1)\n\ + K : wyszukuje acuch znakw na wszystkich stronach\n" +USAGE5 + " t : uywa troff do formatowania stron do wydrukowania\n" +USAGE6 + "\ + w : wywietla pooenie stron(y) podrcznika, ktra byaby wywietlona\n\ + (jeeli nie podano adnej nazwy: wywietla przeszukiwane katalogi)\n\ + W : tak jak -w, ale wywietla tylko nazwy plikw\n\n\ + C plik : uywa `plik' jako plik konfiguracyjny\n\ + M cieka: ustawia ciek wyszukiwania stron podrcznika jako `cieka'\n\ + P pager : uywa programu `pager' do wywietlania stron\n\ + S lista : lista sekcji oddzielona dwukropkami\n" +USAGE7 + " m system : wyszukuje strony podrcznika dla alternatywnego systemu\n" +USAGE8 + " p acuch znakw: acuch znakw okrelajcy, ktre preprocesory uy\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "a rzeczywisty uytkownik te nie moe otworzy pliku\n" +USER_CAN_OPEN_CAT + "ale rzeczywisty uytkownik moe otworzy plik\n" +CANNOT_FORK + "nieudana prba fork polecenia _%s_\n" +WAIT_FAILED + "bd podczas oczekiwania na proces potomny _%s_\n" +GOT_WRONG_PID + "bardzo dziwne..., otrzymano zy pid podczas oczekiwania na proces potomny\n" +CHILD_TERMINATED_ABNORMALLY + "bd krytyczny: polecenie _%s_ zakoczone nieprawidowo\n" +IDENTICAL + "Strona podrcznika %s jest identyczna jak %s\n" +MAN_FOUND + "Znaleziono stron(y) podrcznika:\n" +NO_TROFF + "bd: nie podano polecenia TROFF w %s\n" +NO_CAT_FOR_NONSTD_LL + "strona cat nie zostaa zapisana z powodu niestandardowej dugoci linii\n" +BROWSER_IS + "\nuywanie %s jako przegldarki\n" +HTMLPAGER_IS + "\nuywanie %s do zrzucania stron HTML jako tekst" +FOUND_FILE + "manfile_from_sec_and_dir() znalaza %s\n" +CALLTRACE1 + "manfile_from_sec_and_dir(dir=%s, sec=%s, name=%s, flags=0x%0x)\n" +CALLTRACE2 + "glob_for_file(dir=%s, sec=%s, name=%s, type=0x%0x, ...)\n" +NO_MATCH + "glob_for_file nie znalaza adnych dopasowa.\n" +GLOB_FOR_FILE + "glob_for_file zwrcia %s.\n" +CALLTRACE3 + "glob_for_file_ext_glob(dir=%s, sec=%s, name=%s, ext=%s, hpx=%s, glob=%d, type=0x%0x);\n" +ABOUT_TO_GLOB + "glob_for_file_ext_glob rozwinie %s\n" diff --git a/msgs/mess.pl.codeset b/msgs/mess.pl.codeset new file mode 100644 index 0000000..6d0d028 --- /dev/null +++ b/msgs/mess.pl.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-2 diff --git a/msgs/mess.pt b/msgs/mess.pt new file mode 100644 index 0000000..873e319 --- /dev/null +++ b/msgs/mess.pt @@ -0,0 +1,165 @@ +BAD_CONFIG_FILE + "no compreendi o ficheiro %s\n" +CONFIG_OPEN_ERROR + "Aviso: no consigo usar o ficheiro de configurao %s\n" +PARSE_ERROR_IN_CONFIG + "Erro no ficheiro de configurao\n" +INCOMPAT + "opes %s e %s incompatveis\n" +NO_ALTERNATE + "Desculpe - no dispe de suporte para sistemas alternativos\n" +NO_COMPRESS + "Man compilado com compresso automtica mas\n\ +o ficheiro de configurao no define COMPRESS.\n" +NO_NAME_FROM_SECTION + "Que manual pretende da seco %s?\n" +NO_NAME_NO_SECTION + "Que manual pretende?\n" +NO_SUCH_ENTRY_IN_SECTION + "No existe a entrada %s na seco %s\n" +NO_SUCH_ENTRY + "No existe a entrada %s\n" +PAGER_IS + "\nusando %s como paginador\n" +SYSTEM_FAILED + "Erro num comando de processamento do manual.\n\ +O comando %s terminou com o erro %d.\n" +VERSION + "%s, verso %s\n\n" +OUT_OF_MEMORY + "Memria esgotada - no obtive %d bytes\n" +ROFF_CMD_FROM_FILE_ERROR + "Erro no processamento de um comando *roff no ficheiro %s\n" +MANROFFSEQ_ERROR + "Erro no processamento de MANROFFSEQ. Usando defaults.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Erro no processamento de um comando *roff na linha de comando.\n" +UNRECOGNIZED_LINE + "Linha desconhecida no ficheiro de configurao (ignorada)\n%s\n" +GETVAL_ERROR + "man-config.c: erro interno: no se encontra a string %s\n" +FOUND_MANDIR + "directoria de man %s encontrada\n" +FOUND_MAP + "encontrado o manpath para %s --> %s\n" +FOUND_CATDIR + "catdir correspondente %s\n" +LINE_TOO_LONG + "Linha demasiado longa no ficheiro de configurao\n" +SECTION + "\nseco: %s\n" +UNLINKED + "%s removido\n" +GLOBBING + "expandindo %s\n" +EXPANSION_FAILED + "Tentativa [%s] para descomprimir o manual falhada\n" +OPEN_ERROR + "No posso ler o manual %s\n" +READ_ERROR + "Erro na leitura do manual %s\n" +FOUND_EQN + "directiva eqn(1) encontrada\n" +FOUND_GRAP + "directiva grap(1) encontrada\n" +FOUND_PIC + "directiva pic(1) encontrada\n" +FOUND_TBL + "directiva tbl(1) encontrada\n" +FOUND_VGRIND + "directiva vgrind(1) encontrada\n" +FOUND_REFER + "directiva refer(1) encontrada\n" +ROFF_FROM_COMMAND_LINE + "processando directiva da linha de comando\n" +ROFF_FROM_FILE + "processando directiva do ficheiro %s\n" +ROFF_FROM_ENV + "processando directiva do environment\n" +USING_DEFAULT + "usando o preprocessamento por omisso\n" +PLEASE_WAIT + "Formatando manual, aguarde por favor ...\n" +CHANGED_MODE + "altere as proteces de %s para %o\n" +CAT_OPEN_ERROR + "No consegui escrever em %s.\n" +PROPOSED_CATFILE + "tentarei escrever %s se necessrio\n" +IS_NEWER_RESULT + "estado de is_newer() = %d\n" +TRYING_SECTION + "tentando a seco %s\n" +SEARCHING + "\nprocurando em %s\n" +ALREADY_IN_MANPATH + "mas %s j est no manpath\n" +CANNOT_STAT + "Aviso: no consigo o ficheiro %s!\n" +IS_NO_DIR + "Aviso: %s no uma directoria!\n" +ADDING_TO_MANPATH + "acrescentando %s ao manpath\n" +PATH_DIR + "\ndirectoria %s " +IS_IN_CONFIG + "est no ficheiro de configurao\n" +IS_NOT_IN_CONFIG + "no est no ficheiro de configurao\n" +MAN_NEARBY + "mas existe uma directoria de man perto\n" +NO_MAN_NEARBY + "e no foi encontrada directoria de man perto\n" +ADDING_MANDIRS + "\nacrescentando directorias de man obrigatrias\n\n" +CATNAME_IS + "cat_name de convert_to_cat () : %s\n" +NO_EXEC + "\nno executando o comando:\n %s\n" +USAGE1 + "uso: %s [-adfhktwW] [seco] [-M path] [-P paginador] [-S lista]\n\t" +USAGE2 + "[-m sistema] " +USAGE3 + "[-p string] nome ...\n\n" +USAGE4 + " a : encontrar todas as entradas\n\ + d : imprimir informao de debug\n\ + f : o mesmo que whatis(1)\n\ + h : imprimir esta ajuda\n\ + k : o mesmo que apropos(1)\n" +USAGE5 + " t : usar troff para formatar o manual para imprimir\n" +USAGE6 + "\ + w : imprimir a localizao do manual a vr\n\ + (se no indicar o nome: imprime as directorias dos manuais)\n\n\ + M path : indica `path' como as directorias dos manuais\n\ + P paginador : use o programa `paginador' para vr os manuais\n\ + S lista : indicar lista de seces (separadas por ,)\n" +USAGE7 + " m sistema : procura manual para o sistema indicado\n" +USAGE8 + " p string : string indica o preprocessamento a efectuar\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "" +USER_CAN_OPEN_CAT + "" +CANNOT_FORK + "" +WAIT_FAILED + "" +GOT_WRONG_PID + "" +CHILD_TERMINATED_ABNORMALLY + "" +IDENTICAL + "" +MAN_FOUND + "" +NO_TROFF + "" +NO_CAT_FOR_NONSTD_LL + "" diff --git a/msgs/mess.pt.codeset b/msgs/mess.pt.codeset new file mode 100644 index 0000000..f5baf26 --- /dev/null +++ b/msgs/mess.pt.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-1 diff --git a/msgs/mess.ro b/msgs/mess.ro new file mode 100644 index 0000000..481a26f --- /dev/null +++ b/msgs/mess.ro @@ -0,0 +1,170 @@ +BAD_CONFIG_FILE + "imposibil de neles fiierul %s\n" +CONFIG_OPEN_ERROR + "Atenie: nu pot deschide fiierul de configurare %s\n" +PARSE_ERROR_IN_CONFIG + "Eroare parcurgnd fiierul de configurare\n" +INCOMPAT + "opiuni incompatibile %s i %s\n" +NO_ALTERNATE + "mi pare ru - nu exist suport inclus pentru sisteme alternative\n" +NO_COMPRESS + "Man a fost compilat cu comprimare automat a paginilor cat,\n\ +dar fiierul de configurare nu definete COMPRESS.\n" +NO_NAME_FROM_SECTION + "Ce pagin de manual vrei din seciunea %s?\n" +NO_NAME_NO_SECTION + "Ce pagin de manual dorii?\n" +NO_SUCH_ENTRY_IN_SECTION + "Nici o intrare pentru %s n seciunea %s a manualului\n" +NO_SUCH_ENTRY + "Nici o intrare n manual pentru %s\n" +PAGER_IS + "\nfolosesc %s ca paginator\n" +SYSTEM_FAILED + "Eroare la execuia comenzii de formatare sau afiare.\n\ +Comanda sistem %s s-a terminat cu codul de ieire %d.\n" +VERSION + "%s, versiunea %s\n\n" +OUT_OF_MEMORY + "Lips de memorie - nu pot aloca %d bytes\n" +ROFF_CMD_FROM_FILE_ERROR + "Eroare la parcurgerea comenzii *roff din fiierul %s\n" +MANROFFSEQ_ERROR + "Eroare la parcurgerea MANROFFSEQ. Folosesc valorile implicite ale sistemului.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Eroare la parcurgerea comenzii *roff din linia de comand.\n" +UNRECOGNIZED_LINE + "Linie nerecunoscut n fiierul de configurare (ignorat)\n%s\n" +GETVAL_ERROR + "man-config.c: eroare intern: irul %s nu a fost gsit\n" +FOUND_MANDIR + "am gsit directorul man %s\n" +FOUND_MAP + "am gsit harta manpath %s --> %s\n" +FOUND_CATDIR + "directorul cat corespunztor este %s\n" +LINE_TOO_LONG + "Linie prea lung n fiierul de configurare\n" +SECTION + "\nseciune: %s\n" +UNLINKED + "nelegat %s\n" +GLOBBING + "se expandeaz %s\n" +EXPANSION_FAILED + "ncercarea [%s] de a decomprima pagina man a euat\n" +OPEN_ERROR + "Nu pot deschide pagina man %s\n" +READ_ERROR + "Eroare la citirea paginii man %s\n" +FOUND_EQN + "am gsit o directiv eqn(1)\n" +FOUND_GRAP + "am gsit o directiv grap(1)\n" +FOUND_PIC + "am gsit o directiv pic(1)\n" +FOUND_TBL + "am gsit o directiv tbl(1)\n" +FOUND_VGRIND + "am gsit o directiv vgrind(1)\n" +FOUND_REFER + "am gsit o directiv refer(1)\n" +ROFF_FROM_COMMAND_LINE + "parcurg directiva din linia de comand\n" +ROFF_FROM_FILE + "parcurg directiva din fiierul %s\n" +ROFF_FROM_ENV + "parcurg directiva din variabilele de mediu\n" +USING_DEFAULT + "folosesc secvena de preprocesare implicit\n" +PLEASE_WAIT + "Formatez pagina, v rog ateptai...\n" +CHANGED_MODE + "am schimbat modul lui %s n %o\n" +CAT_OPEN_ERROR + "Nu am putut deschide %s pentru scriere.\n" +PROPOSED_CATFILE + "voi ncerca s scriu %s dac este necesar\n" +IS_NEWER_RESULT + "rezultatul de la is_newer() = %d\n" +TRYING_SECTION + "ncerc seciunea %s\n" +SEARCHING + "\ncaut n %s\n" +ALREADY_IN_MANPATH + "dar %s este deja n manpath\n" +CANNOT_STAT + "Atenie: nu pot verifica fiierul %s!\n" +IS_NO_DIR + "Atenie: %s nu este un director!\n" +ADDING_TO_MANPATH + "adaug %s la manpath\n" +PATH_DIR + "\ncalea la directorul %s " +IS_IN_CONFIG + "este n fiierul de configurare\n" +IS_NOT_IN_CONFIG + "nu este n fiierul de configurare\n" +MAN_NEARBY + "dar este un director man aproape\n" +NO_MAN_NEARBY + "dar nu am gsit nici un director man aproape\n" +ADDING_MANDIRS + "\nadaug directoarele man obligatorii\n\n" +CATNAME_IS + "cat_name n convert_to_cat () este: %s\n" +NO_EXEC + "\nnu execut comanda:\n %s\n" +USAGE1 + "folosire: %s [-adfhktwW] [seciune] [-M cale] [-P paginator] [-S list]\n\t" +USAGE2 + "[-m sistem] " +USAGE3 + "[-p ir] nume ...\n\n" +USAGE4 + " a : caut toate intrrile care se potrivesc\n\ + c : nu folosete fiierele cat\n\ + d : afieaz multe informaii de depanare\n\ + D : ca i -d, dar afieaz i paginile\n\ + f : ca i whatis(1)\n\ + h : afieaz acest mesaj de ajutor\n\ + k : ca i apropos(1)\n\ + K : caut un ir n toate paginile\n" +USAGE5 + " t : folosete troff pentru a formata paginile pentru tiprire\n" +USAGE6 + "\ + w : afieaz locaia(ile) paginii(lor) man care ar fi afiate\n\ + (dac nu este dat nici un nume: afieaz directoarele care ar fi cutate)\n\ + W : ca i -w, dar afieaz doar numele de fiiere\n\n\ + C fiier : folosete `fiier' ca fiier de configurare\n\ + M cale : seteaz calea de cutare pentru paginile de manual ca `cale'\n\ + P paginator : folosete programul `paginator' pentru a afia paginile\n\ + S list : list de seciuni separate prin dou puncte (:)\n" +USAGE7 + " m sistem : caut paginile de man pentru un sistem alternativ\n" +USAGE8 + " p ir : irul specific ce preprocesoare se ruleaz\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "i nici utilizatorul real nu poate deschide fiierul cat\n" +USER_CAN_OPEN_CAT + "dar utilizatorul real poate deschide fiierul cat\n" +CANNOT_FORK + "crearea procesului fiu pentru comanda _%s_ a euat\n" +WAIT_FAILED + "eroare ateptnd procesul fiu _%s_\n" +GOT_WRONG_PID + "foarte straniu ..., am primit pid eronat ateptnd procesul fiu\n" +CHILD_TERMINATED_ABNORMALLY + "eroare fatal: comanda _%s_ s-a terminat anormal\n" +IDENTICAL + "Pagina man %s este identic cu %s\n" +MAN_FOUND + "Am gsit pagina(ile) man:\n" +NO_TROFF + "eroare: nici o comand TROFF specificat n %s\n" +NO_CAT_FOR_NONSTD_LL + "nici o pagin cat salvat din cauza lungimii nestandard a liniilor\n" diff --git a/msgs/mess.ro.codeset b/msgs/mess.ro.codeset new file mode 100644 index 0000000..6d0d028 --- /dev/null +++ b/msgs/mess.ro.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-2 diff --git a/msgs/mess.ru b/msgs/mess.ru new file mode 100644 index 0000000..dd7190f --- /dev/null +++ b/msgs/mess.ru @@ -0,0 +1,170 @@ +BAD_CONFIG_FILE + " %s\n" +CONFIG_OPEN_ERROR + ": %s\n" +PARSE_ERROR_IN_CONFIG + " \n" +INCOMPAT + " %s %s \n" +NO_ALTERNATE + " \n" +NO_COMPRESS + " man cat-,\n\ + COMPRESS .\n" +NO_NAME_FROM_SECTION + " %s?\n" +NO_NAME_NO_SECTION + " ?\n" +NO_SUCH_ENTRY_IN_SECTION + " %s %s \n" +NO_SUCH_ENTRY + " %s \n" +PAGER_IS + "\n %s \n" +SYSTEM_FAILED + " .\n\ + %s %d.\n" +VERSION + "%s, %s\n" +OUT_OF_MEMORY + " - %d \n" +ROFF_CMD_FROM_FILE_ERROR + " *roff %s\n" +MANROFFSEQ_ERROR + " MANROFFSEQ. .\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + " *roff .\n" +UNRECOGNIZED_LINE + " ()\n%s\n" +GETVAL_ERROR + "man-config.c: : %s \n" +FOUND_MANDIR + " %s\n" +FOUND_MAP + " manpath %s --> %s\n" +FOUND_CATDIR + " catdir %s\n" +LINE_TOO_LONG + " \n" +SECTION + "\n: %s\n" +UNLINKED + "unlinked %s\n" +GLOBBING + "globbing %s\n" +EXPANSION_FAILED + " [%s] \n" +OPEN_ERROR + " %s \n" +READ_ERROR + " %s \n" +FOUND_EQN + " eqn(1)\n" +FOUND_GRAP + " grap(1)\n" +FOUND_PIC + " pic(1)\n" +FOUND_TBL + " tbl(1)\n" +FOUND_VGRIND + " vgrind(1)\n" +FOUND_REFER + " refer(1)\n" +ROFF_FROM_COMMAND_LINE + " \n" +ROFF_FROM_FILE + " %s\n" +ROFF_FROM_ENV + " \n" +USING_DEFAULT + " \n" +PLEASE_WAIT + " , ...\n" +CHANGED_MODE + " %s %o\n" +CAT_OPEN_ERROR + " %s .\n" +PROPOSED_CATFILE + " %s, \n" +IS_NEWER_RESULT + " is_newer() = %d\n" +TRYING_SECTION + " %s\n" +SEARCHING + "\n %s\n" +ALREADY_IN_MANPATH + "%s \n" +CANNOT_STAT + ": %s!\n" +IS_NO_DIR + ": %s !\n" +ADDING_TO_MANPATH + " %s \n" +PATH_DIR + "\n %s " +IS_IN_CONFIG + " \n" +IS_NOT_IN_CONFIG + " \n" +MAN_NEARBY + " \n" +NO_MAN_NEARBY + " \n" +ADDING_MANDIRS + "\n \n\n" +CATNAME_IS + "cat_name convert_to_cat(): %s\n" +NO_EXEC + "\ :\n %s\n" +USAGE1 + ": %s [-adfhktwW] [] [-M ] [-P ] [-S ]\n\t" +USAGE2 + "[-m ] " +USAGE3 + "[-p ] ...\n\n" +USAGE4 + " a : \n\ + c : cat-\n\ + d : \n\ + D : , -d, \n\ + f : , whatis(1)\n\ + h : \n\ + k : , apropos(1)\n\ + K : \n" +USAGE5 + " t : troff, \n" +USAGE6 + "\ + w : , \n\ + ( , )\n\ + W : -w, \n\n\ + C : `' \n\ + M : `'\n\ + P : `' \n\ + S : \n" +USAGE7 + " m : \n" +USAGE8 + " p : , \n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + " cat-\n" +USER_CAN_OPEN_CAT + " cat-\n" +CANNOT_FORK + " _%s_\n" +WAIT_FAILED + " _%s_\n" +GOT_WRONG_PID + " ..., pid \n" +CHILD_TERMINATED_ABNORMALLY + " : _%s_ \n" +IDENTICAL + " %s %s\n" +MAN_FOUND + " :\n" +NO_TROFF + ": TROFF %s\n" +NO_CAT_FOR_NONSTD_LL + "cat- - \n" diff --git a/msgs/mess.ru.codeset b/msgs/mess.ru.codeset new file mode 100644 index 0000000..10bc315 --- /dev/null +++ b/msgs/mess.ru.codeset @@ -0,0 +1 @@ +$ codeset=koi8-r diff --git a/msgs/mess.sl b/msgs/mess.sl new file mode 100644 index 0000000..97fa6f7 --- /dev/null +++ b/msgs/mess.sl @@ -0,0 +1,171 @@ +BAD_CONFIG_FILE + "Napake v nastavitveni datoteki %s\n" +CONFIG_OPEN_ERROR + "Pozor: nastavitveni datoteke %s ni mo odpreti\n" +PARSE_ERROR_IN_CONFIG + "Napake pri razlembi nastavitvene datoteke\n" +INCOMPAT + "Izbiri %s in %s sta nezdruljivi\n" +NO_ALTERNATE + "Sorry - Podpora za alternativne sisteme ni vgrajena\n" +NO_COMPRESS + "Man je bil preveden z izbiro za avtomatino stiskanje oblikovanih\n\ +strani prironika, nastavitvena datoteka pa ne definira\n\ +spremenljivke COMPRESS.\n" +NO_NAME_FROM_SECTION + "Katero stran prironika iz poglavja %s elite?\n" +NO_NAME_NO_SECTION + "Katero stran prironika elite?\n" +NO_SUCH_ENTRY_IN_SECTION + "Strani za %s ni v poglavju %s\n" +NO_SUCH_ENTRY + "Strani za %s ni\n" +PAGER_IS + "\nuporabljano %s za prikaz\n" +SYSTEM_FAILED + "Napaka pri izvajanju ukaza za oblikovanje ali prikaz.\n\ +Ukaz %s se je konal s statusom %d.\n" +VERSION + "%s, verzija %s\n\n" +OUT_OF_MEMORY + "Zmanjkalo pomnilnika - ni mogoe alocirati %d bytov\n" +ROFF_CMD_FROM_FILE_ERROR + "Napaka pri razlembi ukazov *roff iz datoteke %s\n" +MANROFFSEQ_ERROR + "Napaka pri razlembi MANROFFSEQ. Uporabili bomo privzete vrednosti.\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "Napaka pri razlembi ukazov *roff iz ukazne vrstice.\n" +UNRECOGNIZED_LINE + "Neprepoznana vrstica v nastavitveni datoteki (ignorirano)\n%s\n" +GETVAL_ERROR + "man-config.c: interna napaka: niza %s ni\n" +FOUND_MANDIR + "najden imenik s prironiki %s\n" +FOUND_MAP + "najdena pot do imenika s prironiki %s --> %s\n" +FOUND_CATDIR + "pripadajoi imenik z oblikovanimi dokumenti je %s\n" +LINE_TOO_LONG + "Predolga vrstica v nastavitveni datoteki\n" +SECTION + "\npoglavje : %s\n" +UNLINKED + "unlinked %s\n" +GLOBBING + "globbing %s\n" +EXPANSION_FAILED + "Poskus [%s] ekspandiranja strani prironika ni uspel\n" +OPEN_ERROR + "Ni mono odpreti strani %s\n" +READ_ERROR + "Napaka pri branju strani %s\n" +FOUND_EQN + "Najdena eqn(1) direktiva\n" +FOUND_GRAP + "Najdena grap(1) direktiva\n" +FOUND_PIC + "Najdena pic(1) direktiva\n" +FOUND_TBL + "Najdena tbl(1) direktiva\n" +FOUND_VGRIND + "Najdena vgrind(1) direktiva\n" +FOUND_REFER + "Najdena refer(1) direktiva\n" +ROFF_FROM_COMMAND_LINE + "Razlenjujemo direktive iz ukazne vrstice\n" +ROFF_FROM_FILE + "Razlenjujemo direktive iz datoteke %s\n" +ROFF_FROM_ENV + "Razlenjujemo direktive iz okolja\n" +USING_DEFAULT + "Uporabljamo privzeto zaporedje predprocesiranja\n" +PLEASE_WAIT + "Oblikujem stran, prosim poakajte...\n" +CHANGED_MODE + "Zaita %s spremenjena na %o\n" +CAT_OPEN_ERROR + "Ni mono odpreti %s za pisanje.\n" +PROPOSED_CATFILE + "poskusili bomo pisati na %s, e bo potrebno\n" +IS_NEWER_RESULT + "status iz is_newer() = %d\n" +TRYING_SECTION + "Poskuamo poglavje %s\n" +SEARCHING + "\niemo v %s\n" +ALREADY_IN_MANPATH + "%s je e v MANPATH\n" +CANNOT_STAT + "Pozor: stat() na datoteki %s ni moen!\n" +IS_NO_DIR + "Pozor: %s ni imenik!\n" +ADDING_TO_MANPATH + "%s dodan v manpath\n" +PATH_DIR + "\npot(-i) do imenika %s " +IS_IN_CONFIG + "je v nastavitveni datoteki\n" +IS_NOT_IN_CONFIG + "ni v nastavitveni datoteki,\n" +MAN_NEARBY + "pa pa je blizu imenik s prironiki\n" +NO_MAN_NEARBY + "niti ni blizu imenika s prironiki\n" +ADDING_MANDIRS + "\ndodamo obvezne imenike s prironiki\n\n" +CATNAME_IS + "cat_name v convert_to_cat () je: %s\n" +NO_EXEC + "\nneizvedeni ukaz:\n %s\n" +USAGE1 + "uporaba: %s [-adfhktwW] [poglavje] [-M pot] [-P paginator] [-S seznam_poglavij]\n\t" +USAGE2 + "[-m sistem] " +USAGE3 + "[-p niz] ime ...\n\n" +USAGE4 + " a : strani s tem imenom v vseh poglavjih\n\ + c : ponovno oblikovanje strani\n\ + d : \"debugging\" informacije\n\ + D : kot -d, zraven prikai e oblikovane strani\n\ + f : isto kot whatis(1)\n\ + h : ta navodila\n\ + k : isto kot apropos(1)\n\ + K : ii niz po vseh straneh\n" +USAGE5 + " t : s troff pripravi stran za tisk\n" +USAGE6 + "\ + w : pot do strani prironika, ki bi bila prikazana\n\ + (brez podanega imena: imeniki, v katerih se iejo strani prironika)\n\ + W : kot -w, a samo izpis imen datotek\n\n\ + C datoteka : uporabi ,datoteko' kot nastavitveno datoteko\n\ + M pot : strani prironika naj se iejo v ,poti'\n\ + P paginator : uporabi program ,paginator' za prikaz oblikovanih strani\n\ + S seznam_poglavij : seznam poglavij, kjer se iejo strani, loen z dvopiji\n" +USAGE7 + " m sistem : ii strani prironika na drugem sistemu\n" +USAGE8 + " p niz : niz, ki doloa predprocesorje\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "in dejanski uporabnik tudi ne more odpreti oblikovane datoteke\n" +USER_CAN_OPEN_CAT + "toda dejanski uporabnik lahko odpre oblikovano datoteko\n" +CANNOT_FORK + "neuspela vejitev ukaza _%s_\n" +WAIT_FAILED + "napaka pri akanju na proces potomec _%s_\n" +GOT_WRONG_PID + "zelo nenavadno..., napaen PID med akanjem na potomca\n" +CHILD_TERMINATED_ABNORMALLY + "kritina napaka: ukaz _%s_ se ze nenormalno zakljuil\n" +IDENTICAL + "Stran %s je enaka strani %s\n" +MAN_FOUND + "Najdene stran(i):\n" +NO_TROFF + "napaka: ukaz TROFF ni doloen v %s\n" +NO_CAT_FOR_NONSTD_LL + "oblikovana ni shranjena zaradi nestandardne irine vrstice\n" diff --git a/msgs/mess.sl.codeset b/msgs/mess.sl.codeset new file mode 100644 index 0000000..6d0d028 --- /dev/null +++ b/msgs/mess.sl.codeset @@ -0,0 +1 @@ +$ codeset=iso-8859-2 diff --git a/msgs/mess.zh_TW.UTF-8 b/msgs/mess.zh_TW.UTF-8 new file mode 100644 index 0000000..33f72ab --- /dev/null +++ b/msgs/mess.zh_TW.UTF-8 @@ -0,0 +1,170 @@ +BAD_CONFIG_FILE + "無法讀出檔案 %s 的意義\n" +CONFIG_OPEN_ERROR + "警告:無法開啟設定檔 %s\n" +PARSE_ERROR_IN_CONFIG + "解析設定檔時發生錯誤\n" +INCOMPAT + "選項 %s 與 %s 不相容\n" +NO_ALTERNATE + "抱歉 - 不支援在其他系統中編譯者\n" +NO_COMPRESS + "Man 於編譯時已加入 cat page 壓縮功能,\n\ +但是設定檔中未定義 COMPRESS。\n" +NO_NAME_FROM_SECTION + "你要從區段 %s 中讀取什麼使用手冊?\n" +NO_NAME_NO_SECTION + "\你要讀取什麼使用手冊?\n" +NO_SUCH_ENTRY_IN_SECTION + "%s 的使用手冊並不在區段 %s 之中\n" +NO_SUCH_ENTRY + "不存在 %s 的使用手冊\n" +PAGER_IS + "\n使用 %s 做為分頁程式\n" +SYSTEM_FAILED + "執行排列或顯示命令時發生錯誤。\n\ +系統命令 %s 以 %d 狀態結束。\n" +VERSION + "%s,版本 %s\n\n" +OUT_OF_MEMORY + "記憶體耗盡 - 無法取得 %d 位元組\n" +ROFF_CMD_FROM_FILE_ERROR + "從檔案 %s 解析 *roff 命令時發生錯誤\n" +MANROFFSEQ_ERROR + "解析 MANROFFSEQ 時發生錯誤。使用系統預設值。\n" +ROFF_CMD_FROM_COMMANDLINE_ERROR + "從命令列解析 *roff 命令時發生錯誤\n" +UNRECOGNIZED_LINE + "設定檔中無法辨識此列 (忽略)\n%s\n" +GETVAL_ERROR + "man-config.c:內部錯誤:字串 %s 找不到\n" +FOUND_MANDIR + "找到 man 目錄 %s\n" +FOUND_MAP + "找到 manpath 的對應 %s --> %s\n" +FOUND_CATDIR + "相對應的 catdir 是 %s\n" +LINE_TOO_LONG + "設定檔中單列過長\n" +SECTION + "\n區段:%s\n" +UNLINKED + "未連結的 %s\n" +GLOBBING + "展開萬用字元 %s\n" +EXPANSION_FAILED + "嘗試以 [%s] 擴展使用手冊失敗\n" +OPEN_ERROR + "無法開啟使用手冊 %s\n" +READ_ERROR + "讀取使用手冊 %s 時發生錯誤\n" +FOUND_EQN + "找到 eqn(1) 指令\n" +FOUND_GRAP + "找到 grap(1) 指令\n" +FOUND_PIC + "找到 pic(1) 指令\n" +FOUND_TBL + "找到 tbl(1) 指令\n" +FOUND_VGRIND + "找到 vgrind(1) 指令\n" +FOUND_REFER + "找到 refer(1) 指令\n" +ROFF_FROM_COMMAND_LINE + "從命令列解析指令\n" +ROFF_FROM_FILE + "從檔案 %s 解析指令\n" +ROFF_FROM_ENV + "從執行環境解析指令\n" +USING_DEFAULT + "使用預設的前置處理序列\n" +PLEASE_WAIT + "排列頁面中,請稍待...\n" +CHANGED_MODE + "將 %s 模式改為 %o\n" +CAT_OPEN_ERROR + "寫入時無法開啟 %s\n" +PROPOSED_CATFILE + "需要時將會寫入 %s\n" +IS_NEWER_RESULT + "is_newer() 的狀態是 %d\n" +TRYING_SECTION + "嘗試讀取區段 %s\n" +SEARCHING + "\n在區段 %s 中搜尋\n" +ALREADY_IN_MANPATH + "在 manpath 中已含有 %s\n" +CANNOT_STAT + "警告:無法取得檔案 %s 的狀態!\n" +IS_NO_DIR + "警告:%s 不是一個目錄!\n" +ADDING_TO_MANPATH + "將 %s 加入 manpath\n" +PATH_DIR + "\n目錄 %s 的路徑" +IS_IN_CONFIG + "存在於設定檔之中\n" +IS_NOT_IN_CONFIG + "不存在於設定檔之中\n" +MAN_NEARBY + "但是附近有使用手冊的目錄\n" +NO_MAN_NEARBY + "而附近找不到使用手冊的目錄\n" +ADDING_MANDIRS + "\n正在加入指定的使用手冊目錄\n\n" +CATNAME_IS + "在 convert_to_cat() 中的 cat_name 是:%s\n" +NO_EXEC + "\n並未執行命令:\n %s\n" +USAGE1 + "用法:%s [-adfhktwW] [區段] [-M 路徑] [-P 分頁程式] [-S 清單]\n\t" +USAGE2 + "[-m 系統] " +USAGE3 + "[-p 字串] 名稱 ...\n\n" +USAGE4 + " a:找出所有符合的項目\n\ + c:不要使用 cat 檔案\n\ + d:列出除錯資訊\n\ + D:與 -d 類似,但是也列出各頁\n\ + f:與 whatis(1) 相同\n\ + h:列出本輔助訊息\n\ + k:與 apropos(1) 相同\n\ + K:在所有頁中搜尋字串\n" +USAGE5 + " t:列印時使用 troff 來排列頁面\n" +USAGE6 + "\ + w:列出將要顯示的使用手冊位置\n\ + (如果未提供名稱,就列出將要搜尋的目錄\n\ + W:與 -w 類似,但是只顯示檔名\n\ + C file :以 `file' 做為設定檔\n\ + M path :設定使用手冊的搜尋路徑為 `path'\n\ + P pager :使用程式 `pager' 來顯示各頁\n\ + S list :`list' 表示以冒號分隔的區段串列\n" +USAGE7 + " m system:搜尋其他系統的使用手冊\n" +USAGE8 + " p string:`string' 指示要執行何種前置處理程式\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n" +USER_CANNOT_OPEN_CAT + "而真實使用者也無法開啟 cat 檔案\n" +USER_CAN_OPEN_CAT + "而真實使用者可以開啟 cat 檔案\n" +CANNOT_FORK + "分叉執行命令 _%s_ 時失敗\n" +WAIT_FAILED + "等待子命令 _%s_ 時發生錯誤\n" +GOT_WRONG_PID + "非常奇怪...,在等待自己的子命令時得到錯誤的 pid\n" +CHILD_TERMINATED_ABNORMALLY + "嚴重錯誤:命令 _%s_ 不正常結束\n" +IDENTICAL + "使用手冊 %s 與 %s 完全相同\n" +MAN_FOUND + "找到使用手冊:\n" +NO_TROFF + "錯誤:在 %s 中未指定 TROFF 命令\n" +NO_CAT_FOR_NONSTD_LL + "由於非標準列寬使得 cat 頁面未儲存\n" diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..c68bd77 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,124 @@ +# +# Generated automatically from Makefile.in by the +# configure script. +# +# +# Master Makefile for man, apropos, whatis, and makewhatis +# +# Copyright (c) 1990, 1991, John W. Eaton. +# Copyright (c) 1994-2001, Andries E. Brouwer +# +# You may distribute under the terms of the GNU General Public +# License as specified in the README file that comes with the man 1.0 +# distribution. +# +# various changes - aeb, March 1994 +# use of catalogs - aeb, June 1994 + +CC = gcc -O +BUILD_CC = gcc -O +INSTALL = install +EXEEXT = + +pager = /bin/less -is + +DEFS = -DSTDC_HEADERS -DTERMIOS_HEADER -DPOSIX -DDO_COMPRESS +CWARN = -Wall -Wstrict-prototypes -Wmissing-prototypes +CWARNNP = -Wall + +.c.o: + $(CC) -c $(CWARN) $(CFLAGS) -I. $(DEFS) $< + +# LDFLAGS = -g +LDFLAGS ?= -s + +LIBOBJS = + +all: man$(EXEEXT) man.conf apropos whatis makewhatis + +MANOBJS = man.o manfile.o manpath.o man-config.o man-getopt.o \ + man-iconv.o to_cat.o different.o gripes.o glob.o util.o msg.o + +man$(EXEEXT): $(MANOBJS) $(LIBOBJS) + $(CC) $(LDFLAGS) -o man$(EXEEXT) $(MANOBJS) $(LIBOBJS) $(LIBS) + +# CC may be a cross compiler, but BUILD_CC must compile for +# the present machine. +makemsg: + $(BUILD_CC) -o makemsg makemsg.c + +msg.c gripedefs.h: ../msgs/mess.en makemsg + ./makemsg ../msgs/mess.en gripedefs.h msg.c + +# glob.c does not have prototypes +glob.o: glob.c ndir.h + $(CC) -c $(CWARNNP) $(CFLAGS) -I. $(DEFS) glob.c + +man-config.o man-getopt.o man.o manpath.o to_cat.o: defs.h +different.o man.o: different.h +man.o manfile.o: glob.h +different.o gripes.o man-config.o man-getopt.o man.o manfile.o manpath.o util.o: gripes.h gripedefs.h +different.o man-config.o man-getopt.o man.o manpath.o: man-config.h +gripes.o man-config.o man-getopt.o man.o manpath.o util.o: man.h +man-getopt.o man.o manpath.o: man-getopt.h +man.o manfile.o to_cat.o: manfile.h +man.o man-iconv.o: man-iconv.h +man.o manpath.o: manpath.h +man-config.o: paths.h +different.o man-config.o man-getopt.o man.o manpath.o util.o: util.h +man-getopt.o: version.h +msg.o: msg.c +gripes.o: ../catopen/catopen.c + +man.conf: man.conf.in ../conf_script + ../conf_script man.conf + +paths.h: paths.h.in ../conf_script + ../conf_script paths.h + +version.h: ../version Makefile + vers=`sed -e s/man-// ../version`; \ + echo "static char version[] = \"$$vers\";" > version.h + +apropos: apropos.sh Makefile + rm -f apropos + sed -e 's,%apropos_or_whatis%,apropos,' \ + -e 's,%version%,man-1.6g,' \ + -e 's,%manpathoption%,--path,' \ + apropos.sh > apropos + chmod +x apropos + +whatis: apropos.sh Makefile + rm -f whatis + sed -e 's,%apropos_or_whatis%,whatis,' \ + -e 's,%version%,man-1.6g,' \ + -e 's,%manpathoption%,--path,' \ + apropos.sh > whatis + chmod +x whatis + +makewhatis: makewhatis.sh Makefile + rm -f makewhatis + cp makewhatis.sh makewhatis.in + ../conf_script makewhatis + chmod +x makewhatis + +MANCONFIG=$(DESTDIR)$(PREFIX)/usr/share/misc/man.conf + +install: all apropos whatis makewhatis + mkdir -p $(DESTDIR)$(PREFIX)/usr/bin + $(INSTALL) -c man$(EXEEXT) $(DESTDIR)$(PREFIX)/usr/bin/man + $(INSTALL) -c -m 755 apropos $(DESTDIR)$(PREFIX)/usr/bin/apropos + $(INSTALL) -c -m 755 whatis $(DESTDIR)$(PREFIX)/usr/bin/whatis + $(INSTALL) -c -m 755 man2dvi $(DESTDIR)$(PREFIX)/usr/bin/man2dvi + mkdir -p $(DESTDIR)$(PREFIX)/usr/sbin + $(INSTALL) -c -m 754 makewhatis $(DESTDIR)$(PREFIX)/usr/sbin/makewhatis + mkdir -p $(DESTDIR)$(PREFIX)/usr/share/misc + if [ -f $(MANCONFIG) ]; then mv $(MANCONFIG) $(MANCONFIG).orig; fi + $(INSTALL) -c -m 644 man.conf $(MANCONFIG) + +clean: + rm -f *.o *~ core man$(EXEEXT) apropos whatis makewhatis makemsg + +spotless: clean + rm -f Makefile config.status paths.h version.h man.conf + rm -f gripedefs.h msg.c mess.*.cat diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..0b08305 --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,120 @@ +# +# Master Makefile for man, apropos, whatis, and makewhatis +# +# Copyright (c) 1990, 1991, John W. Eaton. +# Copyright (c) 1994-2001, Andries E. Brouwer +# +# You may distribute under the terms of the GNU General Public +# License as specified in the README file that comes with the man 1.0 +# distribution. +# +# various changes - aeb, March 1994 +# use of catalogs - aeb, June 1994 + +CC = @CC@ +BUILD_CC = @BUILD_CC@ +INSTALL = @INSTALL@ +EXEEXT = @EXEEXT@ + +pager = @pager@ + +DEFS = @DEFS@ +CWARN = -Wall -Wstrict-prototypes -Wmissing-prototypes +CWARNNP = -Wall + +.c.o: + $(CC) -c $(CWARN) $(CFLAGS) -I. $(DEFS) $< + +# LDFLAGS = -g +LDFLAGS ?= -s + +LIBOBJS = @LIBOBJS@ + +all: man$(EXEEXT) man.conf apropos whatis makewhatis + +MANOBJS = man.o manfile.o manpath.o man-config.o man-getopt.o \ + man-iconv.o to_cat.o different.o gripes.o glob.o util.o msg.o + +man$(EXEEXT): $(MANOBJS) $(LIBOBJS) + $(CC) $(LDFLAGS) -o man$(EXEEXT) $(MANOBJS) $(LIBOBJS) $(LIBS) + +# CC may be a cross compiler, but BUILD_CC must compile for +# the present machine. +makemsg: + $(BUILD_CC) -o makemsg makemsg.c + +msg.c gripedefs.h: ../msgs/mess.en makemsg + ./makemsg ../msgs/mess.en gripedefs.h msg.c + +# glob.c does not have prototypes +glob.o: glob.c ndir.h + $(CC) -c $(CWARNNP) $(CFLAGS) -I. $(DEFS) glob.c + +man-config.o man-getopt.o man.o manpath.o to_cat.o: defs.h +different.o man.o: different.h +man.o manfile.o: glob.h +different.o gripes.o man-config.o man-getopt.o man.o manfile.o manpath.o util.o: gripes.h gripedefs.h +different.o man-config.o man-getopt.o man.o manpath.o: man-config.h +gripes.o man-config.o man-getopt.o man.o manpath.o util.o: man.h +man-getopt.o man.o manpath.o: man-getopt.h +man.o manfile.o to_cat.o: manfile.h +man.o man-iconv.o: man-iconv.h +man.o manpath.o: manpath.h +man-config.o: paths.h +different.o man-config.o man-getopt.o man.o manpath.o util.o: util.h +man-getopt.o: version.h +msg.o: msg.c +gripes.o: ../catopen/catopen.c + +man.conf: man.conf.in ../conf_script + ../conf_script man.conf + +paths.h: paths.h.in ../conf_script + ../conf_script paths.h + +version.h: ../version Makefile + vers=`sed -e s/man-// ../version`; \ + echo "static char version[] = \"$$vers\";" > version.h + +apropos: apropos.sh Makefile + rm -f apropos + sed -e 's,%apropos_or_whatis%,apropos,' \ + -e 's,%version%,@version@,' \ + -e 's,%manpathoption%,@manpathoption@,' \ + apropos.sh > apropos + chmod +x apropos + +whatis: apropos.sh Makefile + rm -f whatis + sed -e 's,%apropos_or_whatis%,whatis,' \ + -e 's,%version%,@version@,' \ + -e 's,%manpathoption%,@manpathoption@,' \ + apropos.sh > whatis + chmod +x whatis + +makewhatis: makewhatis.sh Makefile + rm -f makewhatis + cp makewhatis.sh makewhatis.in + ../conf_script makewhatis + chmod +x makewhatis + +MANCONFIG=$(DESTDIR)$(PREFIX)@man_config_file@ + +install: all apropos whatis makewhatis + mkdir -p $(DESTDIR)$(PREFIX)@bindir@ + $(INSTALL) -c @man_install_flags@ man$(EXEEXT) $(DESTDIR)$(PREFIX)@man@ + $(INSTALL) -c -m 755 apropos $(DESTDIR)$(PREFIX)@apropos@ + $(INSTALL) -c -m 755 whatis $(DESTDIR)$(PREFIX)@whatis@ + $(INSTALL) -c -m 755 man2dvi $(DESTDIR)$(PREFIX)@man2dvi@ + mkdir -p $(DESTDIR)$(PREFIX)@sbindir@ + $(INSTALL) -c -m 754 makewhatis $(DESTDIR)$(PREFIX)@makewhatis@ + mkdir -p $(DESTDIR)$(PREFIX)@man_config_dir@ + if [ -f $(MANCONFIG) ]; then mv $(MANCONFIG) $(MANCONFIG).orig; fi + $(INSTALL) -c -m 644 man.conf $(MANCONFIG) + +clean: + rm -f *.o *~ core man$(EXEEXT) apropos whatis makewhatis makemsg + +spotless: clean + rm -f Makefile config.status paths.h version.h man.conf + rm -f gripedefs.h msg.c mess.*.cat diff --git a/src/apropos b/src/apropos new file mode 100755 index 0000000..a85968a --- /dev/null +++ b/src/apropos @@ -0,0 +1,88 @@ +#!/bin/sh +# +# apropos -- search the whatis database for keywords. +# whatis -- idem, but match only commands (as whole words). +# +# Copyright (c) 1990, 1991, John W. Eaton. +# Copyright (c) 1994-1999, Andries E. Brouwer. +# +# You may distribute under the terms of the GNU General Public +# License as specified in the README file that comes with the man +# distribution. +# +# apropos/whatis-1.5m aeb 2003-08-01 (from man-1.6g) +# +# keep old PATH - 000323 - Bryan Henderson +# also look in /var/cache/man - 030801 - aeb + +program=`basename $0` + +# When man pages in your favorite locale look to grep like binary files +# (and you use GNU grep) you may want to add the 'a' option to *grepopt1. +aproposgrepopt1='i' +aproposgrepopt2='' +whatisgrepopt1='iw' +whatisgrepopt2='^' +grepopt1=$aproposgrepopt1 +grepopt2=$aproposgrepopt2 + +if [ $# = 0 ] +then + echo "usage: $program keyword ..." + exit 1 +fi + +manpath=`man --path | tr : '\040'` + +if [ "$manpath" = "" ] +then + echo "$program: manpath is null" + exit 1 +fi + +args= +for arg in $*; do + case $arg in + --version|-V|-v) + echo "$program from man-1.6g" + exit 0 + ;; + --help|-h) + echo "usage: $program keyword ..." + exit 0 + ;; + -*) + echo "$program: $arg: unknown option" + exit 1 + ;; + *) + args="$args $arg" + esac +done + +while [ "$1" != "" ] +do + found=0 + for d in /var/cache/man $manpath /usr/lib + do + if [ -f $d/whatis ] + then + if grep -"$grepopt1" "$grepopt2""$1" $d/whatis + then + found=1 +# Some people are satisfied with a single occurrence +# But it is better to give all +# break + fi + fi + done + + if [ $found = 0 ] + then + echo "$1: nothing appropriate" + fi + + shift +done + +exit diff --git a/src/apropos.sh b/src/apropos.sh new file mode 100644 index 0000000..f4b88ea --- /dev/null +++ b/src/apropos.sh @@ -0,0 +1,88 @@ +#!/bin/sh +# +# apropos -- search the whatis database for keywords. +# whatis -- idem, but match only commands (as whole words). +# +# Copyright (c) 1990, 1991, John W. Eaton. +# Copyright (c) 1994-1999, Andries E. Brouwer. +# +# You may distribute under the terms of the GNU General Public +# License as specified in the README file that comes with the man +# distribution. +# +# apropos/whatis-1.5m aeb 2003-08-01 (from %version%) +# +# keep old PATH - 000323 - Bryan Henderson +# also look in /var/cache/man - 030801 - aeb + +program=`basename $0` + +# When man pages in your favorite locale look to grep like binary files +# (and you use GNU grep) you may want to add the 'a' option to *grepopt1. +aproposgrepopt1='i' +aproposgrepopt2='' +whatisgrepopt1='iw' +whatisgrepopt2='^' +grepopt1=$%apropos_or_whatis%grepopt1 +grepopt2=$%apropos_or_whatis%grepopt2 + +if [ $# = 0 ] +then + echo "usage: $program keyword ..." + exit 1 +fi + +manpath=`man %manpathoption% | tr : '\040'` + +if [ "$manpath" = "" ] +then + echo "$program: manpath is null" + exit 1 +fi + +args= +for arg in $*; do + case $arg in + --version|-V|-v) + echo "$program from %version%" + exit 0 + ;; + --help|-h) + echo "usage: $program keyword ..." + exit 0 + ;; + -*) + echo "$program: $arg: unknown option" + exit 1 + ;; + *) + args="$args $arg" + esac +done + +while [ "$1" != "" ] +do + found=0 + for d in /var/cache/man $manpath /usr/lib + do + if [ -f $d/whatis ] + then + if grep -"$grepopt1" "$grepopt2""$1" $d/whatis + then + found=1 +# Some people are satisfied with a single occurrence +# But it is better to give all +# break + fi + fi + done + + if [ $found = 0 ] + then + echo "$1: nothing appropriate" + fi + + shift +done + +exit diff --git a/src/defs.h b/src/defs.h new file mode 100644 index 0000000..f33c05d --- /dev/null +++ b/src/defs.h @@ -0,0 +1,26 @@ +/* defs.h */ +#undef MAXPATHLEN /* make sure struct dirs has a + well-defined size (thanks to + Pierre.Humblet@eurecom.fr) */ +#include + +#define MAN 0 +#define CAT 1 +#define SCAT 2 + +#ifndef MAXPATHLEN +#define MAXPATHLEN 1024 +#endif + +struct dir { + struct dir *nxt; + char *dir; +}; + +struct dirs { + struct dirs *nxt; + char mandir[MAXPATHLEN]; + char catdir[MAXPATHLEN]; + char bindir[MAXPATHLEN]; + int mandatory; +}; diff --git a/src/different.c b/src/different.c new file mode 100644 index 0000000..cfce5fb --- /dev/null +++ b/src/different.c @@ -0,0 +1,72 @@ +#include +#include +#include + +#include "different.h" +#include "gripes.h" +#include "man-config.h" +#include "util.h" + +static struct filelist { + char *pathname; + struct filelist *next; +} cat_list, man_list; + +static int +is_different(const char *file, struct filelist *p) { + char *command; + const char *cmp = getval("CMP"); + int ret; + + if (cmp) { + while (p->next) { + command = my_xsprintf("%s %S %S\n", cmp, file, p->pathname); + ret = do_system_command (command, 1); + if (ret == 0) { + gripe(IDENTICAL, file, p->pathname); + return 0; + } + p = p->next; + } + p->next = (struct filelist *) my_malloc(sizeof(struct filelist)); + p->pathname = my_strdup(file); + p->next->next = 0; + } + return 1; +} + +static int +free_filelist (struct filelist *list){ +struct filelist *current, *next; + + current = list; + if (current != list) + do { + next = current->next; + if (current != list) + free(current); + current = next; + } while (current->next != NULL); + + list->next = NULL; + + return 0; +} + +int +different_cat_file (const char *file) { + return is_different (file, &cat_list); +} + +int +different_man_file (const char *file) { + return is_different (file, &man_list); +} + +int +free_catman_filelists (void){ + + free_filelist(&man_list); + free_filelist(&cat_list); +return 0; +} diff --git a/src/different.h b/src/different.h new file mode 100644 index 0000000..e952500 --- /dev/null +++ b/src/different.h @@ -0,0 +1,3 @@ +int different_cat_file (const char *file); +int different_man_file (const char *file); +int free_catman_filelists (void); diff --git a/src/glob.c b/src/glob.c new file mode 100644 index 0000000..71b93d7 --- /dev/null +++ b/src/glob.c @@ -0,0 +1,682 @@ +/* File-name wildcard pattern matching for GNU. + Copyright (C) 1985, 1988, 1989, 1990, 1991 Free Software Foundation, Inc. + + 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 1, 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* To whomever it may concern: I have never seen the code which most + Unix programs use to perform this function. I wrote this from scratch + based on specifications for the pattern matching. --RMS. */ + +#ifdef SHELL +#include "config.h" +#endif /* SHELL */ + +#include + +#if defined (USGr3) && !defined (DIRENT) +#define DIRENT +#endif /* USGr3 */ +#if defined (Xenix) && !defined (SYSNDIR) +#define SYSNDIR +#endif /* Xenix */ + +#if defined (POSIX) || defined (DIRENT) || defined (__GNU_LIBRARY__) +#include +#define direct dirent +#define D_NAMLEN(d) strlen((d)->d_name) +#else /* not POSIX or DIRENT or __GNU_LIBRARY__ */ +#define D_NAMLEN(d) ((d)->d_namlen) +#ifdef USG +#if defined (SYSNDIR) +#include +#else /* SYSNDIR */ +#include "ndir.h" +#endif /* not SYSNDIR */ +#else /* not USG */ +#include +#endif /* USG */ +#endif /* POSIX or DIRENT or __GNU_LIBRARY__ */ + +#ifdef __QNX__ +#define REAL_DIR_ENTRY(dp) (dp->d_stat.st_ino != 0) +#elif defined (_POSIX_SOURCE) +/* Posix does not require that the d_ino field be present, and some + systems do not provide it. */ +#define REAL_DIR_ENTRY(dp) 1 +#else +#define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) +#endif /* _POSIX_SOURCE */ + +#if defined (STDC_HEADERS) || defined (__GNU_LIBRARY__) +#include +#include +#define STDC_STRINGS +#else /* STDC_HEADERS or __GNU_LIBRARY__ */ + +#if defined (USG) +#include +#ifndef POSIX +#include +#endif /* POSIX */ +#define STDC_STRINGS +#else /* not USG */ +#ifdef NeXT +#include +#else /* NeXT */ +#include +#endif /* NeXT */ +/* Declaring bcopy causes errors on systems whose declarations are different. + If the declaration is omitted, everything works fine. */ +#endif /* not USG */ + +extern char *malloc (); +extern char *realloc (); +extern void free (); + +#ifndef NULL +#define NULL 0 +#endif +#endif /* Not STDC_HEADERS or __GNU_LIBRARY__. */ + +#ifdef STDC_STRINGS +#define bcopy(s, d, n) memcpy ((d), (s), (n)) +#define index strchr +#define rindex strrchr +#endif /* STDC_STRINGS */ + +#ifndef alloca +#ifdef __GNUC__ +#define alloca __builtin_alloca +#else /* Not GCC. */ +#ifdef sparc +#include +#else /* Not sparc. */ +extern char *alloca (); +#endif /* sparc. */ +#endif /* GCC. */ +#endif + +/* Nonzero if '*' and '?' do not match an initial '.' for glob_filename. */ +int noglob_dot_filenames = 1; + +static int glob_match_after_star (); + +/* Return nonzero if PATTERN has any special globbing chars in it. */ + +int +glob_pattern_p (pattern) + char *pattern; +{ + register char *p = pattern; + register char c; + int open = 0; + + while ((c = *p++) != '\0') + switch (c) + { + case '?': + case '*': + return 1; + + case '[': /* Only accept an open brace if there is a close */ + open++; /* brace to match it. Bracket expressions must be */ + continue; /* complete, according to Posix.2 */ + case ']': + if (open) + return 1; + continue; + + case '\\': + if (*p++ == '\0') + return 0; + } + + return 0; +} + + +/* Match the pattern PATTERN against the string TEXT; + return 1 if it matches, 0 otherwise. + + A match means the entire string TEXT is used up in matching. + + In the pattern string, `*' matches any sequence of characters, + `?' matches any character, [SET] matches any character in the specified set, + [!SET] matches any character not in the specified set. + + A set is composed of characters or ranges; a range looks like + character hyphen character (as in 0-9 or A-Z). + [0-9a-zA-Z_] is the set of characters allowed in C identifiers. + Any other character in the pattern must be matched exactly. + + To suppress the special syntactic significance of any of `[]*?!-\', + and match the character exactly, precede it with a `\'. + + If DOT_SPECIAL is nonzero, + `*' and `?' do not match `.' at the beginning of TEXT. */ + +int +glob_match (pattern, text, dot_special) + char *pattern, *text; + int dot_special; +{ + register char *p = pattern, *t = text; + register char c; + + while ((c = *p++) != '\0') + switch (c) + { + case '?': + if (*t == '\0' || (dot_special && t == text && *t == '.')) + return 0; + else + ++t; + break; + + case '\\': + if (*p++ != *t++) + return 0; + break; + + case '*': + if (dot_special && t == text && *t == '.') + return 0; + return glob_match_after_star (p, t); + + case '[': + { + register char c1 = *t++; + int invert; + + if (c1 == '\0') + return 0; + + invert = (*p == '!'); + + if (invert) + p++; + + c = *p++; + while (1) + { + register char cstart = c, cend = c; + + if (c == '\\') + { + cstart = *p++; + cend = cstart; + } + + if (cstart == '\0') + return 0; /* Missing ']'. */ + + c = *p++; + + if (c == '-') + { + cend = *p++; + if (cend == '\\') + cend = *p++; + if (cend == '\0') + return 0; + c = *p++; + } + if (c1 >= cstart && c1 <= cend) + goto match; + if (c == ']') + break; + } + if (!invert) + return 0; + break; + + match: + /* Skip the rest of the [...] construct that already matched. */ + while (c != ']') + { + if (c == '\0') + return 0; + c = *p++; + if (c == '\0') + return 0; + if (c == '\\') + p++; + } + if (invert) + return 0; + break; + } + + default: + if (c != *t++) + return 0; + } + + return *t == '\0'; +} + +/* Like glob_match, but match PATTERN against any final segment of TEXT. */ + +static int +glob_match_after_star (pattern, text) + char *pattern, *text; +{ + register char *p = pattern, *t = text; + register char c, c1; + + while ((c = *p++) == '?' || c == '*') + if (c == '?' && *t++ == '\0') + return 0; + + if (c == '\0') + return 1; + + if (c == '\\') + c1 = *p; + else + c1 = c; + + --p; + while (1) + { + if ((c == '[' || *t == c1) && glob_match (p, t, 0)) + return 1; + if (*t++ == '\0') + return 0; + } +} + +/* Return a vector of names of files in directory DIR + whose names match glob pattern PAT. + The names are not in any particular order. + Wildcards at the beginning of PAT do not match an initial period + if noglob_dot_filenames is nonzero. + + The vector is terminated by an element that is a null pointer. + + To free the space allocated, first free the vector's elements, + then free the vector. + + Return NULL if cannot get enough memory to hold the pointer + and the names. + + Return -1 if cannot access directory DIR. + Look in errno for more information. */ + +char ** +glob_vector (pat, dir) + char *pat; + char *dir; +{ + struct globval + { + struct globval *next; + char *name; + }; + + DIR *d; + register struct direct *dp; + struct globval *lastlink; + register struct globval *nextlink; + register char *nextname; + unsigned int count; + int lose; + register char **name_vector = 0; + register unsigned int i; +#ifdef ALLOCA_MISSING + struct globval *templink; +#endif + + d = opendir (dir); + if (d == NULL) + return (char **) -1; + + lastlink = NULL; + count = 0; + lose = 0; + + /* Scan the directory, finding all names that match. + For each name that matches, allocate a struct globval + on the stack and store the name in it. + Chain those structs together; lastlink is the front of the chain. */ + while (1) + { +#if defined (SHELL) + /* Make globbing interruptible in the bash shell. */ + extern int interrupt_state; + + if (interrupt_state) + { + closedir (d); + lose = 1; + goto lost; + } +#endif /* SHELL */ + + dp = readdir (d); + if (dp == NULL) + break; + if (REAL_DIR_ENTRY (dp) + && glob_match (pat, dp->d_name, noglob_dot_filenames)) + { +#ifdef ALLOCA_MISSING + nextlink = (struct globval *) malloc (sizeof (struct globval)); +#else + nextlink = (struct globval *) alloca (sizeof (struct globval)); +#endif + nextlink->next = lastlink; + i = D_NAMLEN (dp) + 1; + nextname = (char *) malloc (i); + if (nextname == NULL) + { + lose = 1; + break; + } + lastlink = nextlink; + nextlink->name = nextname; + bcopy (dp->d_name, nextname, i); + count++; + } + } + closedir (d); + + if (!lose) + { + name_vector = (char **) malloc ((count + 1) * sizeof (char *)); + lose |= name_vector == NULL; + } + + /* Have we run out of memory? */ +#ifdef SHELL + lost: +#endif + if (lose) + { + /* Here free the strings we have got. */ + while (lastlink) + { + free (lastlink->name); +#ifdef ALLOCA_MISSING + templink = lastlink->next; + free ((char *) lastlink); + lastlink = templink; +#else + lastlink = lastlink->next; +#endif + } + return NULL; + } + + /* Copy the name pointers from the linked list into the vector. */ + for (i = 0; i < count; ++i) + { + name_vector[i] = lastlink->name; +#ifdef ALLOCA_MISSING + templink = lastlink->next; + free ((char *) lastlink); + lastlink = templink; +#else + lastlink = lastlink->next; +#endif + } + + name_vector[count] = NULL; + return name_vector; +} + +/* Return a new array, replacing ARRAY, which is the concatenation + of each string in ARRAY to DIR. + Return NULL if out of memory. */ + +static char ** +glob_dir_to_array (dir, array) + char *dir, **array; +{ + register unsigned int i, l; + int add_slash = 0; + char **result; + + l = strlen (dir); + if (l == 0) + return array; + + if (dir[l - 1] != '/') + add_slash++; + + for (i = 0; array[i] != NULL; i++) + ; + + result = (char **) malloc ((i + 1) * sizeof (char *)); + if (result == NULL) + return NULL; + + for (i = 0; array[i] != NULL; i++) + { + result[i] = (char *) malloc (1 + l + add_slash + strlen (array[i])); + if (result[i] == NULL) + return NULL; + strcpy (result[i], dir); + if (add_slash) + result[i][l] = '/'; + strcpy (result[i] + l + add_slash, array[i]); + } + result[i] = NULL; + + /* Free the input array. */ + for (i = 0; array[i] != NULL; i++) + free (array[i]); + free ((char *) array); + return result; +} + +/* Do globbing on PATHNAME. Return an array of pathnames that match, + marking the end of the array with a null-pointer as an element. + If no pathnames match, then the array is empty (first element is null). + If there isn't enough memory, then return NULL. + If a file system error occurs, return -1; `errno' has the error code. + + Wildcards at the beginning of PAT, or following a slash, + do not match an initial period if noglob_dot_filenames is nonzero. */ + +char ** +glob_filename (const char *pathname) +{ + char **result; + unsigned int result_size; + char *directory_name; + const char *filename; + unsigned int directory_len; + + result = (char **) malloc (sizeof (char *)); + result_size = 1; + if (result == NULL) + return NULL; + + result[0] = NULL; + + /* Find the filename. */ + filename = rindex (pathname, '/'); + if (filename == NULL) + { + filename = pathname; + directory_name = ""; + directory_len = 0; + } + else + { + directory_len = (filename - pathname) + 1; +#ifdef ALLOCA_MISSING + directory_name = (char *) malloc (directory_len + 1); +#else + directory_name = (char *) alloca (directory_len + 1); +#endif + bcopy (pathname, directory_name, directory_len); + directory_name[directory_len] = '\0'; + ++filename; + } + + /* If directory_name contains globbing characters, then we + have to expand the previous levels. Just recurse. */ + if (glob_pattern_p (directory_name)) + { + char **directories; + register unsigned int i; + + if (directory_name[directory_len - 1] == '/') + directory_name[directory_len - 1] = '\0'; + + directories = glob_filename (directory_name); +#ifdef ALLOCA_MISSING + free ((char *) directory_name); +#endif + if (directories == NULL) + goto memory_error; + else if (directories == (char **) -1) + return (char **) -1; + else if (*directories == NULL) + { + free ((char *) directories); + return (char **) -1; + } + + /* We have successfully globbed the preceding directory name. + For each name in DIRECTORIES, call glob_vector on it and + FILENAME. Concatenate the results together. */ + for (i = 0; directories[i] != NULL; i++) + { + char **temp_results = glob_vector (filename, directories[i]); + if (temp_results == NULL) + goto memory_error; + else if (temp_results == (char **) -1) + /* This filename is probably not a directory. Ignore it. */ + ; + else + { + char **array = glob_dir_to_array (directories[i], temp_results); + register unsigned int l; + + l = 0; + while (array[l] != NULL) + ++l; + + result = (char **) realloc (result, + (result_size + l) * sizeof (char *)); + if (result == NULL) + goto memory_error; + + for (l = 0; array[l] != NULL; ++l) + result[result_size++ - 1] = array[l]; + result[result_size - 1] = NULL; + free ((char *) array); + } + } + /* Free the directories. */ + for (i = 0; directories[i] != NULL; i++) + free (directories[i]); + free ((char *) directories); + + return result; + } + + /* If there is only a directory name, return it. */ + if (*filename == '\0') + { + result = (char **) realloc ((char *) result, 2 * sizeof (char *)); + if (result != NULL) + { + result[0] = (char *) malloc (directory_len + 1); + if (result[0] == NULL) + { +#ifdef ALLOCA_MISSING + free ((char *) directory_name); +#endif + goto memory_error; + } + bcopy (directory_name, result[0], directory_len + 1); + result[1] = NULL; + } +#ifdef ALLOCA_MISSING + free ((char *) directory_name); +#endif + return result; + } + else + { + /* Otherwise, just return what glob_vector + returns appended to the directory name. */ + char **temp_results = glob_vector (filename, + (directory_len == 0 + ? "." : directory_name)); + + if (temp_results == NULL || temp_results == (char **) -1) + { +#ifdef NO_ALLOCA + free ((char *) directory_name); +#endif + return temp_results; + } + + temp_results = glob_dir_to_array (directory_name, temp_results); +#ifdef NO_ALLOCA + free ((char *) directory_name); +#endif + return temp_results; + } + + /* We get to memory error if the program has run out of memory, or + if this is the shell, and we have been interrupted. */ + memory_error: + if (result != NULL) + { + register unsigned int i; + for (i = 0; result[i] != NULL; ++i) + free (result[i]); + free ((char *) result); + } +#if defined (SHELL) + { + extern int interrupt_state; + + if (interrupt_state) + throw_to_top_level (); + } +#endif /* SHELL */ + return NULL; +} + +#ifdef TEST + +main (argc, argv) + int argc; + char **argv; +{ + char **value; + int i, optind; + + for (optind = 1; optind < argc; optind++) + { + value = glob_filename (argv[optind]); + if (value == NULL) + puts ("virtual memory exhausted"); + else if (value == (char **) -1) + perror (argv[optind]); + else + for (i = 0; value[i] != NULL; i++) + puts (value[i]); + } + exit (0); +} + +#endif /* TEST */ diff --git a/src/glob.h b/src/glob.h new file mode 100644 index 0000000..fd6e07c --- /dev/null +++ b/src/glob.h @@ -0,0 +1 @@ +char **glob_filename (const char *); diff --git a/src/gripedefs.h b/src/gripedefs.h new file mode 100644 index 0000000..57aa898 --- /dev/null +++ b/src/gripedefs.h @@ -0,0 +1,87 @@ +#define BAD_CONFIG_FILE 1 +#define CONFIG_OPEN_ERROR 2 +#define PARSE_ERROR_IN_CONFIG 3 +#define INCOMPAT 4 +#define NO_ALTERNATE 5 +#define NO_COMPRESS 6 +#define NO_NAME_FROM_SECTION 7 +#define NO_NAME_NO_SECTION 8 +#define NO_SUCH_ENTRY_IN_SECTION 9 +#define NO_SUCH_ENTRY 10 +#define PAGER_IS 11 +#define SYSTEM_FAILED 12 +#define VERSION 13 +#define OUT_OF_MEMORY 14 +#define ROFF_CMD_FROM_FILE_ERROR 15 +#define MANROFFSEQ_ERROR 16 +#define ROFF_CMD_FROM_COMMANDLINE_ERROR 17 +#define UNRECOGNIZED_LINE 18 +#define GETVAL_ERROR 19 +#define FOUND_MANDIR 20 +#define FOUND_MAP 21 +#define FOUND_CATDIR 22 +#define LINE_TOO_LONG 23 +#define SECTION 24 +#define UNLINKED 25 +#define GLOBBING 26 +#define EXPANSION_FAILED 27 +#define OPEN_ERROR 28 +#define READ_ERROR 29 +#define FOUND_EQN 30 +#define FOUND_GRAP 31 +#define FOUND_PIC 32 +#define FOUND_TBL 33 +#define FOUND_VGRIND 34 +#define FOUND_REFER 35 +#define ROFF_FROM_COMMAND_LINE 36 +#define ROFF_FROM_FILE 37 +#define ROFF_FROM_ENV 38 +#define USING_DEFAULT 39 +#define PLEASE_WAIT 40 +#define CHANGED_MODE 41 +#define CAT_OPEN_ERROR 42 +#define PROPOSED_CATFILE 43 +#define IS_NEWER_RESULT 44 +#define TRYING_SECTION 45 +#define SEARCHING 46 +#define ALREADY_IN_MANPATH 47 +#define CANNOT_STAT 48 +#define IS_NO_DIR 49 +#define ADDING_TO_MANPATH 50 +#define PATH_DIR 51 +#define IS_IN_CONFIG 52 +#define IS_NOT_IN_CONFIG 53 +#define MAN_NEARBY 54 +#define NO_MAN_NEARBY 55 +#define ADDING_MANDIRS 56 +#define CATNAME_IS 57 +#define NO_EXEC 58 +#define USAGE1 59 +#define USAGE2 60 +#define USAGE3 61 +#define USAGE4 62 +#define USAGE5 63 +#define USAGE6 64 +#define USAGE7 65 +#define USAGE8 66 +#define USER_CANNOT_OPEN_CAT 67 +#define USER_CAN_OPEN_CAT 68 +#define CANNOT_FORK 69 +#define WAIT_FAILED 70 +#define GOT_WRONG_PID 71 +#define CHILD_TERMINATED_ABNORMALLY 72 +#define IDENTICAL 73 +#define MAN_FOUND 74 +#define NO_TROFF 75 +#define NO_CAT_FOR_NONSTD_LL 76 +#define BROWSER_IS 77 +#define HTMLPAGER_IS 78 +#define FOUND_FILE 79 +#define CALLTRACE1 80 +#define CALLTRACE2 81 +#define NO_MATCH 82 +#define GLOB_FOR_FILE 83 +#define CALLTRACE3 84 +#define ABOUT_TO_GLOB 85 + +#define MAXMSG 85 diff --git a/src/gripes.c b/src/gripes.c new file mode 100644 index 0000000..505f8b8 --- /dev/null +++ b/src/gripes.c @@ -0,0 +1,139 @@ +#include +#include +#include + +#include "gripes.h" +#include "man.h" /* for progname */ + +extern char *msg[]; + +static char *mantexts = "man"; /* e.g. /usr/lib/locale/%L/man.cat */ + +#ifdef NONLS + +static char * +getmsg (int n) { + char *s; + + if (0 < n && n <= MAXMSG) + s = msg[n]; + else { + fprintf (stderr, "man: internal error - cannot find message %d\n", n); + exit (1); + } + return s; +} + +#else /* NONLS */ + +#include +#include +#include "../catopen/catopen.c" + +nl_catd catfd = (nl_catd) -1; +int cat_is_open = 0; + +static void +catinit (void) { + if (!cat_is_open) { +#ifdef NL_CAT_LOCALE + catfd = my_catopen(mantexts,NL_CAT_LOCALE); +#else + catfd = my_catopen(mantexts,0); +#endif + if (catfd == (nl_catd) -1) { + /* + * Only complain if LANG exists, and LANG != "en" + * (or when debugging). Also accept en_ZA etc. + * No messages for C locale. + */ + char *s, *lg; + s = getenv("NLSPATH"); + lg = getenv("LANG"); + if (!lg) + lg = getenv("LC_MESSAGES"); + if (!lg) + lg = getenv("LC_ALL"); + if (lg && strncmp(lg, "en", 2) && strcmp(lg, "C") && strcmp(lg, "POSIX")) { + fprintf(stderr, + "Cannot open the message catalog \"%s\" for locale \"%s\"\n" + "(NLSPATH=\"%s\")\n\n", + mantexts, lg, s ? s : ""); + } else if (debug) { + fprintf(stderr, +"Looked whether there exists a message catalog %s, but there is none\n" +"(and for English messages none is needed)\n\n", + mantexts); + } + } + } + cat_is_open = 1; +} + +/* + * This routine is unnecessary, but people ask for such things. + * + * Maybe man is suid or sgid to some user that owns the cat directories. + * Maybe NLSPATH can be manipulated by the user - even though + * modern glibc avoids using environment variables when the + * program is suid or sgid. + * So, maybe the string s that we are returning was user invented + * and we have to avoid %n and the like. + * + * As a random hack, only allow %s,%d,%o, and only two %-signs. + */ +static int +is_suspect (char *s) { + int ct = 0; + + while (*s) { + if (*s++ == '%') { + ct++; + if (*s != 's' && *s != 'd' && *s != 'o') + return 1; + } + } + return (ct > 2); +} + +static char * +getmsg (int n) { + char *s = ""; + + catinit (); + if (catfd != (nl_catd) -1) { + s = catgets(catfd, 1, n, ""); + if (*s && is_suspect(s)) + s = ""; + } + if (*s == 0 && 0 < n && n <= MAXMSG) + s = msg[n]; + if (*s == 0) { + fprintf(stderr, + "man: internal error - cannot find message %d\n", n); + exit (1); + } + return s; +} + +#endif /* NONLS */ + +void +gripe (int n, ...) { + va_list p; + + va_start(p, n); + vfprintf (stderr, getmsg(n), p); + va_end(p); + fflush (stderr); +} + +void +fatal (int n, ...) { + va_list p; + fprintf (stderr, "%s: ", progname); + va_start(p, n); + vfprintf (stderr, getmsg(n), p); + va_end(p); + exit (1); +} diff --git a/src/gripes.h b/src/gripes.h new file mode 100644 index 0000000..8699eca --- /dev/null +++ b/src/gripes.h @@ -0,0 +1,5 @@ +#include "gripedefs.h" + +void gripe (int n, ...); +void fatal (int n, ...); + diff --git a/src/join.c b/src/join.c new file mode 100644 index 0000000..1461ace --- /dev/null +++ b/src/join.c @@ -0,0 +1,28 @@ + +/* note: this routine frees its arguments! */ +char ** +my_join (char **np1, char **np2) { + int lth1, lth2; + char **p, **q, **np; + + if (np1 == NULL) + return np2; + if (np2 == NULL) + return np1; + lth1 = lth2 = 0; + for (p = np1; *p; p++) + lth1++; + for (p = np2; *p; p++) + lth2++; + p = np = (char **) my_malloc((lth1+lth2+1)*sizeof(*np)); + q = np1; + while(*q) + *p++ = *q++; + q = np2; + while(*q) + *p++ = *q++; + *p = 0; + free(np1); + free(np2); + return np; +} diff --git a/src/makemsg b/src/makemsg new file mode 100755 index 0000000..7c1893c Binary files /dev/null and b/src/makemsg differ diff --git a/src/makemsg.c b/src/makemsg.c new file mode 100644 index 0000000..34b3846 --- /dev/null +++ b/src/makemsg.c @@ -0,0 +1,175 @@ +/* makemsg.c - aeb - 940605 */ +/* + * Read a file input with lines + * LABEL "text" + * and either output two files: + * a file msgout.c with content char *msg[] = { "text", ... }; + * and a file msgout.h with content #define LABEL 1 + * or output a single file: + * a message catalog with lines 1 "text" + * + * The former two are used during compilation of the main program + * and give default (English) messages. The latter output file is + * input for gencat, and used in non-English locales. + * + * Call: + * makemsg input msgout.h msgout.c + * or + * makemsg -c input message_catalog + */ +#include +#include +#include +#ifdef __QNX__ +#include +#endif +extern char *index(const char *, int); +extern char *rindex(const char *, int); + +#define BUFSIZE 4096 + +#define whitespace(c) ((c) == ' ' || (c) == '\t' || (c) == '\n') + +static void +usage(void){ + fprintf (stderr, "call is: makemsg input msgout.h msgout.c\n"); + fprintf (stderr, "or: makemsg -c input catalog\n"); + exit (1); +} + +int +main(int argc, char **argv) { + FILE *fin, *foh, *foc; + char *s, *t; + char *infile, *outcfile, *outhfile; + char buf[BUFSIZE]; + int defct = 0; + int makecat = 0; + +#define getbuf if (fgets (buf, sizeof(buf), fin) == NULL) {\ + fprintf (stderr, "makemsg: unexpected end of input\n");\ + fprintf (stderr, "[output file(s) removed]\n");\ + unlink (outcfile);\ + if (!makecat) unlink (outhfile);\ + exit (1);\ + } + + if (argc != 4) + usage (); + + outhfile = 0; foh = 0; /* just to keep gcc happy */ + + if (!strcmp(argv[1], "-c")) { + makecat = 1; + infile = argv[2]; + outcfile = argv[3]; + } else { + infile = argv[1]; + outhfile = argv[2]; + outcfile = argv[3]; + } + + fin = fopen (infile, "r"); + if (!fin) { + perror (infile); + fprintf (stderr, "makemsg: cannot open input file %s\n", infile); + usage (); + } + + /* help people not to confuse the order of these args */ + if (!makecat) { + s = rindex(outhfile, '.'); + if (!s || s[1] != 'h') { + fprintf (stderr, "defines output file should have name ending in .h\n"); + usage (); + } + s = rindex(outcfile, '.'); + if (!s || s[1] != 'c') { + fprintf (stderr, "string output file should have name ending in .c\n"); + usage (); + } + } + + if (!makecat) { + foh = fopen (outhfile, "w"); + if (!foh) { + perror (argv[1]); + fprintf (stderr, "makemsg: cannot open output file %s\n", outhfile); + usage (); + } + } + foc = fopen (outcfile, "w"); + if (!foc) { + perror (argv[2]); + fprintf (stderr, "makemsg: cannot open output file %s\n", outcfile); + usage (); + } + + if (makecat) + fputs ("$quote \"\n$set 1\n", foc); + else + fputs ("char *msg[] = {\n \"\",\n", foc); + + while (fgets (buf, sizeof(buf), fin) != NULL) { + char ss; + + /* skip leading blanks and blank lines */ + s = buf; + while (whitespace(*s)) + s++; + if (*s == 0) + continue; + + /* extract label part */ + t = s; + while (*s && !whitespace(*s)) + s++; + ss = *s; + *s = 0; + if (makecat) { + /* the format here used to be "%d ", but that breaks + glibc-2.1.2 gencat */ + fprintf (foc, "%d ", ++defct); /* gencat cannot handle %2d */ + } else { + fprintf (foh, "#define %s %d\n", t, ++defct); + fprintf (foc, "/* %2d */ ", defct); + } + *s = ss; + + /* skip blanks and newlines until string found */ + while (whitespace(*s) || *s == 0) { + if (*s == 0) { + getbuf; + s = buf; + } else + s++; + } + + /* output string - it may extend over several lines */ + while ((t = index(s, '\n')) == NULL || (t > buf && t[-1] == '\\')) { + fputs (s, foc); + getbuf; + s = buf; + } + *t = 0; + fputs (s, foc); + if (makecat) + fputs ("\n", foc); + else + fputs (",\n", foc); + } + + if (!makecat) { + fputs ("};\n", foc); + fprintf (foh, "\n#define MAXMSG %d\n", defct); + } + + if (!makecat) { + fclose (foh); + } + + fclose (foc); + fclose (fin); + + return 0; +} diff --git a/src/makewhatis b/src/makewhatis new file mode 100755 index 0000000..639d488 --- /dev/null +++ b/src/makewhatis @@ -0,0 +1,460 @@ +#!/bin/sh +# Generated automatically from makewhatis.in by the +# configure script. +# +#!/bin/sh +# makewhatis: create the whatis database +# Created: Sun Jun 14 10:49:37 1992 +# Revised: Sat Jan 8 14:12:37 1994 by faith@cs.unc.edu +# Revised: Sat Mar 23 17:56:18 1996 by micheal@actrix.gen.nz +# Copyright 1992, 1993, 1994 Rickard E. Faith (faith@cs.unc.edu) +# May be freely distributed and modified as long as copyright is retained. +# +# Wed Dec 23 13:27:50 1992: Rik Faith (faith@cs.unc.edu) applied changes +# based on Mitchum DSouza (mitchum.dsouza@mrc-apu.cam.ac.uk) cat patches. +# Also, cleaned up code and make it work with NET-2 doc pages. +# +# makewhatis-1.4: aeb 940802, 941007, 950417 +# Fixed so that the -c option works correctly for the cat pages +# on my machine. Fix for -u by Nan Zou (nan@ksu.ksu.edu). +# Many minor changes. +# The -s option is undocumented, and may well disappear again. +# +# Sat Mar 23 1996: Michael Hamilton (michael@actrix.gen.nz). +# I changed the script to invoke gawk only once for each directory tree. +# This speeds things up considerably (from 30 minutes down to 1.5 minutes +# on my 486DX66). +# 960401 - aeb: slight adaptation to work correctly with cat pages. +# 960510 - added fixes by brennan@raven.ca.boeing.com, author of mawk. +# 971012 - replaced "test -z" - it doesnt work on SunOS 4.1.3_U1. +# 980710 - be more careful with TMPFILE. +# 000323 - do not change PATH, better treatment of catpages - Bryan Henderson. +# 011117 - avoid suspicious filenames. +# 030310 - find files only; fix LAPACK cruft; no /usr/man default; +# use /dev/stderr instead of /dev/tty; handle files with strange names; +# add support for chinese, hungarian, indonesian, japanese, korean, +# polish, russian (Thierry Vignaud). +# +# makewhatis 1.6: Federico Lucifredi +# 060608 - Corrected traps. +# 060719 - section choosing behavior to match man's (Mike frysinger). +# +# Note for Slackware users: "makewhatis -v -w -c" will work. +# +# makewhatis flc 060719 (from man-1.6g) + +program=`basename $0` + +# In case both /usr/man and /usr/share/man exist, the former is local +# and should be first. +# It is a bug to add /var/cache/man to DEFCATPATH. +dm= +for d in /usr/man /usr/share/man /usr/X11R6/man /usr/local/man +do + if [ -d $d ]; then + if [ x$dm = x ]; then dm=$d; else dm=$dm:$d; fi + fi +done +DEFMANPATH=$dm +dc= +for d in /usr/man/preformat /usr/man /usr/share/man/preformat /usr/share/man +do + if [ -d $d ]; then + if [ x$dc = x ]; then dc=$d; else dc=$dc:$d; fi + fi +done +DEFCATPATH=$dc + +# In case /usr is read-only, make /usr/foo/whatis (etc) a symlink to +# something like /var/cache/man/foo-whatis. +# Some distributions make a single big /var/cache/man/whatis file, +# but that leads to problems and bugs. + +# AWK=/usr/bin/gawk +AWK=/usr/bin/awk + +# Find a place for our temporary files. If security is not a concern, use +# TMPFILE=/tmp/whatis$$; TMPFILEDIR=none +# Of course makewhatis should only have the required permissions +# (for reading and writing directories like /usr/man). +# We try here to be careful (and avoid preconstructed symlinks) +# in case makewhatis is run as root, by creating a subdirectory of /tmp. + +TMPFILEDIR=/tmp/whatis.tmp.dir.$$ +rm -rf $TMPFILEDIR +if ! mkdir -m 0700 $TMPFILEDIR; then + echo Could not create $TMPFILEDIR + exit 1; +fi +TMPFILE=$TMPFILEDIR/w + +# make sure TMPFILEDIR is deleted if program is killed or terminates +# (just delete this line if your shell doesnt know about trap) +trap "rm -rf $TMPFILEDIR" 0 +trap "rm -rf $TMPFILEDIR; exit 255" 1 2 3 15 + +# default find arg: no directories, no empty files +findarg0="-type f -size +0" + +topath=manpath + +defmanpath=$DEFMANPATH +defcatpath= + +if [ -n "$MANSECT" ]; then + sections=$MANSECT +else + sections=`$AWK '($1 == "MANSECT") { print $2 }' /usr/share/misc/man.conf` + if [ x"$sections" = x ]; then + sections="1:1p:8:2:3:3p:4:5:6:7:9:0p:tcl:n:l:p:o" + fi +fi +sections=`echo $sections | sed -e 's/:/ /g'` + +for name in "$@" +do +if [ -n "$setsections" ]; then + setsections= + sections=$name + continue +fi +case $name in + --version|-V) + echo "$program from man-1.6g" + exit 0;; + -c) topath=catpath + defmanpath= + defcatpath=$DEFCATPATH + continue;; + -s) setsections=1 + continue;; + -u) findarg="-ctime 0" + update=1 + continue;; + -v) verbose=1 + continue;; + -w) manpath=`man --path` + catpath=$manpath + continue;; + -*) echo "Usage: makewhatis [-s sections] [-u] [-v] [-w] [manpath] [-c [catpath]]" + echo " This will build the whatis database for the man pages" + echo " found in manpath and the cat pages found in catpath." + echo " -s: sections (default: $sections)" + echo " -u: update database with new pages" + echo " -v: verbose" + echo " -w: use manpath obtained from \`man --path\`" + echo " [manpath]: man directories (default: $DEFMANPATH)" + echo " [catpath]: cat directories (default: the first existing" + echo " directory in $DEFCATPATH)" + exit;; + *) if [ -d $name ] + then + eval $topath="\$$topath":$name + else + echo "No such directory $name" + exit + fi;; +esac +done + +manpath=`echo ${manpath-$defmanpath} | tr : ' '` +if [ x"$catpath" = x ]; then + for d in `echo $defcatpath | tr : ' '` + do + if [ -d $d ]; then catpath=$d; break; fi + done +fi +catpath=`echo ${catpath} | tr : ' '` + +# first truncate all the whatis files that will be created new, +# then only update - we might visit the same directory twice +if [ x$update = x ]; then + for pages in man cat + do + eval path="\$$pages"path + for mandir in $path + do + cp /dev/null $mandir/whatis + done + done +fi + +for pages in man cat +do + export pages + eval path="\$$pages"path + for mandir in $path + do + if [ x$verbose != x ]; then + echo "about to enter $mandir" > /dev/stderr + fi + + # kludge for Slackware's /usr/man/preformat + if [ $mandir = /usr/man/preformat ] + then + mandir1=/usr/man + else + mandir1=$mandir + fi + + # if $mandir is on a readonly partition, and the whatis file + # is not a symlink, then let's skip trying to update it + if [ ! -L ${mandir1}/whatis ] + then + if [ -e ${mandir1}/whatis ] && [ ! -w ${mandir1}/whatis ] + then + if [ x$verbose != x ]; then + echo skipping $mandir - whatis file is readonly > /dev/stderr + fi + continue + elif [ ! -e ${mandir1}/whatis ] && [ ! -w ${mandir1} ] + then + if [ x$verbose != x ]; then + echo skipping $mandir - directory is readonly > /dev/stderr + fi + continue + fi + fi + + if [ -s ${mandir}/whatis -a $pages = man -a x$update = x ]; then + if [ x$verbose != x ]; then + echo skipping $mandir - we did it already > /dev/stderr + fi + else + here=`pwd` + cd $mandir + for i in $sections + do + if [ -d ${pages}$i ] + then + cd ${pages}$i + section=$i + curdir=$mandir/${pages}$i + export section verbose curdir + find $mandir/${pages}$i/. -name '*' $findarg0 $findarg -print | $AWK ' + + function readline() { + if (use_zcat || use_bzcat || use_lzcat) { + result = (pipe_cmd | getline); + if (result < 0) { + print "Pipe error: " pipe_cmd " " ERRNO > "/dev/stderr"; + } + } else { + result = (getline < filename); + if (result < 0) { + print "Read file error: " filename " " ERRNO > "/dev/stderr"; + } + } + return result; + } + + function closeline() { + if (use_zcat || use_bzcat || use_lzcat) { + return close(pipe_cmd); + } else { + return close(filename); + } + } + + function do_one() { + insh = 0; thisjoin = 1; done = 0; + entire_line = ""; + + if (verbose) { + print "adding " filename > "/dev/stderr" + } + + use_zcat = match(filename,"\\.Z$") || + match(filename,"\\.z$") || match(filename,"\\.gz$"); + if (!use_zcat) + use_bzcat = match(filename,"\\.bz2"); + if(!use_bzcat) + use_lzcat = match(filename,"\\.lzma"); + if (use_zcat || use_bzcat || use_lzcat ) { + filename_no_gz = substr(filename, 0, RSTART - 1); + } else { + filename_no_gz = filename; + } + match(filename_no_gz, "/[^/]+$"); + progname = substr(filename, RSTART + 1, RLENGTH - 1); + if (match(progname, "\\." section "[A-Za-z]+")) { + actual_section = substr(progname, RSTART + 1, RLENGTH - 1); + } else { + actual_section = section; + } + sub(/\..*/, "", progname); + if (use_zcat || use_bzcat || use_lzcat) { + if (use_zcat) { + pipe_cmd = "zcat \"" filename "\""; + } else if (use_bzcat) { + pipe_cmd = "bzcat \"" filename "\""; + } else { + pipe_cmd = "lzcat \"" filename "\""; + } + # try to avoid suspicious stuff + if (filename ~ /[;&|`$(]/) { + print "ignored strange file name " filename " in " curdir > "/dev/stderr"; + return; + } + } + + while (!done && readline() > 0) { + gsub(/.\b/, ""); + if (($1 ~ /^\.[Ss][Hh]/ && + ($2 ~ /[Nn][Aa][Mm][Ee]/ || + $2 ~ /^JMNO/ || $2 ~ /^NAVN/ || $2 ~ /^NUME/ || + $2 ~ /^BEZEICHNUNG/ || $2 ~ /^NOMBRE/ || + $2 ~ /^NIMI/ || $2 ~ /^NOM/ || $2 ~ /^IME/ || + $2 ~ /^N[E]V/ || $2 ~ /^NAMA/ || $2 ~ /^̾/ || + $2 ~ /^̾/ || $2 ~ /^̸/ || $2 ~ /^NAZWA/ || + $2 ~ /^/ || $2 ~ /^/ || $2 ~ /^W/ || + $2 ~ /^NOME/ || $2 ~ /^NAAM/ || $2 ~ /^/)) || + (pages == "cat" && $1 ~ /^NAME/)) { + if (!insh) { + insh = 1; + } else { + done = 1; + } + } else if (insh) { + if ($1 ~ /^\.[Ss][HhYS]/ || + (pages == "cat" && + ($1 ~ /^S[yYeE]/ || $1 ~ /^DESCRIPTION/ || + $1 ~ /^COMMAND/ || $1 ~ /^OVERVIEW/ || + $1 ~ /^STRUCTURES/ || $1 ~ /^INTRODUCTION/ || + $0 ~ /^[^ ]/))) { + # end insh for Synopsis, Syntax, but also for + # DESCRIPTION (e.g., XFree86.1x), + # COMMAND (e.g., xspread.1) + # OVERVIEW (e.g., TclCommandWriting.3) + # STRUCTURES (e.g., XEvent.3x) + # INTRODUCTION (e.g., TclX.n) + # and anything at all that begins in Column 1, so + # is probably a section header. + done = 1; + } else { + if ($0 ~ progname"-") { # Fix old cat pages + sub(progname"-", progname" - "); + } + if ($0 ~ /[^ \\]-$/) { + sub(/-$/, ""); # Handle Hyphenations + nextjoin = 1; + } else if ($0 ~ /\\c$/) { + sub(/\\c$/, ""); # Handle Continuations + nextjoin = 1; + } else + nextjoin = 0; + + sub(/^.[IB] /, ""); # Kill bold and italics + sub(/^.BI /, ""); # + sub(/^.SM /, ""); # Kill small + sub(/^.Nm /, ""); # Kill bold + sub(/^.Tn /, ""); # Kill normal + sub(/^.Li /, ""); # Kill .Li + sub(/^.Dq /, ""); # Kill .Dq + sub(/^.Nd */, "- "); # Convert .Nd to dash + sub(/\\\".*/, ""); # Trim pending comments + sub(/ *$/, ""); # Trim pending spaces + sub(/^\.$/, ""); # Kill blank comments + sub(/^'"'"'.*/, ""); # Kill comment/troff lines + sub(/^.in .*/, ""); # Kill various macros + sub(/^.ti .*/, ""); + sub(/^.ta .*/, ""); + sub(/^.Vb .*/, ""); + sub(/^.[PLTH]P$/, ""); # .PP/.LP/.TP/.HP + sub(/^.Pp$/, ""); + sub(/^.[iI]X .*$/, ""); + sub(/^.nolinks$/, ""); + sub(/^.B$/, ""); + sub(/^.nf$/, ""); + + if (($1 ~ /^\.../ || $1 == "") && + (entire_line ~ / - / || entire_line ~ / \\- /)) { + # Assume that this ends the description of one line + # Sometimes there are several descriptions in one page, + # as in outb(2). + handle_entire_line(); + entire_line = ""; + thisjoin = 1; + } else { + if (thisjoin) { + entire_line = entire_line $0; + } else { + entire_line = entire_line " " $0; + } + thisjoin = nextjoin; + } + } + } + } + handle_entire_line(); + closeline(); + } + + function handle_entire_line() { + x = entire_line; # Keep it short + + gsub(/\015/, "", x); # Kill DOS remains + gsub(/ /, " ", x); # Translate tabs to spaces + gsub(/ +/, " ", x); # Collapse spaces + gsub(/ *, */, ", ", x); # Fix comma spacings + sub(/^ /, "", x); # Kill initial spaces + sub(/ $/, "", x); # Kill trailing spaces + sub(/__+/, "_", x); # Collapse underscores + + gsub(/\\f\(../, "", x); # Kill font changes + gsub(/\\f[PRIB0123]/, "", x); # Kill font changes + gsub(/\\s[-+0-9]*/, "", x); # Kill size changes + gsub(/\\&/, "", x); # Kill \& + gsub(/\\\|/, "", x); # Kill \| + gsub(/\\\((ru|ul)/, "_", x); # Translate + gsub(/\\\((mi|hy|em)/, "-", x); # Translate + gsub(/\\\*\(../, "", x); # Kill troff strings + gsub(/\\/, "", x); # Kill all backslashes + gsub(/"/, "", x); # Kill quotes (from .Nd "foo bar") + sub(/

    /, "", x);# Yuk! HTML cruft + gsub(/\000.*/, "X", x); # Binary cruft in LAPACK pages + gsub(/ +/, " ", x); # Collapse spaces (again) + sub(/^ /, "", x); # Kill initial spaces (again) + sub(/ $/, "", x); # Kill trailing spaces (again) + sub(/\.$/, "", x); # Kill trailing period + + if (!match(x, / - /)) + return; + + after_dash = substr(x, RSTART); + head = substr(x, 1, RSTART-1) ", "; + while (match(head, /, /)) { + prog = substr(head, 1, RSTART-1); + head = substr(head, RSTART+2); + if (prog != progname) + prog = prog " [" progname "]"; + printf "%-*s (%s) %s\n", 20, prog, actual_section, after_dash; + } + } + + { # Main action - process each filename read in. + filename = $0; + do_one(); + } + ' pages=$pages section=$section verbose=$verbose curdir=$curdir + cd .. + fi + done > $TMPFILE + + cd "$here" + + if [ -f ${mandir1}/whatis ] + then + cat ${mandir1}/whatis >> $TMPFILE + fi + tr -s '\n' < $TMPFILE | sort -u > ${mandir1}/whatis + + chmod 644 ${mandir1}/whatis + rm $TMPFILE + fi + done +done + +# remove tempdir +rm -rf $TMPFILEDIR + diff --git a/src/makewhatis.in b/src/makewhatis.in new file mode 100644 index 0000000..5665feb --- /dev/null +++ b/src/makewhatis.in @@ -0,0 +1,456 @@ +#!/bin/sh +# makewhatis: create the whatis database +# Created: Sun Jun 14 10:49:37 1992 +# Revised: Sat Jan 8 14:12:37 1994 by faith@cs.unc.edu +# Revised: Sat Mar 23 17:56:18 1996 by micheal@actrix.gen.nz +# Copyright 1992, 1993, 1994 Rickard E. Faith (faith@cs.unc.edu) +# May be freely distributed and modified as long as copyright is retained. +# +# Wed Dec 23 13:27:50 1992: Rik Faith (faith@cs.unc.edu) applied changes +# based on Mitchum DSouza (mitchum.dsouza@mrc-apu.cam.ac.uk) cat patches. +# Also, cleaned up code and make it work with NET-2 doc pages. +# +# makewhatis-1.4: aeb 940802, 941007, 950417 +# Fixed so that the -c option works correctly for the cat pages +# on my machine. Fix for -u by Nan Zou (nan@ksu.ksu.edu). +# Many minor changes. +# The -s option is undocumented, and may well disappear again. +# +# Sat Mar 23 1996: Michael Hamilton (michael@actrix.gen.nz). +# I changed the script to invoke gawk only once for each directory tree. +# This speeds things up considerably (from 30 minutes down to 1.5 minutes +# on my 486DX66). +# 960401 - aeb: slight adaptation to work correctly with cat pages. +# 960510 - added fixes by brennan@raven.ca.boeing.com, author of mawk. +# 971012 - replaced "test -z" - it doesnt work on SunOS 4.1.3_U1. +# 980710 - be more careful with TMPFILE. +# 000323 - do not change PATH, better treatment of catpages - Bryan Henderson. +# 011117 - avoid suspicious filenames. +# 030310 - find files only; fix LAPACK cruft; no /usr/man default; +# use /dev/stderr instead of /dev/tty; handle files with strange names; +# add support for chinese, hungarian, indonesian, japanese, korean, +# polish, russian (Thierry Vignaud). +# +# makewhatis 1.6: Federico Lucifredi +# 060608 - Corrected traps. +# 060719 - section choosing behavior to match man's (Mike frysinger). +# +# Note for Slackware users: "makewhatis -v -w -c" will work. +# +# makewhatis flc 060719 (from @version@) + +program=`basename $0` + +# In case both /usr/man and /usr/share/man exist, the former is local +# and should be first. +# It is a bug to add /var/cache/man to DEFCATPATH. +dm= +for d in /usr/man /usr/share/man /usr/X11R6/man /usr/local/man +do + if [ -d $d ]; then + if [ x$dm = x ]; then dm=$d; else dm=$dm:$d; fi + fi +done +DEFMANPATH=$dm +dc= +for d in /usr/man/preformat /usr/man /usr/share/man/preformat /usr/share/man +do + if [ -d $d ]; then + if [ x$dc = x ]; then dc=$d; else dc=$dc:$d; fi + fi +done +DEFCATPATH=$dc + +# In case /usr is read-only, make /usr/foo/whatis (etc) a symlink to +# something like /var/cache/man/foo-whatis. +# Some distributions make a single big /var/cache/man/whatis file, +# but that leads to problems and bugs. + +# AWK=/usr/bin/gawk +AWK=@awk@ + +# Find a place for our temporary files. If security is not a concern, use +# TMPFILE=/tmp/whatis$$; TMPFILEDIR=none +# Of course makewhatis should only have the required permissions +# (for reading and writing directories like /usr/man). +# We try here to be careful (and avoid preconstructed symlinks) +# in case makewhatis is run as root, by creating a subdirectory of /tmp. + +TMPFILEDIR=/tmp/whatis.tmp.dir.$$ +rm -rf $TMPFILEDIR +if ! mkdir -m 0700 $TMPFILEDIR; then + echo Could not create $TMPFILEDIR + exit 1; +fi +TMPFILE=$TMPFILEDIR/w + +# make sure TMPFILEDIR is deleted if program is killed or terminates +# (just delete this line if your shell doesnt know about trap) +trap "rm -rf $TMPFILEDIR" 0 +trap "rm -rf $TMPFILEDIR; exit 255" 1 2 3 15 + +# default find arg: no directories, no empty files +findarg0="-type f -size +0" + +topath=manpath + +defmanpath=$DEFMANPATH +defcatpath= + +if [ -n "$MANSECT" ]; then + sections=$MANSECT +else + sections=`$AWK '($1 == "MANSECT") { print $2 }' @man_config_file@` + if [ x"$sections" = x ]; then + sections="@sections@" + fi +fi +sections=`echo $sections | sed -e 's/:/ /g'` + +for name in "$@" +do +if [ -n "$setsections" ]; then + setsections= + sections=$name + continue +fi +case $name in + --version|-V) + echo "$program from @version@" + exit 0;; + -c) topath=catpath + defmanpath= + defcatpath=$DEFCATPATH + continue;; + -s) setsections=1 + continue;; + -u) findarg="-ctime 0" + update=1 + continue;; + -v) verbose=1 + continue;; + -w) manpath=`man --path` + catpath=$manpath + continue;; + -*) echo "Usage: makewhatis [-s sections] [-u] [-v] [-w] [manpath] [-c [catpath]]" + echo " This will build the whatis database for the man pages" + echo " found in manpath and the cat pages found in catpath." + echo " -s: sections (default: $sections)" + echo " -u: update database with new pages" + echo " -v: verbose" + echo " -w: use manpath obtained from \`man --path\`" + echo " [manpath]: man directories (default: $DEFMANPATH)" + echo " [catpath]: cat directories (default: the first existing" + echo " directory in $DEFCATPATH)" + exit;; + *) if [ -d $name ] + then + eval $topath="\$$topath":$name + else + echo "No such directory $name" + exit + fi;; +esac +done + +manpath=`echo ${manpath-$defmanpath} | tr : ' '` +if [ x"$catpath" = x ]; then + for d in `echo $defcatpath | tr : ' '` + do + if [ -d $d ]; then catpath=$d; break; fi + done +fi +catpath=`echo ${catpath} | tr : ' '` + +# first truncate all the whatis files that will be created new, +# then only update - we might visit the same directory twice +if [ x$update = x ]; then + for pages in man cat + do + eval path="\$$pages"path + for mandir in $path + do + cp /dev/null $mandir/whatis + done + done +fi + +for pages in man cat +do + export pages + eval path="\$$pages"path + for mandir in $path + do + if [ x$verbose != x ]; then + echo "about to enter $mandir" > /dev/stderr + fi + + # kludge for Slackware's /usr/man/preformat + if [ $mandir = /usr/man/preformat ] + then + mandir1=/usr/man + else + mandir1=$mandir + fi + + # if $mandir is on a readonly partition, and the whatis file + # is not a symlink, then let's skip trying to update it + if [ ! -L ${mandir1}/whatis ] + then + if [ -e ${mandir1}/whatis ] && [ ! -w ${mandir1}/whatis ] + then + if [ x$verbose != x ]; then + echo skipping $mandir - whatis file is readonly > /dev/stderr + fi + continue + elif [ ! -e ${mandir1}/whatis ] && [ ! -w ${mandir1} ] + then + if [ x$verbose != x ]; then + echo skipping $mandir - directory is readonly > /dev/stderr + fi + continue + fi + fi + + if [ -s ${mandir}/whatis -a $pages = man -a x$update = x ]; then + if [ x$verbose != x ]; then + echo skipping $mandir - we did it already > /dev/stderr + fi + else + here=`pwd` + cd $mandir + for i in $sections + do + if [ -d ${pages}$i ] + then + cd ${pages}$i + section=$i + curdir=$mandir/${pages}$i + export section verbose curdir + find $mandir/${pages}$i/. -name '*' $findarg0 $findarg -print | $AWK ' + + function readline() { + if (use_zcat || use_bzcat || use_lzcat) { + result = (pipe_cmd | getline); + if (result < 0) { + print "Pipe error: " pipe_cmd " " ERRNO > "/dev/stderr"; + } + } else { + result = (getline < filename); + if (result < 0) { + print "Read file error: " filename " " ERRNO > "/dev/stderr"; + } + } + return result; + } + + function closeline() { + if (use_zcat || use_bzcat || use_lzcat) { + return close(pipe_cmd); + } else { + return close(filename); + } + } + + function do_one() { + insh = 0; thisjoin = 1; done = 0; + entire_line = ""; + + if (verbose) { + print "adding " filename > "/dev/stderr" + } + + use_zcat = match(filename,"\\.Z$") || + match(filename,"\\.z$") || match(filename,"\\.gz$"); + if (!use_zcat) + use_bzcat = match(filename,"\\.bz2"); + if(!use_bzcat) + use_lzcat = match(filename,"\\.lzma"); + if (use_zcat || use_bzcat || use_lzcat ) { + filename_no_gz = substr(filename, 0, RSTART - 1); + } else { + filename_no_gz = filename; + } + match(filename_no_gz, "/[^/]+$"); + progname = substr(filename, RSTART + 1, RLENGTH - 1); + if (match(progname, "\\." section "[A-Za-z]+")) { + actual_section = substr(progname, RSTART + 1, RLENGTH - 1); + } else { + actual_section = section; + } + sub(/\..*/, "", progname); + if (use_zcat || use_bzcat || use_lzcat) { + if (use_zcat) { + pipe_cmd = "zcat \"" filename "\""; + } else if (use_bzcat) { + pipe_cmd = "bzcat \"" filename "\""; + } else { + pipe_cmd = "lzcat \"" filename "\""; + } + # try to avoid suspicious stuff + if (filename ~ /[;&|`$(]/) { + print "ignored strange file name " filename " in " curdir > "/dev/stderr"; + return; + } + } + + while (!done && readline() > 0) { + gsub(/.\b/, ""); + if (($1 ~ /^\.[Ss][Hh]/ && + ($2 ~ /[Nn][Aa][Mm][Ee]/ || + $2 ~ /^JMNO/ || $2 ~ /^NAVN/ || $2 ~ /^NUME/ || + $2 ~ /^BEZEICHNUNG/ || $2 ~ /^NOMBRE/ || + $2 ~ /^NIMI/ || $2 ~ /^NOM/ || $2 ~ /^IME/ || + $2 ~ /^N[E]V/ || $2 ~ /^NAMA/ || $2 ~ /^̾/ || + $2 ~ /^̾/ || $2 ~ /^̸/ || $2 ~ /^NAZWA/ || + $2 ~ /^/ || $2 ~ /^/ || $2 ~ /^W/ || + $2 ~ /^NOME/ || $2 ~ /^NAAM/ || $2 ~ /^/)) || + (pages == "cat" && $1 ~ /^NAME/)) { + if (!insh) { + insh = 1; + } else { + done = 1; + } + } else if (insh) { + if ($1 ~ /^\.[Ss][HhYS]/ || + (pages == "cat" && + ($1 ~ /^S[yYeE]/ || $1 ~ /^DESCRIPTION/ || + $1 ~ /^COMMAND/ || $1 ~ /^OVERVIEW/ || + $1 ~ /^STRUCTURES/ || $1 ~ /^INTRODUCTION/ || + $0 ~ /^[^ ]/))) { + # end insh for Synopsis, Syntax, but also for + # DESCRIPTION (e.g., XFree86.1x), + # COMMAND (e.g., xspread.1) + # OVERVIEW (e.g., TclCommandWriting.3) + # STRUCTURES (e.g., XEvent.3x) + # INTRODUCTION (e.g., TclX.n) + # and anything at all that begins in Column 1, so + # is probably a section header. + done = 1; + } else { + if ($0 ~ progname"-") { # Fix old cat pages + sub(progname"-", progname" - "); + } + if ($0 ~ /[^ \\]-$/) { + sub(/-$/, ""); # Handle Hyphenations + nextjoin = 1; + } else if ($0 ~ /\\c$/) { + sub(/\\c$/, ""); # Handle Continuations + nextjoin = 1; + } else + nextjoin = 0; + + sub(/^.[IB] /, ""); # Kill bold and italics + sub(/^.BI /, ""); # + sub(/^.SM /, ""); # Kill small + sub(/^.Nm /, ""); # Kill bold + sub(/^.Tn /, ""); # Kill normal + sub(/^.Li /, ""); # Kill .Li + sub(/^.Dq /, ""); # Kill .Dq + sub(/^.Nd */, "- "); # Convert .Nd to dash + sub(/\\\".*/, ""); # Trim pending comments + sub(/ *$/, ""); # Trim pending spaces + sub(/^\.$/, ""); # Kill blank comments + sub(/^'"'"'.*/, ""); # Kill comment/troff lines + sub(/^.in .*/, ""); # Kill various macros + sub(/^.ti .*/, ""); + sub(/^.ta .*/, ""); + sub(/^.Vb .*/, ""); + sub(/^.[PLTH]P$/, ""); # .PP/.LP/.TP/.HP + sub(/^.Pp$/, ""); + sub(/^.[iI]X .*$/, ""); + sub(/^.nolinks$/, ""); + sub(/^.B$/, ""); + sub(/^.nf$/, ""); + + if (($1 ~ /^\.../ || $1 == "") && + (entire_line ~ / - / || entire_line ~ / \\- /)) { + # Assume that this ends the description of one line + # Sometimes there are several descriptions in one page, + # as in outb(2). + handle_entire_line(); + entire_line = ""; + thisjoin = 1; + } else { + if (thisjoin) { + entire_line = entire_line $0; + } else { + entire_line = entire_line " " $0; + } + thisjoin = nextjoin; + } + } + } + } + handle_entire_line(); + closeline(); + } + + function handle_entire_line() { + x = entire_line; # Keep it short + + gsub(/\015/, "", x); # Kill DOS remains + gsub(/ /, " ", x); # Translate tabs to spaces + gsub(/ +/, " ", x); # Collapse spaces + gsub(/ *, */, ", ", x); # Fix comma spacings + sub(/^ /, "", x); # Kill initial spaces + sub(/ $/, "", x); # Kill trailing spaces + sub(/__+/, "_", x); # Collapse underscores + + gsub(/\\f\(../, "", x); # Kill font changes + gsub(/\\f[PRIB0123]/, "", x); # Kill font changes + gsub(/\\s[-+0-9]*/, "", x); # Kill size changes + gsub(/\\&/, "", x); # Kill \& + gsub(/\\\|/, "", x); # Kill \| + gsub(/\\\((ru|ul)/, "_", x); # Translate + gsub(/\\\((mi|hy|em)/, "-", x); # Translate + gsub(/\\\*\(../, "", x); # Kill troff strings + gsub(/\\/, "", x); # Kill all backslashes + gsub(/"/, "", x); # Kill quotes (from .Nd "foo bar") + sub(/

    /, "", x);# Yuk! HTML cruft + gsub(/\000.*/, "X", x); # Binary cruft in LAPACK pages + gsub(/ +/, " ", x); # Collapse spaces (again) + sub(/^ /, "", x); # Kill initial spaces (again) + sub(/ $/, "", x); # Kill trailing spaces (again) + sub(/\.$/, "", x); # Kill trailing period + + if (!match(x, / - /)) + return; + + after_dash = substr(x, RSTART); + head = substr(x, 1, RSTART-1) ", "; + while (match(head, /, /)) { + prog = substr(head, 1, RSTART-1); + head = substr(head, RSTART+2); + if (prog != progname) + prog = prog " [" progname "]"; + printf "%-*s (%s) %s\n", 20, prog, actual_section, after_dash; + } + } + + { # Main action - process each filename read in. + filename = $0; + do_one(); + } + ' pages=$pages section=$section verbose=$verbose curdir=$curdir + cd .. + fi + done > $TMPFILE + + cd "$here" + + if [ -f ${mandir1}/whatis ] + then + cat ${mandir1}/whatis >> $TMPFILE + fi + tr -s '\n' < $TMPFILE | sort -u > ${mandir1}/whatis + + chmod 644 ${mandir1}/whatis + rm $TMPFILE + fi + done +done + +# remove tempdir +rm -rf $TMPFILEDIR + diff --git a/src/makewhatis.sh b/src/makewhatis.sh new file mode 100644 index 0000000..5665feb --- /dev/null +++ b/src/makewhatis.sh @@ -0,0 +1,456 @@ +#!/bin/sh +# makewhatis: create the whatis database +# Created: Sun Jun 14 10:49:37 1992 +# Revised: Sat Jan 8 14:12:37 1994 by faith@cs.unc.edu +# Revised: Sat Mar 23 17:56:18 1996 by micheal@actrix.gen.nz +# Copyright 1992, 1993, 1994 Rickard E. Faith (faith@cs.unc.edu) +# May be freely distributed and modified as long as copyright is retained. +# +# Wed Dec 23 13:27:50 1992: Rik Faith (faith@cs.unc.edu) applied changes +# based on Mitchum DSouza (mitchum.dsouza@mrc-apu.cam.ac.uk) cat patches. +# Also, cleaned up code and make it work with NET-2 doc pages. +# +# makewhatis-1.4: aeb 940802, 941007, 950417 +# Fixed so that the -c option works correctly for the cat pages +# on my machine. Fix for -u by Nan Zou (nan@ksu.ksu.edu). +# Many minor changes. +# The -s option is undocumented, and may well disappear again. +# +# Sat Mar 23 1996: Michael Hamilton (michael@actrix.gen.nz). +# I changed the script to invoke gawk only once for each directory tree. +# This speeds things up considerably (from 30 minutes down to 1.5 minutes +# on my 486DX66). +# 960401 - aeb: slight adaptation to work correctly with cat pages. +# 960510 - added fixes by brennan@raven.ca.boeing.com, author of mawk. +# 971012 - replaced "test -z" - it doesnt work on SunOS 4.1.3_U1. +# 980710 - be more careful with TMPFILE. +# 000323 - do not change PATH, better treatment of catpages - Bryan Henderson. +# 011117 - avoid suspicious filenames. +# 030310 - find files only; fix LAPACK cruft; no /usr/man default; +# use /dev/stderr instead of /dev/tty; handle files with strange names; +# add support for chinese, hungarian, indonesian, japanese, korean, +# polish, russian (Thierry Vignaud). +# +# makewhatis 1.6: Federico Lucifredi +# 060608 - Corrected traps. +# 060719 - section choosing behavior to match man's (Mike frysinger). +# +# Note for Slackware users: "makewhatis -v -w -c" will work. +# +# makewhatis flc 060719 (from @version@) + +program=`basename $0` + +# In case both /usr/man and /usr/share/man exist, the former is local +# and should be first. +# It is a bug to add /var/cache/man to DEFCATPATH. +dm= +for d in /usr/man /usr/share/man /usr/X11R6/man /usr/local/man +do + if [ -d $d ]; then + if [ x$dm = x ]; then dm=$d; else dm=$dm:$d; fi + fi +done +DEFMANPATH=$dm +dc= +for d in /usr/man/preformat /usr/man /usr/share/man/preformat /usr/share/man +do + if [ -d $d ]; then + if [ x$dc = x ]; then dc=$d; else dc=$dc:$d; fi + fi +done +DEFCATPATH=$dc + +# In case /usr is read-only, make /usr/foo/whatis (etc) a symlink to +# something like /var/cache/man/foo-whatis. +# Some distributions make a single big /var/cache/man/whatis file, +# but that leads to problems and bugs. + +# AWK=/usr/bin/gawk +AWK=@awk@ + +# Find a place for our temporary files. If security is not a concern, use +# TMPFILE=/tmp/whatis$$; TMPFILEDIR=none +# Of course makewhatis should only have the required permissions +# (for reading and writing directories like /usr/man). +# We try here to be careful (and avoid preconstructed symlinks) +# in case makewhatis is run as root, by creating a subdirectory of /tmp. + +TMPFILEDIR=/tmp/whatis.tmp.dir.$$ +rm -rf $TMPFILEDIR +if ! mkdir -m 0700 $TMPFILEDIR; then + echo Could not create $TMPFILEDIR + exit 1; +fi +TMPFILE=$TMPFILEDIR/w + +# make sure TMPFILEDIR is deleted if program is killed or terminates +# (just delete this line if your shell doesnt know about trap) +trap "rm -rf $TMPFILEDIR" 0 +trap "rm -rf $TMPFILEDIR; exit 255" 1 2 3 15 + +# default find arg: no directories, no empty files +findarg0="-type f -size +0" + +topath=manpath + +defmanpath=$DEFMANPATH +defcatpath= + +if [ -n "$MANSECT" ]; then + sections=$MANSECT +else + sections=`$AWK '($1 == "MANSECT") { print $2 }' @man_config_file@` + if [ x"$sections" = x ]; then + sections="@sections@" + fi +fi +sections=`echo $sections | sed -e 's/:/ /g'` + +for name in "$@" +do +if [ -n "$setsections" ]; then + setsections= + sections=$name + continue +fi +case $name in + --version|-V) + echo "$program from @version@" + exit 0;; + -c) topath=catpath + defmanpath= + defcatpath=$DEFCATPATH + continue;; + -s) setsections=1 + continue;; + -u) findarg="-ctime 0" + update=1 + continue;; + -v) verbose=1 + continue;; + -w) manpath=`man --path` + catpath=$manpath + continue;; + -*) echo "Usage: makewhatis [-s sections] [-u] [-v] [-w] [manpath] [-c [catpath]]" + echo " This will build the whatis database for the man pages" + echo " found in manpath and the cat pages found in catpath." + echo " -s: sections (default: $sections)" + echo " -u: update database with new pages" + echo " -v: verbose" + echo " -w: use manpath obtained from \`man --path\`" + echo " [manpath]: man directories (default: $DEFMANPATH)" + echo " [catpath]: cat directories (default: the first existing" + echo " directory in $DEFCATPATH)" + exit;; + *) if [ -d $name ] + then + eval $topath="\$$topath":$name + else + echo "No such directory $name" + exit + fi;; +esac +done + +manpath=`echo ${manpath-$defmanpath} | tr : ' '` +if [ x"$catpath" = x ]; then + for d in `echo $defcatpath | tr : ' '` + do + if [ -d $d ]; then catpath=$d; break; fi + done +fi +catpath=`echo ${catpath} | tr : ' '` + +# first truncate all the whatis files that will be created new, +# then only update - we might visit the same directory twice +if [ x$update = x ]; then + for pages in man cat + do + eval path="\$$pages"path + for mandir in $path + do + cp /dev/null $mandir/whatis + done + done +fi + +for pages in man cat +do + export pages + eval path="\$$pages"path + for mandir in $path + do + if [ x$verbose != x ]; then + echo "about to enter $mandir" > /dev/stderr + fi + + # kludge for Slackware's /usr/man/preformat + if [ $mandir = /usr/man/preformat ] + then + mandir1=/usr/man + else + mandir1=$mandir + fi + + # if $mandir is on a readonly partition, and the whatis file + # is not a symlink, then let's skip trying to update it + if [ ! -L ${mandir1}/whatis ] + then + if [ -e ${mandir1}/whatis ] && [ ! -w ${mandir1}/whatis ] + then + if [ x$verbose != x ]; then + echo skipping $mandir - whatis file is readonly > /dev/stderr + fi + continue + elif [ ! -e ${mandir1}/whatis ] && [ ! -w ${mandir1} ] + then + if [ x$verbose != x ]; then + echo skipping $mandir - directory is readonly > /dev/stderr + fi + continue + fi + fi + + if [ -s ${mandir}/whatis -a $pages = man -a x$update = x ]; then + if [ x$verbose != x ]; then + echo skipping $mandir - we did it already > /dev/stderr + fi + else + here=`pwd` + cd $mandir + for i in $sections + do + if [ -d ${pages}$i ] + then + cd ${pages}$i + section=$i + curdir=$mandir/${pages}$i + export section verbose curdir + find $mandir/${pages}$i/. -name '*' $findarg0 $findarg -print | $AWK ' + + function readline() { + if (use_zcat || use_bzcat || use_lzcat) { + result = (pipe_cmd | getline); + if (result < 0) { + print "Pipe error: " pipe_cmd " " ERRNO > "/dev/stderr"; + } + } else { + result = (getline < filename); + if (result < 0) { + print "Read file error: " filename " " ERRNO > "/dev/stderr"; + } + } + return result; + } + + function closeline() { + if (use_zcat || use_bzcat || use_lzcat) { + return close(pipe_cmd); + } else { + return close(filename); + } + } + + function do_one() { + insh = 0; thisjoin = 1; done = 0; + entire_line = ""; + + if (verbose) { + print "adding " filename > "/dev/stderr" + } + + use_zcat = match(filename,"\\.Z$") || + match(filename,"\\.z$") || match(filename,"\\.gz$"); + if (!use_zcat) + use_bzcat = match(filename,"\\.bz2"); + if(!use_bzcat) + use_lzcat = match(filename,"\\.lzma"); + if (use_zcat || use_bzcat || use_lzcat ) { + filename_no_gz = substr(filename, 0, RSTART - 1); + } else { + filename_no_gz = filename; + } + match(filename_no_gz, "/[^/]+$"); + progname = substr(filename, RSTART + 1, RLENGTH - 1); + if (match(progname, "\\." section "[A-Za-z]+")) { + actual_section = substr(progname, RSTART + 1, RLENGTH - 1); + } else { + actual_section = section; + } + sub(/\..*/, "", progname); + if (use_zcat || use_bzcat || use_lzcat) { + if (use_zcat) { + pipe_cmd = "zcat \"" filename "\""; + } else if (use_bzcat) { + pipe_cmd = "bzcat \"" filename "\""; + } else { + pipe_cmd = "lzcat \"" filename "\""; + } + # try to avoid suspicious stuff + if (filename ~ /[;&|`$(]/) { + print "ignored strange file name " filename " in " curdir > "/dev/stderr"; + return; + } + } + + while (!done && readline() > 0) { + gsub(/.\b/, ""); + if (($1 ~ /^\.[Ss][Hh]/ && + ($2 ~ /[Nn][Aa][Mm][Ee]/ || + $2 ~ /^JMNO/ || $2 ~ /^NAVN/ || $2 ~ /^NUME/ || + $2 ~ /^BEZEICHNUNG/ || $2 ~ /^NOMBRE/ || + $2 ~ /^NIMI/ || $2 ~ /^NOM/ || $2 ~ /^IME/ || + $2 ~ /^N[E]V/ || $2 ~ /^NAMA/ || $2 ~ /^̾/ || + $2 ~ /^̾/ || $2 ~ /^̸/ || $2 ~ /^NAZWA/ || + $2 ~ /^/ || $2 ~ /^/ || $2 ~ /^W/ || + $2 ~ /^NOME/ || $2 ~ /^NAAM/ || $2 ~ /^/)) || + (pages == "cat" && $1 ~ /^NAME/)) { + if (!insh) { + insh = 1; + } else { + done = 1; + } + } else if (insh) { + if ($1 ~ /^\.[Ss][HhYS]/ || + (pages == "cat" && + ($1 ~ /^S[yYeE]/ || $1 ~ /^DESCRIPTION/ || + $1 ~ /^COMMAND/ || $1 ~ /^OVERVIEW/ || + $1 ~ /^STRUCTURES/ || $1 ~ /^INTRODUCTION/ || + $0 ~ /^[^ ]/))) { + # end insh for Synopsis, Syntax, but also for + # DESCRIPTION (e.g., XFree86.1x), + # COMMAND (e.g., xspread.1) + # OVERVIEW (e.g., TclCommandWriting.3) + # STRUCTURES (e.g., XEvent.3x) + # INTRODUCTION (e.g., TclX.n) + # and anything at all that begins in Column 1, so + # is probably a section header. + done = 1; + } else { + if ($0 ~ progname"-") { # Fix old cat pages + sub(progname"-", progname" - "); + } + if ($0 ~ /[^ \\]-$/) { + sub(/-$/, ""); # Handle Hyphenations + nextjoin = 1; + } else if ($0 ~ /\\c$/) { + sub(/\\c$/, ""); # Handle Continuations + nextjoin = 1; + } else + nextjoin = 0; + + sub(/^.[IB] /, ""); # Kill bold and italics + sub(/^.BI /, ""); # + sub(/^.SM /, ""); # Kill small + sub(/^.Nm /, ""); # Kill bold + sub(/^.Tn /, ""); # Kill normal + sub(/^.Li /, ""); # Kill .Li + sub(/^.Dq /, ""); # Kill .Dq + sub(/^.Nd */, "- "); # Convert .Nd to dash + sub(/\\\".*/, ""); # Trim pending comments + sub(/ *$/, ""); # Trim pending spaces + sub(/^\.$/, ""); # Kill blank comments + sub(/^'"'"'.*/, ""); # Kill comment/troff lines + sub(/^.in .*/, ""); # Kill various macros + sub(/^.ti .*/, ""); + sub(/^.ta .*/, ""); + sub(/^.Vb .*/, ""); + sub(/^.[PLTH]P$/, ""); # .PP/.LP/.TP/.HP + sub(/^.Pp$/, ""); + sub(/^.[iI]X .*$/, ""); + sub(/^.nolinks$/, ""); + sub(/^.B$/, ""); + sub(/^.nf$/, ""); + + if (($1 ~ /^\.../ || $1 == "") && + (entire_line ~ / - / || entire_line ~ / \\- /)) { + # Assume that this ends the description of one line + # Sometimes there are several descriptions in one page, + # as in outb(2). + handle_entire_line(); + entire_line = ""; + thisjoin = 1; + } else { + if (thisjoin) { + entire_line = entire_line $0; + } else { + entire_line = entire_line " " $0; + } + thisjoin = nextjoin; + } + } + } + } + handle_entire_line(); + closeline(); + } + + function handle_entire_line() { + x = entire_line; # Keep it short + + gsub(/\015/, "", x); # Kill DOS remains + gsub(/ /, " ", x); # Translate tabs to spaces + gsub(/ +/, " ", x); # Collapse spaces + gsub(/ *, */, ", ", x); # Fix comma spacings + sub(/^ /, "", x); # Kill initial spaces + sub(/ $/, "", x); # Kill trailing spaces + sub(/__+/, "_", x); # Collapse underscores + + gsub(/\\f\(../, "", x); # Kill font changes + gsub(/\\f[PRIB0123]/, "", x); # Kill font changes + gsub(/\\s[-+0-9]*/, "", x); # Kill size changes + gsub(/\\&/, "", x); # Kill \& + gsub(/\\\|/, "", x); # Kill \| + gsub(/\\\((ru|ul)/, "_", x); # Translate + gsub(/\\\((mi|hy|em)/, "-", x); # Translate + gsub(/\\\*\(../, "", x); # Kill troff strings + gsub(/\\/, "", x); # Kill all backslashes + gsub(/"/, "", x); # Kill quotes (from .Nd "foo bar") + sub(/

    /, "", x);# Yuk! HTML cruft + gsub(/\000.*/, "X", x); # Binary cruft in LAPACK pages + gsub(/ +/, " ", x); # Collapse spaces (again) + sub(/^ /, "", x); # Kill initial spaces (again) + sub(/ $/, "", x); # Kill trailing spaces (again) + sub(/\.$/, "", x); # Kill trailing period + + if (!match(x, / - /)) + return; + + after_dash = substr(x, RSTART); + head = substr(x, 1, RSTART-1) ", "; + while (match(head, /, /)) { + prog = substr(head, 1, RSTART-1); + head = substr(head, RSTART+2); + if (prog != progname) + prog = prog " [" progname "]"; + printf "%-*s (%s) %s\n", 20, prog, actual_section, after_dash; + } + } + + { # Main action - process each filename read in. + filename = $0; + do_one(); + } + ' pages=$pages section=$section verbose=$verbose curdir=$curdir + cd .. + fi + done > $TMPFILE + + cd "$here" + + if [ -f ${mandir1}/whatis ] + then + cat ${mandir1}/whatis >> $TMPFILE + fi + tr -s '\n' < $TMPFILE | sort -u > ${mandir1}/whatis + + chmod 644 ${mandir1}/whatis + rm $TMPFILE + fi + done +done + +# remove tempdir +rm -rf $TMPFILEDIR + diff --git a/src/man-config.c b/src/man-config.c new file mode 100644 index 0000000..d66cef6 --- /dev/null +++ b/src/man-config.c @@ -0,0 +1,297 @@ +/* + * man-config.c + * + * Read the man.conf file + * + * Input line types: + * MANBIN /usr/bin/man + * MANPATH /usr/X386/man [/var/catman/X386] + * MANPATH_MAP /usr/bin /usr/man + * FHS + * FSSTND + * NOAUTOPATH + * NROFF /usr/bin/groff -Tascii -mandoc + * BROWSER /usr/bin/lynx + * HTMLPAGER /usr/bin/lynx -dump + * .gz /usr/bin/gunzip -c + * # Comment + * + * Allow globbing in MANPATH elements. + * This is useful e.g. for having MANPATH /opt/ * /man + * (avoid comment within comment). + */ + +#include +#include +#include + +#include "defs.h" +#include "glob.h" +#include "man-config.h" +#include "man.h" +#include "paths.h" +#include "gripes.h" +#include "util.h" + +#define BUFSIZE 4096 + +extern char *rindex (const char *, int); /* not always in */ + +#define whitespace(x) ((x) == ' ' || (x) == '\t') + +/* directories listed in config file */ +struct dirs cfdirlist; /* linked list, 1st entry unused */ + +static void +addval (char *buf) { + int i, len; + char *bp; + + for (i = 0; i < sizeof(paths)/sizeof(paths[0]); i++) { + len = strlen (paths[i].name); + bp = buf + len; + if(!strncmp (buf, paths[i].name, len) && (!*bp || whitespace(*bp))) { + while(whitespace(*bp)) + bp++; + paths[i].path = my_strdup(bp); + return; + } + } + gripe (UNRECOGNIZED_LINE, buf); +} + +const char * +getval (const char *cmd) { + int i; + + for (i = 0; i < sizeof(paths)/sizeof(paths[0]); i++) + if (!strcmp (cmd, paths[i].name)) + return paths[i].path; /* never NULL */ + gripe (GETVAL_ERROR, cmd); + return ""; /* impossible */ +} + +static void +adddir (const char *bp, int mandatory) { + int i; + struct dirs *dlp; + + while (whitespace(*bp)) + bp++; + if (*bp == 0) + gripe (PARSE_ERROR_IN_CONFIG); + + dlp = &cfdirlist; + while (dlp->nxt) + dlp = dlp->nxt; + dlp->nxt = (struct dirs *) my_malloc (sizeof(struct dirs)); + dlp = dlp->nxt; + dlp->mandatory = mandatory; + dlp->nxt = 0; + + if (!mandatory) { + i = 0; + while (*bp && !whitespace(*bp)) { + if (i < MAXPATHLEN - 1) + dlp->bindir[i++] = *bp; + bp++; + } + dlp->bindir[i] = 0; + + while (whitespace(*bp)) + bp++; + } else { + dlp->bindir[0] = 0; + } + + i = 0; + while (*bp && !whitespace(*bp)) { + if (i < MAXPATHLEN - 1) + dlp->mandir[i++] = *bp; + bp++; + } + dlp->mandir[i] = 0; + + while (whitespace(*bp)) + bp++; + + i = 0; + while (*bp && !whitespace(*bp)) { + if (i < MAXPATHLEN - 1) + dlp->catdir[i++] = *bp; + bp++; + } + dlp->catdir[i] = 0; + + if (debug) { + if (dlp->mandatory) + gripe (FOUND_MANDIR, dlp->mandir); + else + gripe (FOUND_MAP, dlp->bindir, dlp->mandir); + if (dlp->catdir[0]) + gripe (FOUND_CATDIR, dlp->catdir); + } +} + +static void +addglobdir (const char *bp, int mandatory) { + const char *dir; + + while (whitespace(*bp)) + bp++; + + dir = bp; + if (index(dir, '*') || index(dir, '?') || index(dir, '[')) { + char **dp = glob_filename (dir); + + if (dp && dp != (char **) -1) { + while (*dp) + adddir(*dp++, mandatory); + return; + } + } + adddir(dir, mandatory); +} + +static struct xp { + char *extension; /* non-null, including initial . */ + char *expander; + struct xp *nxt; +} uncompressors; /* linked list, 1st entry unused */ + +static void +addext (char *bp) { + char *p, csv; + struct xp *xpp; + + xpp = &uncompressors; + while (xpp->nxt) + xpp = xpp->nxt; + xpp->nxt = (struct xp *) my_malloc (sizeof(struct xp)); + xpp = xpp->nxt; + xpp->nxt = 0; + + p = bp; + while(*p && !whitespace(*p)) + p++; + csv = *p; + *p = 0; + xpp->extension = my_strdup(bp); + + *p = csv; + while(whitespace(*p)) + p++; + xpp->expander = my_strdup(p); +} + +const char * +get_expander (const char *file) { + struct xp *xp; + char *extp = NULL; + + if (dohp) { + /* Some HP systems have both man1 and man1.Z */ + /* For man1.Z/file.1 let extp=".Z" */ + /* For .1 return NULL */ + int len = strlen (dohp); + char *dirname_end = rindex (file, '/'); + if (dirname_end && !strncmp (dirname_end-len, dohp, len)) + extp = dohp; + } else + extp = rindex (file, '.'); + if (extp != NULL) { + if (uncompressors.nxt) { + for (xp = uncompressors.nxt; xp; xp = xp->nxt) + if (!strcmp (extp, xp->extension)) + return (xp->expander); + } else if (!strcmp (extp, getval("COMPRESS_EXT"))) { + return getval("DECOMPRESS"); + } + } + return NULL; +} + +const char *configuration_file = "[no configuration file]"; + +char *default_config_files[] = { + CONFIG_FILE, /* compiled-in default */ + "/etc/man.conf", "/etc/man.config", + "/usr/lib/man.conf", "/usr/lib/man.config", + "/usr/share/misc/man.conf", "/usr/share/misc/man.config" +}; + +#define SIZE(x) (sizeof(x)/sizeof((x)[0])) + +void +read_config_file (const char *cf) { + char *bp; + char *p; + char buf[BUFSIZE]; + FILE *config = NULL; + + if (cf) { + /* User explicitly specified a config file */ + if ((config = fopen (cf, "r")) == NULL) { + perror (cf); + gripe (CONFIG_OPEN_ERROR, cf); + return; + } + } else { + /* Try some things - unfortunately we cannot lookup + the config file to use in the config file :-). */ + int i; + + for(i=0; i < SIZE(default_config_files); i++) { + cf = default_config_files[i]; + if ((config = fopen (cf, "r")) != NULL) + break; + } + + if (config == NULL) { + gripe (CONFIG_OPEN_ERROR, CONFIG_FILE); + return; + } + } + + if (debug) + fprintf(stderr, "Reading config file %s\n", cf); + configuration_file = cf; + + while ((bp = fgets (buf, BUFSIZE, config)) != NULL) { + while (whitespace(*bp)) + bp++; + + for (p = bp; *p && *p != '#' && *p != '\n'; p++) ; + if (!*p) { + gripe (LINE_TOO_LONG); + gripe (BAD_CONFIG_FILE, cf); + return; + } + while (p > bp && whitespace(p[-1])) + p--; + *p = 0; + + if (*bp == 0) + continue; + + if (!strncmp ("MANPATH_MAP", bp, 11)) + adddir (bp+11, 0); + else if (!strncmp ("MANPATH", bp, 7)) + addglobdir (bp+7, 1); + else if(!strncmp ("MANDATORY_MANPATH", bp, 17))/* backwards compatible */ + adddir (bp+17, 1); + else if (!strncmp ("FHS", bp, 3)) + fhs = 1; + else if (!strncmp ("FSSTND", bp, 6)) + fsstnd = 1; + else if (!strncmp ("NOAUTOPATH", bp, 10)) + noautopath = 1; + else if (!strncmp ("NOCACHE", bp, 7)) + nocache = 1; + else if (*bp == '.') + addext (bp); + else + addval (bp); + } +} + diff --git a/src/man-config.h b/src/man-config.h new file mode 100644 index 0000000..b364ffd --- /dev/null +++ b/src/man-config.h @@ -0,0 +1,6 @@ +const char *getval (const char *); +const char *get_expander (const char *); +void read_config_file (const char *cf); + +extern struct dirs cfdirlist; +extern const char *configuration_file; diff --git a/src/man-getopt.c b/src/man-getopt.c new file mode 100644 index 0000000..07aecdb --- /dev/null +++ b/src/man-getopt.c @@ -0,0 +1,322 @@ +#include +#include +#include +#include + +#include "defs.h" +#include "gripes.h" +#include "man.h" +#include "man-config.h" +#include "man-getopt.h" +#include "util.h" +#include "version.h" + +int alt_system; +char *alt_system_name; +char *opt_manpath; +int global_apropos = 0; + +static void +print_version (void) { + gripe (VERSION, progname, version); +} + +static void +usage (void) { + print_version(); + gripe (USAGE1, progname); + + gripe (USAGE2); /* only for alt_systems */ + + gripe (USAGE3); + gripe (USAGE4); + gripe (USAGE5); /* maybe only if troff found? */ + gripe (USAGE6); + + gripe (USAGE7); /* only for alt_systems */ + + gripe (USAGE8); + exit(1); +} + +static char short_opts[] = "B:C:H:xM:P:S:acdDfFhkKm:p:s:tvVwW?"; + +#ifndef NOGETOPT +#undef _GNU_SOURCE +#define _GNU_SOURCE +#include + +static const struct option long_opts[] = { + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, 'v' }, + { "path", no_argument, NULL, 'w' }, + { "preformat", no_argument, NULL, 'F' }, + { NULL, 0, NULL, 0 } +}; +#endif + +/* + * Read options, return count. + */ +static int +get_options_from_argvec(int argc, char **argv, char **config_file, + char **manpath) { + char *s; + int c; + int optct = 0; + +#ifndef NOGETOPT + while ((c = getopt_long (argc, argv, short_opts, long_opts, NULL)) != -1){ +#else + while ((c = getopt (argc, argv, short_opts)) != -1) { +#endif + switch (c) { + case 'C': + no_privileges (); + if (config_file) + *config_file = my_strdup (optarg); + break; + case'F': + preformat = 1; + break; + case 'M': + if (manpath) + *manpath = my_strdup (optarg); + break; + case 'P': + pager = my_strdup (optarg); + break; + case 'B': + browser = my_strdup (optarg); + break; + case 'H': + htmlpager = my_strdup (optarg); + break; + case 'S': + colon_sep_section_list = my_strdup (optarg); + break; + case 's': + /* undocumented; compatibility with Sun */ + s = colon_sep_section_list = my_strdup (optarg); + while (*s) { + if (*s == ',') + *s = ':'; + s++; + } + break; + case 'a': + findall++; + break; + case 'c': + nocats++; + break; + case 'D': + debug++; + case 'd': + debug++; + break; + case 'f': + if (do_troff) + fatal (INCOMPAT, "-f", "-t"); + if (apropos) + fatal (INCOMPAT, "-f", "-k"); + if (print_where) + fatal (INCOMPAT, "-f", "-w"); + whatis++; + break; + case 'k': + if (do_troff) + fatal (INCOMPAT, "-k", "-t"); + if (whatis) + fatal (INCOMPAT, "-k", "-f"); + if (print_where) + fatal (INCOMPAT, "-k", "-w"); + apropos++; + break; + case 'K': + global_apropos++; + break; + case 'm': + alt_system++; + alt_system_name = my_strdup (optarg); + break; + /* or: gripe (NO_ALTERNATE); exit(1); */ + case 'p': + roff_directive = my_strdup (optarg); + break; + case 't': + if (apropos) + fatal (INCOMPAT, "-t", "-k"); + if (whatis) + fatal (INCOMPAT, "-t", "-f"); + if (print_where) + fatal (INCOMPAT, "-t", "-w"); + do_troff++; + break; + case 'v': + case 'V': + print_version(); + exit(0); + case 'W': + one_per_line++; + /* fall through */ + case 'w': + if (apropos) + fatal (INCOMPAT, "-w", "-k"); + if (whatis) + fatal (INCOMPAT, "-w", "-f"); + if (do_troff) + fatal (INCOMPAT, "-w", "-t"); + print_where++; + break; + case 'h': + case '?': + default: + usage(); + break; + } + optct++; + } + + return optct; +} + +static void +get_options_from_string(const char *s) { + char *s0, *ss; + int argct; + char **argvec; + int optindsv; + + if (!s || *s == 0) + return; + + /* In order to avoid having a list of options in two places, + massage the string so that it can be fed to getopt() */ + + s0 = my_strdup(s); + + /* count arguments */ + argct = 0; + ss = s0; + while (*ss) { + while (*ss == ' ') + ss++; + if (*ss) { + argct++; + while (*ss && *ss != ' ') + ss++; + } + } + + /* allocate argvec */ + argvec = (char **) my_malloc((argct+2)*sizeof(char *)); + argct = 0; + argvec[argct++] = "dummy"; + ss = s0; + while (*ss) { + while (*ss == ' ') + *ss++ = 0; + if (*ss) { + argvec[argct++] = ss; + while (*ss && *ss != ' ') + ss++; + } + } + argvec[argct] = 0; + + optindsv = optind; + optind = 1; + get_options_from_argvec(argct, argvec, NULL, NULL); + optind = optindsv; +} + +static void +mysetenv(const char *name, const char *value) { +#if defined(__sgi__) || defined(__sun__) || defined(sun) + int len = strlen(value)+1+strlen(value)+1; + char *str = my_malloc(len); + sprintf(str, "%s=%s", name, value); + putenv(str); +#else + setenv(name, value, 1); +#endif +} + +/* + * Get options from the command line and user environment. + * Also reads the configuration file. + */ + +void +man_getopt (int argc, char **argv) { + char *config_file = NULL; + char *manp = NULL; + int optct = 0; + + optct = get_options_from_argvec(argc, argv, &config_file, &manp); + + read_config_file (config_file); + + /* If no options were given and MANDEFOPTIONS is set, use that */ + if (optct == 0) { + const char *defopts = getval ("MANDEFOPTIONS"); + get_options_from_string(defopts); + } + + /* In case an explicit -P option was given, put it in the + environment for possible use with -k or -K. + Ignore errors (out of memory?) */ + + if (pager && (global_apropos || apropos || whatis)) + mysetenv("PAGER", pager); + + if (pager == NULL || *pager == '\0') + if (((pager = getenv ("MANPAGER")) == NULL) || (*pager == '\0')) + if (((pager = getenv ("PAGER")) == NULL) || (*pager == '\0')) + pager = getval ("PAGER"); + + if (debug) + gripe (PAGER_IS, pager); + + /* Ditto for BROWSER and -B */ + if (browser && (global_apropos || apropos || whatis)) + mysetenv("BROWSER", browser); + + if (browser == NULL || *browser == '\0') + if ((browser = getenv ("BROWSER")) == NULL) + browser = getval ("BROWSER"); + + if (debug) + gripe (BROWSER_IS, browser); + + /* Ditto for HTMLHTMLPAGER and -H */ + if (htmlpager && (global_apropos || apropos || whatis)) + mysetenv("HTMLPAGER", htmlpager); + + if (htmlpager == NULL || *htmlpager == '\0') + if ((htmlpager = getenv ("HTMLPAGER")) == NULL) + htmlpager = getval ("HTMLPAGER"); + + if (debug) + gripe (HTMLPAGER_IS, htmlpager); + + if (do_compress && !*getval ("COMPRESS")) { + if (debug) + gripe (NO_COMPRESS); + do_compress = 0; + } + + if (do_troff && !*getval ("TROFF")) { + gripe (NO_TROFF, configuration_file); + exit (1); + } + + opt_manpath = manp; /* do not yet expand manpath - + maybe it is not needed */ + + if (alt_system_name == NULL || *alt_system_name == '\0') + if ((alt_system_name = getenv ("SYSTEM")) != NULL) + alt_system_name = my_strdup (alt_system_name); + +} diff --git a/src/man-getopt.h b/src/man-getopt.h new file mode 100644 index 0000000..35ad35b --- /dev/null +++ b/src/man-getopt.h @@ -0,0 +1,6 @@ +extern void man_getopt (int argc, char **argv); + +extern int global_apropos; +extern int alt_system; +extern char *alt_system_name; +extern char *opt_manpath; diff --git a/src/man-iconv.c b/src/man-iconv.c new file mode 100644 index 0000000..9ce1236 --- /dev/null +++ b/src/man-iconv.c @@ -0,0 +1,163 @@ +/* + * From andy@pylesos.asp-linux.com.ua Tue Dec 3 14:17:38 2002 + * (polished, aeb) + * + * Manpages for a given language have a traditional character set. + * E.g., for Russian this is koi8r. + * If the user uses a different locale, throw in an invocation of iconv. + * + * Exports: + * const char *get_converter (const char *path); + * Conversion is to the users locale. Conversion is from the + * manpage charset, found in environment variables, or in + * PATH/.charset, where PATH is the directory (below that) containing + * the man page. + * + * TODO: adapt this to man.conf way + */ + +/* + * By default iconv is not used - this is the wrong interface. + * But if you want it, define USE_ICONV. + */ +#undef USE_ICONV + +#include /* NULL */ + +#if defined __GLIBC__ && __GLIBC__ >= 2 && defined USE_ICONV +#include /* getenv */ +#include /* access */ +#include /* strcmp */ +#include /* setlocale */ +#include /* nl_langinfo */ +#include /* iconv_open */ +#include "man-iconv.h" /* get_converter */ +#include "util.h" /* my_strdup */ +#include "man.h" /* debug */ + +static char * +find_iconv(void) { + static char *iconv_path = NULL; + static int inited = 0; + + if (!inited) { + char *file = getenv("MAN_ICONV_PATH"); + if (!file) + file = "/usr/bin/iconv"; + if (access(file, X_OK) == 0) + iconv_path = my_strdup(file); + inited = 1; + } + return iconv_path; +} + +static char * +iconv_extra_flags(void) { + static char *iconv_flags = "-cs"; + static int inited = 0; + + if (!inited) { + char *opt = getenv("MAN_ICONV_OPT"); + if (opt) + iconv_flags = my_strdup(opt); + inited = 1; + } + return iconv_flags; +} + +static char * +get_locale_charset (void) { + char *old_lc_ctype, *charset; + + if ((charset = getenv("MAN_ICONV_OUTPUT_CHARSET")) == NULL) { + old_lc_ctype = setlocale(LC_CTYPE, ""); + charset = nl_langinfo(CODESET); + setlocale(LC_CTYPE, old_lc_ctype); + } + return charset; +} + +static char * +get_man_charset (const char *path) { + char *charset_env, *file, *path2, *p; + FILE *f = NULL; + + charset_env = getenv("MAN_ICONV_INPUT_CHARSET"); + if (charset_env) + return charset_env; + + if (!path || !*path) + return NULL; + + if (debug) + fprintf(stderr, "get_man_charset: path=%s\n", path); + + /* strip trailing "/.." and try that directory first */ + path2 = my_strdup(path); + p = strrchr(path2, '/'); + if (p && !strcmp(p, "/..")) { + *p = 0; + file = my_xsprintf("%s/.charset", path2); + f = fopen(file, "r"); + free(file); + } + free(path2); + + /* if that fails, try path itself */ + if (f == NULL) { + file = my_xsprintf("%s/.charset", path); + f = fopen(file, "r"); + free(file); + } + + if (f) { + char charset[100], *p; + + fgets(charset, sizeof(charset), f); + fclose(f); + fprintf(stderr, "read %s\n", charset); + p = strchr(charset, '\n'); + if (p) { + *p = 0; + return my_strdup(charset); + } + } + return NULL; +} + +static int +is_conversion_supported (char *from, char *to) { + iconv_t cd; + + if (!from || !*from || !to || !*to || !strcmp(from,to)) + return 0; + if ((cd = iconv_open(to, from)) != (iconv_t) -1) { + iconv_close(cd); + return 1; + } + return 0; +} + +const char * +get_converter (const char *path) { + char *from, *to, *iconv_path; + + iconv_path = find_iconv(); + from = get_man_charset(path); + to = get_locale_charset(); + if (debug) + fprintf(stderr, "get_converter: iconv_path=%s from=%s to=%s\n", + iconv_path, from, to); + if (iconv_path && is_conversion_supported(from, to)) + return my_xsprintf("%s %s -f %s -t %s", + iconv_path, iconv_extra_flags(), from, to); + return NULL; +} +#else +#include "man-iconv.h" + +const char * +get_converter (const char *path) { + return NULL; +} +#endif /* __GLIBC__ && __GLIBC__ >= 2 */ diff --git a/src/man-iconv.h b/src/man-iconv.h new file mode 100644 index 0000000..40c9ad8 --- /dev/null +++ b/src/man-iconv.h @@ -0,0 +1 @@ +extern const char *get_converter (const char *path); diff --git a/src/man.c b/src/man.c new file mode 100644 index 0000000..62eaee4 --- /dev/null +++ b/src/man.c @@ -0,0 +1,1366 @@ +/* + * man.c + * + * Copyright (c) 1990, 1991, John W. Eaton. + * + * You may distribute under the terms of the GNU General Public + * License as specified in the file COPYING that comes with the man + * distribution. + * + * John W. Eaton + * jwe@che.utexas.edu + * Department of Chemical Engineering + * The University of Texas at Austin + * Austin, Texas 78712 + * + * Some manpath, compression and locale related changes - aeb - 940320 + * Some suid related changes - aeb - 941008 + * Some more fixes, Pauline Middelink & aeb, Oct 1994 + * man -K: aeb, Jul 1995 + * Split off of manfile for man2html, aeb, New Year's Eve 1997 + */ + +#include +#include +#include +#include +#include +#include /* for chmod */ +#include +#include +#include +#include +#ifdef TERMIOS_HEADER +#include +#endif + +#ifndef R_OK +#define R_OK 4 +#endif + +extern char *index (const char *, int); /* not always in */ +extern char *rindex (const char *, int); /* not always in */ + +#include "defs.h" +#include "gripes.h" +#include "man.h" +#include "manfile.h" +#include "manpath.h" +#include "man-config.h" +#include "man-getopt.h" +#include "man-iconv.h" +#include "to_cat.h" +#include "util.h" +#include "glob.h" +#include "different.h" +#include "man-iconv.h" + +#define SIZE(x) (sizeof(x)/sizeof((x)[0])) + +const char *progname; +const char *pager, *browser, *htmlpager; +char *colon_sep_section_list; +char *roff_directive; +char *dohp = 0; +int do_irix; +int do_win32; +int apropos; +int whatis; +int nocats; /* set by -c option: do not use cat page */ + /* this means that cat pages must not be used, + perhaps because the user knows they are + old or corrupt or so */ +int can_use_cache; /* output device is a tty, width 80 */ + /* this means that the result may be written + in /var/cache, and may be read from there */ +int findall; +int print_where; +int one_per_line; +int do_troff; +int preformat; +int debug; +int fhs; +int fsstnd; +int noautopath; +int nocache; +static int is_japanese; +static char *language; +static char **section_list; + +#ifdef DO_COMPRESS +int do_compress = 1; +#else +int do_compress = 0; +#endif + +#define BUFSIZE 8192 + +/* + * Try to determine the line length to use. + * Preferences: 1. MANWIDTH, 2. ioctl, 3. COLUMNS, 4. 80 + * + * joey, 950902 + */ + +#include + +int line_length = 80; +int ll = 0; + +static void +get_line_length(void){ + char *cp; + int width; + + if (preformat) { + line_length = 80; + return; + } + if ((cp = getenv ("MANWIDTH")) != NULL && (width = atoi(cp)) > 0) { + line_length = width; + return; + } +#ifdef TIOCGWINSZ + if (isatty(0) && isatty(1)) { /* Jon Tombs */ + struct winsize wsz; + + if(ioctl(0, TIOCGWINSZ, &wsz)) + perror("TIOCGWINSZ failed\n"); + else if(wsz.ws_col) { + line_length = wsz.ws_col; + return; + } + } +#endif + if ((cp = getenv ("COLUMNS")) != NULL && (width = atoi(cp)) > 0) + line_length = width; + else + line_length = 80; +} + +static int +setll(void) { + return + (!do_troff && (line_length < 66 || line_length > 80)) ? + line_length*9/10 : 0; +} + +/* People prefer no page headings in their man screen output; + now ".pl 0" has a bad effect on .SH etc, so we need ".pl N" + for some large number N, like 1100i (a hundred pages). */ +#define VERY_LONG_PAGE "1100i" + +static char * +setpl(void) { + char *pl; + if (do_troff) + return NULL; + if (preformat) + pl = VERY_LONG_PAGE; + else + if ((pl = getenv("MANPL")) == 0) { + if (isatty(0) && isatty(1)) + pl = VERY_LONG_PAGE; + else + pl = "11i"; /* old troff default */ + } + return pl; +} + +/* + * Check to see if the argument is a valid section number. If the + * first character of name is a numeral, or the name matches one of + * the sections listed in section_list, we'll assume that it's a section. + * The list of sections in config.h simply allows us to specify oddly + * named directories like .../man3f. Yuk. + */ +static char * +is_section (char *name) { + char **vs; + + /* 3Xt may be a section, but 3DBorder is a man page */ + if (isdigit (name[0]) && !isdigit (name[1]) && strlen(name) < 5) + return my_strdup (name); + + for (vs = section_list; *vs != NULL; vs++) + if (strcmp (*vs, name) == 0) + return my_strdup (name); + + return NULL; +} + + +static void +remove_file (char *file) { + int i; + + i = unlink (file); + + if (debug) { + if (i) + perror(file); + else + gripe (UNLINKED, file); + } +} + +static void +remove_other_catfiles (const char *catfile) { + char *pathname; + char *t; + char **gf; + int offset; + + pathname = my_strdup(catfile); + t = rindex(pathname, '.'); + if (t == NULL || strcmp(t, getval("COMPRESS_EXT"))) + return; + offset = t - pathname; + strcpy(t, "*"); + gf = glob_filename (pathname); + + if (gf != (char **) -1 && gf != NULL) { + for ( ; *gf; gf++) { + /* + * Only remove files with a known extension, like .Z + * (otherwise we might kill a lot when called with + * catfile = ".gz" ...) + */ + if (strlen (*gf) <= offset) { + if (strlen (*gf) == offset) /* uncompressed version */ + remove_file (*gf); + continue; + } + + if (!strcmp (*gf + offset, getval("COMPRESS_EXT"))) + continue; + + if (get_expander (*gf) != NULL) + remove_file (*gf); + } + } +} + +/* + * Simply display the preformatted page. + */ +static int +display_cat_file (const char *file) { + int found; + + if (preformat) + return 1; /* nothing to do - preformat only */ + + found = 0; + + if (access (file, R_OK) == 0 && different_cat_file(file)) { + char *command = NULL; + const char *expander = get_expander (file); + + if (expander != NULL && expander[0] != 0) { + if (isatty(1)) + command = my_xsprintf("%s %S | %s", expander, file, pager); + else + command = my_xsprintf("%s %S", expander, file); + } else { + if (isatty(1)) { + command = my_xsprintf("%s %S", pager, file); + } else { + const char *cat = getval("CAT"); + command = my_xsprintf("%s %S", cat[0] ? cat : "cat", file); + } + } + found = !do_system_command (command, 0); + } + return found; +} + +/* + * Simply display the preformatted page. + */ +static int +display_html_file (const char *file) { + int found; + + found = 0; + + if (access (file, R_OK) == 0 && different_cat_file(file)) { + char *command = NULL; + + if (isatty(1)) { + command = my_xsprintf("%s %S", browser, file); + } else { + command = my_xsprintf("%s %S", htmlpager, file); + } + found = !do_system_command (command, 0); + } + return found; + + return 1; +} + +/* + * Try to find the ultimate source file. If the first line of the + * current file is not of the form + * + * .so man3/printf.3s + * + * the input file name is returned. + * + * For /cd/usr/src/usr.bin/util-linux-1.5/mount/umount.8.gz + * (which contains `.so man8/mount.8') + * we return /cd/usr/src/usr.bin/util-linux-1.5/mount/mount.8.gz . + * + * For /usr/man/man3/TIFFScanlineSize.3t + * (which contains `.so TIFFsize.3t') + * we return /usr/man/man3/TIFFsize.3t . + */ +static const char * +ultimate_source (const char *name0) { + FILE *fp; + char *name; + const char *expander; + int expfl = 0; + char *fgr; + char *beg; + char *end; + char *cp; + char buf[BUFSIZE]; + static char ultname[BUFSIZE]; + + if (strlen(name0) >= sizeof(ultname)) + return name0; + strcpy(ultname, name0); + name = ultname; + +again: + expander = get_expander (name); + if (expander && *expander) { + char *command; + + command = my_xsprintf ("%s %S", expander, name); + fp = my_popen (command, "r"); + if (fp == NULL) { + perror("popen"); + gripe (EXPANSION_FAILED, command); + return (NULL); + } + fgr = fgets (buf, sizeof(buf), fp); + + #ifdef __APPLE__ + /* Man 1.5x randomly freezes under Mac OS X 10.4.7 when the + man page is compressed (with either gzip or bzip2), and + only with large pages. + The freeze occurs at the pclose function, and a ps shows + that gunzip is still running. + + The problem is the specification of pclose(): The pclose() + function waits for the associated process to terminate + and returns the exit status of the command as returned by + wait4(). + + So, if gunzip is started to look at the start of a file and + the file is larger than the buffer used by stdio then the + first read does not read everything, and the pclose hangs. */ + + /* Reading loop insures lockup cannot occur */ + char dummy[BUFSIZE]; + while (fgets (dummy,sizeof(dummy),fp) ); + #endif // __APPLE__ + + pclose (fp); + expfl = 1; + } else { + fp = fopen (name, "r"); + if (fp == NULL && expfl) { + char *extp = rindex (name0, '.'); + if (extp && *extp && strlen(name)+strlen(extp) < BUFSIZE) { + strcat(name, extp); + fp = fopen (name, "r"); + } + } + /* + * Some people have compressed man pages, but uncompressed + * .so files - we could glob for all possible extensions, + * for now: only try .gz + */ + else if (fp == NULL && get_expander(".gz") && + strlen(name)+strlen(".gz") < BUFSIZE) { + strcat(name, ".gz"); + fp = fopen (name, "r"); + } + + if (fp == NULL) { + perror("fopen"); + gripe (OPEN_ERROR, name); + return (NULL); + } + fgr = fgets (buf, sizeof(buf), fp); + fclose (fp); + } + + if (fgr == NULL) { + perror("fgets"); + gripe (READ_ERROR, name); + return (NULL); + } + + if (strncmp(buf, ".so", 3)) + return (my_strdup(name)); + + beg = buf+3; + while (*beg == ' ' || *beg == '\t') + beg++; + + end = beg; + while (*end != ' ' && *end != '\t' && *end != '\n' && *end != '\0') + end++; /* note that buf is NUL-terminated */ + *end = '\0'; + + /* If name ends in path/manx/foo.9x then use path, otherwise + try same directory. */ + if ((cp = rindex(name, '/')) == NULL) /* very strange ... */ + return 0; + *cp = 0; + + /* allow "man ./foo.3" where foo.3 contains ".so man2/bar.2" */ + if ((cp = rindex(name, '/')) != NULL && !strcmp(cp+1, ".")) + *cp = 0; + + /* In all cases, the new name will be something from name + followed by something from beg. */ + if (strlen(name) + strlen(beg) + 1 >= BUFSIZ) + return 0; /* very long names, ignore */ + + if (!index(beg, '/')) { + /* strange.. try same directory as the .so file */ + strcat(name, "/"); + strcat(name, beg); + } else if((cp = rindex(name, '/')) != NULL && !strncmp(cp+1, "man", 3)) { + strcpy(cp+1, beg); + } else if((cp = rindex(beg, '/')) != NULL) { + strcat(name, cp); + } else { + strcat(name, "/"); + strcat(name, beg); + } + + goto again; +} + +static void +add_directive (const char *d, const char *file, char *buf, int buflen) { + if ((d = getval(d)) != 0 && *d) { + if (*buf == 0) { + if (strlen(d) + strlen(file) + 2 > buflen) + return; + strcpy (buf, d); + strcat (buf, " "); + strcat (buf, file); + } else { + if (strlen(d) + strlen(buf) + 4 > buflen) + return; + strcat (buf, " | "); + strcat (buf, d); + } + } +} + +static int +is_lang_page (char *lang, const char *file) { + char lang_path[16] = ""; + + snprintf(lang_path, sizeof(lang_path), "/%s/", lang); + if (strstr(file, lang_path)) + return 1; + if (strlen(lang) > 2) { + lang_path[3] = '/'; + lang_path[4] = 0; + if (strstr(file, lang_path)) + return 1; + } + return 0; +} + +static int +parse_roff_directive (char *cp, const char *file, char *buf, int buflen) { + char c; + int tbl_found = 0; + int use_jroff; + + use_jroff = (is_japanese && + (strstr(file, "/jman/") || is_lang_page(language, file))); + + while ((c = *cp++) != '\0') { + switch (c) { + case 'e': + if (debug) + gripe (FOUND_EQN); + add_directive((do_troff ? "EQN" : use_jroff ? "JNEQN": "NEQN"), + file, buf, buflen); + break; + + case 'g': + if (debug) + gripe (FOUND_GRAP); + add_directive ("GRAP", file, buf, buflen); + break; + + case 'p': + if (debug) + gripe (FOUND_PIC); + add_directive ("PIC", file, buf, buflen); + break; + + case 't': + if (debug) + gripe (FOUND_TBL); + tbl_found++; + add_directive ("TBL", file, buf, buflen); + break; + + case 'v': + if (debug) + gripe (FOUND_VGRIND); + add_directive ("VGRIND", file, buf, buflen); + break; + + case 'r': + if (debug) + gripe (FOUND_REFER); + add_directive ("REFER", file, buf, buflen); + break; + + case ' ': + case '\t': + case '\n': + goto done; + + default: + return -1; + } + } + +done: + if (*buf == 0) + return 1; + + add_directive (do_troff ? "TROFF" : use_jroff ? "JNROFF" : "NROFF", + "", buf, buflen); + + if (tbl_found && !do_troff && *getval("COL")) + add_directive ("COL", "", buf, buflen); + + return 0; +} + +static char * +eos(char *s) { + while(*s) s++; + return s; +} + +/* + * Create command to format FILE, in the directory PATH/manX + */ +static char * +make_roff_command (const char *path, const char *file) { + FILE *fp; + static char buf [BUFSIZE]; + char line [BUFSIZE], bufh [BUFSIZE], buft [BUFSIZE]; + int status, ll; + char *cp, *fgr, *pl; + char *command = ""; + const char *expander; + const char *converter; + + /* if window size differs much from 80, try to adapt */ + /* (but write only standard formatted files to the cat directory, + see can_use_cache) */ + ll = setll(); + pl = setpl(); + if (ll && debug) + gripe (NO_CAT_FOR_NONSTD_LL); + + expander = get_expander (file); + converter = get_converter (path); + + /* head */ + bufh[0] = 0; + if (ll || pl) { + /* some versions of echo do not accept the -e flag, + so we just use two echo calls when needed */ + strcat(bufh, "("); + if (ll) { + /* + * We should set line length and title line length. + * However, a .lt command here fails, only + * .ev 1; .lt ...; .ev helps for my version of groff. + * The LL assignment is needed by the mandoc macros. + */ + sprintf(eos(bufh), "echo \".ll %d.%di\"; ", ll/10, ll%10); + sprintf(eos(bufh), "echo \".nr LL %d.%di\"; ", ll/10, ll%10); +#if 0 + sprintf(eos(bufh), "echo \".lt %d.%di\"; ", ll/10, ll%10); +#endif + } + if (pl) + sprintf(eos(bufh), "echo \".pl %.128s\"; ", pl); + } + + /* tail */ + buft[0] = 0; + if (ll || pl) { + if (pl && !strcmp(pl, VERY_LONG_PAGE)) + /* At end of the nroff source, set the page length to + the current position plus 10 lines. This plus setpl() + gives us a single page that just contains the whole + man page. (William Webber, wew@cs.rmit.edu.au) */ + strcat(buft, "; echo \".\\\\\\\"\"; echo \".pl \\n(nlu+10\""); +#if 0 + /* In case this doesnt work for some reason, + michaelkjohnson suggests: I've got a simple + awk invocation that I throw into the pipeline: */ + + awk 'BEGIN {RS="\n\n\n\n*"} /.*/ {print}' +#endif + strcat(buft, ")"); + } + + if (expander && *expander) { + if (converter && *converter) + command = my_xsprintf("%s%s '%S' | %s%s", + bufh, expander, file, converter, buft); + else + command = my_xsprintf("%s%s '%S'%s", + bufh, expander, file, buft); + } else if (ll || pl) { + const char *cat = getval("CAT"); + if (!cat || !*cat) + cat = "cat"; + + if (converter && *converter) + command = my_xsprintf("%s%s '%S' | %s%s", + bufh, cat, file, converter, buft); + else + command = my_xsprintf("%s%s '%S'%s", + bufh, cat, file, buft); + } + + if (strlen(command) >= sizeof(buf)) + exit(1); + strcpy(buf, command); + + if (roff_directive != NULL) { + if (debug) + gripe (ROFF_FROM_COMMAND_LINE); + + status = parse_roff_directive (roff_directive, file, + buf, sizeof(buf)); + + if (status == 0) + return buf; + + if (status == -1) + gripe (ROFF_CMD_FROM_COMMANDLINE_ERROR); + } + + if (expander && *expander) { + char *cmd = my_xsprintf ("%s %S", expander, file); + fp = my_popen (cmd, "r"); + if (fp == NULL) { + perror("popen"); + gripe (EXPANSION_FAILED, cmd); + return (NULL); + } + fgr = fgets (line, sizeof(line), fp); + pclose (fp); + } else { + fp = fopen (file, "r"); + if (fp == NULL) { + perror("fopen"); + gripe (OPEN_ERROR, file); + return (NULL); + } + fgr = fgets (line, sizeof(line), fp); + fclose (fp); + } + + if (fgr == NULL) { + perror("fgets"); + gripe (READ_ERROR, file); + return (NULL); + } + + cp = &line[0]; + if (*cp++ == '\'' && *cp++ == '\\' && *cp++ == '"' && *cp++ == ' ') { + if (debug) + gripe (ROFF_FROM_FILE, file); + + status = parse_roff_directive (cp, file, buf, sizeof(buf)); + + if (status == 0) + return buf; + + if (status == -1) + gripe (ROFF_CMD_FROM_FILE_ERROR, file); + } + + if ((cp = getenv ("MANROFFSEQ")) != NULL) { + if (debug) + gripe (ROFF_FROM_ENV); + + status = parse_roff_directive (cp, file, buf, sizeof(buf)); + + if (status == 0) + return buf; + + if (status == -1) + gripe (MANROFFSEQ_ERROR); + } + + if (debug) + gripe (USING_DEFAULT); + + (void) parse_roff_directive ("t", file, buf, sizeof(buf)); + + return buf; +} + +/* + * Try to format the man page and create a new formatted file. Return + * 1 for success and 0 for failure. + */ +static int +make_cat_file (const char *path, const char *man_file, const char *cat_file) { + int mode; + FILE *fp; + char *roff_command; + char *command = NULL; + struct stat statbuf; + + /* _Before_ first, make sure we will write to a regular file. */ + if (stat(cat_file, &statbuf) == 0) { + if(!S_ISREG(statbuf.st_mode)) { + if (debug) + gripe (CAT_OPEN_ERROR, cat_file); + return 0; + } + } + + /* First make sure we can write the file; create an empty file. */ + /* If we are suid it must get mode 0666. */ + if ((fp = fopen (cat_file, "w")) == NULL) { + if (errno == ENOENT) /* directory does not exist */ + return 0; + + /* If we cannot write the file, maybe we can delete it */ + if(unlink (cat_file) != 0 || (fp = fopen (cat_file, "w")) == NULL) { + if (errno == EROFS) /* possibly a CDROM */ + return 0; + if (debug) + gripe (CAT_OPEN_ERROR, cat_file); + if (!suid) + return 0; + + /* maybe the real user can write it */ + /* note: just doing "> %s" gives the wrong exit status */ + command = my_xsprintf("cp /dev/null %S 2>/dev/null", cat_file); + if (do_system_command(command, 1)) { + if (debug) + gripe (USER_CANNOT_OPEN_CAT); + return 0; + } + if (debug) + gripe (USER_CAN_OPEN_CAT); + } + } else { + /* we can write it - good */ + fclose (fp); + + /* but maybe the real user cannot - let's allow everybody */ + /* the mode is reset below */ + if (suid) { + if (chmod (cat_file, 0666)) { + /* probably we are sgid but not owner; + just delete the file and create it again */ + if(unlink(cat_file) != 0) { + command = my_xsprintf("rm %S", cat_file); + (void) do_system_command (command, 1); + } + if ((fp = fopen (cat_file, "w")) != NULL) + fclose (fp); + } + } + } + + roff_command = make_roff_command (path, man_file); + if (roff_command == NULL) + return 0; + if (do_compress) + /* The cd is necessary, because of .so commands, + like .so man1/bash.1 in bash_builtins.1. + But it changes the meaning of man_file and cat_file, + if these are not absolute. */ + + command = my_xsprintf("(cd %S && %s | %S > %S)", path, + roff_command, getval("COMPRESS"), cat_file); + else + command = my_xsprintf ("(cd %S && %s > %S)", path, + roff_command, cat_file); + + /* + * Don't let the user interrupt the system () call and screw up + * the formatted man page if we're not done yet. + */ + signal (SIGINT, SIG_IGN); + + gripe (PLEASE_WAIT); + + if (!do_system_command (command, 0)) { + /* success */ + mode = ((ruid != euid) ? 0644 : (rgid != egid) ? 0464 : 0444); + if(chmod (cat_file, mode) != 0 && suid) { + command = my_xsprintf ("chmod 0%o %S", mode, cat_file); + (void) do_system_command (command, 1); + } + /* be silent about the success of chmod - it is not important */ + if (debug) + gripe (CHANGED_MODE, cat_file, mode); + } else { + /* something went wrong - remove garbage */ + if(unlink(cat_file) != 0 && suid) { + command = my_xsprintf ("rm %S", cat_file); + (void) do_system_command (command, 1); + } + } + + signal (SIGINT, SIG_DFL); + + return 1; +} + +static int +display_man_file(const char *path, const char *man_file) { + char *roff_command; + char *command; + + if (!different_man_file (man_file)) + return 0; + roff_command = make_roff_command (path, man_file); + if (roff_command == NULL) + return 0; + if (do_troff) + command = my_xsprintf ("(cd \"%S\" && %s)", path, roff_command); + else + command = my_xsprintf ("(cd \"%S\" && %s | %s)", path, + roff_command, pager); + + return !do_system_command (command, 0); +} + +/* + * make and display the cat file - return 0 if something went wrong + */ +static int +make_and_display_cat_file (const char *path, const char *man_file) { + const char *cat_file; + const char *ext; + int status; + int standards; + + ext = (do_compress ? getval("COMPRESS_EXT") : 0); + + standards = (fhs ? FHS : 0) | (fsstnd ? FSSTND : 0) | (dohp ? DO_HP : 0); + + if ((cat_file = convert_to_cat(man_file, ext, standards)) == NULL) + return 0; + + if (debug) + gripe (PROPOSED_CATFILE, cat_file); + + /* + * If cat_file exists, check whether it is more recent. + * Otherwise, check for other cat files (maybe there are + * old .Z files that should be removed). + */ + + status = ((nocats | preformat) ? -2 : is_newer (man_file, cat_file)); + if (debug) + gripe (IS_NEWER_RESULT, status); + if (status == -1 || status == -3) { + /* what? man_file does not exist anymore? */ + gripe (CANNOT_STAT, man_file); + return(0); + } + + if (status != 0 || access (cat_file, R_OK) != 0) { + /* + * Cat file is out of date (status = 1) or does not exist or is + * empty or is to be rewritten (status = -2) or is unreadable. + * Try to format and save it. + */ + if (print_where) { + printf ("%s\n", man_file); + return 1; + } + + if (!make_cat_file (path, man_file, cat_file)) + return 0; + + /* + * If we just created this cat file, unlink any others. + */ + if (status == -2 && do_compress) + remove_other_catfiles(cat_file); + } else { + /* + * Formatting not necessary. Cat file is newer than source + * file, or source file is not present but cat file is. + */ + if (print_where) { + if (one_per_line) { + /* addition by marty leisner - leisner@sdsp.mc.xerox.com */ + printf("%s\n", cat_file); + printf("%s\n", man_file); + } else + printf ("%s (<-- %s)\n", cat_file, man_file); + return 1; + } + } + (void) display_cat_file (cat_file); + return 1; +} + +/* + * Try to format the man page source and save it, then display it. If + * that's not possible, try to format the man page source and display + * it directly. + */ +static int +format_and_display (const char *man_file) { + const char *path; + + if (access (man_file, R_OK) != 0) + return 0; + + path = mandir_of(man_file); + if (path == NULL) + return 0; + + /* first test for contents .so man1/xyzzy.1 */ + /* (in that case we do not want to make a cat file identical + to cat1/xyzzy.1) */ + man_file = ultimate_source (man_file); + if (man_file == NULL) + return 0; + + if (do_troff) { + char *command; + char *roff_command = make_roff_command (path, man_file); + + if (roff_command == NULL) + return 0; + + command = my_xsprintf("(cd \"%S\" && %s)", path, roff_command); + return !do_system_command (command, 0); + } + + if (can_use_cache && make_and_display_cat_file (path, man_file)) + return 1; + + /* line length was wrong or could not display cat_file */ + if (print_where) { + printf ("%s\n", man_file); + return 1; + } + + return display_man_file (path, man_file); +} + +/* + * Search for manual pages. + * + * If preformatted manual pages are supported, look for the formatted + * file first, then the man page source file. If they both exist and + * the man page source file is newer, or only the source file exists, + * try to reformat it and write the results in the cat directory. If + * it is not possible to write the cat file, simply format and display + * the man file. + * + * If preformatted pages are not supported, or the troff option is + * being used, only look for the man page source file. + * + * Note that globbing is necessary also if the section is given, + * since a preformatted man page might be compressed. + * + */ +static int +man (const char *name, const char *section) { + int found, type, flags; + struct manpage *mp; + + found = 0; + + /* allow man ./manpage for formatting explicitly given man pages */ + if (index(name, '/')) { + char fullname[BUFSIZE]; + char fullpath[BUFSIZE]; + char *path; + char *cp; + FILE *fp = fopen(name, "r"); + + if (!fp) { + perror(name); + return 0; + } + fclose (fp); + if (*name != '/' && getcwd(fullname, sizeof(fullname)) + && strlen(fullname) + strlen(name) + 3 < sizeof(fullname)) { + strcat (fullname, "/"); + strcat (fullname, name); + } else if (strlen(name) + 2 < sizeof(fullname)) { + strcpy (fullname, name); + } else { + fprintf(stderr, "%s: name too long\n", name); + return 0; + } + + strcpy (fullpath, fullname); + if ((cp = rindex(fullpath, '/')) != NULL + && cp-fullpath+4 < sizeof(fullpath)) { + strcpy(cp+1, ".."); + path = fullpath; + } else + path = "."; + + name = ultimate_source (fullname); + if (!name) + return 0; + + if (print_where) { + printf("%s\n", name); + return 1; + } + return display_man_file (path, name); + } + + fflush (stdout); + init_manpath(); + + can_use_cache = nocache ? 0 : (preformat || print_where || + (isatty(0) && isatty(1) && !setll())); + + if (do_troff) { + const char *t = getval("TROFF"); + if (!t || !*t) + return 0; /* don't know how to format */ + type = TYPE_MAN; + } else { + const char *n = getval("NROFF"); + type = 0; + if (can_use_cache) + type |= TYPE_CAT; + if (n && *n) + type |= TYPE_MAN; + if (fhs || fsstnd) + type |= TYPE_SCAT; + + n = getval("BROWSER"); + if (n && *n) + type |= TYPE_HTML; + } + + flags = type; + if (!findall) + flags |= ONLY_ONE; + if (fsstnd) + flags |= FSSTND; + else if (fhs) + flags |= FHS; + if (dohp) + flags |= DO_HP; + if (do_irix) + flags |= DO_IRIX; + if (do_win32) + flags |= DO_WIN32; + + mp = manfile(name, section, flags, section_list, mandirlist, + convert_to_cat); + found = 0; + while (mp) { + if (mp->type == TYPE_MAN) { + found = format_and_display(mp->filename); + } else if (mp->type == TYPE_CAT || mp->type == TYPE_SCAT) { + if (print_where) { + printf ("%s\n", mp->filename); + found = 1; + } else + found = display_cat_file(mp->filename); + } else if (mp->type == TYPE_HTML) { + if (print_where) { + printf ("%s\n", mp->filename); + found = 1; + } else + found = display_html_file(mp->filename); + } else + /* internal error */ + break; + if (found && !findall) + break; + mp = mp->next; + } + return found; +} + +static char ** +get_section_list (void) { + int i; + const char *p; + char *end; + static char *tmp_section_list[100]; + + if (colon_sep_section_list == NULL) { + if ((p = getenv ("MANSECT")) == NULL) + p = getval ("MANSECT"); + colon_sep_section_list = my_strdup (p); + } + + i = 0; + for (p = colon_sep_section_list; ; p = end+1) { + if ((end = strchr (p, ':')) != NULL) + *end = '\0'; + + tmp_section_list[i++] = my_strdup (p); + + if (end == NULL || i+1 == SIZE(tmp_section_list)) + break; + } + + tmp_section_list [i] = NULL; + return tmp_section_list; +} + +/* return 0 when all was OK */ +static int +do_global_apropos (char *name, char *section) { + char **dp, **gf; + char *pathname; + char *command; + int status, res; + + status = 0; + init_manpath(); + if (mandirlist) + for (dp = mandirlist; *dp; dp++) { + if (debug) + gripe(SEARCHING, *dp); + pathname = my_xsprintf("%s/man%s/*", *dp, section ? section : "*"); + gf = glob_filename (pathname); + free(pathname); + + if (gf != (char **) -1 && gf != NULL) { + for( ; *gf; gf++) { + const char *expander = get_expander (*gf); + if (expander) + command = my_xsprintf("%s %S | grep '%Q'" + "> /dev/null 2> /dev/null", + expander, *gf, name); + else + command = my_xsprintf("grep '%Q' %S" + "> /dev/null 2> /dev/null", + name, *gf); + res = do_system_command (command, 1); + status |= res; + free (command); + if (res == 0) { + if (print_where) + printf("%s\n", *gf); + else { + /* should read LOCALE, but libc 4.6.27 doesn't + seem to handle LC_RESPONSE yet */ + int answer, c; + char path[BUFSIZE]; + + printf("%s? [ynq] ", *gf); + fflush(stdout); + answer = c = getchar(); + while (c != '\n' && c != EOF) + c = getchar(); + if(index("QqXx", answer)) + exit(0); + if(index("YyJj", answer)) { + char *ri; + + strcpy(path, *gf); + ri = rindex(path, '/'); + if (ri) + *ri = 0; + format_and_display(*gf); + } + } + } + } + } + } + return status; +} + +/* Special code for Japanese (to pick jnroff instead of nroff, etc.) */ +static void +setlang(void) { + char *lang; + + /* We use getenv() instead of setlocale(), because of + glibc 2.1.x security policy for SetUID/SetGID binary. */ + if ((lang = getenv("LANG")) == NULL && + (lang = getenv("LC_ALL")) == NULL && + (lang = getenv("LC_CTYPE")) == NULL) + /* nothing */; + + language = lang; + is_japanese = (lang && strncmp(lang, "ja", 2) == 0); +} + +/* + * Handle the apropos option. Cheat by using another program. + */ +static int +do_apropos (char *name) { + char *command; + + command = my_xsprintf("'%s' '%Q'", getval("APROPOS"), name); + return do_system_command (command, 0); +} + +/* + * Handle the whatis option. Cheat by using another program. + */ +static int +do_whatis (char *name) { + char *command; + + command = my_xsprintf("'%s' '%Q'", getval("WHATIS"), name); + return do_system_command (command, 0); +} + +int +main (int argc, char **argv) { + int status = 0; + char *nextarg; + char *tmp; + char *section = 0; + +#ifdef __CYGWIN__ + extern int optind; +#endif + + +#if 0 + { + /* There are no known cases of buffer overflow caused by + excessively long environment variables. In case you find one, + the simplistic way to fix is to enable this stopgap. */ + char *s; +#define CHECK(p,l) s=getenv(p); if(s && strlen(s)>(l)) { fprintf(stderr, "ERROR: Environment variable %s too long!\n", p); exit(1); } + CHECK("LANG", 32); + CHECK("LANGUAGE", 128); + CHECK("LC_MESSAGES", 128); + CHECK("MANPAGER", 128); + CHECK("MANPL", 128); + CHECK("MANROFFSEQ", 128); + CHECK("MANSECT", 128); + CHECK("MAN_HP_DIREXT", 128); + CHECK("PAGER", 128); + CHECK("SYSTEM", 64); + CHECK("BROWSER", 64); + CHECK("HTMLPAGER", 64); + /* COLUMNS, LC_ALL, LC_CTYPE, MANPATH, MANWIDTH, MAN_IRIX_CATNAMES, + MAN_ICONV_PATH, MAN_ICONV_OPT, MAN_ICONV_INPUT_CHARSET, + MAN_ICONV_OUTPUT_CHARSET, NLSPATH, PATH */ + } +#endif + + +#ifndef __FreeBSD__ + /* Slaven Rezif: FreeBSD-2.2-SNAP does not recognize LC_MESSAGES. */ + setlocale(LC_CTYPE, ""); /* used anywhere? maybe only isdigit()? */ + setlocale(LC_MESSAGES, ""); +#endif + + /* No doubt we'll need some generic language code here later. + For the moment only Japanese support. */ + setlang(); + + /* Handle /usr/man/man1.Z/name.1 nonsense from HP */ + dohp = getenv("MAN_HP_DIREXT"); /* .Z */ + + /* Handle ls.z (instead of ls.1.z) cat page naming from IRIX */ + if (getenv("MAN_IRIX_CATNAMES")) + do_irix = 1; + + /* Handle lack of ':' in NTFS file names */ +#if defined(_WIN32) || defined(__CYGWIN__) + do_win32 = 1; +#endif + + progname = mkprogname (argv[0]); + + get_permissions (); + get_line_length(); + + /* + * read command line options and man.conf + */ + man_getopt (argc, argv); + + /* + * manpath or man --path or man -w will only print the manpath + */ + if (!strcmp (progname, "manpath") || (optind == argc && print_where)) { + init_manpath(); + prmanpath(); + exit(0); + } + + if (optind == argc) + gripe(NO_NAME_NO_SECTION); + + section_list = get_section_list (); + + while (optind < argc) { + nextarg = argv[optind++]; + + /* is_section correctly accepts 3Xt as section, but also 9wm, + so we should not believe is_section() for the last arg. */ + tmp = is_section (nextarg); + if (tmp && optind < argc) { + section = tmp; + if (debug) + gripe (SECTION, section); + continue; + } + + if (global_apropos) + status = !do_global_apropos (nextarg, section); + else if (apropos) + status = !do_apropos (nextarg); + else if (whatis) + status = !do_whatis (nextarg); + else { + status = man (nextarg, section); + + if (status == 0) { + if (section) + gripe (NO_SUCH_ENTRY_IN_SECTION, nextarg, section); + else + gripe (NO_SUCH_ENTRY, nextarg); + } + } + + /* reset duplicate search - + fixes Fedora#542852 "man cut cut throws an error" */ + free_catman_filelists (); + } + return status ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/src/man.conf b/src/man.conf new file mode 100644 index 0000000..88073e4 --- /dev/null +++ b/src/man.conf @@ -0,0 +1,144 @@ +# +# Generated automatically from man.conf.in by the +# configure script. +# +# man.conf from man-1.6g +# +# For more information about this file, see the man pages man(1) +# and man.conf(5). +# +# This file is read by man to configure the default manpath (also used +# when MANPATH contains an empty substring), to find out where the cat +# pages corresponding to given man pages should be stored, +# and to map each PATH element to a manpath element. +# It may also record the pathname of the man binary. [This is unused.] +# The format is: +# +# MANBIN pathname +# MANPATH manpath_element [corresponding_catdir] +# MANPATH_MAP path_element manpath_element +# +# If no catdir is given, it is assumed to be equal to the mandir +# (so that this dir has both man1 etc. and cat1 etc. subdirs). +# This is the traditional Unix setup. +# Certain versions of the FSSTND recommend putting formatted versions +# of /usr/.../man/manx/page.x into /var/catman/.../catx/page.x. +# The keyword FSSTND will cause this behaviour. +# Certain versions of the FHS recommend putting formatted versions of +# /usr/.../share/man/[locale/]manx/page.x into +# /var/cache/man/.../[locale/]catx/page.x. +# The keyword FHS will cause this behaviour (and overrides FSSTND). +# Explicitly given catdirs override. +# +# FSSTND +FHS +# +# This file is also read by man in order to find how to call nroff, less, etc., +# and to determine the correspondence between extensions and decompressors. +# +# MANBIN /usr/local/bin/man +# +# Every automatically generated MANPATH includes these fields +# +MANPATH /usr/man +MANPATH /usr/share/man +MANPATH /usr/local/man +MANPATH /usr/local/share/man +MANPATH /usr/X11R6/man +# +# Uncomment if you want to include one of these by default +# +# MANPATH /opt/*/man +# MANPATH /usr/lib/*/man +# MANPATH /usr/share/*/man +# MANPATH /usr/kerberos/man +# +# Set up PATH to MANPATH mapping +# +# If people ask for "man foo" and have "/dir/bin/foo" in their PATH +# and the docs are found in "/dir/man", then no mapping is required. +# +# The below mappings are superfluous when the right hand side is +# in the mandatory manpath already, but will keep man from statting +# lots of other nearby files and directories. +# +MANPATH_MAP /bin /usr/share/man +MANPATH_MAP /sbin /usr/share/man +MANPATH_MAP /usr/bin /usr/share/man +MANPATH_MAP /usr/sbin /usr/share/man +MANPATH_MAP /usr/local/bin /usr/local/share/man +MANPATH_MAP /usr/local/sbin /usr/local/share/man +MANPATH_MAP /usr/X11R6/bin /usr/X11R6/man +MANPATH_MAP /usr/bin/X11 /usr/X11R6/man +MANPATH_MAP /usr/bin/mh /usr/share/man +# +# NOAUTOPATH keeps man from automatically adding directories that look like +# manual page directories to the path. +# +#NOAUTOPATH +# +# NOCACHE keeps man from creating cache pages ("cat pages") +# (generally one enables/disable cat page creation by creating/deleting +# the directory they would live in - man never does mkdir) +# +#NOCACHE +# +# Useful paths - note that COL should not be defined when +# NROFF is defined as "groff -Tascii" or "groff -Tlatin1"; +# not only is it superfluous, but it actually damages the output. +# For use with utf-8, NROFF should be "nroff -mandoc" without -T option. +# (Maybe - but today I need -Tlatin1 to prevent double conversion to utf8.) +# +# If you have a new troff (version 1.18.1?) and its colored output +# causes problems, add the -c option to TROFF, NROFF, JNROFF. +# +TROFF /usr/bin/groff -Tps -mandoc +NROFF /usr/bin/nroff -Tlatin1 -mandoc +JNROFF /usr/bin/groff -Tnippon -mandocj +EQN /usr/bin/geqn -Tps +NEQN /usr/bin/geqn -Tlatin1 +JNEQN /usr/bin/geqn -Tnippon +TBL /usr/bin/gtbl +# COL /usr/bin/col +REFER +PIC /usr/bin/gpic +VGRIND +GRAP +PAGER /bin/less -is +BROWSER /bin/less -is +HTMLPAGER /bin/cat +CAT /bin/cat +# +# The command "man -a xyzzy" will show all man pages for xyzzy. +# When CMP is defined man will try to avoid showing the same +# text twice. (But compressed pages compare unequal.) +# +CMP /usr/bin/cmp -s +# +# Compress cat pages +# +COMPRESS /usr/bin/xz +COMPRESS_EXT .xz +# +# Default manual sections (and order) to search if -S is not specified +# and the MANSECT environment variable is not set. +# +MANSECT 1:1p:8:2:3:3p:4:5:6:7:9:0p:tcl:n:l:p:o +# +# Default options to use when man is invoked without options +# This is mainly for the benefit of those that think -a should be the default +# Note that some systems have /usr/man/allman, causing pages to be shown twice. +# +#MANDEFOPTIONS -a +# +# Decompress with given decompressor when input file has given extension +# The command given must act as a filter. +# +.gz /bin/gunzip -c +.bz2 /bin/bzip2 -c -d +.lzma /usr/bin/unlzma -c -d +.z +.Z /bin/zcat +.F +.Y +.xz /usr/bin/unxz -c diff --git a/src/man.conf.in b/src/man.conf.in new file mode 100644 index 0000000..ce73ffc --- /dev/null +++ b/src/man.conf.in @@ -0,0 +1,140 @@ +# man.conf from @version@ +# +# For more information about this file, see the man pages man(1) +# and man.conf(5). +# +# This file is read by man to configure the default manpath (also used +# when MANPATH contains an empty substring), to find out where the cat +# pages corresponding to given man pages should be stored, +# and to map each PATH element to a manpath element. +# It may also record the pathname of the man binary. [This is unused.] +# The format is: +# +# MANBIN pathname +# MANPATH manpath_element [corresponding_catdir] +# MANPATH_MAP path_element manpath_element +# +# If no catdir is given, it is assumed to be equal to the mandir +# (so that this dir has both man1 etc. and cat1 etc. subdirs). +# This is the traditional Unix setup. +# Certain versions of the FSSTND recommend putting formatted versions +# of /usr/.../man/manx/page.x into /var/catman/.../catx/page.x. +# The keyword FSSTND will cause this behaviour. +# Certain versions of the FHS recommend putting formatted versions of +# /usr/.../share/man/[locale/]manx/page.x into +# /var/cache/man/.../[locale/]catx/page.x. +# The keyword FHS will cause this behaviour (and overrides FSSTND). +# Explicitly given catdirs override. +# +@fsstnd@FSSTND +@fhs@FHS +# +# This file is also read by man in order to find how to call nroff, less, etc., +# and to determine the correspondence between extensions and decompressors. +# +# MANBIN /usr/local/bin/man +# +# Every automatically generated MANPATH includes these fields +# +MANPATH /usr/man +MANPATH /usr/share/man +MANPATH /usr/local/man +MANPATH /usr/local/share/man +MANPATH /usr/X11R6/man +# +# Uncomment if you want to include one of these by default +# +# MANPATH /opt/*/man +# MANPATH /usr/lib/*/man +# MANPATH /usr/share/*/man +# MANPATH /usr/kerberos/man +# +# Set up PATH to MANPATH mapping +# +# If people ask for "man foo" and have "/dir/bin/foo" in their PATH +# and the docs are found in "/dir/man", then no mapping is required. +# +# The below mappings are superfluous when the right hand side is +# in the mandatory manpath already, but will keep man from statting +# lots of other nearby files and directories. +# +MANPATH_MAP /bin /usr/share/man +MANPATH_MAP /sbin /usr/share/man +MANPATH_MAP /usr/bin /usr/share/man +MANPATH_MAP /usr/sbin /usr/share/man +MANPATH_MAP /usr/local/bin /usr/local/share/man +MANPATH_MAP /usr/local/sbin /usr/local/share/man +MANPATH_MAP /usr/X11R6/bin /usr/X11R6/man +MANPATH_MAP /usr/bin/X11 /usr/X11R6/man +MANPATH_MAP /usr/bin/mh /usr/share/man +# +# NOAUTOPATH keeps man from automatically adding directories that look like +# manual page directories to the path. +# +#NOAUTOPATH +# +# NOCACHE keeps man from creating cache pages ("cat pages") +# (generally one enables/disable cat page creation by creating/deleting +# the directory they would live in - man never does mkdir) +# +#NOCACHE +# +# Useful paths - note that COL should not be defined when +# NROFF is defined as "groff -Tascii" or "groff -Tlatin1"; +# not only is it superfluous, but it actually damages the output. +# For use with utf-8, NROFF should be "nroff -mandoc" without -T option. +# (Maybe - but today I need -Tlatin1 to prevent double conversion to utf8.) +# +# If you have a new troff (version 1.18.1?) and its colored output +# causes problems, add the -c option to TROFF, NROFF, JNROFF. +# +TROFF @troff@ +NROFF @nroff@ +JNROFF @jnroff@ +EQN @eqn@ +NEQN @neqn@ +JNEQN @jneqn@ +TBL @tbl@ +@nocol@COL @col@ +REFER @refer@ +PIC @pic@ +VGRIND @vgrind@ +GRAP @grap@ +PAGER @pager@ +BROWSER @browser@ +HTMLPAGER @htmlpager@ +CAT @cat@ +# +# The command "man -a xyzzy" will show all man pages for xyzzy. +# When CMP is defined man will try to avoid showing the same +# text twice. (But compressed pages compare unequal.) +# +CMP @cmp@ +# +# Compress cat pages +# +COMPRESS @compress@ +COMPRESS_EXT @compress_ext@ +# +# Default manual sections (and order) to search if -S is not specified +# and the MANSECT environment variable is not set. +# +MANSECT @sections@ +# +# Default options to use when man is invoked without options +# This is mainly for the benefit of those that think -a should be the default +# Note that some systems have /usr/man/allman, causing pages to be shown twice. +# +#MANDEFOPTIONS -a +# +# Decompress with given decompressor when input file has given extension +# The command given must act as a filter. +# +.gz @gunzip@ +.bz2 @bzip2@ +.lzma @unlzma@ +.z @pcat@ +.Z @zcat@ +.F @fcat@ +.Y @unyabba@ +.xz @unxz@ diff --git a/src/man.h b/src/man.h new file mode 100644 index 0000000..285aac7 --- /dev/null +++ b/src/man.h @@ -0,0 +1,22 @@ +extern int debug; +extern int do_compress; +extern int fhs; +extern int fsstnd; +extern int noautopath; +extern int nocache; +extern int findall; +extern int nocats; +extern int preformat; +extern int do_troff; +extern int apropos; +extern int whatis; +extern int print_where; +extern int one_per_line; +extern int do_irix; +extern char *dohp; +extern const char *progname; +extern const char *pager; +extern const char *browser; +extern const char *htmlpager; +extern char *colon_sep_section_list; +extern char *roff_directive; diff --git a/src/man2dvi b/src/man2dvi new file mode 100755 index 0000000..f9cb52e --- /dev/null +++ b/src/man2dvi @@ -0,0 +1,36 @@ +#! /bin/sh +# +# Script to format manpages to dvi. +# Copyright (c) 1997 Tobias Begalke (tb@lst.de) +# +# Part of release 1.6g of the man suite. +# + +groff="groff -Tdvi -mandoc" + +if [ ! $# = 1 ]; then + echo "$0: usage:" + echo " $0 [topic] > topic.dvi" + exit 1 +fi + +location=`man -c -w $1` + +if [ "$location" = "" ]; then + exit 1 +fi + +case `file $location` in + *gzip* ) + zcat $location | $groff + ;; + + *bzip2* ) + bzcat $location | $groff + ;; + + *troff* ) + $groff $location + ;; +esac + diff --git a/src/manfile.c b/src/manfile.c new file mode 100644 index 0000000..0df62ea --- /dev/null +++ b/src/manfile.c @@ -0,0 +1,337 @@ +/* + * manfile.c - aeb, 971231 + * + * Used both by man and man2html - be careful with printing! + */ +#include +#include +#include +#include +#include + +#include "glob.h" +#include "util.h" +#include "manfile.h" +#include "gripes.h" +#include "man.h" /* for debug */ + +static int standards; +static const char *((*to_cat_filename)(const char *man_filename, + const char *ext, int flags)); + +/* + * Append the struct or chain A to the chain HEAD. + */ +static void +append(struct manpage **head, struct manpage *a) { + struct manpage *p; + + if (a) { + if (*head) { + p = *head; + while(p->next) + p = p->next; + p->next = a; + } else + *head = a; + } +} + + +static int +my_lth(const char *s) { + return s ? strlen(s) : 0; +} + +/* + * Find the files of the form DIR/manSEC/NAME.EXT etc. + * Use "man" for TYPE_MAN, "cat" for TYPE_SCAT, and + * apply convert_to_cat() to the man version for TYPE_CAT. + * + * Some HP systems use /usr/man/man1.Z/name.1, where name.1 is + * compressed - yuk. We can handle this by using section 1.Z + * instead of 1 and assuming that the man page is compressed + * if the directory name ends in .Z. + * + * Some Sun systems use /usr/share/man/sman1/man.1 and + * /usr/share/man/sman1m/mkfs.1m. + * + * We support HTML filenames of the following form: + * /usr/share/man/sman1m/mkfs.1m.html, optionally followed + * by a compression suffix. + * + * Returns an array with pathnames, or 0 if out-of-memory or error. + */ +static char ** +glob_for_file_ext_glob (const char *dir, const char *sec, + const char *name, const char *ext, char *hpx, + int glob, int type) { + char *pathname; + const char *p; + char **names; + int len; +#define MANFORM "%s/%s%s%s/%s.%s" +#define GLOB "*" +#define LENGTHOF(s) (sizeof(s)-1) +/* This must be long enough to hold the format-directory name. + * The basic type-directory names are 'cat' and 'man'; this needs to + * allocate space for those or any others such as html or sman. + */ +#define TYPELEN 8 + + len = my_lth(dir) + my_lth(sec) + my_lth(hpx) + my_lth(name) + my_lth(ext) + + TYPELEN + + LENGTHOF(".html") + LENGTHOF(MANFORM) + LENGTHOF(GLOB); + + if (debug >= 2) + gripe(CALLTRACE3, dir, sec, name, ext, hpx, glob, type); + + pathname = (char *) malloc(len); + if (!pathname) + return 0; + + sprintf (pathname, MANFORM, + dir, + (type==TYPE_HTML) ? "html" : (type==TYPE_XML) ? "sman" : (type==TYPE_SCAT) ? "cat" : "man", + sec, hpx, name, ext); + if (type == TYPE_HTML) + strcat(pathname, ".html"); + if (glob) + strcat(pathname, GLOB); + + if (type == TYPE_CAT) { + p = to_cat_filename(pathname, 0, standards); + if (p) { + free(pathname); + } else { + sprintf (pathname, "%s/cat%s%s/%s.%s%s", + dir, sec, hpx, name, ext, glob ? GLOB : ""); + p = pathname; + } + } else + p = pathname; + + if (debug >=2) + gripe(ABOUT_TO_GLOB, p); + names = glob_filename (p); + if (names == (char **) -1) /* file system error; print msg? */ + names = 0; + return names; +} + +static char ** +glob_for_file_ext (const char *dir, const char *sec, + const char *name, const char *ext, int type) { + char **names, **namesglob; + char *hpx = ((standards & DO_HP) ? ".Z" : ""); + + namesglob = glob_for_file_ext_glob(dir,sec,name,ext,hpx,1,type); + if (!namesglob && *hpx) { + hpx = ""; + namesglob = glob_for_file_ext_glob(dir,sec,name,ext,hpx,1,type); + } + if (!namesglob) + return 0; + if (*namesglob) { + /* we found something - try to get a more precise match */ + names = glob_for_file_ext_glob(dir,sec,name,ext,hpx,0,type); + if (names && *names) + namesglob = names; + } + return namesglob; +} + +/* + * Find the files of the form DIR/manSEC/NAME.SEC etc. + */ +static char ** +glob_for_file (const char *dir, const char *sec, const char *name, int type) { + char **names; + + if (debug >= 2) + gripe(CALLTRACE2, dir, sec, name, type); + + if (standards & DO_IRIX) { + /* try first without `sec' extension */ + /* maybe this should be done only for cat pages? */ + return glob_for_file_ext (dir, sec, name, "", type); + } + + /* try /usr/X11R6/man/man3x/XSetFont.3x */ + names = glob_for_file_ext (dir, sec, name, sec, type); + + if (!names) + return 0; /* out-of-memory or error */ + + /* sometimes the extension is only a single digit */ + if (!*names && isdigit(sec[0]) && sec[1] != 0) { + char ext[2]; + ext[0] = sec[0]; + ext[1] = 0; + names = glob_for_file_ext (dir, sec, name, ext, type); + } + + if (!names) + return 0; /* out-of-memory or error */ + + /* or the extension could be .man */ + if (!*names) + names = glob_for_file_ext (dir, sec, name, "man", type); + + if (debug >= 2) { + if (!names[0]) + gripe(NO_MATCH); + else { + char **np; + for (np = names; *np; np++) + gripe(GLOB_FOR_FILE, *np); + } + } + + return names; +} + +/* + * Find a man page of the given NAME under the directory DIR, + * in section SEC. Only types (man, cat, scat, html) permitted in FLAGS + * are allowed, and priorities are in this order. + */ +static struct manpage * +manfile_from_sec_and_dir(const char *dir, + const char *sec, const char *name, int flags) { + struct manpage *res = 0; + struct manpage *p; + char **names, **np; + int i, type; + int types[] = {TYPE_HTML, TYPE_MAN, TYPE_CAT, TYPE_SCAT}; + + if (debug >= 2) + gripe(CALLTRACE1, dir, sec, name, flags); + + for (i=0; i<(sizeof(types)/sizeof(types[0])); i++) { + type = types[i]; + + /* If convert_to_cat() is trivial, TYPE_CAT and TYPE_SCAT + are the same thing. */ + if ((type == TYPE_CAT) && (flags & TYPE_SCAT) && !standards) + continue; + + if (flags & type) { + names = glob_for_file (dir, sec, name, type); + if (names) { + for (np = names; *np; np++) { +#if 1 + /* Keep looking if we encounter a file + we can't access */ + if (access(*np, R_OK)) + continue; + + if (debug >= 2) + gripe(FOUND_FILE, *np); + /* disadvantage: no error message when permissions + are wrong, the page just silently becomes + invisible */ +#endif + p = (struct manpage *) malloc(sizeof(*p)); + if (!p) + break; /* %% perhaps print msg, free names */ + p->filename = *np; + p->type = type; + p->next = 0; + append(&res, p); + if (res && (flags & ONLY_ONE_PERSEC)) + break; + } + free(names); + } + } + + if (res) + return res; + } + + return res; +} + +/* + * Find a man page of the given NAME, searching in the specified SECTION. + * Searching is done in all directories of MANPATH. + */ +static struct manpage * +manfile_from_section(const char *name, const char *section, + int flags, char **manpath) { + char **mp; + struct manpage *res = 0; + + for (mp = manpath; *mp; mp++) { + append(&res, manfile_from_sec_and_dir(*mp, section, name, flags)); + if (res && (flags & ONLY_ONE_PERSEC)) + break; + } +#if 0 + /* Someone wants section 1p - better not to give 1 */ + if (res == NULL && isdigit(section[0]) && section[1]) { + char sec[2]; + + sec[0] = section[0]; + sec[1] = 0; + for (mp = manpath; *mp; mp++) { + append(&res, manfile_from_sec_and_dir(*mp, sec, name, flags)); + if (res && (flags & ONLY_ONE_PERSEC)) + break; + } + } +#endif + return res; +} + +/* + * Find a man page of the given NAME, searching in the specified + * SECTION, or, if that is 0, in all sections in SECTIONLIST. + * Searching is done in all directories of MANPATH. + * If FLAGS contains the ONLY_ONE bits, only the first matching + * page is returned; otherwise all matching pages are found. + * Only types (man, cat, scat) permitted in FLAGS are allowed. + */ +struct manpage * +manfile(const char *name, const char *section, int flags, + char **sectionlist, char **manpath, + const char *((*tocat)(const char *man_filename, const char *ext, + int flags))) { + char **sl; + struct manpage *res; + + standards = (flags & (FHS | FSSTND | DO_HP | DO_IRIX)); + to_cat_filename = tocat; + + if (name && (flags & DO_WIN32)) { /* Convert : sequences to a ? */ + char *n = my_malloc(strlen(name) + 1); + const char *p = name; + char *q = n; + + while (*p) { + if (*p == ':') { + *q++ = '?'; + while (*p == ':') + p++; + } else + *q++ = *p++; + } + *q = 0; + name = n; + } + + if (!name || !manpath) /* error msg? */ + res = 0; + else if (section) + res = manfile_from_section(name, section, flags, manpath); + else if (sectionlist) { + res = 0; + for (sl = sectionlist; *sl; sl++) { + append(&res, manfile_from_section(name, *sl, flags, manpath)); + if (res && (flags & ONLY_ONE)) + break; + } + } + return res; +} diff --git a/src/manfile.h b/src/manfile.h new file mode 100644 index 0000000..cae3add --- /dev/null +++ b/src/manfile.h @@ -0,0 +1,36 @@ +struct manpage { + struct manpage *next; + char *filename; + int type; +}; + +#define TYPE_MAN 0x0001 +#define TYPE_CAT 0x0002 +#define TYPE_SCAT 0x0004 +#define TYPE_HTML 0x0008 +#define TYPE_XML 0x0010 /* not presently used */ + +#define ONLY_ONE_PERSEC 0x0020 /* do not return more pages from one section */ +#define ONLY_ONE 0x0040 /* return only a single page */ + +/* various standards have various ideas about where the cat pages + ought to live */ +#define FSSTND 0x0080 +#define FHS 0x0100 + +/* HP has a peculiar way to indicate that pages are compressed */ +#define DO_HP 0x0200 /* compressed file in man1.Z/ls.1 */ + +/* IRIX has a peculiar cat page naming */ +#define DO_IRIX 0x0400 /* cat page ls.z, not ls.1.z */ + +/* Sun uses both man and sman, where sman contains XML */ +#define DO_SUN 0x0800 /* unused today */ + +/* NTFS cannot handle : in filenames */ +#define DO_WIN32 0x1000 /* turn :: into ? */ + +extern struct manpage * +manfile(const char *name, const char *section, int flags, + char **sectionlist, char **manpath, + const char *(*tocat)(const char *, const char *, int)); diff --git a/src/manpath.c b/src/manpath.c new file mode 100644 index 0000000..90d520e --- /dev/null +++ b/src/manpath.c @@ -0,0 +1,412 @@ +/* + * manpath.c + * + * Copyright (c) 1990, 1991, John W. Eaton. + * + * You may distribute under the terms of the GNU General Public + * License as specified in the file COPYING that comes with the man + * distribution. + * + * John W. Eaton + * jwe@che.utexas.edu + * Department of Chemical Engineering + * The University of Texas at Austin + * Austin, Texas 78712 + * + * Changed PATH->manpath algorithm + * Added: an empty string in MANPATH denotes the system path + * Added: use LANG to search in /usr/man/ + * Lots of other minor things, including spoiling the indentation. + * aeb - 940315 + */ + +#include +#include +#include +#include +#include +#include + +/* not always in */ +extern char *index(const char *, int); +extern char *rindex(const char *, int); + +#include "defs.h" +#include "gripes.h" +#include "man.h" /* for debug */ +#include "man-config.h" /* for cfdirlist */ +#include "man-getopt.h" /* for alt_system, opt_manpath */ +#include "manpath.h" +#include "util.h" /* my_malloc, my_strdup */ + +char **mandirlist; +static int mandirlistlth = 0; +static int mandirlistmax = 0; + +/* + * Input: a string, with : as separator + * For each entry in the string, call fn. + */ +static void +split (char *string, void (*fn)(char *, int), int perrs) { + char *p, *q, *r; + + if (string) { + p = my_strdup(string); + for (q = p; ; ) { + if ((r = index(q, ':'))==(char*)0) + r=index(q,'\01'); + if (r) { + *r = 0; + fn (q, perrs); + q = r+1; + } else { + fn (q, perrs); + break; + } + } + free (p); + } +} + +static void +split2 (char *s, char *string, void (*fn)(char *, char *, int), int perrs) { + char *p, *q, *r; + + if (string) { + p = my_strdup(string); + for (q = p; ; ) { + r = index(q, ':'); + if (r) { + *r = 0; + fn (s, q, perrs); + q = r+1; + } else { + fn (s, q, perrs); + break; + } + } + free (p); + } +} + +/* + * Is path a directory? + * -1: error, 0: no, 1: yes. + */ +static int +is_directory (char *path) { + struct stat sb; + + if (stat (path, &sb) != 0) + return -1; + + return ((sb.st_mode & S_IFDIR) == S_IFDIR); +} + +/* + * Check to see if the current directory has man or MAN + * or ../man or ../man1 or ../man8 subdirectories. + */ +static char * +find_man_subdir (char *p) { + int len; + char *t, *sp; + + len = strlen (p); + + t = my_malloc ((unsigned) len + 20); + + memcpy (t, p, len); + strcpy (t + len, "/man"); + + if (is_directory (t) == 1) + return t; + + strcpy (t + len, "/MAN"); + + if (is_directory (t) == 1) + return t; + + /* find parent directory */ + t[len] = 0; + if ((sp = rindex (t, '/')) != NULL) { + *sp = 0; + len = sp - t; + } else { + strcpy (t + len, "/.."); + len += 3; + } + + /* look for the situation with packagedir/bin and packagedir/man */ + strcpy (t + len, "/man"); + + if (is_directory (t) == 1) + return t; + + /* look for the situation with pkg/bin and pkg/man1 or pkg/man8 */ + /* (looking for all man[1-9] would probably be a waste of stats) */ + strcpy (t + len, "/man1"); + + if (is_directory (t) == 1) { + t[len] = 0; + return t; + } + + strcpy (t + len, "/man8"); + + if (is_directory (t) == 1) { + t[len] = 0; + return t; + } + + free (t); + return NULL; +} + +/* + * Add a directory to the manpath list if it isn't already there. + */ +static void +add_to_list (char *dir, char *lang, int perrs) { + int status; + char cwd[BUFSIZ]; + char **dp; + + if (!lang) + lang = ""; + + /* only add absolute paths */ + if (*dir != '/') { + if (!getcwd(cwd, sizeof(cwd))) + return; /* cwd not readable, or pathname very long */ + if (cwd[0] != '/') + return; /* strange.. */ + if (strlen(dir) + strlen(lang) + strlen(cwd) + 3 > sizeof(cwd)) + return; + if (!strncmp (dir, "./", 2)) + dir += 2; + while (!strncmp (dir, "../", 3)) { + char *p = rindex (cwd, '/'); + if (p > cwd) + *p = 0; + else + cwd[1] = 0; + dir += 3; + } + strcat (cwd, "/"); + strcat (cwd, dir); + if (*lang) { + strcat (cwd, "/"); + strcat (cwd, lang); + } + dir = cwd; + } else if (*lang) { + if (strlen(dir) + strlen(lang) + 2 > sizeof(cwd)) + return; + strcpy (cwd, dir); + strcat (cwd, "/"); + strcat (cwd, lang); + dir = cwd; + } + + if (mandirlist) { + for (dp = mandirlist; *dp; dp++) { + if (!strcmp (*dp, dir)) + return; + } + } + + /* + * Avoid trickery: no /../ in path. + */ + if (strstr(dir, "/../")) + return; + + /* + * Not found -- add it. + */ + status = is_directory(dir); + + if (status < 0 && perrs) { + gripe (CANNOT_STAT, dir); + } else if (status == 0 && perrs) { + gripe (IS_NO_DIR, dir); + } else if (status == 1) { + if (debug) + gripe (ADDING_TO_MANPATH, dir); + + if (!mandirlist || mandirlistlth+1 >= mandirlistmax) { + int i, ct = mandirlistmax + 100; + char **p = (char **) my_malloc(ct * sizeof(char *)); + + if (mandirlist) { + for (i=0; i 5 && lang[5] == '.') { + char lang2[6]; /* e.g. zh_CN from zh_CN.GB2312 */ + + strncpy(lang2,lang,5); + lang2[5] = 0; + add_to_list(dir, lang2, perrs); + } + if (lang && strlen(lang) > 2) { + char lang2[3]; + + strncpy(lang2,lang,2); + lang2[2] = 0; + add_to_list(dir, lang2, perrs); + } +} + +static void +add_to_mandirlist (char *dir, int perrs) { + char *lang; + + if (alt_system) { + add_to_list(dir, alt_system_name, perrs); + } else { + /* We cannot use "lang = setlocale(LC_MESSAGES, NULL)" or so: + the return value of setlocale is an opaque string. */ + /* POSIX prescribes the order: LC_ALL, LC_MESSAGES, LANG */ + if((lang = getenv("LC_ALL")) != NULL) + split2(dir, lang, add_to_mandirlist_x, perrs); + if((lang = getenv("LC_MESSAGES")) != NULL) + split2(dir, lang, add_to_mandirlist_x, perrs); + if((lang = getenv("LANG")) != NULL) + split2(dir, lang, add_to_mandirlist_x, perrs); + if((lang = getenv("LANGUAGE")) != NULL) + split2(dir, lang, add_to_mandirlist_x, perrs); + add_to_mandirlist_x(dir, 0, perrs); + } +} + +/* + * For each directory in the user's path, see if it is one of the + * directories listed in the man.conf file. If so, and it is + * not already in the manpath, add it. If the directory is not listed + * in the man.conf file, see if there is a subdirectory `man' or + * `MAN'. If so, and it is not already in the manpath, add it. + * + * Example: user has /bin in his path and the directory + * /bin/man exists -- the directory /bin/man will be added + * to the manpath. + * Try also /man ?and ?, and, if LANG is set, /$LANG/man. + * aeb - 940320 + */ +static void +get_manpath_from_pathdir (char *dir, int perrs) { + char *t; + struct dirs *dlp; + + if (debug) + gripe (PATH_DIR, dir); + + /* + * The directory we're working on is in the config file. + * If we haven't added it to the list yet, do. + */ + if (*dir) { + for (dlp = cfdirlist.nxt; dlp; dlp = dlp->nxt) { + if (!strcmp (dir, dlp->bindir)) { + if (debug) + gripe (IS_IN_CONFIG); + + add_to_mandirlist (dlp->mandir, perrs); + return; + } + } + } + + if (!noautopath) { + /* + * The directory we're working on isn't in the config file. + * See if it has man or MAN subdirectories. If so, and this + * subdirectory hasn't been added to the list, do. (Try also + * a few other places nearby.) + */ + if (debug) + gripe (IS_NOT_IN_CONFIG); + + t = find_man_subdir (dir); + if (t != NULL) { + if (debug) + gripe (MAN_NEARBY); + + add_to_mandirlist (t, perrs); + free (t); + } else { + if (debug) + gripe (NO_MAN_NEARBY); + } + } +} + +static void +add_default_manpath (int perrs) { + struct dirs *dlp; + + if (debug) + gripe (ADDING_MANDIRS); + + for (dlp = cfdirlist.nxt; dlp; dlp = dlp->nxt) + if (dlp->mandatory) + add_to_mandirlist (dlp->mandir, perrs); +} + +static void +to_mandirlist(char *s, int perrs) { + char *path; + + if (*s) { + add_to_mandirlist (s, perrs); + } else { + /* empty substring: insert default path */ + if((path = getenv ("PATH")) != NULL) + split (path, get_manpath_from_pathdir, perrs); + add_default_manpath (perrs); + } +} + +void +init_manpath () { + static int done = 0; + + if (!done) { + char *manp; + + if ((manp = opt_manpath) == NULL && + (manp = getenv ("manpath")) == NULL && + (manp = getenv ("MANPATH")) == NULL) + manp = ""; /* default path */ + split (manp, to_mandirlist, 0); + done = 1; + } +} + +void +prmanpath () { + char **dp, **dp0; + + if (mandirlist) { + for (dp0 = dp = mandirlist; *dp; dp++) { + if (dp != dp0) + printf(":"); + printf("%s", *dp); + } + } + printf("\n"); +} diff --git a/src/manpath.h b/src/manpath.h new file mode 100644 index 0000000..5232938 --- /dev/null +++ b/src/manpath.h @@ -0,0 +1,5 @@ +/* functions and variables exported by manpath.c */ +void prmanpath (void); +void init_manpath (void); + +extern char ** mandirlist; diff --git a/src/msg.c b/src/msg.c new file mode 100644 index 0000000..874e22f --- /dev/null +++ b/src/msg.c @@ -0,0 +1,106 @@ +char *msg[] = { + "", +/* 1 */ "unable to make sense of the file %s\n", +/* 2 */ "Warning: cannot open configuration file %s\n", +/* 3 */ "Error parsing config file\n", +/* 4 */ "incompatible options %s and %s\n", +/* 5 */ "Sorry - no support for alternate systems compiled in\n", +/* 6 */ "Man was compiled with automatic cat page compression,\n\ +but the configuration file does not define COMPRESS.\n", +/* 7 */ "What manual page do you want from section %s?\n", +/* 8 */ "What manual page do you want?\n", +/* 9 */ "No entry for %s in section %s of the manual\n", +/* 10 */ "No manual entry for %s\n", +/* 11 */ "\nusing %s as pager\n", +/* 12 */ "Error executing formatting or display command.\n\ +System command %s exited with status %d.\n", +/* 13 */ "%s, version %s\n\n", +/* 14 */ "Out of memory - can't malloc %d bytes\n", +/* 15 */ "Error parsing *roff command from file %s\n", +/* 16 */ "Error parsing MANROFFSEQ. Using system defaults.\n", +/* 17 */ "Error parsing *roff command from command line.\n", +/* 18 */ "Unrecognized line in config file (ignored)\n%s\n", +/* 19 */ "man-config.c: internal error: string %s not found\n", +/* 20 */ "found man directory %s\n", +/* 21 */ "found manpath map %s --> %s\n", +/* 22 */ "corresponding catdir is %s\n", +/* 23 */ "Line too long in config file\n", +/* 24 */ "\nsection: %s\n", +/* 25 */ "unlinked %s\n", +/* 26 */ "globbing %s\n", +/* 27 */ "Attempt [%s] to expand man page failed\n", +/* 28 */ "Cannot open man page %s\n", +/* 29 */ "Error reading man page %s\n", +/* 30 */ "found eqn(1) directive\n", +/* 31 */ "found grap(1) directive\n", +/* 32 */ "found pic(1) directive\n", +/* 33 */ "found tbl(1) directive\n", +/* 34 */ "found vgrind(1) directive\n", +/* 35 */ "found refer(1) directive\n", +/* 36 */ "parsing directive from command line\n", +/* 37 */ "parsing directive from file %s\n", +/* 38 */ "parsing directive from environment\n", +/* 39 */ "using default preprocessor sequence\n", +/* 40 */ "Formatting page, please wait...\n", +/* 41 */ "changed mode of %s to %o\n", +/* 42 */ "Couldn't open %s for writing.\n", +/* 43 */ "will try to write %s if needed\n", +/* 44 */ "status from is_newer() = %d\n", +/* 45 */ "trying section %s\n", +/* 46 */ "\nsearching in %s\n", +/* 47 */ "but %s is already in the manpath\n", +/* 48 */ "Warning: cannot stat file %s!\n", +/* 49 */ "Warning: %s isn't a directory!\n", +/* 50 */ "adding %s to manpath\n", +/* 51 */ "\npath directory %s ", +/* 52 */ "is in the config file\n", +/* 53 */ "is not in the config file\n", +/* 54 */ "but there is a man directory nearby\n", +/* 55 */ "and we found no man directory nearby\n", +/* 56 */ "\nadding mandatory man directories\n\n", +/* 57 */ "cat_name in convert_to_cat () is: %s\n", +/* 58 */ "\nnot executing command:\n %s\n", +/* 59 */ "usage: %s [-adfhktwW] [section] [-M path] [-P pager] [-S list]\n\t", +/* 60 */ "[-m system] ", +/* 61 */ "[-p string] name ...\n\n", +/* 62 */ " a : find all matching entries\n\ + c : do not use cat file\n\ + d : print gobs of debugging information\n\ + D : as for -d, but also display the pages\n\ + f : same as whatis(1)\n\ + h : print this help message\n\ + k : same as apropos(1)\n\ + K : search for a string in all pages\n", +/* 63 */ " t : use troff to format pages for printing\n", +/* 64 */ "\ + w : print location of man page(s) that would be displayed\n\ + (if no name given: print directories that would be searched)\n\ + W : as for -w, but display filenames only\n\n\ + C file : use `file' as configuration file\n\ + M path : set search path for manual pages to `path'\n\ + P pager : use program `pager' to display pages\n\ + S list : colon separated section list\n", +/* 65 */ " m system : search for alternate system's man pages\n", +/* 66 */ " p string : string tells which preprocessors to run\n\ + e - [n]eqn(1) p - pic(1) t - tbl(1)\n\ + g - grap(1) r - refer(1) v - vgrind(1)\n", +/* 67 */ "and the real user cannot open the cat file either\n", +/* 68 */ "but the real user can open the cat file\n", +/* 69 */ "failed to fork off the command _%s_\n", +/* 70 */ "error while waiting for child _%s_\n", +/* 71 */ "very strange ..., got wrong pid while waiting for my child\n", +/* 72 */ "fatal error: the command _%s_ terminated abnormally\n", +/* 73 */ "Man page %s is identical to %s\n", +/* 74 */ "Found the man page(s):\n", +/* 75 */ "error: no TROFF command specified in %s\n", +/* 76 */ "no cat page stored because of nonstandard line length\n", +/* 77 */ "\nusing %s as browser\n", +/* 78 */ "\nusing %s to dump HTML pages as text\n", +/* 79 */ "manfile_from_sec_and_dir() found %s\n", +/* 80 */ "manfile_from_sec_and_dir(dir=%s, sec=%s, name=%s, flags=0x%0x)\n", +/* 81 */ "glob_for_file(dir=%s, sec=%s, name=%s, type=0x%0x, ...)\n", +/* 82 */ "glob_for_file found no matches.\n", +/* 83 */ "glob_for_file returns %s.\n", +/* 84 */ "glob_for_file_ext_glob(dir=%s, sec=%s, name=%s, ext=%s, hpx=%s, glob=%d, type=0x%0x);\n", +/* 85 */ "glob_for_file_ext_glob will expand %s\n", +}; diff --git a/src/mwi b/src/mwi new file mode 100755 index 0000000..3b52feb --- /dev/null +++ b/src/mwi @@ -0,0 +1,19 @@ +#!/bin/sh +# test which words in all caps end a NAME section in a (compressed) cat page +# +# Found so far: +# +# SYNOPSIS +# SYNOPOSIS +# SYSTEM V SYNOPSIS +# SYNTAX +# DESCRIPTION +# COMMAND +# OVERVIEW +# STRUCTURES +# INTRODUCTION +# + for i in * + do + zcat $i | col -bx | sed '1,/^NAME/d; /^[A-Z][A-Z]/q' | tail -1 + done diff --git a/src/ndir.h b/src/ndir.h new file mode 100644 index 0000000..438d5c2 --- /dev/null +++ b/src/ndir.h @@ -0,0 +1,51 @@ +/* + -- definitions for 4.2BSD-compatible directory access + + last edit: 09-Jul-1983 D A Gwyn +*/ + +#ifdef VMS +#ifndef FAB$C_BID +#include +#endif +#ifndef NAM$C_BID +#include +#endif +#ifndef RMS$_SUC +#include +#endif +#include "dir.h" +#endif /* VMS */ + +#define DIRBLKSIZ 512 /* size of directory block */ +#ifdef VMS +#define MAXNAMLEN (DIR$S_NAME + 7) /* 80 plus room for version #. */ +#define MAXFULLSPEC NAM$C_MAXRSS /* Maximum full spec */ +#else +#define MAXNAMLEN 15 /* maximum filename length */ +#endif /* VMS */ + /* NOTE: MAXNAMLEN must be one less than a multiple of 4 */ + +struct direct /* data from readdir() */ + { + long d_ino; /* inode number of entry */ + unsigned short d_reclen; /* length of this record */ + unsigned short d_namlen; /* length of string in d_name */ + char d_name[MAXNAMLEN+1]; /* name of file */ + }; + +typedef struct + { + int dd_fd; /* file descriptor */ + int dd_loc; /* offset in block */ + int dd_size; /* amount of valid data */ + char dd_buf[DIRBLKSIZ]; /* directory block */ + } DIR; /* stream data from opendir() */ + +extern DIR *opendir(); +extern struct direct *readdir(); +extern long telldir(); +extern void seekdir(); +extern void closedir(); + +#define rewinddir( dirp ) seekdir( dirp, 0L ) diff --git a/src/paths.h b/src/paths.h new file mode 100644 index 0000000..723731d --- /dev/null +++ b/src/paths.h @@ -0,0 +1,43 @@ +/* + * Generated automatically from paths.h.in by the + * configure script. + */ +/* paths.h - included in man-config.c */ +/* + * Define the absolute path to the configuration file and programs used. + * (If no configuration file is found then the preset values are used.) + */ +#ifndef CONFIG_FILE +#define CONFIG_FILE "/usr/share/misc/man.conf" +#endif + +static struct paths { + char *name; + char *path; /* path plus command options - never NULL */ +} paths[] = { + { "MANBIN", "" }, /* value unused */ + { "APROPOS", "/usr/bin/apropos" }, + { "WHATIS", "/usr/bin/whatis" }, + { "TROFF", "/usr/bin/groff -Tps -mandoc" }, + { "NROFF", "/usr/bin/nroff -Tlatin1 -mandoc" }, + { "JNROFF", "/usr/bin/groff -Tnippon -mandocj" }, + { "EQN", "/usr/bin/geqn -Tps" }, + { "NEQN", "/usr/bin/geqn -Tlatin1" }, + { "JNEQN", "/usr/bin/geqn -Tnippon" }, + { "TBL", "/usr/bin/gtbl" }, + { "COL", "" }, + { "REFER", "" }, + { "PIC", "/usr/bin/gpic" }, + { "VGRIND", "" }, + { "GRAP", "" }, + { "PAGER", "/bin/less -is" }, + { "BROWSER","/bin/less -is" }, + { "HTMLPAGER", "/bin/cat" }, + { "CMP", "/usr/bin/cmp -s" }, + { "CAT", "/bin/cat" }, + { "COMPRESS", "/usr/bin/xz" }, + { "COMPRESS_EXT", ".xz" }, /* not a path, just a string variable */ + { "DECOMPRESS", "/usr/bin/unxz -c" }, + { "MANSECT", "1:1p:8:2:3:3p:4:5:6:7:9:0p:tcl:n:l:p:o"}, /* idem */ + { "MANDEFOPTIONS", ""} /* idem */ +}; diff --git a/src/paths.h.in b/src/paths.h.in new file mode 100644 index 0000000..ee9ec75 --- /dev/null +++ b/src/paths.h.in @@ -0,0 +1,39 @@ +/* paths.h - included in man-config.c */ +/* + * Define the absolute path to the configuration file and programs used. + * (If no configuration file is found then the preset values are used.) + */ +#ifndef CONFIG_FILE +#define CONFIG_FILE "@man_config_file@" +#endif + +static struct paths { + char *name; + char *path; /* path plus command options - never NULL */ +} paths[] = { + { "MANBIN", "" }, /* value unused */ + { "APROPOS", "@apropos@" }, + { "WHATIS", "@whatis@" }, + { "TROFF", "@troff@" }, + { "NROFF", "@nroff@" }, + { "JNROFF", "@jnroff@" }, + { "EQN", "@eqn@" }, + { "NEQN", "@neqn@" }, + { "JNEQN", "@jneqn@" }, + { "TBL", "@tbl@" }, + { "COL", "@pcol@" }, + { "REFER", "@refer@" }, + { "PIC", "@pic@" }, + { "VGRIND", "@vgrind@" }, + { "GRAP", "@grap@" }, + { "PAGER", "@pager@" }, + { "BROWSER","@browser@" }, + { "HTMLPAGER", "@htmlpager@" }, + { "CMP", "@cmp@" }, + { "CAT", "@cat@" }, + { "COMPRESS", "@compress@" }, + { "COMPRESS_EXT", "@compress_ext@" }, /* not a path, just a string variable */ + { "DECOMPRESS", "@decompress@" }, + { "MANSECT", "@sections@"}, /* idem */ + { "MANDEFOPTIONS", ""} /* idem */ +}; diff --git a/src/to_cat.c b/src/to_cat.c new file mode 100644 index 0000000..c6aeb5f --- /dev/null +++ b/src/to_cat.c @@ -0,0 +1,171 @@ +#include +#include +#include + +extern char *rindex (const char *, int); /* not always in */ + +#include "defs.h" +#include "manfile.h" +#include "man-config.h" +#include "to_cat.h" +#include "util.h" + +/* + * Given PATH/man1/name.1, return a pointer to the '/' following PATH. + */ +static char * +mantail_of(char *name) { + char *s0, *s1, *s; + + s0 = s1 = 0; + for (s = name; *s; s++) { + if (*s == '/') { + s0 = s1; + s1 = s; + } + } + return s0; +} + +/* + * Given PATH/man1/name.1, return PATH, newly allocated. + * The argument must be writable, not a constant string. + */ +const char * +mandir_of(const char *name) { + char *p, *q; + + q = my_strdup(name); + p = mantail_of(q); + if (p) { + *p = 0; + return q; + } + free(q); + return NULL; +} + +/* + * Change a name of the form PATH/man1/name.1[.Z] + * into PATH/cat1/name.1.EXT + * or (FSSTND) change /usr/PA/man/PB/man1/name.1 + * into /var/catman/PA/PB/cat1/name.1.EXT + * or (FHS) change /usr/PATH/share/man/LOC/man1/name.1 + * into /var/cache/man/PATH/LOC/cat1/name.1.EXT + * (here the /LOC part is absent or a single [locale] dir). + * + * Returns 0 on failure. + */ + +const char * +convert_to_cat (const char *name0, const char *ext, int standards) { + char *name, *freename, *cat_name = 0; + char *t0, *t2, *t3, *t4; + struct dirs *dlp; + int len; + + freename = name = my_strdup (name0); + + t0 = rindex (name, '.'); + if (t0 && get_expander(t0)) /* remove compressee extension */ + *t0 = 0; + + t2 = mantail_of (name); + if (t2 == NULL) + return 0; + *t2 = 0; /* remove man1/name.1 part */ + + if (strncmp(t2+1, "man", 3) != 0) + return 0; + t2[1] = 'c'; + t2[3] = 't'; + + len = (ext ? strlen(ext) : 0); + + /* Explicitly given cat file? */ + for (dlp = cfdirlist.nxt; dlp; dlp = dlp->nxt) { + if (!strcmp (name, dlp->mandir)) { + if (!dlp->catdir[0]) + break; + *t2 = '/'; + len += strlen (dlp->catdir) + strlen (t2) + 1; + cat_name = (char *) my_malloc (len); + strcpy (cat_name, dlp->catdir); + strcat (cat_name, t2); + goto gotit; + } + } + + if (standards & FHS) { + if (*name != '/') + return 0; + + /* possibly strip locale part */ + t3 = t2; + if ((t4 = rindex(name,'/')) != NULL && strcmp(t4, "/man")) { + *t3 = '/'; + t3 = t4; + *t3 = 0; + } + + if(t3 - name >= 4 && !strcmp(t3 - 4, "/man")) { + /* fhs is applicable; strip leading /usr and trailing share */ + if(!strncmp(name, "/usr/", 5)) + name += 4; + t4 = t3 - 4; + *t4 = 0; + if(t4 - name >= 6 && !strcmp(t4 - 6, "/share")) + t4[-6] = 0; + *t3 = '/'; + + len += strlen("/var/cache/man") + strlen(name) + strlen(t3) + 1; + cat_name = (char *) my_malloc (len); + strcpy (cat_name, "/var/cache/man"); + strcat (cat_name, name); + strcat (cat_name, t3); + goto gotit; + } + + return 0; + } + + if ((standards & FSSTND) && !strncmp(name, "/usr/", 5)) { + /* search, starting at the end, for a part `man' to delete */ + t3 = t2; + while ((t4 = rindex(name, '/')) != NULL && strcmp(t4, "/man")) { + *t3 = '/'; + t3 = t4; + *t3 = 0; + } + *t3 = '/'; + if (t4) { + *t4 = 0; + len += strlen("/var/catman") + strlen (name+4) + strlen (t3) + 1; + cat_name = (char *) my_malloc (len); + strcpy (cat_name, "/var/catman"); + strcat (cat_name, name+4); + strcat (cat_name, t3); + goto gotit; + } + } else + *t2 = '/'; + + if (ext) { /* allocate room for extension */ + len += strlen(name) + 1; + cat_name = (char *) my_malloc (len); + strcpy (cat_name, name); + } else + cat_name = name; + +gotit: + + if ((standards & DO_HP) && get_expander(cat_name)) { + /* nothing - we have cat1.Z/file.1 */ + } else if (ext) + strcat (cat_name, ext); + + if (name != cat_name) + free (freename); + + return cat_name; +} diff --git a/src/to_cat.h b/src/to_cat.h new file mode 100644 index 0000000..c9cc7e9 --- /dev/null +++ b/src/to_cat.h @@ -0,0 +1,3 @@ +extern const char *mandir_of (const char *name); +extern const char *convert_to_cat (const char *name, const char *ext, + int standards); diff --git a/src/util.c b/src/util.c new file mode 100644 index 0000000..d074451 --- /dev/null +++ b/src/util.c @@ -0,0 +1,305 @@ +/* + * util.c + * + * Copyright (c) 1990, 1991, John W. Eaton. + * + * You may distribute under the terms of the GNU General Public + * License as specified in the file COPYING that comes with the man + * distribution. + * + * John W. Eaton + * jwe@che.utexas.edu + * Department of Chemical Engineering + * The University of Texas at Austin + * Austin, Texas 78712 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util.h" +#include "gripes.h" +#include "man.h" /* for debug */ + +/* + * Extract last element of a name like /foo/bar/baz. + */ +const char * +mkprogname (const char *s) { + const char *t; + + t = strrchr (s, '/'); + if (t == (char *)NULL) + t = s; + else + t++; + + return my_strdup (t); +} + +/* + * Is file a nonempty and newer than file b? + * + * case: + * + * a newer than b returns 1 + * a older than b returns 0 + * stat on a fails or a empty returns -1 + * stat on b fails or b empty returns -2 + * both fail or empty returns -3 + */ +int +is_newer (const char *fa, const char *fb) { + struct stat fa_sb; + struct stat fb_sb; + register int fa_stat; + register int fb_stat; + register int status = 0; + + fa_stat = stat (fa, &fa_sb); + if (fa_stat != 0 || fa_sb.st_size == 0) + status = 1; + + fb_stat = stat (fb, &fb_sb); + if (fb_stat != 0 || fb_sb.st_size == 0) + status |= 2; + + if (status != 0) + return -status; + + return (fa_sb.st_mtime > fb_sb.st_mtime); +} + +int ruid, rgid, euid, egid, suid; + +void +get_permissions (void) { + ruid = getuid(); + euid = geteuid(); + rgid = getgid(); + egid = getegid(); + suid = (ruid != euid || rgid != egid); +} + +void +no_privileges (void) { + if (suid) { +#if !defined (__CYGWIN__) && !defined (__BEOS__) + setreuid(ruid, ruid); + setregid(rgid, rgid); +#endif + suid = 0; + } +} + +/* + * What to do upon an interrupt? Experience shows that + * if we exit immediately, sh notices that its child has + * died and will try to fiddle with the tty. + * Simultaneously, also less will fiddle with the tty, + * resetting the mode before exiting. + * This leads to undesirable races. So, we catch SIGINT here + * and exit after the child has exited. + */ +static int interrupted = 0; +static void catch_int(int a) { + interrupted = 1; +} + +static int +system1 (const char *command) { + void (*prev_handler)(int) = signal (SIGINT,catch_int); + int ret = system(command); + + /* child terminated with signal? */ + if (WIFSIGNALED(ret) && + (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT)) + exit(1); + + /* or we caught an interrupt? */ + if (interrupted) + exit(1); + + signal(SIGINT,prev_handler); + return ret; +} + +static int +my_system (const char *command) { + int pid, pid2, status, stat; + + if (!suid) + return system1 (command); + +#ifdef _POSIX_SAVED_IDS + + /* we need not fork */ + setuid(ruid); + setgid(rgid); + status = system1(command); + setuid(euid); + setgid(egid); + return (WIFEXITED(status) ? WEXITSTATUS(status) : 127); +#endif + + fflush(stdout); fflush(stderr); + pid = fork(); + if (pid == -1) { + perror(progname); + fatal (CANNOT_FORK, command); + } + if (pid == 0) { + setuid(ruid); + setgid(rgid); + status = system1 (command); + exit(WIFEXITED(status) ? WEXITSTATUS(status) : 127); + } + pid2 = wait (&stat); + if (pid2 == -1) { + perror(progname); + fatal (WAIT_FAILED, command); /* interrupted? */ + } + if (pid2 != pid) + fatal (GOT_WRONG_PID); + if (WIFEXITED(stat) && WEXITSTATUS(stat) != 127) + return WEXITSTATUS(stat); + fatal (CHILD_TERMINATED_ABNORMALLY, command); + return -1; /* not reached */ +} + +FILE * +my_popen(const char *command, const char *type) { + FILE *r; + + if (!suid) + return popen(command, type); + +#ifdef _POSIX_SAVED_IDS + setuid(ruid); + setgid(rgid); + r = popen(command, type); + setuid(euid); + setgid(egid); + return r; +#endif + + no_privileges(); + return popen(command, type); +} + +#define NOT_SAFE "/unsafe/" + +/* + * Attempt a system () call. + */ +int +do_system_command (const char *command, int silent) { + int status = 0; + + /* + * If we're debugging, don't really execute the command + */ + if ((debug & 1) || !strncmp(command, NOT_SAFE, strlen(NOT_SAFE))) + fatal (NO_EXEC, command); + else + status = my_system (command); + + if (status && !silent) + gripe (SYSTEM_FAILED, command, status); + + return status; +} + +char * +my_malloc (int n) { + char *s = malloc(n); + if (!s) + fatal (OUT_OF_MEMORY, n); + return s; +} + +char * +my_strdup (const char *s) { + char *t = my_malloc(strlen(s) + 1); + strcpy(t, s); + return t; +} + +/* + * Call: my_xsprintf(format,s1,s2,...) where format only contains %s/%S/%Q + * (or %d or %o) and all %s/%S/%Q parameters are strings. + * Result: allocates a new string containing the sprintf result. + * The %S parameters are checked for being shell safe. + * The %Q parameters are checked for being shell safe inside single quotes. + */ + +static int +is_shell_safe(const char *ss, int quoted) { + char *bad = " ;'\\\"<>|&"; + char *p; + + if (quoted) + bad++; /* allow a space inside quotes */ + for (p = bad; *p; p++) + if (strchr(ss, *p)) + return 0; + return 1; +} + +static void +nothing(int x) {} + +char * +my_xsprintf (char *format, ...) { + va_list p; + char *s, *ss, *fm; + int len; + + len = strlen(format) + 1; + fm = my_strdup(format); + + va_start(p, format); + for (s = fm; *s; s++) { + if (*s == '%') { + switch (s[1]) { + case 'Q': + case 'S': /* check and turn into 's' */ + ss = va_arg(p, char *); + if (!is_shell_safe(ss, (s[1] == 'Q'))) + return NOT_SAFE; + len += strlen(ss); + s[1] = 's'; + break; + case 's': + len += strlen(va_arg(p, char *)); + break; + case 'd': + case 'o': + case 'c': + len += 20; + nothing(va_arg(p, int)); /* advance */ + break; + default: + fprintf(stderr, + "my_xsprintf called with %s\n", + format); + exit(1); + } + } + } + va_end(p); + + s = my_malloc(len); + va_start(p, format); + vsprintf(s, fm, p); + va_end(p); + + return s; +} diff --git a/src/util.h b/src/util.h new file mode 100644 index 0000000..c317bd9 --- /dev/null +++ b/src/util.h @@ -0,0 +1,13 @@ +/* functions and variables exported from util.c */ + +void get_permissions (void); +void no_privileges (void); +char *my_malloc (int n); +char *my_strdup (const char *s); +const char *mkprogname (const char *s); +int is_newer (const char *fa, const char *fb); +int do_system_command (const char *cmd, int silent); +FILE *my_popen(const char *cmd, const char *type); +char *my_xsprintf(char *f,...); + +extern int ruid, rgid, euid, egid, suid; diff --git a/src/version.h b/src/version.h new file mode 100644 index 0000000..b575ffd --- /dev/null +++ b/src/version.h @@ -0,0 +1 @@ +static char version[] = "1.6g"; diff --git a/src/whatis b/src/whatis new file mode 100755 index 0000000..22da854 --- /dev/null +++ b/src/whatis @@ -0,0 +1,88 @@ +#!/bin/sh +# +# apropos -- search the whatis database for keywords. +# whatis -- idem, but match only commands (as whole words). +# +# Copyright (c) 1990, 1991, John W. Eaton. +# Copyright (c) 1994-1999, Andries E. Brouwer. +# +# You may distribute under the terms of the GNU General Public +# License as specified in the README file that comes with the man +# distribution. +# +# apropos/whatis-1.5m aeb 2003-08-01 (from man-1.6g) +# +# keep old PATH - 000323 - Bryan Henderson +# also look in /var/cache/man - 030801 - aeb + +program=`basename $0` + +# When man pages in your favorite locale look to grep like binary files +# (and you use GNU grep) you may want to add the 'a' option to *grepopt1. +aproposgrepopt1='i' +aproposgrepopt2='' +whatisgrepopt1='iw' +whatisgrepopt2='^' +grepopt1=$whatisgrepopt1 +grepopt2=$whatisgrepopt2 + +if [ $# = 0 ] +then + echo "usage: $program keyword ..." + exit 1 +fi + +manpath=`man --path | tr : '\040'` + +if [ "$manpath" = "" ] +then + echo "$program: manpath is null" + exit 1 +fi + +args= +for arg in $*; do + case $arg in + --version|-V|-v) + echo "$program from man-1.6g" + exit 0 + ;; + --help|-h) + echo "usage: $program keyword ..." + exit 0 + ;; + -*) + echo "$program: $arg: unknown option" + exit 1 + ;; + *) + args="$args $arg" + esac +done + +while [ "$1" != "" ] +do + found=0 + for d in /var/cache/man $manpath /usr/lib + do + if [ -f $d/whatis ] + then + if grep -"$grepopt1" "$grepopt2""$1" $d/whatis + then + found=1 +# Some people are satisfied with a single occurrence +# But it is better to give all +# break + fi + fi + done + + if [ $found = 0 ] + then + echo "$1: nothing appropriate" + fi + + shift +done + +exit diff --git a/version b/version new file mode 100644 index 0000000..4188706 --- /dev/null +++ b/version @@ -0,0 +1 @@ +man-1.6g -- cgit v1.2.3