├── .editorconfig ├── .gitignore ├── .travis.yml ├── ABOUT-NLS ├── AUTHORS ├── COPYING ├── Changelog.old ├── Makefile.am ├── NEWS ├── README.md ├── TECHSTUFF ├── autogen.sh ├── configure.ac ├── doc ├── Makefile.am ├── pinfo.1.in └── pinfo.texi ├── macros ├── Makefile.am ├── aclocal-include.m4 ├── ax_check_compile_flag.m4 ├── ax_with_curses.m4 ├── pkg.m4 ├── readline.m4 └── wchar.m4 ├── pinfo.spec.in ├── po ├── ChangeLog ├── Makefile.in.in ├── Makevars ├── POTFILES.in ├── cs.po ├── de.po ├── eu.po ├── insert-header.sin ├── ja.po ├── nl.po ├── pinfo.pot ├── pl.po ├── pt_BR.po ├── remove-potcdate.sin ├── ro.po ├── ru.po ├── sv.po ├── uk.po └── vi.po ├── src ├── Makefile.am ├── colors.c ├── colors.h ├── common_includes.h ├── datatypes.c ├── datatypes.h ├── filehandling_functions.c ├── filehandling_functions.h ├── initializelinks.c ├── initializelinks.h ├── keyboard.h ├── localestuff.h ├── mainfunction.c ├── mainfunction.h ├── manual.c ├── manual.h ├── menu_and_note_utils.c ├── menu_and_note_utils.h ├── parse_config.c ├── parse_config.h ├── pinfo.c ├── pinforc.in ├── printinfo.c ├── printinfo.h ├── readlinewrapper.c ├── readlinewrapper.h ├── regexp_search.c ├── regexp_search.h ├── sigblock.c ├── sigblock.h ├── signal_handler.c ├── signal_handler.h ├── snprintf.c ├── utils.c ├── utils.h ├── video.c └── video.h └── stamp-h.in /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | charset = utf-8 6 | trim_trailing_whitespace = true 7 | insert_final_newline = true 8 | max_line_length = 120 9 | 10 | [*.c *.h] 11 | indent_style = tab 12 | indent_size = 4 13 | tab_width = 4 14 | 15 | [*.{yml,yaml,yml.j2,yaml.j2}] 16 | max_line_length = 120 17 | indent_style = space 18 | indent_size = 2 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | *.o 3 | Makefile 4 | Makefile.in 5 | 6 | /aclocal.m4 7 | /autom4te.cache 8 | /configure 9 | /config.h 10 | /config.h.in 11 | /config.log 12 | /config.status 13 | /libtool 14 | /pinfo.spec 15 | /stamp-h1 16 | /Changelog 17 | 18 | /macros/codeset.m4 19 | /macros/gettext.m4 20 | /macros/glibc2.m4 21 | /macros/glibc21.m4 22 | /macros/iconv.m4 23 | /macros/intdiv0.m4 24 | /macros/intmax.m4 25 | /macros/inttypes-pri.m4 26 | /macros/inttypes.m4 27 | /macros/inttypes_h.m4 28 | /macros/isc-posix.m4 29 | /macros/lcmessage.m4 30 | /macros/lib-ld.m4 31 | /macros/lib-link.m4 32 | /macros/lib-prefix.m4 33 | /macros/libtool.m4 34 | /macros/longdouble.m4 35 | /macros/longlong.m4 36 | /macros/ltoptions.m4 37 | /macros/ltsugar.m4 38 | /macros/ltversion.m4 39 | /macros/lt~obsolete.m4 40 | /macros/nls.m4 41 | /macros/po.m4 42 | /macros/printf-posix.m4 43 | /macros/progtest.m4 44 | /macros/signed.m4 45 | /macros/size_max.m4 46 | /macros/stdint_h.m4 47 | /macros/uintmax_t.m4 48 | /macros/ulonglong.m4 49 | /macros/wchar_t.m4 50 | /macros/wint_t.m4 51 | /macros/xsize.m4 52 | 53 | /po/Makevars.template 54 | /po/Rules-quot 55 | /po/boldquot.sed 56 | /po/en@boldquot.header 57 | /po/en@quot.header 58 | /po/quot.sed 59 | /po/POTFILES 60 | /po/*.gmo 61 | /po/*.sed 62 | /po/stamp-po 63 | 64 | /tools/ 65 | 66 | /doc/pinfo.1 67 | /doc/pinfo.info 68 | /doc/version.texi 69 | /doc/stamp-vti 70 | 71 | /macros/macros.dep 72 | 73 | /src/.deps/ 74 | /src/pinfo 75 | /src/pinforc 76 | 77 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # yamllint disable rule:truthy 2 | --- 3 | language: c 4 | dist: xenial 5 | 6 | addons: 7 | apt: 8 | sources: &source_apt 9 | - ubuntu-toolchain-r-test 10 | packages: &pkg_apt 11 | - gettext 12 | - autopoint 13 | - libreadline-dev 14 | - libncursesw5-dev 15 | - texinfo 16 | - autotools-dev 17 | - autoconf-archive 18 | - curl 19 | homebrew: 20 | packages: &pkg_brew 21 | - autoconf 22 | - autoconf-archive 23 | - automake 24 | - readline 25 | - libtool 26 | - gettext 27 | - texinfo 28 | - curl 29 | 30 | jobs: 31 | include: 32 | - stage: "Compiler version/OS checks" 33 | name: "linux/gcc-5" 34 | os: linux 35 | compiler: "gcc-5" 36 | addons: 37 | apt: 38 | sources: 39 | - *source_apt 40 | packages: 41 | - *pkg_apt 42 | - "gcc-5" 43 | 44 | - stage: "Compiler version/OS checks" 45 | name: "linux/gcc-6" 46 | os: linux 47 | compiler: "gcc-6" 48 | addons: 49 | apt: 50 | sources: 51 | - *source_apt 52 | packages: 53 | - *pkg_apt 54 | - "gcc-6" 55 | 56 | - stage: "Compiler version/OS checks" 57 | name: "linux/gcc-7" 58 | os: linux 59 | compiler: "gcc-7" 60 | addons: 61 | apt: 62 | sources: 63 | - *source_apt 64 | packages: 65 | - *pkg_apt 66 | - "gcc-7" 67 | 68 | - stage: "Compiler version/OS checks" 69 | name: "linux/gcc-8" 70 | os: linux 71 | compiler: "gcc-8" 72 | addons: 73 | apt: 74 | sources: 75 | - *source_apt 76 | packages: 77 | - *pkg_apt 78 | - "gcc-8" 79 | 80 | - stage: "Compiler version/OS checks" 81 | name: "linux/gcc-9" 82 | os: linux 83 | compiler: "gcc-9" 84 | addons: 85 | apt: 86 | sources: 87 | - *source_apt 88 | packages: 89 | - *pkg_apt 90 | - "gcc-9" 91 | 92 | - stage: "Compiler version/OS checks" 93 | name: "linux/gcc-10" 94 | os: linux 95 | compiler: "gcc-10" 96 | addons: 97 | apt: 98 | sources: 99 | - *source_apt 100 | packages: 101 | - *pkg_apt 102 | - "gcc-10" 103 | 104 | - stage: "Compiler version/OS checks" 105 | name: "linux/clang-5" 106 | os: linux 107 | compiler: "clang-5.0" 108 | addons: 109 | apt: 110 | sources: [ *source_apt ] 111 | packages: 112 | - *pkg_apt 113 | - "clang-5.0" 114 | 115 | - stage: "Compiler version/OS checks" 116 | name: "linux/clang-6" 117 | os: linux 118 | compiler: "clang-6.0" 119 | addons: 120 | apt: 121 | sources: 122 | - *source_apt 123 | - "llvm-toolchain-xenial-6.0" 124 | packages: 125 | - *pkg_apt 126 | - "clang-6.0" 127 | 128 | - stage: "Compiler version/OS checks" 129 | name: "linux/clang-7" 130 | os: linux 131 | compiler: "clang-7" 132 | addons: 133 | apt: 134 | sources: 135 | - *source_apt 136 | - "llvm-toolchain-xenial-7" 137 | packages: 138 | - *pkg_apt 139 | - "clang-7" 140 | 141 | - stage: "Compiler version/OS checks" 142 | name: "linux/clang-8" 143 | os: linux 144 | compiler: "clang-8" 145 | addons: 146 | apt: 147 | sources: 148 | - *source_apt 149 | - "llvm-toolchain-xenial-8" 150 | packages: 151 | - *pkg_apt 152 | - "clang-8" 153 | 154 | - stage: "Compiler version/OS checks" 155 | name: "linux/clang-9" 156 | os: linux 157 | compiler: "clang-9" 158 | addons: 159 | apt: 160 | sources: 161 | - *source_apt 162 | - "llvm-toolchain-xenial-9" 163 | packages: 164 | - *pkg_apt 165 | - "clang-9" 166 | 167 | - stage: "Compiler version/OS checks" 168 | name: "linux/clang-10" 169 | os: linux 170 | compiler: "clang-10" 171 | addons: 172 | apt: 173 | sources: 174 | - *source_apt 175 | - "llvm-toolchain-xenial-10" 176 | packages: 177 | - *pkg_apt 178 | - "clang-10" 179 | 180 | - stage: "Compiler version/OS checks" 181 | name: "osx/xcode-9.4" 182 | os: osx 183 | osx_image: "xcode9.4" 184 | compiler: clang 185 | env: [ CONFIGOPTIONS="--with-readline=/usr/local/opt/readline/" ] 186 | addons: 187 | homebrew: 188 | packages: 189 | - *pkg_brew 190 | 191 | - stage: "Compiler version/OS checks" 192 | name: "osx/xcode-10.1" 193 | os: osx 194 | osx_image: "xcode10.1" 195 | compiler: clang 196 | env: [ CONFIGOPTIONS="--with-readline=/usr/local/opt/readline/" ] 197 | addons: 198 | homebrew: 199 | packages: 200 | - *gettext 201 | 202 | - stage: "Compiler version/OS checks" 203 | name: "osx/xcode-11" 204 | os: osx 205 | osx_image: "xcode11" 206 | compiler: clang 207 | env: [ CONFIGOPTIONS="--with-readline=/usr/local/opt/readline/" ] 208 | addons: 209 | homebrew: 210 | packages: 211 | - *gettext 212 | 213 | - stage: "Compiler version/OS checks" 214 | name: "osx/xcode-12" 215 | os: osx 216 | osx_image: "xcode12" 217 | compiler: clang 218 | env: [ CONFIGOPTIONS="--with-readline=/usr/local/opt/readline/" ] 219 | addons: 220 | homebrew: 221 | packages: 222 | - *gettext 223 | 224 | - stage: "Compiler version/OS checks" 225 | name: "osx/hb/gcc-8" 226 | os: osx 227 | osx_image: "xcode11" 228 | compiler: "gcc-8" 229 | env: [ CONFIGOPTIONS="--with-readline=/usr/local/opt/readline/" ] 230 | addons: 231 | homebrew: 232 | packages: 233 | - *pkg_apt 234 | - "gcc@8" 235 | 236 | - stage: "Compiler version/OS checks" 237 | name: "osx/hb/gcc-10" 238 | os: osx 239 | osx_image: "xcode11" 240 | compiler: "gcc-10" 241 | env: [ CONFIGOPTIONS="--with-readline=/usr/local/opt/readline/" ] 242 | addons: 243 | homebrew: 244 | packages: 245 | - *pkg_apt 246 | - "gcc@10" 247 | 248 | - stage: "Crosscompiler checks" 249 | name: "x86_32" 250 | os: linux 251 | compiler: "gcc-8" 252 | env: { CFLAGS: "-m32" } 253 | addons: 254 | apt: 255 | sources: 256 | - *source_apt 257 | packages: 258 | - *pkg_apt 259 | - "gcc-8" 260 | - "gcc-8-multilib" 261 | - "lib32gcc-8-dev" 262 | - "lib32ncurses5-dev" 263 | - "lib32readline-dev" 264 | 265 | - stage: "Optimization checks" 266 | name: "gcc-8 -Os" 267 | os: linux 268 | compiler: "gcc-8" 269 | env: { CFLAGS: "-Os" } 270 | addons: 271 | apt: 272 | sources: 273 | - *source_apt 274 | packages: 275 | - *pkg_apt 276 | - "gcc-8" 277 | 278 | - stage: "Optimization checks" 279 | name: "gcc-8 -O3" 280 | os: linux 281 | compiler: "gcc-8" 282 | env: { CFLAGS: "-O3" } 283 | addons: 284 | apt: 285 | sources: 286 | - *source_apt 287 | packages: 288 | - *pkg_apt 289 | - "gcc-8" 290 | 291 | - stage: "distcheck" 292 | addons: 293 | apt: 294 | sources: 295 | - *source_apt 296 | packages: 297 | - *pkg_apt 298 | - texlive 299 | script: 300 | - ./autogen.sh 301 | - ./configure 302 | - make distcheck 303 | before_deploy: 304 | - | 305 | export PINFO_VERSION=$(awk '/^#define +PACKAGE_VERSION/ { print $3 }' < config.h | tr -d '"'); 306 | if [ "$PINFO_VERSION" != "$TRAVIS_TAG" ]; then 307 | echo "tag '$TRAVIS_TAG' is not in sync with PACKAGE_VERSION '$PINFO_VERSION'"; 308 | echo "Aborting release"; 309 | false; 310 | fi 311 | - echo "Deploying pinfo version $PINFO_VERSION to Github Release" 312 | deploy: 313 | provider: releases 314 | api_key: "$GITHUB_TOKEN" 315 | file: "pinfo-${PINFO_VERSION}.tar.gz" 316 | skip_cleanup: true 317 | on: { tags: true } 318 | draft: true 319 | 320 | allow_failures: 321 | - os: linux 322 | compiler: gcc-9 323 | - os: osx 324 | compiler: gcc-8 325 | - os: linux 326 | compiler: "gcc-8" 327 | env: { CFLAGS: "-m32" } 328 | 329 | before_install: 330 | - "$CC --version" 331 | 332 | before_script: 333 | - export PATH="/usr/local/opt/gettext/bin:$PATH" 334 | 335 | script: 336 | - ./autogen.sh 337 | - "./configure $CONFIGOPTIONS" 338 | - make 339 | 340 | after_failure: 341 | - apt install curl 342 | - > 343 | test -e config.log && 344 | curl -s 'https://hastebin.com/documents' --data-binary @config.log | 345 | grep '"key"'|sed 's#^.*"key"\s*:\s*"\(.*\)".*$#https://hastebin.com/\1#' 346 | - > 347 | test -e aclocal.m4 && 348 | curl -s 'https://hastebin.com/documents' --data-binary @aclocal.m4 | 349 | grep '"key"'|sed 's#^.*"key"\s*:\s*"\(.*\)".*$#https://hastebin.com/\1#' 350 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Pinfo is currently maintained by Bas Zoetekouw . 2 | Its original author is Przemek Borys . 3 | 4 | Please file any comments/questions/bug reports as an issue on Github: 5 | https://github.com/baszoetekouw/pinfo 6 | 7 | Below are the names of the people who helped by sending good ideas, bugs 8 | reports, or helped out in some other way: 9 | 10 | Adam Lazur 11 | Aleksey I Zavilohin 12 | Andrzej Solecki 13 | André Karwath 14 | Artur Frysiak 15 | Bas Zoetekouw 16 | Carlo Wood 17 | Christian Kurz 18 | Clytie Siddall 19 | Cort 20 | Daniel Bauke 21 | Daniel Nylander 22 | David M. Cooke 23 | Dmitry Volosenkov 24 | Dobrica Pavlinusic 25 | Eddy Petrişor 26 | Egil Kvaleberg 27 | Felipe Augusto van de Wiel 28 | Frederick W. Wheeler 29 | Hao Li 30 | Hector Rivas Gandara 31 | Ilya L Ovchinnikov 32 | Ingo Oeser 33 | Jakub Bogusz 34 | Jarkko O Mourujarvi 35 | Jerzy Klejnowski 36 | Jiri Pavlovsky 37 | Katarína Machálková 38 | Kevin Kreamer 39 | Krzysztof Krzyzaniak 40 | Linus Åkerlund 41 | Liviu Daia 42 | Maciej Nowicki 43 | Marcin Kadziolka 44 | Marcin Wojdyr 45 | Marius Gedminas 46 | Matthias Friedrich 47 | Michal Kuratczyk 48 | Michal Politowski 49 | Michał Stępień 50 | Moritz Moeller-Herrmann 51 | Nathanael Nerode 52 | Paul Boekholt 53 | Pawel Kolodziej 54 | Pawel Kot 55 | Pawel Wilk 56 | Piarres Beobide 57 | Przemek Borys 58 | Rene van Bevern 59 | Ryszard Kurek 60 | Simon Huggins 61 | Sotiris Vassilopoulos 62 | Stanislav Ievlev 63 | Stanislav Kuchar 64 | Tim Bell 65 | Tomasz Kloczko 66 | Witold Filipczyk 67 | Yuri Kozlov 68 | andrew deryabin 69 | 70 | (This list is possibly incomplete -- please remind me if you 71 | contributed in the past in some way, and are not credited here) 72 | -------------------------------------------------------------------------------- /Makefile.am: -------------------------------------------------------------------------------- 1 | # no FSF/GNU fascism 2 | AUTOMAKE_OPTIONS=foreign 3 | 4 | always_built_SUBDIRS = src 5 | 6 | sometimes_built_SUBDIRS = 7 | 8 | SUBDIRS = doc macros po $(always_built_SUBDIRS) 9 | 10 | EXTRA_DIST = TECHSTUFF pinfo.spec Changelog.old Changelog 11 | 12 | ## make rpms 13 | rpm: Makefile 14 | $(MAKE) dist 15 | rpm -ta --clean $(PACKAGE)-$(VERSION).tar.gz 16 | 17 | 18 | ACLOCAL_AMFLAGS = -I macros 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Pinfo is user-friendly, console-based viewer for Info documents. 2 | Hope you like it :) 3 | 4 | Until version 0.6.8, Pinfo was maintained by Przemek Borys. His old project 5 | page is still available at http://pinfo.sourceforge.net/. Unfortunately, 6 | Przemek is no longer active, and development was taken over by Bas Zoetekouw 7 | and moved to Alioth: https://alioth.debian.org/projects/pinfo/. 8 | Since 2014 (version 0.6.10), development has moved to Github: 9 | https://github.com/baszoetekouw/pinfo 10 | 11 | See man page (pinfo.1) for details. 12 | 13 | Copyright (C) 1999 Przemek Borys 14 | Copyright (C) 2005-2006 Bas Zoetekouw 15 | Nathanael Nerode 16 | Copyright (C) 2007-2016 Bas Zoetekouw 17 | 18 | This program is free software; you can redistribute it and/or modify it 19 | under the terms of version 2 of the GNU General Public License as 20 | published by the Free Software Foundation. 21 | 22 | This program is distributed in the hope that it will be useful, 23 | but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 | GNU General Public License for more details. 26 | 27 | You should have received a copy of the GNU General Public License 28 | along with this program; if not, write to the Free Software 29 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 30 | 31 | -------------------------------------------------------------------------------- /TECHSTUFF: -------------------------------------------------------------------------------- 1 | How does this program work. (for hackers ;) 2 | 3 | 1. Info file format 4 | 5 | Info files always contain a tag_table, which contains offsets to all nodes. 6 | If the info is splitted up into several subinfo files, there is a indirect 7 | table, which indicates, which offsets are in which file. Every node starts 8 | from an INFO_TAG, and ends at the EOF, or at another INFO_TAG. 9 | 10 | Menus are recognized as lines of format 11 | 12 | *Tag Table Node Name::comment 13 | 14 | and also as 15 | 16 | * comment: [spaces] Tag Table Node Name. 17 | 18 | Notes are recognized as lines of format 19 | 20 | blabla*note Tag Table Node Name::blabla 21 | 22 | and also as 23 | 24 | blabla*note comment: [spaces] Tag Table Node Name. 25 | 26 | Notes may be split up across lines. 27 | 28 | The offsets in tag_table in an indirect split are counted as follows: 29 | 30 | tag_table_offset-indirect_offset+tag_table[1]_offset 31 | 32 | In nonindirect splits it's normal. 33 | 34 | 2. How are man pages handled? 35 | 36 | All of this is handled in manual.c. It is called man program there to 37 | produce output, which is then parsed by pinfo. 38 | 39 | 3. A scheme of working when viewing info 40 | 41 | a) opening file (pinfo.c, filehandling_functions.c) 42 | b) seeking to the indirect table, and reading it 43 | - important function here is read_item, which reads an info 44 | node; that is a block of text starting with INFOTAG, and ending 45 | with it, or with another INFOTAG 46 | c) doing the same for tag_table 47 | d) running 'work' function (mainfunction.c), which handles keyboard actions 48 | - when this function is called, before it gets to the main loop, 49 | it sets up some standard variables, like position in viewed node, 50 | position of selected line with node (it is line oriented selection 51 | here). 52 | * it handles also here situations like 'aftersearch', 53 | where the function recognizes, that it's called after 54 | a search across infofiles, and that it must set the 55 | position to a value determined by previous search 56 | * besides aftersearch it must also handle the history 57 | -backward move; it uses then the npos and ncursor vars. 58 | * it also initializes caches for isnote and ismenu functions 59 | which check if given line contains a menu or note. 60 | - after that there follows a normal loop with quite clear cases. 61 | e) from the 'work' function there is called a function showscreen, which 62 | paints the screen (in quite simple way). 63 | 64 | The scheme of work when viewing manual is quite similar. 65 | 66 | 4. Additional notes 67 | - the regexp search via all info files is probably one of the most 68 | complicated functions 69 | For regexp search I've adapted a procedure from midnight commander, and 70 | put it into the file regexp_search.c 71 | 72 | For list of global variables, see datatypes.h 73 | 74 | For list of global vars for the manual code, see manual.c -------------------------------------------------------------------------------- /autogen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | # Refresh GNU autotools toolchain. 5 | echo Cleaning autotools files... 6 | for f in autom4te.cache configure \ 7 | Makefile.in src/Makefile.in po/Makefile.in doc/Makefile.in macros/Makefile.in \ 8 | tools/mkinstalldirs tools/ltmain.sh tools/missing tools/config.guess tools/depcomp \ 9 | tools/config.sub tools/install-sh 10 | do 11 | test -e "$f" && rm -rf "$f" || true 12 | done 13 | 14 | echo Running autoreconf... 15 | autoreconf --install --symlink --verbose 16 | if [ -d ".git" ] 17 | then 18 | git log > Changelog 19 | fi 20 | 21 | exit 0 22 | -------------------------------------------------------------------------------- /configure.ac: -------------------------------------------------------------------------------- 1 | #*************************************************************************** 2 | #* Pinfo is a ncurses based lynx style info documentation browser 3 | #* 4 | #* Copyright (C) 1999-2005 Przemek Borys 5 | #* Copyright (C) 2005,2006 Bas Zoetekouw 6 | #* 7 | #* This program is free software; you can redistribute it and/or modify 8 | #* it under the terms of version 2 of the GNU General Public License as 9 | #* published by the Free Software Foundation. 10 | #* 11 | #* This program is distributed in the hope that it will be useful, but 12 | #* WITHOUT ANY WARRANTY; without even the implied warranty of 13 | #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | #* General Public License for more details. 15 | #* 16 | #* You should have received a copy of the GNU General Public License 17 | #* along with this program; if not, write to the Free Software 18 | #* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | #* USA 20 | #***************************************************************************/ 21 | # 22 | # 23 | # Process this file with autoconf to produce a configure script. 24 | # $Id$ 25 | # 26 | 27 | # init 28 | AC_INIT([pinfo],[0.6.13],[https://github.com/baszoetekouw/pinfo]) 29 | # require a recent autoconf 30 | AC_PREREQ([2.69]) 31 | # for identification of derived ./configure scripts 32 | AC_REVISION([$Revision$]) 33 | 34 | # put the config into config.h 35 | AC_CONFIG_HEADERS([config.h]) 36 | AC_CONFIG_MACRO_DIR([macros]) 37 | 38 | # id main dir by src/pinfo.c file 39 | AC_CONFIG_SRCDIR([src/pinfo.c]) 40 | # helper scripts are in tools/ 41 | AC_CONFIG_AUX_DIR([tools]) 42 | 43 | 44 | # init automake 45 | AM_INIT_AUTOMAKE 46 | # include the m4 stuff in tools/macros 47 | AM_ACLOCAL_INCLUDE(macros) 48 | 49 | 50 | #################################################### 51 | ## compiler stuff 52 | #################################################### 53 | # find C compiler 54 | AC_PROG_CC 55 | AC_PROG_CC_C99 56 | 57 | # set correct LIBS for (almost obsolete) INTERACTIVE UNIX 58 | AC_SEARCH_LIBS([strerror],[cposix]) 59 | 60 | # Checks for typedefs, structures, and compiler characteristics. 61 | AC_C_CONST 62 | 63 | WFLAGS="-Wall -Wextra -Wshadow -Werror" 64 | AX_CHECK_COMPILE_FLAG($WFLAGS, 65 | [AC_SUBST(WFLAGS)], 66 | [AC_SUBST(WFLAGS,"")] 67 | ) 68 | 69 | # Checks for library functions. 70 | AC_CHECK_FUNCS(strdup strstr strsep) 71 | AC_CHECK_FUNCS(getopt_long snprintf) 72 | AM_CONDITIONAL(HAVE_SNPRINTF,test "x$ac_cv_func_snprintf" = "xyes") 73 | 74 | AC_CHECK_FUNC(sigblock,,AC_CHECK_LIB(bsd, sigblock)) 75 | if test "x$ac_cv_lib_bsd_sigblock" = "xyes" -o \ 76 | "x$ac_cv_func_sigblock" = "xyes" ; then 77 | AC_DEFINE(HAVE_SIGBLOCK,1,[Define if have sigblock function]) 78 | fi 79 | AM_CONDITIONAL(HAVE_SIGBLOCK,test "x$ac_cv_lib_bsd_sigblock" = "xyes" -o \ 80 | "x$ac_cv_func_sigblock" = "xyes" ) 81 | 82 | AM_PROG_CC_C_O 83 | 84 | #################################################### 85 | ## some additional utilities we need 86 | #################################################### 87 | # find install 88 | AC_PROG_INSTALL 89 | 90 | # find ln -s 91 | AC_PROG_LN_S 92 | 93 | # set the MAKE variable for make in subdirs 94 | AC_PROG_MAKE_SET 95 | 96 | # find libtool 97 | LT_INIT 98 | 99 | 100 | #################################################### 101 | ## readline and curses 102 | #################################################### 103 | # readline 104 | AC_CHECK_READLINE 105 | 106 | # if we have readline, it needs to be version 5 107 | if test "x$has_readline" = "xtrue" 108 | then 109 | if test $readline_version -lt 4 110 | then 111 | AC_MSG_WARN([Version 4 of readline is required to compile pinfo. 112 | Yours is only version $readline_version. 113 | Readline support will be disabled.]) 114 | has_readline=false 115 | fi 116 | fi 117 | AM_CONDITIONAL(HAS_READLINE, test "$has_readline" = true) 118 | 119 | 120 | # curses 121 | AX_WITH_CURSES 122 | if test "x$ax_cv_curses" != xyes; then 123 | AC_MSG_ERROR([requires a (n)curses library]) 124 | fi 125 | # check for some functions in curses 126 | AC_CHECK_DECLS([curs_set, bkgdset, use_default_colors], [], [], [ 127 | #if HAVE_NCURSESW_H /* if should be used */ 128 | # include 129 | #elif HAVE_NCURSESW_CURSES_H /* if should be used */ 130 | # include 131 | #elif HAVE_NCURSES_H /* if should be used */ 132 | # include 133 | #elif HAVE_NCURSES_CURSES_H /* if should be used */ 134 | # include 135 | #elif HAVE_CURSES_H /* if is present and should be used */ 136 | # include 137 | #else 138 | # error "No valid curses headers detected" 139 | #endif 140 | ]) 141 | 142 | #################################################### 143 | ## wchar stuff 144 | #################################################### 145 | AC_CHECK_WCHAR 146 | if test "x$USE_WCHAR" = "xtrue" 147 | then 148 | CFLAGS="$CFLAGS $WCHAR_FLAGS" 149 | fi 150 | 151 | 152 | #################################################### 153 | ## locales 154 | #################################################### 155 | # the languages for which we have .po files 156 | ALL_LINGUAS="cs de eu ja nl pl pt_BR ro ru sv uk vi" 157 | 158 | # Checks for all prerequisites of the intl subdirectory 159 | AM_INTL_SUBDIR 160 | 161 | # gettext 162 | AM_GNU_GETTEXT_VERSION([0.14.4]) 163 | AM_GNU_GETTEXT([external]) 164 | 165 | # Specify locale stuff destination 166 | AC_ARG_WITH(localedir, 167 | [ --with-localedir=PATH specify where the locale stuff should go ]) 168 | if test "x$LOCALEDIR" = "x"; then 169 | if test "x$with_localedir" != "x"; then 170 | LOCALEDIR=$with_localedir 171 | else 172 | LOCALEDIR='$(prefix)/share/locale' 173 | fi 174 | fi 175 | AC_SUBST(LOCALEDIR) 176 | 177 | 178 | #################################################### 179 | ## user arguments 180 | #################################################### 181 | # do you want to see cursor when working with pinfo? 182 | ## TODO: this should really be a command line/config file option 183 | AC_ARG_ENABLE(showcursor, 184 | [ --enable-cursor enable cursor when working with pinfo [default=no]], , ) 185 | if test "x$enable_showcursor" != "xyes" ; then 186 | AC_DEFINE(HIDECURSOR,FALSE,[don't show cursor]) #' 187 | else 188 | AC_DEFINE(HIDECURSOR,TRUE,[don't show cursor]) #' 189 | fi 190 | 191 | # If pinfo is too slow, the below definition will resign from dynamical 192 | # allocation in critical places, and replace it with static buffers which 193 | # should save few instructions to CPU ;) 194 | ## TODO: do we still need this with current computing powers? 195 | AC_ARG_ENABLE(use_static, 196 | [ --disable-static enable using static buffers ], , 197 | enable_use_static=yes) 198 | if test "x$enable_use_static" = "xyes" ; then 199 | AC_DEFINE(___USE_STATIC___, 1, [don't use dynamic buffer]) #' 200 | fi 201 | 202 | # do you want to use regexp searches? 203 | ## TODO: this should really be a command line/config file option 204 | AC_ARG_WITH(regexp_search, 205 | [ --with-regexp-search use regular expression search [default=yes]]) 206 | if test "x$with_regexp_search" = "xno"; then 207 | AC_DEFINE(___DONT_USE_REGEXP_SEARCH___,1, 208 | [Don't use regexp search engine]) #' 209 | fi 210 | 211 | 212 | 213 | 214 | #################################################### 215 | ## destination dirs 216 | #################################################### 217 | 218 | ##TODO: replace these by PACKAGE_VERSION and PACKAGE_NAME 219 | AC_DEFINE_UNQUOTED(VERSION,"$VERSION",[Package version]) 220 | AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE",[Package name]) 221 | 222 | # export variables 223 | AC_SUBST(KEY_END) 224 | AC_SUBST(MAN_KEY_END) 225 | AC_SUBST(EXTRA_SOURCES) 226 | AC_SUBST(MANDIR) 227 | 228 | # generate these files depending on the current configuration 229 | AC_CONFIG_FILES([ 230 | Makefile 231 | doc/Makefile 232 | macros/Makefile 233 | src/Makefile 234 | pinfo.spec 235 | po/Makefile.in 236 | src/pinforc 237 | doc/pinfo.1 238 | ]) 239 | 240 | # the end. Output config.status and launch it. 241 | AC_OUTPUT 242 | 243 | # vim:ts=4 244 | -------------------------------------------------------------------------------- /doc/Makefile.am: -------------------------------------------------------------------------------- 1 | ## Process this file with automake to produce Makefile.in 2 | 3 | @SET_MAKE@ 4 | AUTOMAKE_OPTIONS = info-in-builddir 5 | 6 | man_MANS = pinfo.1 7 | info_TEXINFOS = pinfo.texi 8 | CLEANFILES = stamp-vti pinfo.1 pinfo.info version.texi 9 | 10 | -------------------------------------------------------------------------------- /macros/Makefile.am: -------------------------------------------------------------------------------- 1 | ## Please update this variable if any new macros are created 2 | MACROS= \ 3 | aclocal-include.m4 \ 4 | readline.m4 \ 5 | wchar.m4 \ 6 | pkg.m4 \ 7 | ax_with_curses.m4 \ 8 | ax_check_compile_flag.m4 9 | 10 | EXTRA_DIST=$(MACROS) 11 | -------------------------------------------------------------------------------- /macros/aclocal-include.m4: -------------------------------------------------------------------------------- 1 | # aclocal-include.m4 2 | # 3 | # This macro adds the name macrodir to the set of directories 4 | # that `aclocal' searches for macros. 5 | 6 | # serial 1 7 | 8 | dnl AM_ACLOCAL_INCLUDE(macrodir) 9 | AC_DEFUN([AM_ACLOCAL_INCLUDE], 10 | [ 11 | AM_CONDITIONAL(INSIDE_GNOME_COMMON, test x = y) 12 | 13 | test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" 14 | 15 | for k in $1 ; do ACLOCAL="$ACLOCAL -I $k" ; done 16 | ]) 17 | -------------------------------------------------------------------------------- /macros/ax_check_compile_flag.m4: -------------------------------------------------------------------------------- 1 | # =========================================================================== 2 | # https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html 3 | # =========================================================================== 4 | # 5 | # SYNOPSIS 6 | # 7 | # AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) 8 | # 9 | # DESCRIPTION 10 | # 11 | # Check whether the given FLAG works with the current language's compiler 12 | # or gives an error. (Warnings, however, are ignored) 13 | # 14 | # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on 15 | # success/failure. 16 | # 17 | # If EXTRA-FLAGS is defined, it is added to the current language's default 18 | # flags (e.g. CFLAGS) when the check is done. The check is thus made with 19 | # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to 20 | # force the compiler to issue an error when a bad flag is given. 21 | # 22 | # INPUT gives an alternative input source to AC_COMPILE_IFELSE. 23 | # 24 | # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this 25 | # macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. 26 | # 27 | # LICENSE 28 | # 29 | # Copyright (c) 2008 Guido U. Draheim 30 | # Copyright (c) 2011 Maarten Bosmans 31 | # 32 | # This program is free software: you can redistribute it and/or modify it 33 | # under the terms of the GNU General Public License as published by the 34 | # Free Software Foundation, either version 3 of the License, or (at your 35 | # option) any later version. 36 | # 37 | # This program is distributed in the hope that it will be useful, but 38 | # WITHOUT ANY WARRANTY; without even the implied warranty of 39 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 40 | # Public License for more details. 41 | # 42 | # You should have received a copy of the GNU General Public License along 43 | # with this program. If not, see . 44 | # 45 | # As a special exception, the respective Autoconf Macro's copyright owner 46 | # gives unlimited permission to copy, distribute and modify the configure 47 | # scripts that are the output of Autoconf when processing the Macro. You 48 | # need not follow the terms of the GNU General Public License when using 49 | # or distributing such scripts, even though portions of the text of the 50 | # Macro appear in them. The GNU General Public License (GPL) does govern 51 | # all other use of the material that constitutes the Autoconf Macro. 52 | # 53 | # This special exception to the GPL applies to versions of the Autoconf 54 | # Macro released by the Autoconf Archive. When you make and distribute a 55 | # modified version of the Autoconf Macro, you may extend this special 56 | # exception to the GPL to apply to your modified version as well. 57 | 58 | #serial 5 59 | 60 | AC_DEFUN([AX_CHECK_COMPILE_FLAG], 61 | [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF 62 | AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl 63 | AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ 64 | ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS 65 | _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" 66 | AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], 67 | [AS_VAR_SET(CACHEVAR,[yes])], 68 | [AS_VAR_SET(CACHEVAR,[no])]) 69 | _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) 70 | AS_VAR_IF(CACHEVAR,yes, 71 | [m4_default([$2], :)], 72 | [m4_default([$3], :)]) 73 | AS_VAR_POPDEF([CACHEVAR])dnl 74 | ])dnl AX_CHECK_COMPILE_FLAGS 75 | -------------------------------------------------------------------------------- /macros/readline.m4: -------------------------------------------------------------------------------- 1 | dnl readline detection 2 | dnl based on curses.m4 from gnome 3 | dnl 4 | dnl What it does: 5 | dnl ============= 6 | dnl 7 | dnl - Determine which version of readline is installed on your system 8 | dnl and set the -I/-L/-l compiler entries and add a few preprocessor 9 | dnl symbols 10 | dnl - Do an AC_SUBST on the READLINE_INCLUDES and READLINE_LIBS so that 11 | dnl @READLINE_INCLUDES@ and @READLINE_LIBS@ will be available in 12 | dnl Makefile.in's 13 | dnl - Modify the following configure variables (these are the only 14 | dnl readline.m4 variables you can access from within configure.in) 15 | dnl READLINE_INCLUDES - contains -I's 16 | dnl READLINE_LIBS - sets -L and -l's appropriately 17 | dnl has_readline - exports result of tests to rest of configure 18 | dnl 19 | dnl Usage: 20 | dnl ====== 21 | dnl 1) call AC_CHECK_READLINE after AC_PROG_CC in your configure.in 22 | dnl 2) Make sure to add @READLINE_INCLUDES@ to your preprocessor flags 23 | dnl 3) Make sure to add @READLINE_LIBS@ to your linker flags or LIBS 24 | dnl 25 | dnl Notes with automake: 26 | dnl - call AM_CONDITIONAL(HAS_READLINE, test "$has_readline" = true) from 27 | dnl configure.in 28 | dnl - your Makefile.am can look something like this 29 | dnl ----------------------------------------------- 30 | dnl INCLUDES= blah blah blah $(READLINE_INCLUDES) 31 | dnl if HAS_READLINE 32 | dnl READLINE_TARGETS=name_of_readline_prog 33 | dnl endif 34 | dnl bin_PROGRAMS = other_programs $(READLINE_TARGETS) 35 | dnl other_programs_SOURCES = blah blah blah 36 | dnl name_of_readline_prog_SOURCES = blah blah blah 37 | dnl other_programs_LDADD = blah 38 | dnl name_of_readline_prog_LDADD = blah $(READLINE_LIBS) 39 | dnl ----------------------------------------------- 40 | dnl 41 | dnl 42 | 43 | AH_TEMPLATE([HAS_READLINE], 44 | [ Defined if found readline ]) 45 | 46 | AC_DEFUN([AC_CHECK_READLINE],[ 47 | search_readline=true 48 | has_readline=false 49 | 50 | dnl CFLAGS=${CFLAGS--O} 51 | 52 | AC_SUBST(READLINE_LIBS) 53 | AC_SUBST(READLINE_INCLUDES) 54 | 55 | AC_ARG_WITH(readline, 56 | [ --with-readline[=dir] Compile with readline/locate base dir [no compile]], 57 | if test "x$withval" = "xno" ; then 58 | search_readline=false 59 | elif test "x$withval" != "xyes" ; then 60 | READLINE_LIBS="$LIBS -L$withval/lib -lreadline" 61 | READLINE_INCLUDES="-I$withval/include" 62 | search_readline=false 63 | AC_DEFINE(HAS_READLINE) 64 | has_readline=true 65 | else 66 | search_readline=true 67 | fi 68 | ) 69 | 70 | if $search_readline 71 | then 72 | AC_SEARCH_READLINE() 73 | fi 74 | 75 | if $has_readline 76 | then 77 | AC_DEFINE(HAS_READLINE) 78 | AC_READLINE_VERSION() 79 | fi 80 | 81 | 82 | 83 | ]) 84 | 85 | dnl 86 | dnl Parameters: directory filename cureses_LIBS curses_INCLUDES nicename 87 | dnl 88 | AC_DEFUN([AC_READLINE], [ 89 | if $search_readline 90 | then 91 | if test -f $1/$2 92 | then 93 | AC_MSG_RESULT(Found readline on $1/$2) 94 | READLINE_LIBS="$3" 95 | READLINE_INCLUDES="$4" 96 | search_readline=false 97 | has_readline=true 98 | fi 99 | fi 100 | ]) 101 | 102 | AC_DEFUN([AC_SEARCH_READLINE], [ 103 | AC_CHECKING(location of readline.h file) 104 | 105 | AC_READLINE(/usr/include, readline.h, -lreadline,, "readline on /usr/include") 106 | AC_READLINE(/usr/include/readline, readline.h, -lreadline, -I/usr/include/readline, "readline on /usr/include/readline") 107 | AC_READLINE(/usr/local/include, readline.h, -L/usr/local/lib -lreadline, -I/usr/local/include, "readline on /usr/local") 108 | AC_READLINE(/usr/local/include/readline, readline.h, -L/usr/local/lib -L/usr/local/lib/readline -lreadline, -I/usr/local/include/readline, "readline on /usr/local/include/readline") 109 | ] ) 110 | 111 | AC_DEFUN([AC_READLINE_VERSION], [ 112 | AC_MSG_CHECKING(for readline version) 113 | readline_version=unknown 114 | cat > conftest.$ac_ext < 118 | #undef VERSION 119 | VERSION:RL_VERSION_MAJOR.RL_VERSION_MINOR 120 | EOF 121 | if (eval "$ac_cpp $READLINE_INCLUDES conftest.$ac_ext") 2>&AC_FD_CC | 122 | egrep "VERSION:" >conftest.out 2>&1; then 123 | changequote(,)dnl 124 | readline_version=`cat conftest.out|sed -e 's/ //g' -e 's/^VERSION://' -e 's/\..*$//'` 125 | changequote([,])dnl 126 | fi 127 | rm -rf conftest* 128 | AC_MSG_RESULT($readline_version) 129 | ] ) 130 | -------------------------------------------------------------------------------- /macros/wchar.m4: -------------------------------------------------------------------------------- 1 | dnl Detection of wchar_t and friends 2 | dnl Copyright (c) 2005 by Bas Zoetekouw 3 | 4 | dnl This program is free software; you can redistribute it and/or modify 5 | dnl it under the terms of version 2 of the GNU General Public License as 6 | dnl published by the Free Software Foundation. 7 | dnl 8 | dnl This program is distributed in the hope that it will be useful, but 9 | dnl WITHOUT ANY WARRANTY; without even the implied warranty of 10 | dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 | dnl General Public License for more details. 12 | dnl 13 | dnl You should have received a copy of the GNU General Public License 14 | dnl along with this program; if not, write to the Free Software 15 | dnl Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 16 | dnl USA 17 | 18 | 19 | dnl To use thisscript , put a call to AC_CHECK_WCHAR in your configure.ac 20 | dnl After the call, USE_WCHAR will be defined and $USE_WCHAR=true if 21 | dnl wide characters are supported. 22 | dnl Additional flags that are needed are defined in 23 | dnl $WCHAR_FLAGS and @WCHAR_FLAGS@ 24 | 25 | AH_TEMPLATE([USE_WCHAR], 26 | [Defined if support for wide chars is wanted and supported. 27 | wchar.h, wchar_t, mbstowcs(), and friends will be available.] 28 | ) 29 | AH_TEMPLATE([HAVE_WCSWIDTH], 30 | [Defined if wcswidth() is available in ] 31 | ) 32 | 33 | AC_DEFUN([AC_CHECK_WCHAR],[ 34 | 35 | wchar_flags= 36 | 37 | dnl first check for wchar_t 38 | AC_MSG_CHECKING([for wchar_t in wchar.h]) 39 | AC_COMPILE_IFELSE( 40 | [AC_LANG_PROGRAM([ 41 | [ #include ], 42 | [ wchar_t foo = (wchar_t)'\0'; ] 43 | ])], 44 | [ 45 | AC_MSG_RESULT([yes]) 46 | wchar_usable=true 47 | ], 48 | [ 49 | AC_MSG_RESULT([no]) 50 | wchar_usable=false 51 | ] 52 | ) 53 | 54 | if test "x$wchar_usable" = "xtrue" 55 | then 56 | dnl then check for mbstowcs 57 | AC_CHECK_DECL([mbstowcs], 58 | [ have_mbstowcs=true ], 59 | [ have_mbstowcs=false ] 60 | ) 61 | 62 | dnl then check for wcwidth 63 | have_wcwidth=false 64 | AC_MSG_CHECKING([for wcwidth]) 65 | AC_COMPILE_IFELSE([ 66 | AC_LANG_PROGRAM( 67 | [ #include ], 68 | [ char *p = (char *) wcwidth; ] 69 | )], 70 | [ 71 | dnl if found, set variables and print result 72 | have_wcwidth=true 73 | AC_MSG_RESULT([yes]) 74 | ], 75 | [ ] 76 | ) 77 | if test "x$have_wcwidth" = "xfalse" 78 | then 79 | AC_COMPILE_IFELSE([ 80 | AC_LANG_PROGRAM( 81 | [[ 82 | #define _DEFAULT_SOURCE 83 | #define _XOPEN_SOURCE 600 84 | #include 85 | ]], 86 | [[ char *p = (char *) wcwidth; ]] 87 | )], 88 | [ 89 | dnl if found, set variables and print result 90 | have_wcwidth=true 91 | wchar_flags="$wchar_flags -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600" 92 | AC_MSG_RESULT([with -D_XOPEN_SOURCE=600]) 93 | ], 94 | [ ] 95 | ) 96 | fi 97 | 98 | fi 99 | 100 | 101 | if test \( "x$wchar_usable" = "xtrue" \) \ 102 | -a \( "x$have_mbstowcs" = "xtrue" \) \ 103 | -a \( "x$have_wcwidth" = "xtrue" \) 104 | then 105 | USE_WCHAR=true 106 | AC_DEFINE(USE_WCHAR) 107 | WCHAR_FLAGS=$wchar_flags 108 | AC_SUBST(WCHAR_FLAGS) 109 | else 110 | USE_WCHAR=false 111 | fi 112 | 113 | if test "x$USE_WCHAR" = "xtrue" 114 | then 115 | dnl check for wcswidth 116 | CPPFLAGS_OLD=$CPPFLAGS 117 | CPPFLAGS="$CPPFLAGS $wchar_flags" 118 | AC_CHECK_DECL([wcswidth], 119 | [ AC_DEFINE(HAVE_WCSWIDTH) ], 120 | [ true ], 121 | [ #include ] 122 | ) 123 | CPPFLAGS=$CPPFLAGS_OLD 124 | fi 125 | 126 | ]) 127 | 128 | dnl vim:ts=4:sw=4 129 | -------------------------------------------------------------------------------- /pinfo.spec.in: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/baszoetekouw/pinfo/4d635ab27f39652e2386719a4d79bf20e1e55942/pinfo.spec.in -------------------------------------------------------------------------------- /po/ChangeLog: -------------------------------------------------------------------------------- 1 | 2003-08-21 gettextize 2 | 3 | * Makefile.in.in: Upgrade to gettext-0.10.38. 4 | 5 | 2003-02-12 gettextize 6 | 7 | * Makefile.in.in: Upgrade to gettext-0.10.38. 8 | 9 | 2002-07-14 gettextize 10 | 11 | * Makefile.in.in: Upgrade to gettext-0.10.38. 12 | 13 | 2002-07-11 gettextize 14 | 15 | * Makefile.in.in: Upgrade to gettext-0.10.38. 16 | 17 | 2002-05-05 gettextize 18 | 19 | * Makefile.in.in: Upgrade to gettext-0.10.38. 20 | 21 | 2002-03-16 gettextize 22 | 23 | * Makefile.in.in: Upgrade to gettext-0.10.38. 24 | 25 | 2002-03-10 gettextize 26 | 27 | * Makefile.in.in: Upgrade to gettext-0.10.38. 28 | 29 | 2002-03-06 gettextize 30 | 31 | * Makefile.in.in: Upgrade to gettext-0.10.38. 32 | 33 | 2002-02-10 gettextize 34 | 35 | * Makefile.in.in: Upgrade to gettext-0.10.38. 36 | 37 | 2001-12-02 gettextize 38 | 39 | * Makefile.in.in: Upgrade to gettext-0.10.38. 40 | 41 | 2001-12-02 gettextize 42 | 43 | * Makefile.in.in: Upgrade to gettext-0.10.38. 44 | 45 | 2001-11-24 gettextize 46 | 47 | * Makefile.in.in: Upgrade to gettext-0.10.38. 48 | 49 | 2001-09-10 gettextize 50 | 51 | * Makefile.in.in: Upgrade to gettext-0.10.38. 52 | 53 | 2001-07-19 gettextize 54 | 55 | * Makefile.in.in: Upgrade to gettext-0.10.38. 56 | 57 | 2001-07-15 gettextize 58 | 59 | * Makefile.in.in: Upgrade to gettext-0.10.38. 60 | 61 | 2001-07-15 gettextize 62 | 63 | * Makefile.in.in: Upgrade to gettext-0.10.38. 64 | * cat-id-tbl.c: Remove file. 65 | * stamp-cat-id: Remove file. 66 | 67 | -------------------------------------------------------------------------------- /po/Makevars: -------------------------------------------------------------------------------- 1 | # Makefile variables for PO directory in any package using GNU gettext. 2 | 3 | # Usually the message domain is the same as the package name. 4 | DOMAIN = $(PACKAGE) 5 | 6 | # These two variables depend on the location of this directory. 7 | subdir = po 8 | top_builddir = .. 9 | 10 | # These options get passed to xgettext. 11 | XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ 12 | 13 | # This is the copyright holder that gets inserted into the header of the 14 | # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding 15 | # package. (Note that the msgstr strings, extracted from the package's 16 | # sources, belong to the copyright holder of the package.) Translators are 17 | # expected to transfer the copyright for their translations to this person 18 | # or entity, or to disclaim their copyright. The empty string stands for 19 | # the public domain; in this case the translators are expected to disclaim 20 | # their copyright. 21 | COPYRIGHT_HOLDER = Przemek Borys , Bas Zoetekouw , Nathanael Nerode 22 | 23 | # This is the email address or URL to which the translators shall report 24 | # bugs in the untranslated strings: 25 | # - Strings which are not entire sentences, see the maintainer guidelines 26 | # in the GNU gettext documentation, section 'Preparing Strings'. 27 | # - Strings which use unclear terms or require additional context to be 28 | # understood. 29 | # - Strings which make invalid assumptions about notation of date, time or 30 | # money. 31 | # - Pluralisation problems. 32 | # - Incorrect English spelling. 33 | # - Incorrect formatting. 34 | # It can be your email address, or a mailing list address where translators 35 | # can write to without being subscribed, or the URL of a web page through 36 | # which the translators can contact you. 37 | MSGID_BUGS_ADDRESS = pinfo-devel@lists.alioth.debian.org 38 | 39 | # This is the list of locale categories, beyond LC_MESSAGES, for which the 40 | # message catalogs shall be used. It is usually empty. 41 | EXTRA_LOCALE_CATEGORIES = 42 | -------------------------------------------------------------------------------- /po/POTFILES.in: -------------------------------------------------------------------------------- 1 | src/colors.c 2 | src/datatypes.c 3 | src/filehandling_functions.c 4 | src/initializelinks.c 5 | src/mainfunction.c 6 | src/manual.c 7 | src/menu_and_note_utils.c 8 | src/parse_config.c 9 | src/readlinewrapper.c 10 | # src/readrc.c 11 | src/regexp_search.c 12 | src/signal_handler.c 13 | src/snprintf.c 14 | src/utils.c 15 | src/video.c 16 | src/pinfo.c 17 | -------------------------------------------------------------------------------- /po/eu.po: -------------------------------------------------------------------------------- 1 | # translation of eu.po to librezale.org 2 | # translation of pinfo.po to librezale.org 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Copyright (C) YEAR Przemek Borys , Bas Zoetekouw , Nathanael Nerode . 5 | # Piarres Beobide , 2005. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: eu\n" 10 | "Report-Msgid-Bugs-To: pinfo-devel@lists.alioth.debian.org\n" 11 | "POT-Creation-Date: 2019-02-06 13:30+0100\n" 12 | "PO-Revision-Date: 2005-09-28 23:14+0200\n" 13 | "Last-Translator: Piarres Beobide \n" 14 | "Language-Team: librezale.org \n" 15 | "Language: eu\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=utf-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "X-Generator: KBabel 1.10.2\n" 20 | 21 | #: src/filehandling_functions.c:491 src/filehandling_functions.c:498 22 | #, fuzzy, c-format 23 | msgid "Searching for indirect done" 24 | msgstr "Bilaketa eginda" 25 | 26 | #: src/filehandling_functions.c:530 src/filehandling_functions.c:537 27 | #, c-format 28 | msgid "Warning: could not find tag table" 29 | msgstr "Abisua: ezin da etiketa taula aurkitu" 30 | 31 | #: src/filehandling_functions.c:569 32 | #, c-format 33 | msgid "Searching for tag table done\n" 34 | msgstr "Etiketa taula bilaketa eginda\n" 35 | 36 | #: src/filehandling_functions.c:708 37 | #, c-format 38 | msgid "Error while reading file '%s'" 39 | msgstr "" 40 | 41 | #: src/filehandling_functions.c:1129 42 | #, fuzzy 43 | msgid "Can't open file" 44 | msgstr "Ezin da konfigurazio fitxatgia ireki!\n" 45 | 46 | #: src/filehandling_functions.c:1130 src/pinfo.c:426 47 | msgid "press a key to continue" 48 | msgstr "sakatu tekla bat jarraitzeko" 49 | 50 | #: src/filehandling_functions.c:1248 51 | #, fuzzy, c-format 52 | msgid "Error: could not open info file part" 53 | msgstr "Errorea: ezin da info fitxategia ireki" 54 | 55 | #: src/mainfunction.c:168 src/manual.c:1005 56 | msgid "Are you sure you want to print?" 57 | msgstr "Inprimatu nahi duzula ziur al zaude?" 58 | 59 | #: src/mainfunction.c:220 src/manual.c:1050 60 | msgid "Enter line: " 61 | msgstr "Lerroa sartu: " 62 | 63 | #: src/mainfunction.c:261 src/manual.c:1097 64 | msgid "Enter command: " 65 | msgstr "Komandoa sartu: " 66 | 67 | #: src/mainfunction.c:280 68 | msgid "Operation failed..." 69 | msgstr "Eragiketa huts egin du..." 70 | 71 | #: src/mainfunction.c:316 src/mainfunction.c:575 src/manual.c:1150 72 | msgid "Enter regular expression: " 73 | msgstr "Sar espresio erregularra: " 74 | 75 | #: src/mainfunction.c:546 src/mainfunction.c:643 src/manual.c:1228 76 | msgid "Search string not found..." 77 | msgstr "Bilaketa katea ez da aurkitu..." 78 | 79 | #: src/mainfunction.c:602 src/manual.c:1185 80 | msgid "Invalid regular expression;" 81 | msgstr "Espresio erregula baliogabea;" 82 | 83 | #: src/mainfunction.c:604 src/manual.c:1187 84 | msgid "Press any key to continue..." 85 | msgstr "Zapaldu edozein tekla jarraitzeko..." 86 | 87 | #: src/mainfunction.c:674 88 | msgid "Enter node name: " 89 | msgstr "Sartu nodo izena: " 90 | 91 | #: src/mainfunction.c:753 92 | #, c-format 93 | msgid "Node %s not found" 94 | msgstr "%s nodoa ez da aurkitu" 95 | 96 | #: src/mainfunction.c:1213 src/manual.c:1585 97 | msgid "Are you sure you want to quit?" 98 | msgstr "Itxi nahi duzula ziur al zaude?" 99 | 100 | #: src/manual.c:342 101 | #, c-format 102 | msgid "Error: Cannot call man command.\n" 103 | msgstr "Errorea: Ezin da man komandoa deitu.\n" 104 | 105 | #: src/manual.c:351 106 | #, c-format 107 | msgid "Error: No manual page found either.\n" 108 | msgstr "Errorea: Manual orria ere ezin da aurkitu.\n" 109 | 110 | #: src/manual.c:354 111 | #, c-format 112 | msgid "Apropos pages:\n" 113 | msgstr "Apropos orriak:\n" 114 | 115 | #: src/manual.c:397 116 | msgid "Calling gunzip for" 117 | msgstr "gunzip deitzen" 118 | 119 | #: src/manual.c:403 120 | #, c-format 121 | msgid "Couldn't call gunzip.\n" 122 | msgstr "Ezin da gunzip abiarazi.\n" 123 | 124 | #: src/manual.c:440 125 | msgid "IGNORING" 126 | msgstr "ALDA BATETARA UZTEN" 127 | 128 | #: src/manual.c:486 129 | #, c-format 130 | msgid "Error: No manual page found\n" 131 | msgstr "Errorea: Ez da manual orria aurkitu\n" 132 | 133 | #: src/manual.c:491 134 | #, c-format 135 | msgid "Calling apropos \n" 136 | msgstr "apropos abiarazten \n" 137 | 138 | #: src/manual.c:496 139 | #, c-format 140 | msgid "Nothing appropriate\n" 141 | msgstr "Baliozko ezer ez\n" 142 | 143 | #: src/manual.c:1019 144 | msgid "Enter manual name: " 145 | msgstr "Sar manual izena: " 146 | 147 | #: src/manual.c:1666 src/video.c:113 148 | #, c-format 149 | msgid "Viewing line %d/%d, %d%%" 150 | msgstr "%d/%d, %d%% lerroa bistarazten" 151 | 152 | #: src/manual.c:1668 src/video.c:115 153 | #, c-format 154 | msgid "Viewing line %d/%d, 100%%" 155 | msgstr "%d/%d, 100%% lerroa bistarazten" 156 | 157 | #: src/parse_config.c:99 158 | #, c-format 159 | msgid "Can't open config file!\n" 160 | msgstr "Ezin da konfigurazio fitxatgia ireki!\n" 161 | 162 | #: src/parse_config.c:149 163 | #, c-format 164 | msgid "Parse error in config file on line %d\n" 165 | msgstr "Analisi errorea konfigruazio fotxategiko %d lerroan\n" 166 | 167 | #: src/utils.c:119 src/utils.c:175 168 | #, c-format 169 | msgid "Virtual memory exhausted\n" 170 | msgstr "Memoria birtuala agorturik\n" 171 | 172 | #: src/utils.c:214 173 | #, c-format 174 | msgid "Failed to execute command '%s': %i" 175 | msgstr "" 176 | 177 | #: src/utils.c:254 178 | #, c-format 179 | msgid "" 180 | "Illegal characters in filename!\n" 181 | "*** %s\n" 182 | msgstr "" 183 | "karakterera baliogabeak Fitxategi-izenean!\n" 184 | "*** %s\n" 185 | 186 | #: src/utils.c:584 187 | msgid "yes" 188 | msgstr "bai" 189 | 190 | #: src/utils.c:585 191 | msgid "no" 192 | msgstr "ez" 193 | 194 | #: src/utils.c:861 195 | #, fuzzy, c-format 196 | msgid "Couldn't open temporary file\n" 197 | msgstr "Ezin da konfigurazio fitxatgia ireki!\n" 198 | 199 | #: src/video.c:59 200 | msgid "File:" 201 | msgstr "Fitxategia:" 202 | 203 | #: src/video.c:60 204 | msgid "Node:" 205 | msgstr "Nodoa:" 206 | 207 | #: src/video.c:61 208 | msgid "Next:" 209 | msgstr "Hurrengoa:" 210 | 211 | #: src/video.c:62 212 | msgid "Prev:" 213 | msgstr "Aurrekoa:" 214 | 215 | #: src/video.c:63 216 | msgid "Up:" 217 | msgstr "Gora:" 218 | 219 | #: src/video.c:297 220 | msgid "Warning: matched empty string" 221 | msgstr "" 222 | 223 | #: src/pinfo.c:110 src/pinfo.c:195 224 | #, c-format 225 | msgid "Looking for man page...\n" 226 | msgstr "Man orrialdea bilatzen...\n" 227 | 228 | #: src/pinfo.c:148 229 | #, c-format 230 | msgid "--node option used without argument\n" 231 | msgstr "--node aukera argumenturik gabe erabilia\n" 232 | 233 | #: src/pinfo.c:158 234 | #, c-format 235 | msgid "--rcfile option used without argument\n" 236 | msgstr "--rcfile aukera argumenturik gabe erabilia\n" 237 | 238 | #: src/pinfo.c:169 239 | #, c-format 240 | msgid "" 241 | "Usage:\n" 242 | "%s [options] [info|manual]\n" 243 | "Options:\n" 244 | "-h, --help help\n" 245 | "-v, --version version\n" 246 | "-m, --manual use man page\n" 247 | "-r, --raw-filename use raw filename\n" 248 | "-f, --file synonym for -r\n" 249 | "-a, --apropos call apropos if nothing found\n" 250 | "-p, --plain-apropos call only apropos\n" 251 | "-c, --cut-man-headers cut out repeated man headers\n" 252 | "-l, --long-manual-links use long link names in manuals\n" 253 | "-s, --squeeze-manlines cut empty lines from manual pages\n" 254 | "-d, --dont-handle-without-tag-table don't display texinfo pages without " 255 | "tag\n" 256 | " tables\n" 257 | "-t, --force-manual-tag-table force manual detection of tag table\n" 258 | "-x, --clear-at-exit clear screen at exit\n" 259 | " --node=nodename, --node nodename jump directly to the node nodename\n" 260 | " --rcfile=file, --rcfile file use alternate rcfile\n" 261 | msgstr "" 262 | "Erabilera:\n" 263 | "%s [aukerak] [info|manual]\n" 264 | "Aukerak:\n" 265 | "-h, --help laguntza\n" 266 | "-v, --version bertsioa\n" 267 | "-m, --manual man orria erabili\n" 268 | "-r, --raw-filename fitxatgi gordina erabili\n" 269 | "-f, --file -r-ren sinonimoa\n" 270 | "-a, --apropos apropos abiarazi ezer aurkitu ezkero\n" 271 | "-p, --plain-apropos apropos abiarazi bakarrik\n" 272 | "-c, --cut-man-headers moztu errepikatutako manual buruak\n" 273 | "-l, --long-manual-links lotura izen luzeak erabili manualetan\n" 274 | "-s, --squeeze-manlines moztu lerro hutsak manual orrietatik\n" 275 | "-d, --dont-handle-without-tag-table ez bistarazi etiketa taula gabeko " 276 | "texinfo\n" 277 | " orriak\n" 278 | "-t, --force-manual-tag-table indartu eskuzko etiketa taula " 279 | "atzematea\n" 280 | "-x, --clear-at-exit ixterakoan pantaila garbitu\n" 281 | " --node=nodename, --node nodename zuzenean node nodo-izenera salto egin\n" 282 | " --rcfile=file, --rcfile file beste rcfile bat erabili\n" 283 | 284 | #: src/pinfo.c:311 285 | #, c-format 286 | msgid "Error: could not open info file, trying manual\n" 287 | msgstr "Errorea: ezin da info fitxategia ireki, manualarekin saiatzen\n" 288 | 289 | #: src/pinfo.c:344 290 | #, c-format 291 | msgid "Warning: tag table not found...\n" 292 | msgstr "Abisua: etiketa taula ez da aurkitu...\n" 293 | 294 | #: src/pinfo.c:348 295 | #, c-format 296 | msgid "Trying to create alternate tag table...\n" 297 | msgstr "Beste etiketa taula bat sortzen saiatzen...\n" 298 | 299 | #: src/pinfo.c:353 src/pinfo.c:577 300 | #, c-format 301 | msgid "This doesn't look like info file...\n" 302 | msgstr "Honek ez dirudi info fitxategi bat...\n" 303 | 304 | #: src/pinfo.c:366 305 | #, c-format 306 | msgid "Specified node does not exist...\n" 307 | msgstr "Ezarritako nodoa ez dago...\n" 308 | 309 | #: src/pinfo.c:425 310 | msgid "Tag table is corrupt, trying to fix..." 311 | msgstr "Etiketa taula hondaturik dago, konpontzen saiatzen..." 312 | 313 | #: src/pinfo.c:499 314 | msgid "File not found. Press any key..." 315 | msgstr "Fitxategia ez da aurkitu. Zapaldu edozein tekla..." 316 | 317 | #: src/pinfo.c:519 318 | #, c-format 319 | msgid "Unexpected error.\n" 320 | msgstr "Errores esperogabea.\n" 321 | 322 | #: src/pinfo.c:572 323 | msgid "Tag table not found. Trying to create alternate..." 324 | msgstr "Etiketa taula ez da aurkitu. Beste bat sortzen saiatzen..." 325 | 326 | #: src/pinfo.c:659 327 | #, c-format 328 | msgid "Security warning: Unable to get GID of group called: %s\n" 329 | msgstr "Segurtasun abisua: Ezin da talde honen GID-a aurkitu: %s\n" 330 | 331 | #: src/pinfo.c:679 332 | #, c-format 333 | msgid "Security warning: Unable to get UID of user called: %s\n" 334 | msgstr "Segurtasun abisua: Ezin da erabiltzaile honen UID-a aurkitu: %s\n" 335 | 336 | #: src/pinfo.c:694 337 | #, c-format 338 | msgid "Unable to drop root privileges: %s" 339 | msgstr "" 340 | -------------------------------------------------------------------------------- /po/insert-header.sin: -------------------------------------------------------------------------------- 1 | # Sed script that inserts the file called HEADER before the header entry. 2 | # 3 | # At each occurrence of a line starting with "msgid ", we execute the following 4 | # commands. At the first occurrence, insert the file. At the following 5 | # occurrences, do nothing. The distinction between the first and the following 6 | # occurrences is achieved by looking at the hold space. 7 | /^msgid /{ 8 | x 9 | # Test if the hold space is empty. 10 | s/m/m/ 11 | ta 12 | # Yes it was empty. First occurrence. Read the file. 13 | r HEADER 14 | # Output the file's contents by reading the next line. But don't lose the 15 | # current line while doing this. 16 | g 17 | N 18 | bb 19 | :a 20 | # The hold space was nonempty. Following occurrences. Do nothing. 21 | x 22 | :b 23 | } 24 | -------------------------------------------------------------------------------- /po/ja.po: -------------------------------------------------------------------------------- 1 | # Japanese messages for pinfo. 2 | # Copyright (C) 2001 Free Software Foundation, Inc. 3 | # Masayuki Hatta , 2001. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: pinfo 0.6.3\n" 8 | "Report-Msgid-Bugs-To: pinfo-devel@lists.alioth.debian.org\n" 9 | "POT-Creation-Date: 2019-02-06 13:30+0100\n" 10 | "PO-Revision-Date: 2001-11-21 17:42+0900\n" 11 | "Last-Translator: Masayuki Hatta \n" 12 | "Language-Team: Japanese \n" 13 | "Language: ja\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=utf-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | 18 | #: src/filehandling_functions.c:491 src/filehandling_functions.c:498 19 | #, c-format 20 | msgid "Searching for indirect done" 21 | msgstr "indirectの検索完了" 22 | 23 | #: src/filehandling_functions.c:530 src/filehandling_functions.c:537 24 | #, c-format 25 | msgid "Warning: could not find tag table" 26 | msgstr "警告: タグテーブルが見つかりませんでした" 27 | 28 | #: src/filehandling_functions.c:569 29 | #, c-format 30 | msgid "Searching for tag table done\n" 31 | msgstr "タグテーブルの検索完了\n" 32 | 33 | #: src/filehandling_functions.c:708 34 | #, c-format 35 | msgid "Error while reading file '%s'" 36 | msgstr "" 37 | 38 | #: src/filehandling_functions.c:1129 39 | msgid "Can't open file" 40 | msgstr "" 41 | 42 | #: src/filehandling_functions.c:1130 src/pinfo.c:426 43 | msgid "press a key to continue" 44 | msgstr "" 45 | 46 | #: src/filehandling_functions.c:1248 47 | #, fuzzy, c-format 48 | msgid "Error: could not open info file part" 49 | msgstr "エラー: infoファイルが開けませんでした" 50 | 51 | #: src/mainfunction.c:168 src/manual.c:1005 52 | msgid "Are you sure you want to print?" 53 | msgstr "本当に印刷してよろしいですか?" 54 | 55 | #: src/mainfunction.c:220 src/manual.c:1050 56 | msgid "Enter line: " 57 | msgstr "行を入力: " 58 | 59 | #: src/mainfunction.c:261 src/manual.c:1097 60 | msgid "Enter command: " 61 | msgstr "コマンドを入力: " 62 | 63 | #: src/mainfunction.c:280 64 | msgid "Operation failed..." 65 | msgstr "操作に失敗しました..." 66 | 67 | #: src/mainfunction.c:316 src/mainfunction.c:575 src/manual.c:1150 68 | #, fuzzy 69 | msgid "Enter regular expression: " 70 | msgstr "正規表現を入力: " 71 | 72 | #: src/mainfunction.c:546 src/mainfunction.c:643 src/manual.c:1228 73 | #, fuzzy 74 | msgid "Search string not found..." 75 | msgstr "警告: タグテーブルが見つかりませんでした...\n" 76 | 77 | #: src/mainfunction.c:602 src/manual.c:1185 78 | msgid "Invalid regular expression;" 79 | msgstr "" 80 | 81 | #: src/mainfunction.c:604 src/manual.c:1187 82 | msgid "Press any key to continue..." 83 | msgstr "" 84 | 85 | #: src/mainfunction.c:674 86 | msgid "Enter node name: " 87 | msgstr "ノード名を入力: " 88 | 89 | #: src/mainfunction.c:753 90 | #, c-format 91 | msgid "Node %s not found" 92 | msgstr "ノード %s は見つかりませんでした" 93 | 94 | #: src/mainfunction.c:1213 src/manual.c:1585 95 | msgid "Are you sure you want to quit?" 96 | msgstr "本当に終了してよろしいですか?" 97 | 98 | #: src/manual.c:342 99 | #, c-format 100 | msgid "Error: Cannot call man command.\n" 101 | msgstr "エラー: manコマンドが呼び出せません。\n" 102 | 103 | #: src/manual.c:351 104 | #, c-format 105 | msgid "Error: No manual page found either.\n" 106 | msgstr "エラー: どのマニュアルページも見つかりませんでした。\n" 107 | 108 | #: src/manual.c:354 109 | #, fuzzy, c-format 110 | msgid "Apropos pages:\n" 111 | msgstr "適切なページ:\n" 112 | 113 | #: src/manual.c:397 114 | msgid "Calling gunzip for" 115 | msgstr "gunzipを呼び出し中: " 116 | 117 | #: src/manual.c:403 118 | #, c-format 119 | msgid "Couldn't call gunzip.\n" 120 | msgstr "gunzipを呼び出せませんでした。\n" 121 | 122 | #: src/manual.c:440 123 | msgid "IGNORING" 124 | msgstr "無視" 125 | 126 | #: src/manual.c:486 127 | #, fuzzy, c-format 128 | msgid "Error: No manual page found\n" 129 | msgstr "エラー: どのマニュアルページも見つかりませんでした。\n" 130 | 131 | #: src/manual.c:491 132 | #, c-format 133 | msgid "Calling apropos \n" 134 | msgstr "" 135 | 136 | #: src/manual.c:496 137 | #, c-format 138 | msgid "Nothing appropriate\n" 139 | msgstr "" 140 | 141 | #: src/manual.c:1019 142 | msgid "Enter manual name: " 143 | msgstr "マニュアル名を入力: " 144 | 145 | #: src/manual.c:1666 src/video.c:113 146 | #, c-format 147 | msgid "Viewing line %d/%d, %d%%" 148 | msgstr "現在 %d/%d 行目、%d%%" 149 | 150 | #: src/manual.c:1668 src/video.c:115 151 | #, c-format 152 | msgid "Viewing line %d/%d, 100%%" 153 | msgstr "現在 %d/%d 行目、100%%" 154 | 155 | #: src/parse_config.c:99 156 | #, c-format 157 | msgid "Can't open config file!\n" 158 | msgstr "" 159 | 160 | #: src/parse_config.c:149 161 | #, c-format 162 | msgid "Parse error in config file on line %d\n" 163 | msgstr "設定ファイルの %d 行目で解析エラー\n" 164 | 165 | #: src/utils.c:119 src/utils.c:175 166 | #, c-format 167 | msgid "Virtual memory exhausted\n" 168 | msgstr "仮想メモリを使い切ってしまいました\n" 169 | 170 | #: src/utils.c:214 171 | #, c-format 172 | msgid "Failed to execute command '%s': %i" 173 | msgstr "" 174 | 175 | #: src/utils.c:254 176 | #, c-format 177 | msgid "" 178 | "Illegal characters in filename!\n" 179 | "*** %s\n" 180 | msgstr "" 181 | "ファイル名に以下の不正なキャラクタが含まれています!\n" 182 | "*** %s\n" 183 | 184 | #: src/utils.c:584 185 | msgid "yes" 186 | msgstr "yes" 187 | 188 | #: src/utils.c:585 189 | msgid "no" 190 | msgstr "no" 191 | 192 | #: src/utils.c:861 193 | #, fuzzy, c-format 194 | msgid "Couldn't open temporary file\n" 195 | msgstr "エラー: infoファイルが開けませんでした" 196 | 197 | #: src/video.c:59 198 | msgid "File:" 199 | msgstr "ファイル: " 200 | 201 | #: src/video.c:60 202 | msgid "Node:" 203 | msgstr "ノード: " 204 | 205 | #: src/video.c:61 206 | msgid "Next:" 207 | msgstr "次: " 208 | 209 | #: src/video.c:62 210 | msgid "Prev:" 211 | msgstr "前: " 212 | 213 | #: src/video.c:63 214 | msgid "Up:" 215 | msgstr "上: " 216 | 217 | #: src/video.c:297 218 | msgid "Warning: matched empty string" 219 | msgstr "" 220 | 221 | #: src/pinfo.c:110 src/pinfo.c:195 222 | #, c-format 223 | msgid "Looking for man page...\n" 224 | msgstr "manページを探しています...\n" 225 | 226 | #: src/pinfo.c:148 227 | #, c-format 228 | msgid "--node option used without argument\n" 229 | msgstr "--nodeオプションに引数が与えられていません\n" 230 | 231 | #: src/pinfo.c:158 232 | #, fuzzy, c-format 233 | msgid "--rcfile option used without argument\n" 234 | msgstr "--nodeオプションに引数が与えられていません\n" 235 | 236 | #: src/pinfo.c:169 237 | #, fuzzy, c-format 238 | msgid "" 239 | "Usage:\n" 240 | "%s [options] [info|manual]\n" 241 | "Options:\n" 242 | "-h, --help help\n" 243 | "-v, --version version\n" 244 | "-m, --manual use man page\n" 245 | "-r, --raw-filename use raw filename\n" 246 | "-f, --file synonym for -r\n" 247 | "-a, --apropos call apropos if nothing found\n" 248 | "-p, --plain-apropos call only apropos\n" 249 | "-c, --cut-man-headers cut out repeated man headers\n" 250 | "-l, --long-manual-links use long link names in manuals\n" 251 | "-s, --squeeze-manlines cut empty lines from manual pages\n" 252 | "-d, --dont-handle-without-tag-table don't display texinfo pages without " 253 | "tag\n" 254 | " tables\n" 255 | "-t, --force-manual-tag-table force manual detection of tag table\n" 256 | "-x, --clear-at-exit clear screen at exit\n" 257 | " --node=nodename, --node nodename jump directly to the node nodename\n" 258 | " --rcfile=file, --rcfile file use alternate rcfile\n" 259 | msgstr "" 260 | "使い方:\n" 261 | "%s [オプション] [info|manual]\n" 262 | "オプション:\n" 263 | "-h, --help ヘルプ\n" 264 | "-v, --version バージョン\n" 265 | "-m, --manual manページを使用\n" 266 | "-r, --raw-filename 生のファイル名を使用\n" 267 | "-f, --file\t\t\t -rと同じ\n" 268 | "-a, --apropos 何も見つからなければaproposを呼ぶ\n" 269 | "-p, --plain-apropos call only apropos\n" 270 | "-c, --cut-man-headers 繰り返されたmanヘッダをカット\n" 271 | "-l, --long-manual-links マニュアルに長いリンク名を使う\n" 272 | "-s, --squeeze-manlines マニュアルページから空行を削除\n" 273 | "-d, --dont-handle-without-tag-table タグテーブルの無いtexinfoページを\n" 274 | " 表示しない\n" 275 | "-t, --force-manual-tag-table タグテーブルのマニュアル認識を強制\n" 276 | "-x, --clear-at-exit 終了時に画面をクリア\n" 277 | " --node=nodename, --node nodename ノードnodenameに直接ジャンプ\n" 278 | 279 | #: src/pinfo.c:311 280 | #, c-format 281 | msgid "Error: could not open info file, trying manual\n" 282 | msgstr "エラー: infoファイルを開けませんでした。マニュアルで試しています\n" 283 | 284 | #: src/pinfo.c:344 285 | #, c-format 286 | msgid "Warning: tag table not found...\n" 287 | msgstr "警告: タグテーブルが見つかりませんでした...\n" 288 | 289 | #: src/pinfo.c:348 290 | #, c-format 291 | msgid "Trying to create alternate tag table...\n" 292 | msgstr "別のタグテーブルを作成しようとしています...\n" 293 | 294 | #: src/pinfo.c:353 src/pinfo.c:577 295 | #, c-format 296 | msgid "This doesn't look like info file...\n" 297 | msgstr "これはinfoファイルではないようです...\n" 298 | 299 | #: src/pinfo.c:366 300 | #, c-format 301 | msgid "Specified node does not exist...\n" 302 | msgstr "指定されたノードは存在しません...\n" 303 | 304 | #: src/pinfo.c:425 305 | msgid "Tag table is corrupt, trying to fix..." 306 | msgstr "" 307 | 308 | #: src/pinfo.c:499 309 | msgid "File not found. Press any key..." 310 | msgstr "ファイルが見つかりません。何かキーを押して下さい..." 311 | 312 | #: src/pinfo.c:519 313 | #, c-format 314 | msgid "Unexpected error.\n" 315 | msgstr "予期せぬエラーです。\n" 316 | 317 | #: src/pinfo.c:572 318 | msgid "Tag table not found. Trying to create alternate..." 319 | msgstr "タグテーブルが見つかりません。別のを作成しようとしています..." 320 | 321 | #: src/pinfo.c:659 322 | #, c-format 323 | msgid "Security warning: Unable to get GID of group called: %s\n" 324 | msgstr "セキュリティ警告: 以下のグループのGIDを得ることができません: %s\n" 325 | 326 | #: src/pinfo.c:679 327 | #, c-format 328 | msgid "Security warning: Unable to get UID of user called: %s\n" 329 | msgstr "セキュリティ警告: 以下のユーザのUIDを取得することができません: %s\n" 330 | 331 | #: src/pinfo.c:694 332 | #, c-format 333 | msgid "Unable to drop root privileges: %s" 334 | msgstr "" 335 | 336 | #~ msgid "Are you sure to print?" 337 | #~ msgstr "本当に印刷してよろしいですか?" 338 | 339 | #~ msgid "Warning: could not find tag table\n" 340 | #~ msgstr "警告: タグテーブルが見つかりませんでした\n" 341 | 342 | #~ msgid "Searching for indirect done\n" 343 | #~ msgstr "indirectの検索完了\n" 344 | -------------------------------------------------------------------------------- /po/nl.po: -------------------------------------------------------------------------------- 1 | # Dutch translation for pinfo 2 | # vim:fileencoding=iso8859-15 3 | # Copyright (C) 2005 Bas Zoetekouw 4 | # This file is distributed under the same license as the pinfo package. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: pinfo 0.6.8-svn\n" 9 | "Report-Msgid-Bugs-To: pinfo-devel@lists.alioth.debian.org\n" 10 | "POT-Creation-Date: 2019-02-06 13:30+0100\n" 11 | "PO-Revision-Date: 2019-02-09 13:00+0100\n" 12 | "Last-Translator: Bas Zoetekouw \n" 13 | "Language-Team: Dutch \n" 14 | "Language: nl\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=utf-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: src/filehandling_functions.c:491 src/filehandling_functions.c:498 20 | #, c-format 21 | msgid "Searching for indirect done" 22 | msgstr "Indirectie zoekopdracht afgerond" 23 | 24 | #: src/filehandling_functions.c:530 src/filehandling_functions.c:537 25 | #, c-format 26 | msgid "Warning: could not find tag table" 27 | msgstr "Opgelet: tag-tabel niet gevonden" 28 | 29 | #: src/filehandling_functions.c:569 30 | #, c-format 31 | msgid "Searching for tag table done\n" 32 | msgstr "Zoeken naar tag-tabel afgerond\n" 33 | 34 | #: src/filehandling_functions.c:708 35 | #, c-format 36 | msgid "Error while reading file '%s'" 37 | msgstr "Fout bij het lezen van bestand '%s'" 38 | 39 | #: src/filehandling_functions.c:1129 40 | msgid "Can't open file" 41 | msgstr "Kan bestand niet openen" 42 | 43 | #: src/filehandling_functions.c:1130 src/pinfo.c:426 44 | msgid "press a key to continue" 45 | msgstr "Druk op een toets om door te gaan" 46 | 47 | #: src/filehandling_functions.c:1248 48 | #, c-format 49 | msgid "Error: could not open info file part" 50 | msgstr "Fout: kon een deel van het infobestand niet openen" 51 | 52 | #: src/mainfunction.c:168 src/manual.c:1005 53 | msgid "Are you sure you want to print?" 54 | msgstr "Weet u zeker dat u wilt printen?" 55 | 56 | #: src/mainfunction.c:220 src/manual.c:1050 57 | msgid "Enter line: " 58 | msgstr "Voer regel in: " 59 | 60 | #: src/mainfunction.c:261 src/manual.c:1097 61 | msgid "Enter command: " 62 | msgstr "Voer commando in:" 63 | 64 | #: src/mainfunction.c:280 65 | msgid "Operation failed..." 66 | msgstr "Opdracht mislukt..." 67 | 68 | #: src/mainfunction.c:316 src/mainfunction.c:575 src/manual.c:1150 69 | msgid "Enter regular expression: " 70 | msgstr "Voer reguliere expressie in: " 71 | 72 | #: src/mainfunction.c:546 src/mainfunction.c:643 src/manual.c:1228 73 | msgid "Search string not found..." 74 | msgstr "Zoekstring niet gevonden..." 75 | 76 | #: src/mainfunction.c:602 src/manual.c:1185 77 | msgid "Invalid regular expression;" 78 | msgstr "Ongeldige reguliere expressie;" 79 | 80 | #: src/mainfunction.c:604 src/manual.c:1187 81 | msgid "Press any key to continue..." 82 | msgstr "Druk een toets om door te gaan..." 83 | 84 | #: src/mainfunction.c:674 85 | msgid "Enter node name: " 86 | msgstr "Voer node-naam in: " 87 | 88 | #: src/mainfunction.c:753 89 | #, c-format 90 | msgid "Node %s not found" 91 | msgstr "Node %s niet gevonden" 92 | 93 | #: src/mainfunction.c:1213 src/manual.c:1585 94 | msgid "Are you sure you want to quit?" 95 | msgstr "Weet u zeker dat u het programma wilt verlaten?" 96 | 97 | #: src/manual.c:342 98 | #, c-format 99 | msgid "Error: Cannot call man command.\n" 100 | msgstr "Fout: kan het man commando niet aanroepen.\n" 101 | 102 | #: src/manual.c:351 103 | #, c-format 104 | msgid "Error: No manual page found either.\n" 105 | msgstr "Fout: ook geen manual pagina gevonden.\n" 106 | 107 | #: src/manual.c:354 108 | #, c-format 109 | msgid "Apropos pages:\n" 110 | msgstr "Verwante pagina's:\n" 111 | 112 | #: src/manual.c:397 113 | msgid "Calling gunzip for" 114 | msgstr "Aanroepen van gunzip voor" 115 | 116 | #: src/manual.c:403 117 | #, c-format 118 | msgid "Couldn't call gunzip.\n" 119 | msgstr "Kon gunzip niet aanroepen.\n" 120 | 121 | #: src/manual.c:440 122 | msgid "IGNORING" 123 | msgstr "WORDT GENEGEERD" 124 | 125 | #: src/manual.c:486 126 | #, c-format 127 | msgid "Error: No manual page found\n" 128 | msgstr "Fout: geen manual pagina gevonden\n" 129 | 130 | #: src/manual.c:491 131 | #, c-format 132 | msgid "Calling apropos \n" 133 | msgstr "Apropos wordt aangeroepen \n" 134 | 135 | #: src/manual.c:496 136 | #, c-format 137 | msgid "Nothing appropriate\n" 138 | msgstr "Niets geschikts\n" 139 | 140 | #: src/manual.c:1019 141 | msgid "Enter manual name: " 142 | msgstr "Geef manual naam in: " 143 | 144 | #: src/manual.c:1666 src/video.c:113 145 | #, c-format 146 | msgid "Viewing line %d/%d, %d%%" 147 | msgstr "Regel %d/%d (%d%%) wordt bekeken" 148 | 149 | #: src/manual.c:1668 src/video.c:115 150 | #, c-format 151 | msgid "Viewing line %d/%d, 100%%" 152 | msgstr "Regel %d/%d (100%%) wordt bekeken" 153 | 154 | #: src/parse_config.c:99 155 | #, c-format 156 | msgid "Can't open config file!\n" 157 | msgstr "Kan configuratiebestand niet openen!\n" 158 | 159 | #: src/parse_config.c:149 160 | #, c-format 161 | msgid "Parse error in config file on line %d\n" 162 | msgstr "Ontledingsfout in het configuratiebestand op regel %d\n" 163 | 164 | #: src/utils.c:119 src/utils.c:175 165 | #, c-format 166 | msgid "Virtual memory exhausted\n" 167 | msgstr "Virtuele geheugen is uitgeput\n" 168 | 169 | #: src/utils.c:214 170 | #, c-format 171 | msgid "Failed to execute command '%s': %i" 172 | msgstr "Uitvoering van commando '%s' is mislukt: %i" 173 | 174 | #: src/utils.c:254 175 | #, c-format 176 | msgid "" 177 | "Illegal characters in filename!\n" 178 | "*** %s\n" 179 | msgstr "" 180 | "Illegale karakters in bestandnaam!\n" 181 | "*** %s\n" 182 | 183 | #: src/utils.c:584 184 | msgid "yes" 185 | msgstr "ja" 186 | 187 | #: src/utils.c:585 188 | msgid "no" 189 | msgstr "nee" 190 | 191 | #: src/utils.c:861 192 | #, c-format 193 | msgid "Couldn't open temporary file\n" 194 | msgstr "Kan tijdelijke bestand niet openen\n" 195 | 196 | #: src/video.c:59 197 | msgid "File:" 198 | msgstr "Bestand:" 199 | 200 | #: src/video.c:60 201 | msgid "Node:" 202 | msgstr "Node:" 203 | 204 | #: src/video.c:61 205 | msgid "Next:" 206 | msgstr "Volgende:" 207 | 208 | #: src/video.c:62 209 | msgid "Prev:" 210 | msgstr "Vorige:" 211 | 212 | #: src/video.c:63 213 | msgid "Up:" 214 | msgstr "Omhoog:" 215 | 216 | #: src/video.c:297 217 | msgid "Warning: matched empty string" 218 | msgstr "Opgelet: lege tekenreeks voldoet aan zoekterm" 219 | 220 | #: src/pinfo.c:110 src/pinfo.c:195 221 | #, c-format 222 | msgid "Looking for man page...\n" 223 | msgstr "Manpagina wordt gezocht...\n" 224 | 225 | #: src/pinfo.c:148 226 | #, c-format 227 | msgid "--node option used without argument\n" 228 | msgstr "--node-optie heeft een argument nodig\n" 229 | 230 | #: src/pinfo.c:158 231 | #, c-format 232 | msgid "--rcfile option used without argument\n" 233 | msgstr "--rcfile-optie heeft een argument nodig\n" 234 | 235 | #: src/pinfo.c:169 236 | #, c-format 237 | msgid "" 238 | "Usage:\n" 239 | "%s [options] [info|manual]\n" 240 | "Options:\n" 241 | "-h, --help help\n" 242 | "-v, --version version\n" 243 | "-m, --manual use man page\n" 244 | "-r, --raw-filename use raw filename\n" 245 | "-f, --file synonym for -r\n" 246 | "-a, --apropos call apropos if nothing found\n" 247 | "-p, --plain-apropos call only apropos\n" 248 | "-c, --cut-man-headers cut out repeated man headers\n" 249 | "-l, --long-manual-links use long link names in manuals\n" 250 | "-s, --squeeze-manlines cut empty lines from manual pages\n" 251 | "-d, --dont-handle-without-tag-table don't display texinfo pages without " 252 | "tag\n" 253 | " tables\n" 254 | "-t, --force-manual-tag-table force manual detection of tag table\n" 255 | "-x, --clear-at-exit clear screen at exit\n" 256 | " --node=nodename, --node nodename jump directly to the node nodename\n" 257 | " --rcfile=file, --rcfile file use alternate rcfile\n" 258 | msgstr "" 259 | "Gebruik:\n" 260 | "%s [opties] [info|manual]\n" 261 | "Opties:\n" 262 | "-h, --help help\n" 263 | "-v, --version versie\n" 264 | "-m, --manual gebruik man pagina\n" 265 | "-r, --raw-filename gebruik ruwe bestandnaam\n" 266 | "-f, --file synoniem voor -r\n" 267 | "-a, --apropos roep apropos aan als er geen " 268 | "resultaten zijn\n" 269 | "-p, --plain-apropos gebruik alleen apropos\n" 270 | "-c, --cut-man-headers verwijder herhaalde koppen in man-" 271 | "pagina's weg\n" 272 | "-l, --long-manual-links gebruik lange linknamen in man-" 273 | "pagina's\n" 274 | "-s, --squeeze-manlines knip lege regels uit man-pagina's\n" 275 | "-d, --dont-handle-without-tag-table gebruik geen texinfo pagina's die " 276 | "geen\n" 277 | " tag-tabel hebben\n" 278 | "-t, --force-manual-tag-table forceer handmatige detectie van de tag-" 279 | "tabel\n" 280 | "-x, --clear-at-exit maak het scherm leeg bij het " 281 | "afsluiten\n" 282 | " --node=nodename, --node nodename spring direct naar de node nodename\n" 283 | " --rcfile=file, --rcfile file gebruik een alternatief " 284 | "configuratiebestand\n" 285 | 286 | #: src/pinfo.c:311 287 | #, c-format 288 | msgid "Error: could not open info file, trying manual\n" 289 | msgstr "Fout: kon info-bestand niet openen, man-pagina wordt nu gezocht\n" 290 | 291 | #: src/pinfo.c:344 292 | #, c-format 293 | msgid "Warning: tag table not found...\n" 294 | msgstr "Opgelet: tag-tabel niet gevonden...\n" 295 | 296 | #: src/pinfo.c:348 297 | #, c-format 298 | msgid "Trying to create alternate tag table...\n" 299 | msgstr "Alternatieve tag-tabel wordt aangemaakt...\n" 300 | 301 | #: src/pinfo.c:353 src/pinfo.c:577 302 | #, c-format 303 | msgid "This doesn't look like info file...\n" 304 | msgstr "Dit ziet er niet uit als een info bestand...\n" 305 | 306 | #: src/pinfo.c:366 307 | #, c-format 308 | msgid "Specified node does not exist...\n" 309 | msgstr "Aangegeven node bestaat niet...\n" 310 | 311 | #: src/pinfo.c:425 312 | msgid "Tag table is corrupt, trying to fix..." 313 | msgstr "Tag-tabel is kapot, bezig met reparatie..." 314 | 315 | #: src/pinfo.c:499 316 | msgid "File not found. Press any key..." 317 | msgstr "Bestand niet gevonden. Druk op een toets..." 318 | 319 | #: src/pinfo.c:519 320 | #, c-format 321 | msgid "Unexpected error.\n" 322 | msgstr "Onverwachte fout.\n" 323 | 324 | #: src/pinfo.c:572 325 | msgid "Tag table not found. Trying to create alternate..." 326 | msgstr "Tag-tabel niet gevonden. Een alternatieve tabel wordt gegenereerd..." 327 | 328 | #: src/pinfo.c:659 329 | #, c-format 330 | msgid "Security warning: Unable to get GID of group called: %s\n" 331 | msgstr "Beveiligingswaarschuwing: kan GID van de groep `%s' niet vinden\n" 332 | 333 | #: src/pinfo.c:679 334 | #, c-format 335 | msgid "Security warning: Unable to get UID of user called: %s\n" 336 | msgstr "Beveiligingswaarschuwing: kan UID van de gebruiker `%s' niet vinden\n" 337 | 338 | #: src/pinfo.c:694 339 | #, c-format 340 | msgid "Unable to drop root privileges: %s" 341 | msgstr "Kan administratieve privileges niet afwerpen: %s" 342 | -------------------------------------------------------------------------------- /po/pinfo.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR Przemek Borys , Bas Zoetekouw , Nathanael Nerode 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: PACKAGE VERSION\n" 10 | "Report-Msgid-Bugs-To: pinfo-devel@lists.alioth.debian.org\n" 11 | "POT-Creation-Date: 2019-02-06 13:30+0100\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "Language: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=CHARSET\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | 20 | #: src/filehandling_functions.c:491 src/filehandling_functions.c:498 21 | #, c-format 22 | msgid "Searching for indirect done" 23 | msgstr "" 24 | 25 | #: src/filehandling_functions.c:530 src/filehandling_functions.c:537 26 | #, c-format 27 | msgid "Warning: could not find tag table" 28 | msgstr "" 29 | 30 | #: src/filehandling_functions.c:569 31 | #, c-format 32 | msgid "Searching for tag table done\n" 33 | msgstr "" 34 | 35 | #: src/filehandling_functions.c:708 36 | #, c-format 37 | msgid "Error while reading file '%s'" 38 | msgstr "" 39 | 40 | #: src/filehandling_functions.c:1129 41 | msgid "Can't open file" 42 | msgstr "" 43 | 44 | #: src/filehandling_functions.c:1130 src/pinfo.c:426 45 | msgid "press a key to continue" 46 | msgstr "" 47 | 48 | #: src/filehandling_functions.c:1248 49 | #, c-format 50 | msgid "Error: could not open info file part" 51 | msgstr "" 52 | 53 | #: src/mainfunction.c:168 src/manual.c:1005 54 | msgid "Are you sure you want to print?" 55 | msgstr "" 56 | 57 | #: src/mainfunction.c:220 src/manual.c:1050 58 | msgid "Enter line: " 59 | msgstr "" 60 | 61 | #: src/mainfunction.c:261 src/manual.c:1097 62 | msgid "Enter command: " 63 | msgstr "" 64 | 65 | #: src/mainfunction.c:280 66 | msgid "Operation failed..." 67 | msgstr "" 68 | 69 | #: src/mainfunction.c:316 src/mainfunction.c:575 src/manual.c:1150 70 | msgid "Enter regular expression: " 71 | msgstr "" 72 | 73 | #: src/mainfunction.c:546 src/mainfunction.c:643 src/manual.c:1228 74 | msgid "Search string not found..." 75 | msgstr "" 76 | 77 | #: src/mainfunction.c:602 src/manual.c:1185 78 | msgid "Invalid regular expression;" 79 | msgstr "" 80 | 81 | #: src/mainfunction.c:604 src/manual.c:1187 82 | msgid "Press any key to continue..." 83 | msgstr "" 84 | 85 | #: src/mainfunction.c:674 86 | msgid "Enter node name: " 87 | msgstr "" 88 | 89 | #: src/mainfunction.c:753 90 | #, c-format 91 | msgid "Node %s not found" 92 | msgstr "" 93 | 94 | #: src/mainfunction.c:1213 src/manual.c:1585 95 | msgid "Are you sure you want to quit?" 96 | msgstr "" 97 | 98 | #: src/manual.c:342 99 | #, c-format 100 | msgid "Error: Cannot call man command.\n" 101 | msgstr "" 102 | 103 | #: src/manual.c:351 104 | #, c-format 105 | msgid "Error: No manual page found either.\n" 106 | msgstr "" 107 | 108 | #: src/manual.c:354 109 | #, c-format 110 | msgid "Apropos pages:\n" 111 | msgstr "" 112 | 113 | #: src/manual.c:397 114 | msgid "Calling gunzip for" 115 | msgstr "" 116 | 117 | #: src/manual.c:403 118 | #, c-format 119 | msgid "Couldn't call gunzip.\n" 120 | msgstr "" 121 | 122 | #: src/manual.c:440 123 | msgid "IGNORING" 124 | msgstr "" 125 | 126 | #: src/manual.c:486 127 | #, c-format 128 | msgid "Error: No manual page found\n" 129 | msgstr "" 130 | 131 | #: src/manual.c:491 132 | #, c-format 133 | msgid "Calling apropos \n" 134 | msgstr "" 135 | 136 | #: src/manual.c:496 137 | #, c-format 138 | msgid "Nothing appropriate\n" 139 | msgstr "" 140 | 141 | #: src/manual.c:1019 142 | msgid "Enter manual name: " 143 | msgstr "" 144 | 145 | #: src/manual.c:1666 src/video.c:113 146 | #, c-format 147 | msgid "Viewing line %d/%d, %d%%" 148 | msgstr "" 149 | 150 | #: src/manual.c:1668 src/video.c:115 151 | #, c-format 152 | msgid "Viewing line %d/%d, 100%%" 153 | msgstr "" 154 | 155 | #: src/parse_config.c:99 156 | #, c-format 157 | msgid "Can't open config file!\n" 158 | msgstr "" 159 | 160 | #: src/parse_config.c:149 161 | #, c-format 162 | msgid "Parse error in config file on line %d\n" 163 | msgstr "" 164 | 165 | #: src/utils.c:119 src/utils.c:175 166 | #, c-format 167 | msgid "Virtual memory exhausted\n" 168 | msgstr "" 169 | 170 | #: src/utils.c:214 171 | #, c-format 172 | msgid "Failed to execute command '%s': %i" 173 | msgstr "" 174 | 175 | #: src/utils.c:254 176 | #, c-format 177 | msgid "" 178 | "Illegal characters in filename!\n" 179 | "*** %s\n" 180 | msgstr "" 181 | 182 | #: src/utils.c:584 183 | msgid "yes" 184 | msgstr "" 185 | 186 | #: src/utils.c:585 187 | msgid "no" 188 | msgstr "" 189 | 190 | #: src/utils.c:861 191 | #, c-format 192 | msgid "Couldn't open temporary file\n" 193 | msgstr "" 194 | 195 | #: src/video.c:59 196 | msgid "File:" 197 | msgstr "" 198 | 199 | #: src/video.c:60 200 | msgid "Node:" 201 | msgstr "" 202 | 203 | #: src/video.c:61 204 | msgid "Next:" 205 | msgstr "" 206 | 207 | #: src/video.c:62 208 | msgid "Prev:" 209 | msgstr "" 210 | 211 | #: src/video.c:63 212 | msgid "Up:" 213 | msgstr "" 214 | 215 | #: src/video.c:297 216 | msgid "Warning: matched empty string" 217 | msgstr "" 218 | 219 | #: src/pinfo.c:110 src/pinfo.c:195 220 | #, c-format 221 | msgid "Looking for man page...\n" 222 | msgstr "" 223 | 224 | #: src/pinfo.c:148 225 | #, c-format 226 | msgid "--node option used without argument\n" 227 | msgstr "" 228 | 229 | #: src/pinfo.c:158 230 | #, c-format 231 | msgid "--rcfile option used without argument\n" 232 | msgstr "" 233 | 234 | #: src/pinfo.c:169 235 | #, c-format 236 | msgid "" 237 | "Usage:\n" 238 | "%s [options] [info|manual]\n" 239 | "Options:\n" 240 | "-h, --help help\n" 241 | "-v, --version version\n" 242 | "-m, --manual use man page\n" 243 | "-r, --raw-filename use raw filename\n" 244 | "-f, --file synonym for -r\n" 245 | "-a, --apropos call apropos if nothing found\n" 246 | "-p, --plain-apropos call only apropos\n" 247 | "-c, --cut-man-headers cut out repeated man headers\n" 248 | "-l, --long-manual-links use long link names in manuals\n" 249 | "-s, --squeeze-manlines cut empty lines from manual pages\n" 250 | "-d, --dont-handle-without-tag-table don't display texinfo pages without " 251 | "tag\n" 252 | " tables\n" 253 | "-t, --force-manual-tag-table force manual detection of tag table\n" 254 | "-x, --clear-at-exit clear screen at exit\n" 255 | " --node=nodename, --node nodename jump directly to the node nodename\n" 256 | " --rcfile=file, --rcfile file use alternate rcfile\n" 257 | msgstr "" 258 | 259 | #: src/pinfo.c:311 260 | #, c-format 261 | msgid "Error: could not open info file, trying manual\n" 262 | msgstr "" 263 | 264 | #: src/pinfo.c:344 265 | #, c-format 266 | msgid "Warning: tag table not found...\n" 267 | msgstr "" 268 | 269 | #: src/pinfo.c:348 270 | #, c-format 271 | msgid "Trying to create alternate tag table...\n" 272 | msgstr "" 273 | 274 | #: src/pinfo.c:353 src/pinfo.c:577 275 | #, c-format 276 | msgid "This doesn't look like info file...\n" 277 | msgstr "" 278 | 279 | #: src/pinfo.c:366 280 | #, c-format 281 | msgid "Specified node does not exist...\n" 282 | msgstr "" 283 | 284 | #: src/pinfo.c:425 285 | msgid "Tag table is corrupt, trying to fix..." 286 | msgstr "" 287 | 288 | #: src/pinfo.c:499 289 | msgid "File not found. Press any key..." 290 | msgstr "" 291 | 292 | #: src/pinfo.c:519 293 | #, c-format 294 | msgid "Unexpected error.\n" 295 | msgstr "" 296 | 297 | #: src/pinfo.c:572 298 | msgid "Tag table not found. Trying to create alternate..." 299 | msgstr "" 300 | 301 | #: src/pinfo.c:659 302 | #, c-format 303 | msgid "Security warning: Unable to get GID of group called: %s\n" 304 | msgstr "" 305 | 306 | #: src/pinfo.c:679 307 | #, c-format 308 | msgid "Security warning: Unable to get UID of user called: %s\n" 309 | msgstr "" 310 | 311 | #: src/pinfo.c:694 312 | #, c-format 313 | msgid "Unable to drop root privileges: %s" 314 | msgstr "" 315 | -------------------------------------------------------------------------------- /po/remove-potcdate.sin: -------------------------------------------------------------------------------- 1 | # Sed script that remove the POT-Creation-Date line in the header entry 2 | # from a POT file. 3 | # 4 | # The distinction between the first and the following occurrences of the 5 | # pattern is achieved by looking at the hold space. 6 | /^"POT-Creation-Date: .*"$/{ 7 | x 8 | # Test if the hold space is empty. 9 | s/P/P/ 10 | ta 11 | # Yes it was empty. First occurrence. Remove the line. 12 | g 13 | d 14 | bb 15 | :a 16 | # The hold space was nonempty. Following occurrences. Do nothing. 17 | x 18 | :b 19 | } 20 | -------------------------------------------------------------------------------- /po/ru.po: -------------------------------------------------------------------------------- 1 | # translation of ru.po to Russian 2 | # Copyright (C) 2005 Free Software Foundation, Inc. 3 | # Volosenkov Dmitry <_bil_@mail.ru>, 2003. 4 | # Yuri Kozlov , 2005. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: ru\n" 9 | "Report-Msgid-Bugs-To: pinfo-devel@lists.alioth.debian.org\n" 10 | "POT-Creation-Date: 2019-02-06 13:30+0100\n" 11 | "PO-Revision-Date: 2005-10-01 10:47+0400\n" 12 | "Last-Translator: Yuri Kozlov \n" 13 | "Language-Team: Russian \n" 14 | "Language: ru\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=utf-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "X-Generator: KBabel 1.9.1\n" 19 | 20 | #: src/filehandling_functions.c:491 src/filehandling_functions.c:498 21 | #, c-format 22 | msgid "Searching for indirect done" 23 | msgstr "Поиск ссылки завершён" 24 | 25 | #: src/filehandling_functions.c:530 src/filehandling_functions.c:537 26 | #, c-format 27 | msgid "Warning: could not find tag table" 28 | msgstr "Предупреждение: не могу найти табличный тег" 29 | 30 | #: src/filehandling_functions.c:569 31 | #, c-format 32 | msgid "Searching for tag table done\n" 33 | msgstr "Поиск табличного тега завершён\n" 34 | 35 | #: src/filehandling_functions.c:708 36 | #, c-format 37 | msgid "Error while reading file '%s'" 38 | msgstr "" 39 | 40 | #: src/filehandling_functions.c:1129 41 | #, fuzzy 42 | msgid "Can't open file" 43 | msgstr "Не удалось открыть файл конфигурации!\n" 44 | 45 | #: src/filehandling_functions.c:1130 src/pinfo.c:426 46 | msgid "press a key to continue" 47 | msgstr "нажмите любую клавишу" 48 | 49 | #: src/filehandling_functions.c:1248 50 | #, fuzzy, c-format 51 | msgid "Error: could not open info file part" 52 | msgstr "Ошибка: не удалось открыть info файл" 53 | 54 | #: src/mainfunction.c:168 src/manual.c:1005 55 | msgid "Are you sure you want to print?" 56 | msgstr "Вы действительно желаете напечатать?" 57 | 58 | #: src/mainfunction.c:220 src/manual.c:1050 59 | msgid "Enter line: " 60 | msgstr "Введите строку: " 61 | 62 | #: src/mainfunction.c:261 src/manual.c:1097 63 | msgid "Enter command: " 64 | msgstr "Введите команду: " 65 | 66 | #: src/mainfunction.c:280 67 | msgid "Operation failed..." 68 | msgstr "Действие не удалось..." 69 | 70 | #: src/mainfunction.c:316 src/mainfunction.c:575 src/manual.c:1150 71 | msgid "Enter regular expression: " 72 | msgstr "Введите регулярное выражение: " 73 | 74 | #: src/mainfunction.c:546 src/mainfunction.c:643 src/manual.c:1228 75 | msgid "Search string not found..." 76 | msgstr "Строка не найдена..." 77 | 78 | #: src/mainfunction.c:602 src/manual.c:1185 79 | msgid "Invalid regular expression;" 80 | msgstr "Недопустимое регулярное выражение;" 81 | 82 | #: src/mainfunction.c:604 src/manual.c:1187 83 | msgid "Press any key to continue..." 84 | msgstr "Нажмите любую клавишу..." 85 | 86 | #: src/mainfunction.c:674 87 | msgid "Enter node name: " 88 | msgstr "Введите имя узла: " 89 | 90 | #: src/mainfunction.c:753 91 | #, c-format 92 | msgid "Node %s not found" 93 | msgstr "Узел %s не найден" 94 | 95 | #: src/mainfunction.c:1213 src/manual.c:1585 96 | msgid "Are you sure you want to quit?" 97 | msgstr "Завершить работу?" 98 | 99 | #: src/manual.c:342 100 | #, c-format 101 | msgid "Error: Cannot call man command.\n" 102 | msgstr "Ошибка: Невозможно запустить команду man.\n" 103 | 104 | #: src/manual.c:351 105 | #, c-format 106 | msgid "Error: No manual page found either.\n" 107 | msgstr "Ошибка: Страница руководства тоже не найдена.\n" 108 | 109 | #: src/manual.c:354 110 | #, c-format 111 | msgid "Apropos pages:\n" 112 | msgstr "Подходящие страницы:\n" 113 | 114 | #: src/manual.c:397 115 | msgid "Calling gunzip for" 116 | msgstr "Запуск gunzip для" 117 | 118 | #: src/manual.c:403 119 | #, c-format 120 | msgid "Couldn't call gunzip.\n" 121 | msgstr "Не удалось запустить gunzip.\n" 122 | 123 | #: src/manual.c:440 124 | msgid "IGNORING" 125 | msgstr "ИГНОРИРОВАНИЕ" 126 | 127 | #: src/manual.c:486 128 | #, c-format 129 | msgid "Error: No manual page found\n" 130 | msgstr "Ошибка: страница руководства не найдена\n" 131 | 132 | #: src/manual.c:491 133 | #, c-format 134 | msgid "Calling apropos \n" 135 | msgstr "Запуск команды apropos \n" 136 | 137 | #: src/manual.c:496 138 | #, c-format 139 | msgid "Nothing appropriate\n" 140 | msgstr "Ничего подходящего\n" 141 | 142 | #: src/manual.c:1019 143 | msgid "Enter manual name: " 144 | msgstr "Введите название руководства: " 145 | 146 | #: src/manual.c:1666 src/video.c:113 147 | #, c-format 148 | msgid "Viewing line %d/%d, %d%%" 149 | msgstr "Просмотр строки %d/%d, %d%%" 150 | 151 | #: src/manual.c:1668 src/video.c:115 152 | #, c-format 153 | msgid "Viewing line %d/%d, 100%%" 154 | msgstr "Просмотр строки %d/%d, 100%%" 155 | 156 | #: src/parse_config.c:99 157 | #, c-format 158 | msgid "Can't open config file!\n" 159 | msgstr "Не удалось открыть файл конфигурации!\n" 160 | 161 | #: src/parse_config.c:149 162 | #, c-format 163 | msgid "Parse error in config file on line %d\n" 164 | msgstr "Синтаксическая ошибка конфигурационного файла в строке %d\n" 165 | 166 | #: src/utils.c:119 src/utils.c:175 167 | #, c-format 168 | msgid "Virtual memory exhausted\n" 169 | msgstr "Закончилась виртуальная память\n" 170 | 171 | #: src/utils.c:214 172 | #, c-format 173 | msgid "Failed to execute command '%s': %i" 174 | msgstr "" 175 | 176 | #: src/utils.c:254 177 | #, c-format 178 | msgid "" 179 | "Illegal characters in filename!\n" 180 | "*** %s\n" 181 | msgstr "" 182 | "Недопустимые символы в имени файла!\n" 183 | "*** %s\n" 184 | 185 | #: src/utils.c:584 186 | msgid "yes" 187 | msgstr "да" 188 | 189 | #: src/utils.c:585 190 | msgid "no" 191 | msgstr "нет" 192 | 193 | #: src/utils.c:861 194 | #, fuzzy, c-format 195 | msgid "Couldn't open temporary file\n" 196 | msgstr "Не удалось открыть файл конфигурации!\n" 197 | 198 | #: src/video.c:59 199 | msgid "File:" 200 | msgstr "Файл:" 201 | 202 | #: src/video.c:60 203 | msgid "Node:" 204 | msgstr "Узел:" 205 | 206 | #: src/video.c:61 207 | msgid "Next:" 208 | msgstr "След.:" 209 | 210 | #: src/video.c:62 211 | msgid "Prev:" 212 | msgstr "Пред.:" 213 | 214 | #: src/video.c:63 215 | msgid "Up:" 216 | msgstr "Вверх:" 217 | 218 | #: src/video.c:297 219 | msgid "Warning: matched empty string" 220 | msgstr "" 221 | 222 | #: src/pinfo.c:110 src/pinfo.c:195 223 | #, c-format 224 | msgid "Looking for man page...\n" 225 | msgstr "Поиск страницы руководства...\n" 226 | 227 | #: src/pinfo.c:148 228 | #, c-format 229 | msgid "--node option used without argument\n" 230 | msgstr "параметр --node указан без аргумента\n" 231 | 232 | #: src/pinfo.c:158 233 | #, c-format 234 | msgid "--rcfile option used without argument\n" 235 | msgstr "параметр --rcfile указан без аргумента\n" 236 | 237 | #: src/pinfo.c:169 238 | #, c-format 239 | msgid "" 240 | "Usage:\n" 241 | "%s [options] [info|manual]\n" 242 | "Options:\n" 243 | "-h, --help help\n" 244 | "-v, --version version\n" 245 | "-m, --manual use man page\n" 246 | "-r, --raw-filename use raw filename\n" 247 | "-f, --file synonym for -r\n" 248 | "-a, --apropos call apropos if nothing found\n" 249 | "-p, --plain-apropos call only apropos\n" 250 | "-c, --cut-man-headers cut out repeated man headers\n" 251 | "-l, --long-manual-links use long link names in manuals\n" 252 | "-s, --squeeze-manlines cut empty lines from manual pages\n" 253 | "-d, --dont-handle-without-tag-table don't display texinfo pages without " 254 | "tag\n" 255 | " tables\n" 256 | "-t, --force-manual-tag-table force manual detection of tag table\n" 257 | "-x, --clear-at-exit clear screen at exit\n" 258 | " --node=nodename, --node nodename jump directly to the node nodename\n" 259 | " --rcfile=file, --rcfile file use alternate rcfile\n" 260 | msgstr "" 261 | "Использование:\n" 262 | "%s [параметры] [файл info или страницы руководства]\n" 263 | "Параметры:\n" 264 | "-h, --help помощь\n" 265 | "-v, --version версия\n" 266 | "-m, --manual показать страницу руководства\n" 267 | "-r, --raw-filename использовать сырой файл\n" 268 | "-f, --file тоже что и -r\n" 269 | "-a, --apropos запустить apropos, если\n" 270 | " ничего не найдено\n" 271 | "-p, --plain-apropos запустить только apropos\n" 272 | "-c, --cut-man-headers вырезать повторяющиеся заголовки " 273 | "страниц\n" 274 | " руководства\n" 275 | "-l, --long-manual-links использовать длинные ссылки\n" 276 | " в руководствах\n" 277 | "-s, --squeeze-manlines вырезать пустые строки из страниц\n" 278 | " руководства\n" 279 | "-d, --dont-handle-without-tag-table не показывать texinfo страницы без " 280 | "тегов\n" 281 | " таблиц\n" 282 | "-t, --force-manual-tag-table принудительное ручное определение " 283 | "тегов\n" 284 | " таблицы\n" 285 | "-x, --clear-at-exit очищать экран при выходе\n" 286 | " --node=узел, --node узел сразу перейти к указанному узлу\n" 287 | " --rcfile=файл, --rcfile файл использовать другой rcfile\n" 288 | 289 | #: src/pinfo.c:311 290 | #, c-format 291 | msgid "Error: could not open info file, trying manual\n" 292 | msgstr "Ошибка: не удалось открыть info файл, попытка открыть man\n" 293 | 294 | #: src/pinfo.c:344 295 | #, c-format 296 | msgid "Warning: tag table not found...\n" 297 | msgstr "Предупреждение: табличный тег не найден...\n" 298 | 299 | #: src/pinfo.c:348 300 | #, c-format 301 | msgid "Trying to create alternate tag table...\n" 302 | msgstr "Попытка создать другой табличный тег...\n" 303 | 304 | #: src/pinfo.c:353 src/pinfo.c:577 305 | #, c-format 306 | msgid "This doesn't look like info file...\n" 307 | msgstr "Вероятно это не info файл...\n" 308 | 309 | #: src/pinfo.c:366 310 | #, c-format 311 | msgid "Specified node does not exist...\n" 312 | msgstr "Указанный узел не существует...\n" 313 | 314 | #: src/pinfo.c:425 315 | msgid "Tag table is corrupt, trying to fix..." 316 | msgstr "Табличный тег повреждён, попытка восстановления..." 317 | 318 | #: src/pinfo.c:499 319 | msgid "File not found. Press any key..." 320 | msgstr "Файл не найден. Нажмите любую клавишу..." 321 | 322 | #: src/pinfo.c:519 323 | #, c-format 324 | msgid "Unexpected error.\n" 325 | msgstr "Неожиданная ошибка.\n" 326 | 327 | #: src/pinfo.c:572 328 | msgid "Tag table not found. Trying to create alternate..." 329 | msgstr "Табличный тег не найден. Попытка создать другой..." 330 | 331 | #: src/pinfo.c:659 332 | #, c-format 333 | msgid "Security warning: Unable to get GID of group called: %s\n" 334 | msgstr "Предупреждение безопасности: Не удалось получить GID группы %s\n" 335 | 336 | #: src/pinfo.c:679 337 | #, c-format 338 | msgid "Security warning: Unable to get UID of user called: %s\n" 339 | msgstr "Предупреждение безопасности: Не удалось получить UID пользователя %s\n" 340 | 341 | #: src/pinfo.c:694 342 | #, c-format 343 | msgid "Unable to drop root privileges: %s" 344 | msgstr "" 345 | -------------------------------------------------------------------------------- /po/sv.po: -------------------------------------------------------------------------------- 1 | # Svenska translation of pinfo. 2 | # Copyright (C) 2005 Free Software Foundation, Inc. 3 | # Daniel Nylander , 2005. 4 | # 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: pinfo 0.6.8-6\n" 9 | "Report-Msgid-Bugs-To: pinfo-devel@lists.alioth.debian.org\n" 10 | "POT-Creation-Date: 2019-02-06 13:30+0100\n" 11 | "PO-Revision-Date: 2005-10-06 12:00+0200\n" 12 | "Last-Translator: Daniel Nylander \n" 13 | "Language-Team: Swedish \n" 14 | "Language: sv\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=utf-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: \n" 19 | 20 | #: src/filehandling_functions.c:491 src/filehandling_functions.c:498 21 | #, c-format 22 | msgid "Searching for indirect done" 23 | msgstr "Sökning efter indirekt klar" 24 | 25 | #: src/filehandling_functions.c:530 src/filehandling_functions.c:537 26 | #, c-format 27 | msgid "Warning: could not find tag table" 28 | msgstr "Varning: kunde inte finna tag table" 29 | 30 | #: src/filehandling_functions.c:569 31 | #, c-format 32 | msgid "Searching for tag table done\n" 33 | msgstr "Sökning efter tag table klar\n" 34 | 35 | #: src/filehandling_functions.c:708 36 | #, c-format 37 | msgid "Error while reading file '%s'" 38 | msgstr "" 39 | 40 | #: src/filehandling_functions.c:1129 41 | #, fuzzy 42 | msgid "Can't open file" 43 | msgstr "Kunde inte öppna konfigurationsfilen!\n" 44 | 45 | #: src/filehandling_functions.c:1130 src/pinfo.c:426 46 | msgid "press a key to continue" 47 | msgstr "" 48 | 49 | #: src/filehandling_functions.c:1248 50 | #, fuzzy, c-format 51 | msgid "Error: could not open info file part" 52 | msgstr "Fel: kunde inte öppna info-fil" 53 | 54 | #: src/mainfunction.c:168 src/manual.c:1005 55 | #, fuzzy 56 | msgid "Are you sure you want to print?" 57 | msgstr "Är du säker att du vill skriva ut?" 58 | 59 | # 60 | # Regexp search messages 61 | # 62 | #: src/mainfunction.c:220 src/manual.c:1050 63 | msgid "Enter line: " 64 | msgstr "Ange linje " 65 | 66 | # 67 | # Shellfeed messages 68 | # 69 | #: src/mainfunction.c:261 src/manual.c:1097 70 | msgid "Enter command: " 71 | msgstr "Skriv kommando: " 72 | 73 | #: src/mainfunction.c:280 74 | msgid "Operation failed..." 75 | msgstr "Operationen misslyckades..." 76 | 77 | # 78 | # Regexp search messages 79 | # 80 | #: src/mainfunction.c:316 src/mainfunction.c:575 src/manual.c:1150 81 | #, fuzzy 82 | msgid "Enter regular expression: " 83 | msgstr "Skriv regexp: " 84 | 85 | #: src/mainfunction.c:546 src/mainfunction.c:643 src/manual.c:1228 86 | msgid "Search string not found..." 87 | msgstr "Söksträng inte hittad..." 88 | 89 | #: src/mainfunction.c:602 src/manual.c:1185 90 | msgid "Invalid regular expression;" 91 | msgstr "" 92 | 93 | #: src/mainfunction.c:604 src/manual.c:1187 94 | msgid "Press any key to continue..." 95 | msgstr "" 96 | 97 | # 98 | # Goto messages 99 | # 100 | #: src/mainfunction.c:674 101 | msgid "Enter node name: " 102 | msgstr "Skriv nod-namn: " 103 | 104 | # , c-format 105 | #: src/mainfunction.c:753 106 | #, c-format 107 | msgid "Node %s not found" 108 | msgstr "Kunde inte hitta nod %s" 109 | 110 | #: src/mainfunction.c:1213 src/manual.c:1585 111 | #, fuzzy 112 | msgid "Are you sure you want to quit?" 113 | msgstr "Är du säker att du vill avsluta?" 114 | 115 | #: src/manual.c:342 116 | #, c-format 117 | msgid "Error: Cannot call man command.\n" 118 | msgstr "Fel: Kunde inte kalla upp kommandot 'man'.\n" 119 | 120 | # 121 | # Manual messages 122 | # 123 | # loading: 124 | #: src/manual.c:351 125 | #, c-format 126 | msgid "Error: No manual page found either.\n" 127 | msgstr "Fel: Hittade ingen manual-sida heller.\n" 128 | 129 | # apropos: 130 | #: src/manual.c:354 131 | #, fuzzy, c-format 132 | msgid "Apropos pages:\n" 133 | msgstr "Lämpliga sidor:\n" 134 | 135 | #: src/manual.c:397 136 | msgid "Calling gunzip for" 137 | msgstr "Kallar upp gunzip för" 138 | 139 | #: src/manual.c:403 140 | #, c-format 141 | msgid "Couldn't call gunzip.\n" 142 | msgstr "Kunde inte kalla upp gunzip.\n" 143 | 144 | #: src/manual.c:440 145 | msgid "IGNORING" 146 | msgstr "IGNORERAR" 147 | 148 | # 149 | # Manual messages 150 | # 151 | # loading: 152 | #: src/manual.c:486 153 | #, c-format 154 | msgid "Error: No manual page found\n" 155 | msgstr "Fel: Ingen manualsida hittad.\n" 156 | 157 | #: src/manual.c:491 158 | #, c-format 159 | msgid "Calling apropos \n" 160 | msgstr "Kallar upp apropos \n" 161 | 162 | #: src/manual.c:496 163 | #, fuzzy, c-format 164 | msgid "Nothing appropriate\n" 165 | msgstr "Inget lämpligt\n" 166 | 167 | # 168 | # Goto messages 169 | # 170 | #: src/manual.c:1019 171 | msgid "Enter manual name: " 172 | msgstr "Ange manualnamn:" 173 | 174 | #: src/manual.c:1666 src/video.c:113 175 | #, c-format 176 | msgid "Viewing line %d/%d, %d%%" 177 | msgstr "Aktuell rad %d/%d, %d%%" 178 | 179 | # 180 | # Viewer messages 181 | # 182 | #: src/manual.c:1668 src/video.c:115 183 | #, c-format 184 | msgid "Viewing line %d/%d, 100%%" 185 | msgstr "Aktuell rad %d/%d, 100%%" 186 | 187 | #: src/parse_config.c:99 188 | #, c-format 189 | msgid "Can't open config file!\n" 190 | msgstr "Kunde inte öppna konfigurationsfilen!\n" 191 | 192 | # 193 | # Messages from the config file parsing procedures: 194 | # 195 | #: src/parse_config.c:149 196 | #, c-format 197 | msgid "Parse error in config file on line %d\n" 198 | msgstr "Syntax-fel i konfigureringsfil på rad %d\n" 199 | 200 | # 201 | # Out of memory message 202 | # 203 | #: src/utils.c:119 src/utils.c:175 204 | #, c-format 205 | msgid "Virtual memory exhausted\n" 206 | msgstr "Slut på virtuellt minne\n" 207 | 208 | #: src/utils.c:214 209 | #, c-format 210 | msgid "Failed to execute command '%s': %i" 211 | msgstr "" 212 | 213 | #: src/utils.c:254 214 | #, c-format 215 | msgid "" 216 | "Illegal characters in filename!\n" 217 | "*** %s\n" 218 | msgstr "" 219 | 220 | #: src/utils.c:584 221 | msgid "yes" 222 | msgstr "" 223 | 224 | #: src/utils.c:585 225 | msgid "no" 226 | msgstr "" 227 | 228 | #: src/utils.c:861 229 | #, fuzzy, c-format 230 | msgid "Couldn't open temporary file\n" 231 | msgstr "Kunde inte öppna konfigurationsfilen!\n" 232 | 233 | #: src/video.c:59 234 | msgid "File:" 235 | msgstr "" 236 | 237 | #: src/video.c:60 238 | msgid "Node:" 239 | msgstr "" 240 | 241 | #: src/video.c:61 242 | msgid "Next:" 243 | msgstr "" 244 | 245 | #: src/video.c:62 246 | msgid "Prev:" 247 | msgstr "" 248 | 249 | #: src/video.c:63 250 | msgid "Up:" 251 | msgstr "" 252 | 253 | #: src/video.c:297 254 | msgid "Warning: matched empty string" 255 | msgstr "" 256 | 257 | #: src/pinfo.c:110 src/pinfo.c:195 258 | #, c-format 259 | msgid "Looking for man page...\n" 260 | msgstr "" 261 | 262 | #: src/pinfo.c:148 263 | #, c-format 264 | msgid "--node option used without argument\n" 265 | msgstr "" 266 | 267 | #: src/pinfo.c:158 268 | #, c-format 269 | msgid "--rcfile option used without argument\n" 270 | msgstr "" 271 | 272 | #: src/pinfo.c:169 273 | #, c-format 274 | msgid "" 275 | "Usage:\n" 276 | "%s [options] [info|manual]\n" 277 | "Options:\n" 278 | "-h, --help help\n" 279 | "-v, --version version\n" 280 | "-m, --manual use man page\n" 281 | "-r, --raw-filename use raw filename\n" 282 | "-f, --file synonym for -r\n" 283 | "-a, --apropos call apropos if nothing found\n" 284 | "-p, --plain-apropos call only apropos\n" 285 | "-c, --cut-man-headers cut out repeated man headers\n" 286 | "-l, --long-manual-links use long link names in manuals\n" 287 | "-s, --squeeze-manlines cut empty lines from manual pages\n" 288 | "-d, --dont-handle-without-tag-table don't display texinfo pages without " 289 | "tag\n" 290 | " tables\n" 291 | "-t, --force-manual-tag-table force manual detection of tag table\n" 292 | "-x, --clear-at-exit clear screen at exit\n" 293 | " --node=nodename, --node nodename jump directly to the node nodename\n" 294 | " --rcfile=file, --rcfile file use alternate rcfile\n" 295 | msgstr "" 296 | 297 | #: src/pinfo.c:311 298 | #, fuzzy, c-format 299 | msgid "Error: could not open info file, trying manual\n" 300 | msgstr "Fel: kunde inte öppna info-fil\n" 301 | 302 | #: src/pinfo.c:344 303 | #, fuzzy, c-format 304 | msgid "Warning: tag table not found...\n" 305 | msgstr "Sökning efter tag table klar\n" 306 | 307 | #: src/pinfo.c:348 308 | #, c-format 309 | msgid "Trying to create alternate tag table...\n" 310 | msgstr "" 311 | 312 | #: src/pinfo.c:353 src/pinfo.c:577 313 | #, c-format 314 | msgid "This doesn't look like info file...\n" 315 | msgstr "" 316 | 317 | #: src/pinfo.c:366 318 | #, c-format 319 | msgid "Specified node does not exist...\n" 320 | msgstr "" 321 | 322 | #: src/pinfo.c:425 323 | msgid "Tag table is corrupt, trying to fix..." 324 | msgstr "" 325 | 326 | #: src/pinfo.c:499 327 | msgid "File not found. Press any key..." 328 | msgstr "" 329 | 330 | #: src/pinfo.c:519 331 | #, c-format 332 | msgid "Unexpected error.\n" 333 | msgstr "" 334 | 335 | #: src/pinfo.c:572 336 | msgid "Tag table not found. Trying to create alternate..." 337 | msgstr "" 338 | 339 | #: src/pinfo.c:659 340 | #, c-format 341 | msgid "Security warning: Unable to get GID of group called: %s\n" 342 | msgstr "" 343 | 344 | #: src/pinfo.c:679 345 | #, c-format 346 | msgid "Security warning: Unable to get UID of user called: %s\n" 347 | msgstr "" 348 | 349 | #: src/pinfo.c:694 350 | #, c-format 351 | msgid "Unable to drop root privileges: %s" 352 | msgstr "" 353 | 354 | # pinfo Swedish language module 355 | # 356 | # strings for the header-filter of info messages 357 | # , fuzzy 358 | # 359 | # Load messages for info pages (version for printf) 360 | # 361 | #~ msgid "Searching for indirect done\n" 362 | #~ msgstr "Sökning efter indirekt klar\n" 363 | 364 | #~ msgid "Warning: could not find tag table\n" 365 | #~ msgstr "Varning: kunde inte finna tag table\n" 366 | -------------------------------------------------------------------------------- /po/uk.po: -------------------------------------------------------------------------------- 1 | # Ukrainian translation for pinfo 2 | # Copyright (C) 2025 Volodymyr Lisivka 3 | # This file is distributed under the same license as the pinfo package. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: pinfo 0.6.13\n" 8 | "Report-Msgid-Bugs-To: pinfo-devel@lists.alioth.debian.org\n" 9 | "POT-Creation-Date: 2019-02-06 13:30+0100\n" 10 | "PO-Revision-Date: 2025-02-12 14:31+0200\n" 11 | "Last-Translator: Volodymyr Lisivka \n" 12 | "Language-Team: Ukrainian \n" 13 | "Language: uk\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Poedit 3.5\n" 18 | 19 | #: src/filehandling_functions.c:491 src/filehandling_functions.c:498 20 | #, c-format 21 | msgid "Searching for indirect done" 22 | msgstr "Пошук непрямих завершений" 23 | 24 | #: src/filehandling_functions.c:530 src/filehandling_functions.c:537 25 | #, c-format 26 | msgid "Warning: could not find tag table" 27 | msgstr "Попередження: не вдалося знайти таблицю тегів" 28 | 29 | #: src/filehandling_functions.c:569 30 | #, c-format 31 | msgid "Searching for tag table done\n" 32 | msgstr "Пошук таблиці тегів завершено\n" 33 | 34 | #: src/filehandling_functions.c:708 35 | #, c-format 36 | msgid "Error while reading file '%s'" 37 | msgstr "Помилка при читанні файла «%s»" 38 | 39 | #: src/filehandling_functions.c:1129 40 | msgid "Can't open file" 41 | msgstr "Не можу відкрити файл" 42 | 43 | #: src/filehandling_functions.c:1130 src/pinfo.c:426 44 | msgid "press a key to continue" 45 | msgstr "натисніть будь-яку клавішу, щоб продовжити" 46 | 47 | #: src/filehandling_functions.c:1248 48 | #, c-format 49 | msgid "Error: could not open info file part" 50 | msgstr "Помилка: не вдалося відкрити частину файлу info" 51 | 52 | #: src/mainfunction.c:168 src/manual.c:1005 53 | msgid "Are you sure you want to print?" 54 | msgstr "Ви впевнені, що хочете надрукувати?" 55 | 56 | #: src/mainfunction.c:220 src/manual.c:1050 57 | msgid "Enter line: " 58 | msgstr "Введіть рядок: " 59 | 60 | #: src/mainfunction.c:261 src/manual.c:1097 61 | msgid "Enter command: " 62 | msgstr "Введіть команду: " 63 | 64 | #: src/mainfunction.c:280 65 | msgid "Operation failed..." 66 | msgstr "Операція не вдалася..." 67 | 68 | #: src/mainfunction.c:316 src/mainfunction.c:575 src/manual.c:1150 69 | msgid "Enter regular expression: " 70 | msgstr "Введіть регулярний вираз: " 71 | 72 | #: src/mainfunction.c:546 src/mainfunction.c:643 src/manual.c:1228 73 | msgid "Search string not found..." 74 | msgstr "Пошуковий рядок не знайдено..." 75 | 76 | #: src/mainfunction.c:602 src/manual.c:1185 77 | msgid "Invalid regular expression;" 78 | msgstr "Недійсний регулярний вираз;" 79 | 80 | #: src/mainfunction.c:604 src/manual.c:1187 81 | msgid "Press any key to continue..." 82 | msgstr "Натисніть будь-яку клавішу, щоб продовжити..." 83 | 84 | #: src/mainfunction.c:674 85 | msgid "Enter node name: " 86 | msgstr "Введіть назву вузла: " 87 | 88 | #: src/mainfunction.c:753 89 | #, c-format 90 | msgid "Node %s not found" 91 | msgstr "Вузол %s не знайдено" 92 | 93 | #: src/mainfunction.c:1213 src/manual.c:1585 94 | msgid "Are you sure you want to quit?" 95 | msgstr "Ви впевнені, що хочете вийти?" 96 | 97 | #: src/manual.c:342 98 | #, c-format 99 | msgid "Error: Cannot call man command.\n" 100 | msgstr "Помилка: Не можу викликати команду man.\n" 101 | 102 | #: src/manual.c:351 103 | #, c-format 104 | msgid "Error: No manual page found either.\n" 105 | msgstr "Помилка: Сторінку посібника також не знайдено.\n" 106 | 107 | #: src/manual.c:354 108 | #, c-format 109 | msgid "Apropos pages:\n" 110 | msgstr "Подібні сторінки:\n" 111 | 112 | #: src/manual.c:397 113 | msgid "Calling gunzip for" 114 | msgstr "Виклик gunzip для" 115 | 116 | #: src/manual.c:403 117 | #, c-format 118 | msgid "Couldn't call gunzip.\n" 119 | msgstr "Не вдалося викликати gunzip.\n" 120 | 121 | #: src/manual.c:440 122 | msgid "IGNORING" 123 | msgstr "ІГНОРУВАННЯ" 124 | 125 | #: src/manual.c:486 126 | #, c-format 127 | msgid "Error: No manual page found\n" 128 | msgstr "Помилка: Сторінку посібника не знайдено.\n" 129 | 130 | #: src/manual.c:491 131 | #, c-format 132 | msgid "Calling apropos \n" 133 | msgstr "Виклик команди apropos \n" 134 | 135 | #: src/manual.c:496 136 | #, c-format 137 | msgid "Nothing appropriate\n" 138 | msgstr "Нічого відповідного\n" 139 | 140 | #: src/manual.c:1019 141 | msgid "Enter manual name: " 142 | msgstr "Введіть назву посібника: " 143 | 144 | #: src/manual.c:1666 src/video.c:113 145 | #, c-format 146 | msgid "Viewing line %d/%d, %d%%" 147 | msgstr "Перегляд рядка %d/%d, %d%%" 148 | 149 | #: src/manual.c:1668 src/video.c:115 150 | #, c-format 151 | msgid "Viewing line %d/%d, 100%%" 152 | msgstr "Перегляд рядка %d/%d, 100%%" 153 | 154 | #: src/parse_config.c:99 155 | #, c-format 156 | msgid "Can't open config file!\n" 157 | msgstr "Не можна відкрити файл конфігурації!\n" 158 | 159 | #: src/parse_config.c:149 160 | #, c-format 161 | msgid "Parse error in config file on line %d\n" 162 | msgstr "Помилка синтаксису в рядку %d файлу конфігурації\n" 163 | 164 | #: src/utils.c:119 src/utils.c:175 165 | #, c-format 166 | msgid "Virtual memory exhausted\n" 167 | msgstr "Віртуальна памʼять вичерпана\n" 168 | 169 | #: src/utils.c:214 170 | #, c-format 171 | msgid "Failed to execute command '%s': %i" 172 | msgstr "Збій виконання команди «%s»: %i" 173 | 174 | #: src/utils.c:254 175 | #, c-format 176 | msgid "" 177 | "Illegal characters in filename!\n" 178 | "*** %s\n" 179 | msgstr "" 180 | "Заборонені символи в назві файлу!\n" 181 | "*** %s\n" 182 | 183 | #: src/utils.c:584 184 | msgid "yes" 185 | msgstr "tak" 186 | 187 | #: src/utils.c:585 188 | msgid "no" 189 | msgstr "ні" 190 | 191 | #: src/utils.c:861 192 | #, c-format 193 | msgid "Couldn't open temporary file\n" 194 | msgstr "Не можу відкрити тимчасовий файл!\n" 195 | 196 | #: src/video.c:59 197 | msgid "File:" 198 | msgstr "Файл:" 199 | 200 | #: src/video.c:60 201 | msgid "Node:" 202 | msgstr "Вузол:" 203 | 204 | #: src/video.c:61 205 | msgid "Next:" 206 | msgstr "Наступний:" 207 | 208 | #: src/video.c:62 209 | msgid "Prev:" 210 | msgstr "Попередній:" 211 | 212 | #: src/video.c:63 213 | msgid "Up:" 214 | msgstr "Вгору:" 215 | 216 | #: src/video.c:297 217 | msgid "Warning: matched empty string" 218 | msgstr "Увага: співпало з пустою стрічкою" 219 | 220 | #: src/pinfo.c:110 src/pinfo.c:195 221 | #, c-format 222 | msgid "Looking for man page...\n" 223 | msgstr "Шукаю сторінку посібника...\n" 224 | 225 | #: src/pinfo.c:148 226 | #, c-format 227 | msgid "--node option used without argument\n" 228 | msgstr "Опція --node використана без аргументу\n" 229 | 230 | #: src/pinfo.c:158 231 | #, c-format 232 | msgid "--rcfile option used without argument\n" 233 | msgstr "Опція --rcfile використана без аргументу\n" 234 | 235 | #: src/pinfo.c:169 236 | #, c-format 237 | msgid "" 238 | "Usage:\n" 239 | "%s [options] [info|manual]\n" 240 | "Options:\n" 241 | "-h, --help help\n" 242 | "-v, --version version\n" 243 | "-m, --manual use man page\n" 244 | "-r, --raw-filename use raw filename\n" 245 | "-f, --file synonym for -r\n" 246 | "-a, --apropos call apropos if nothing found\n" 247 | "-p, --plain-apropos call only apropos\n" 248 | "-c, --cut-man-headers cut out repeated man headers\n" 249 | "-l, --long-manual-links use long link names in manuals\n" 250 | "-s, --squeeze-manlines cut empty lines from manual pages\n" 251 | "-d, --dont-handle-without-tag-table don't display texinfo pages without " 252 | "tag\n" 253 | " tables\n" 254 | "-t, --force-manual-tag-table force manual detection of tag table\n" 255 | "-x, --clear-at-exit clear screen at exit\n" 256 | " --node=nodename, --node nodename jump directly to the node nodename\n" 257 | " --rcfile=file, --rcfile file use alternate rcfile\n" 258 | msgstr "" 259 | "Використання:\n" 260 | "%s [опції] [info|manual]\n" 261 | "Опції:\n" 262 | "-h, --help Ця довідка\n" 263 | "-v, --version Версія\n" 264 | "-m, --manual Використовувати сторінку підручника " 265 | "man\n" 266 | "-r, --raw-filename Використовувати вказану назву файлу\n" 267 | "-a, --apropos У разі відсутності відповідного " 268 | "документа, використовувати apropos\n" 269 | "-p, --plain-apropos Викликати apropos без пошуку " 270 | "відповідних сторінок man\n" 271 | "-c, --cut-man-headers Видаляти повторювані заголовки зі " 272 | "сторінок підручника man\n" 273 | "-l, --long-manual-links Використовувати довгі назви посилань в " 274 | "сторінках підручника man\n" 275 | "-s, --squeeze-manlines Видаляти порожні рядки зі сторінок " 276 | "підручника man\n" 277 | "-d, --dont-handle-without-tag-table Відмовлятися від обробки, якщо " 278 | "сторінка info не має запису таблиці тегів\n" 279 | "-t, --force-manual-tag-table Примусово створювати таблицю тегів " 280 | "вручну\n" 281 | "-x, --clear-at-exit Очищати екран після завершення роботи\n" 282 | " --node=вузол, --node вузол Перейти безпосередньо до вузла\n" 283 | " --rcfile=файл, --rcfile файл Використовувати альтернативний файл " 284 | "rc\n" 285 | 286 | #: src/pinfo.c:311 287 | #, c-format 288 | msgid "Error: could not open info file, trying manual\n" 289 | msgstr "Помилка: не вдалося відкрити файл інформації, спробую довідник\n" 290 | 291 | #: src/pinfo.c:344 292 | #, c-format 293 | msgid "Warning: tag table not found...\n" 294 | msgstr "Попередження: таблицю тегів не знайдено...\n" 295 | 296 | #: src/pinfo.c:348 297 | #, c-format 298 | msgid "Trying to create alternate tag table...\n" 299 | msgstr "Спроба створення альтернативної таблиці тегів...\n" 300 | 301 | #: src/pinfo.c:353 src/pinfo.c:577 302 | #, c-format 303 | msgid "This doesn't look like info file...\n" 304 | msgstr "Це не здається файлом типу info...\n" 305 | 306 | #: src/pinfo.c:366 307 | #, c-format 308 | msgid "Specified node does not exist...\n" 309 | msgstr "Вказаний вузол не існує...\n" 310 | 311 | #: src/pinfo.c:425 312 | msgid "Tag table is corrupt, trying to fix..." 313 | msgstr "Таблиця тегів пошкоджена, спроба відновлення..." 314 | 315 | #: src/pinfo.c:499 316 | msgid "File not found. Press any key..." 317 | msgstr "Файл не знайдено. Натисніть будь-яку клавішу..." 318 | 319 | #: src/pinfo.c:519 320 | #, c-format 321 | msgid "Unexpected error.\n" 322 | msgstr "Несподівана помилка.\n" 323 | 324 | #: src/pinfo.c:572 325 | msgid "Tag table not found. Trying to create alternate..." 326 | msgstr "Таблицю тегів не знайдено. Спроба створення альтернативної таблиці..." 327 | 328 | #: src/pinfo.c:659 329 | #, c-format 330 | msgid "Security warning: Unable to get GID of group called: %s\n" 331 | msgstr "Попередження безпеки: Неможливо отримати GID групи: %s\n" 332 | 333 | #: src/pinfo.c:679 334 | #, c-format 335 | msgid "Security warning: Unable to get UID of user called: %s\n" 336 | msgstr "Попередження безпеки: Неможливо отримати UID користувача: %s\n" 337 | 338 | #: src/pinfo.c:694 339 | #, c-format 340 | msgid "Unable to drop root privileges: %s" 341 | msgstr "Не вдалося відкинути привілеї root: %s" 342 | -------------------------------------------------------------------------------- /po/vi.po: -------------------------------------------------------------------------------- 1 | # Vietnamese translation for PInfo. 2 | # Copyright © 2005 Przemek Borys , Bas Zoetekouw , Nathanael Nerode 3 | # This file is distributed under the same license as the PInfo package. 4 | # Clytie Siddall , 2005. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: pinfo\n" 9 | "Report-Msgid-Bugs-To: pinfo-devel@lists.alioth.debian.org\n" 10 | "POT-Creation-Date: 2019-02-06 13:30+0100\n" 11 | "PO-Revision-Date: 2005-12-21 15:11+1030\n" 12 | "Last-Translator: Clytie Siddall \n" 13 | "Language-Team: Vietnamese \n" 14 | "Language: vi\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=utf-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=1; plural=0\n" 19 | "X-Generator: LocFactoryEditor 1.5.1b\n" 20 | 21 | #: src/filehandling_functions.c:491 src/filehandling_functions.c:498 22 | #, c-format 23 | msgid "Searching for indirect done" 24 | msgstr "Đang tìm kiếm xong gián tiếp" 25 | 26 | #: src/filehandling_functions.c:530 src/filehandling_functions.c:537 27 | #, c-format 28 | msgid "Warning: could not find tag table" 29 | msgstr "Cảnh báo: không tìm thấy bảng thẻ" 30 | 31 | #: src/filehandling_functions.c:569 32 | #, c-format 33 | msgid "Searching for tag table done\n" 34 | msgstr "Đang tìm kiếm xong bảng thẻ\n" 35 | 36 | #: src/filehandling_functions.c:708 37 | #, c-format 38 | msgid "Error while reading file '%s'" 39 | msgstr "" 40 | 41 | #: src/filehandling_functions.c:1129 42 | #, fuzzy 43 | msgid "Can't open file" 44 | msgstr "• Không thể mở tập tin cấu hình. •\n" 45 | 46 | #: src/filehandling_functions.c:1130 src/pinfo.c:426 47 | msgid "press a key to continue" 48 | msgstr "bấm phím nào để tiếp tục" 49 | 50 | #: src/filehandling_functions.c:1248 51 | #, fuzzy, c-format 52 | msgid "Error: could not open info file part" 53 | msgstr "Lỗi: không thể mở tập tin thông tin\n" 54 | 55 | #: src/mainfunction.c:168 src/manual.c:1005 56 | msgid "Are you sure you want to print?" 57 | msgstr "Bạn có chắc muốn in không?" 58 | 59 | #: src/mainfunction.c:220 src/manual.c:1050 60 | msgid "Enter line: " 61 | msgstr "Gõ dòng: " 62 | 63 | #: src/mainfunction.c:261 src/manual.c:1097 64 | msgid "Enter command: " 65 | msgstr "Gõ lệnh: " 66 | 67 | #: src/mainfunction.c:280 68 | msgid "Operation failed..." 69 | msgstr "Thao tác thất bại..." 70 | 71 | #: src/mainfunction.c:316 src/mainfunction.c:575 src/manual.c:1150 72 | msgid "Enter regular expression: " 73 | msgstr "Gõ biểu thức chính quy: " 74 | 75 | #: src/mainfunction.c:546 src/mainfunction.c:643 src/manual.c:1228 76 | msgid "Search string not found..." 77 | msgstr "Không tìm thấy chuỗi tìm kiếm..." 78 | 79 | #: src/mainfunction.c:602 src/manual.c:1185 80 | msgid "Invalid regular expression;" 81 | msgstr "Biểu thức chính quy không hợp lệ;" 82 | 83 | #: src/mainfunction.c:604 src/manual.c:1187 84 | msgid "Press any key to continue..." 85 | msgstr "Bấm phím nào để tiếp tục..." 86 | 87 | #: src/mainfunction.c:674 88 | msgid "Enter node name: " 89 | msgstr "Gõ tên nút: " 90 | 91 | #: src/mainfunction.c:753 92 | #, c-format 93 | msgid "Node %s not found" 94 | msgstr "Không tìm thấy nút %s" 95 | 96 | #: src/mainfunction.c:1213 src/manual.c:1585 97 | msgid "Are you sure you want to quit?" 98 | msgstr "Bạn có chắc muốn thoát không?" 99 | 100 | #: src/manual.c:342 101 | #, c-format 102 | msgid "Error: Cannot call man command.\n" 103 | msgstr "Lỗi: không thể gọi lệnh man (hướng dẫn).\n" 104 | 105 | #: src/manual.c:351 106 | #, c-format 107 | msgid "Error: No manual page found either.\n" 108 | msgstr "Lỗi: cũng không tìm thấy trang hướng dẫn.\n" 109 | 110 | #: src/manual.c:354 111 | #, c-format 112 | msgid "Apropos pages:\n" 113 | msgstr "Trang Apropos:\n" 114 | 115 | #: src/manual.c:397 116 | msgid "Calling gunzip for" 117 | msgstr "Đang gọi gunzip cho" 118 | 119 | #: src/manual.c:403 120 | #, c-format 121 | msgid "Couldn't call gunzip.\n" 122 | msgstr "Không thể gọi gunzip.\n" 123 | 124 | #: src/manual.c:440 125 | msgid "IGNORING" 126 | msgstr "ĐANG BỎ QUA" 127 | 128 | #: src/manual.c:486 129 | #, c-format 130 | msgid "Error: No manual page found\n" 131 | msgstr "Lỗi: không tìm thấy trang hướng dẫn\n" 132 | 133 | #: src/manual.c:491 134 | #, c-format 135 | msgid "Calling apropos \n" 136 | msgstr "Đang gọi apropos \n" 137 | 138 | #: src/manual.c:496 139 | #, c-format 140 | msgid "Nothing appropriate\n" 141 | msgstr "Không có gì thích hợp\n" 142 | 143 | #: src/manual.c:1019 144 | msgid "Enter manual name: " 145 | msgstr "Gõ tên sổ hướng dẫn: " 146 | 147 | #: src/manual.c:1666 src/video.c:113 148 | #, c-format 149 | msgid "Viewing line %d/%d, %d%%" 150 | msgstr "Đang xem dòng %d/%d, %d%%" 151 | 152 | #: src/manual.c:1668 src/video.c:115 153 | #, c-format 154 | msgid "Viewing line %d/%d, 100%%" 155 | msgstr "Đang xem dòng %d/%d, 100%%" 156 | 157 | #: src/parse_config.c:99 158 | #, c-format 159 | msgid "Can't open config file!\n" 160 | msgstr "• Không thể mở tập tin cấu hình. •\n" 161 | 162 | #: src/parse_config.c:149 163 | #, c-format 164 | msgid "Parse error in config file on line %d\n" 165 | msgstr "Gặp lỗi phân tách trong tập tin cấu hình trên dòng %d\n" 166 | 167 | #: src/utils.c:119 src/utils.c:175 168 | #, c-format 169 | msgid "Virtual memory exhausted\n" 170 | msgstr "Hết bộ nhớ ảo\n" 171 | 172 | #: src/utils.c:214 173 | #, c-format 174 | msgid "Failed to execute command '%s': %i" 175 | msgstr "" 176 | 177 | #: src/utils.c:254 178 | #, c-format 179 | msgid "" 180 | "Illegal characters in filename!\n" 181 | "*** %s\n" 182 | msgstr "" 183 | "• Gặp ký tự sai trong tên tập tin. •\n" 184 | "*** %s\n" 185 | 186 | #: src/utils.c:584 187 | msgid "yes" 188 | msgstr "có" 189 | 190 | #: src/utils.c:585 191 | msgid "no" 192 | msgstr "không" 193 | 194 | #: src/utils.c:861 195 | #, fuzzy, c-format 196 | msgid "Couldn't open temporary file\n" 197 | msgstr "• Không thể mở tập tin cấu hình. •\n" 198 | 199 | #: src/video.c:59 200 | msgid "File:" 201 | msgstr "Tập tin:" 202 | 203 | #: src/video.c:60 204 | msgid "Node:" 205 | msgstr "Nút:" 206 | 207 | #: src/video.c:61 208 | msgid "Next:" 209 | msgstr "Kế:" 210 | 211 | #: src/video.c:62 212 | msgid "Prev:" 213 | msgstr "Trước:" 214 | 215 | #: src/video.c:63 216 | msgid "Up:" 217 | msgstr "Lên:" 218 | 219 | #: src/video.c:297 220 | msgid "Warning: matched empty string" 221 | msgstr "" 222 | 223 | #: src/pinfo.c:110 src/pinfo.c:195 224 | #, c-format 225 | msgid "Looking for man page...\n" 226 | msgstr "Đang tìm trang hướng dẫn...\n" 227 | 228 | #: src/pinfo.c:148 229 | #, c-format 230 | msgid "--node option used without argument\n" 231 | msgstr "Tùy chọn « --node » (nút) được dùng không có đối số\n" 232 | 233 | #: src/pinfo.c:158 234 | #, c-format 235 | msgid "--rcfile option used without argument\n" 236 | msgstr "Tùy chọn « --rcfile » (tập tin rc) được dùng không có đối số\n" 237 | 238 | #: src/pinfo.c:169 239 | #, c-format 240 | msgid "" 241 | "Usage:\n" 242 | "%s [options] [info|manual]\n" 243 | "Options:\n" 244 | "-h, --help help\n" 245 | "-v, --version version\n" 246 | "-m, --manual use man page\n" 247 | "-r, --raw-filename use raw filename\n" 248 | "-f, --file synonym for -r\n" 249 | "-a, --apropos call apropos if nothing found\n" 250 | "-p, --plain-apropos call only apropos\n" 251 | "-c, --cut-man-headers cut out repeated man headers\n" 252 | "-l, --long-manual-links use long link names in manuals\n" 253 | "-s, --squeeze-manlines cut empty lines from manual pages\n" 254 | "-d, --dont-handle-without-tag-table don't display texinfo pages without " 255 | "tag\n" 256 | " tables\n" 257 | "-t, --force-manual-tag-table force manual detection of tag table\n" 258 | "-x, --clear-at-exit clear screen at exit\n" 259 | " --node=nodename, --node nodename jump directly to the node nodename\n" 260 | " --rcfile=file, --rcfile file use alternate rcfile\n" 261 | msgstr "" 262 | "Cách sử dụng:\n" 263 | "%s [tùy_chọn ...] [thông_tin|sổ_hướng_dẫn]\n" 264 | "Options:\n" 265 | "-h, --help _trợ giúp_\n" 266 | "-v, --version _phiên bản_\n" 267 | "-m, --manual sử dụng _trang hướng dẫn_\n" 268 | "-r, --raw-filename sử dụng _tên tập tin thô_\n" 269 | "-f, --file bằng tùy chọn « -r » (_tập tin_)\n" 270 | "-a, --apropos gọi apropos nếu không tìm gì\n" 271 | "-p, --plain-apropos gọi chỉ apropos thôi (_chuẩn_)\n" 272 | "-c, --cut-man-headers _cắt ra các dòng đầu hướng dẫn_ trùng\n" 273 | "-l, --long-manual-links sử dụng tên _liên kết dài_ trong _sổ " 274 | "hướng dẫn_\n" 275 | "-s, --squeeze-manlines cắt các _dòng_ trắng ra trang _hướng " 276 | "dẫn_ (_vắt_)\n" 277 | "-d, --dont-handle-without-tag-table _đừng_ hiển thị trang kiểu texinfo\n" 278 | "\t\t\t\t\t\t\t\t_không có bảng thẻ_ (_quản " 279 | "lý_) -t, --force-manual-tag-" 280 | "table _buộc_ tự phát hiện _bảng thẻ_\n" 281 | "-x, --clear-at-exit _xóa_ màn hình _khi thoát_\n" 282 | " --node=nodename, --node nodename nhảy thẳng đến _nút tên_ này\n" 283 | " --rcfile=tập_tin, --rcfile tập_tin sử dụng tập tin rc thay thế\n" 284 | 285 | #: src/pinfo.c:311 286 | #, c-format 287 | msgid "Error: could not open info file, trying manual\n" 288 | msgstr "Lỗi: không thể mở tập tin thông tin nên thử sổ hướng dẫn\n" 289 | 290 | #: src/pinfo.c:344 291 | #, c-format 292 | msgid "Warning: tag table not found...\n" 293 | msgstr "Cảnh báo: không tìm thấy bảng thẻ...\n" 294 | 295 | #: src/pinfo.c:348 296 | #, c-format 297 | msgid "Trying to create alternate tag table...\n" 298 | msgstr "Đang cố tạo bảng thẻ thay thế...\n" 299 | 300 | #: src/pinfo.c:353 src/pinfo.c:577 301 | #, c-format 302 | msgid "This doesn't look like info file...\n" 303 | msgstr "Điều này không hình như tập tin thông tin...\n" 304 | 305 | #: src/pinfo.c:366 306 | #, c-format 307 | msgid "Specified node does not exist...\n" 308 | msgstr "Không có nút đã gõ...\n" 309 | 310 | #: src/pinfo.c:425 311 | msgid "Tag table is corrupt, trying to fix..." 312 | msgstr "Bảng thẻ bị hỏng nên cố sửa..." 313 | 314 | #: src/pinfo.c:499 315 | msgid "File not found. Press any key..." 316 | msgstr "Không tìm thấy tập tin. Bấm phím nào..." 317 | 318 | #: src/pinfo.c:519 319 | #, c-format 320 | msgid "Unexpected error.\n" 321 | msgstr "Gặp lỗi bất ngờ.\n" 322 | 323 | #: src/pinfo.c:572 324 | msgid "Tag table not found. Trying to create alternate..." 325 | msgstr "Không tìm thấy bảng thẻ. Đang cố tạo điều thay thế..." 326 | 327 | #: src/pinfo.c:659 328 | #, c-format 329 | msgid "Security warning: Unable to get GID of group called: %s\n" 330 | msgstr "Cảnh báo bảo mật: không thể lấy GID của nhóm tên: %s\n" 331 | 332 | #: src/pinfo.c:679 333 | #, c-format 334 | msgid "Security warning: Unable to get UID of user called: %s\n" 335 | msgstr "Cảnh báo bảo mật: không thể lấy UID của người dùng tên: %s\n" 336 | 337 | #: src/pinfo.c:694 338 | #, c-format 339 | msgid "Unable to drop root privileges: %s" 340 | msgstr "" 341 | -------------------------------------------------------------------------------- /src/Makefile.am: -------------------------------------------------------------------------------- 1 | ## Process this file with automake to produce Makefile.in 2 | 3 | @SET_MAKE@ 4 | 5 | bin_PROGRAMS = pinfo 6 | 7 | pinfo_COMMON_SRC = pinfo.c \ 8 | colors.c \ 9 | datatypes.c \ 10 | filehandling_functions.c \ 11 | mainfunction.c \ 12 | manual.c \ 13 | menu_and_note_utils.c \ 14 | parse_config.c \ 15 | regexp_search.c \ 16 | signal_handler.c \ 17 | utils.c \ 18 | video.c \ 19 | colors.h \ 20 | common_includes.h \ 21 | datatypes.h \ 22 | filehandling_functions.h \ 23 | keyboard.h \ 24 | mainfunction.h \ 25 | manual.h \ 26 | menu_and_note_utils.h \ 27 | parse_config.h \ 28 | regexp_search.h \ 29 | signal_handler.h \ 30 | utils.h \ 31 | video.h \ 32 | initializelinks.c \ 33 | initializelinks.h \ 34 | printinfo.c \ 35 | printinfo.h \ 36 | localestuff.h 37 | 38 | pinfo_READLINE = readlinewrapper.c readlinewrapper.h 39 | pinfo_SNPRINTF = snprintf.c # snprintf.h 40 | pinfo_SIGBLOCK = sigblock.c sigblock.h 41 | 42 | if HAS_READLINE 43 | pinfo_READLINE_OBJ = 44 | else 45 | pinfo_READLINE_OBJ = readlinewrapper.o 46 | endif 47 | 48 | if HAVE_SNPRINTF 49 | pinfo_SNPRINTF_OBJ = 50 | else 51 | pinfo_SNPRINTF_OBJ = snprintf.o 52 | endif 53 | 54 | if HAVE_SIGBLOCK 55 | pinfo_SIGBLOCK_OBJ = 56 | else 57 | pinfo_SIGBLOCK_OBJ = sigblock.o 58 | endif 59 | 60 | pinfo_SOURCES = $(pinfo_COMMON_SRC) 61 | 62 | pinfo_LDADD = \ 63 | $(pinfo_READLINE_OBJ) $(pinfo_SNPRINTF_OBJ) \ 64 | $(pinfo_SIGBLOCK_OBJ) $(READLINE_LIBS) $(INTLLIBS) \ 65 | $(CURSES_LIBS) 66 | 67 | pinfo_CFLAGS = $(CURSES_CFLAGS) $(WCHAR_FLAGS) \ 68 | $(READLINE_INCLUDES) $(WFLAGS) \ 69 | -DLOCALEDIR=\"$(LOCALEDIR)\" -DCONFIGDIR=\"$(sysconfdir)/pinforc\" 70 | 71 | pinfo_DEPENDENCIES = $(pinfo_READLINE_OBJ)\ 72 | $(pinfo_SNPRINTF_OBJ)\ 73 | $(pinfo_SIGBLOCK_OBJ)\ 74 | $(INTLDEPS) 75 | 76 | 77 | if HAS_READLINE 78 | else 79 | readlinewrapper.o: $(pinfo_READLINE) 80 | endif 81 | 82 | if HAVE_SNPRINTF 83 | else 84 | snprintf.o: $(pinfo_SNPRINTF) 85 | endif 86 | 87 | if HAVE_SIGBLOCK 88 | else 89 | sigblock.o: $(pinfo_SIGBLOCK) 90 | endif 91 | 92 | install-data-local: 93 | if [ ! -f $(DESTDIR)$(sysconfdir)/pinforc ] ; then \ 94 | if [ ! -d $(DESTDIR)$(sysconfdir) ]; then \ 95 | $(INSTALL) -d $(DESTDIR)$(sysconfdir); \ 96 | fi; \ 97 | $(INSTALL) -m 644 pinforc $(DESTDIR)$(sysconfdir) ; \ 98 | else \ 99 | echo "WARNING! Old pinforc detected. I'm not installing the new file"; \ 100 | fi 101 | uninstall-local: 102 | rm -f $(DESTDIR)$(sysconfdir)/pinforc 103 | 104 | 105 | 106 | EXTRA_DIST = $(pinfo_READLINE) $(pinfo_SNPRINTF) $(pinfo_SIGBLOCK) 107 | 108 | -------------------------------------------------------------------------------- /src/colors.c: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #include "common_includes.h" 23 | 24 | #ifdef HAVE_CURSES_COLOR 25 | extern struct colours cols; 26 | #endif /* HAVE_CURSES_COLOR */ 27 | 28 | int normal; 29 | int menuselected; 30 | int menu; 31 | int noteselected; 32 | int note; 33 | int topline; 34 | int bottomline; 35 | int manualbold; 36 | int manualitalic; 37 | int url; 38 | int urlselected; 39 | int infohighlight; 40 | int searchhighlight; 41 | 42 | void 43 | initcolors() 44 | { 45 | #ifdef HAVE_CURSES_COLOR 46 | if (has_colors()) 47 | { 48 | start_color(); 49 | #ifdef HAVE_DECL_USE_DEFAULT_COLORS 50 | use_default_colors(); 51 | #endif 52 | normal = COLOR_PAIR(NORMAL); /* normal text */ 53 | init_pair(NORMAL, cols.normal_fore, cols.normal_back); 54 | if (cols.normal_bold) 55 | normal |= A_BOLD; 56 | if (cols.normal_blink) 57 | normal |= A_BLINK; 58 | 59 | menuselected = COLOR_PAIR(MENUSELECTED); /* selected menu */ 60 | init_pair(MENUSELECTED, cols.menuselected_fore, cols.menuselected_back); 61 | if (cols.menuselected_bold) 62 | menuselected |= A_BOLD; 63 | if (cols.menuselected_blink) 64 | menuselected |= A_BLINK; 65 | 66 | menu = COLOR_PAIR(MENU); /* just menu */ 67 | init_pair(MENU, cols.menu_fore, cols.menu_back); 68 | if (cols.menu_bold) 69 | menu |= A_BOLD; 70 | if (cols.menu_blink) 71 | menu |= A_BLINK; 72 | 73 | noteselected = COLOR_PAIR(NOTESELECTED); /* selected note */ 74 | init_pair(NOTESELECTED, cols.noteselected_fore, cols.noteselected_back); 75 | if (cols.noteselected_bold) 76 | noteselected |= A_BOLD; 77 | if (cols.noteselected_blink) 78 | noteselected |= A_BLINK; 79 | 80 | note = COLOR_PAIR(NOTE); /* just note */ 81 | init_pair(NOTE, cols.note_fore, cols.note_back); 82 | if (cols.note_bold) 83 | note |= A_BOLD; 84 | if (cols.note_blink) 85 | note |= A_BLINK; 86 | 87 | topline = COLOR_PAIR(TOPLINE); /* topline color */ 88 | init_pair(TOPLINE, cols.topline_fore, cols.topline_back); 89 | if (cols.topline_bold) 90 | topline |= A_BOLD; 91 | if (cols.topline_blink) 92 | topline |= A_BLINK; 93 | 94 | bottomline = COLOR_PAIR(BOTTOMLINE); /* bottomline color */ 95 | init_pair(BOTTOMLINE, cols.bottomline_fore, cols.bottomline_back); 96 | if (cols.bottomline_bold) 97 | bottomline |= A_BOLD; 98 | if (cols.bottomline_blink) 99 | bottomline |= A_BLINK; 100 | 101 | manualbold = COLOR_PAIR(MANUALBOLD); /* manual bold color */ 102 | init_pair(MANUALBOLD, cols.manualbold_fore, cols.manualbold_back); 103 | if (cols.manualbold_bold) 104 | manualbold |= A_BOLD; 105 | if (cols.manualbold_blink) 106 | manualbold |= A_BLINK; 107 | 108 | manualitalic = COLOR_PAIR(MANUALITALIC); /* manual italic color */ 109 | init_pair(MANUALITALIC, cols.manualitalic_fore, cols.manualitalic_back); 110 | if (cols.manualitalic_bold) 111 | manualitalic |= A_BOLD; 112 | if (cols.manualitalic_blink) 113 | manualitalic |= A_BLINK; 114 | 115 | url = COLOR_PAIR(URL); /* url(http, ftp) color */ 116 | init_pair(URL, cols.url_fore, cols.url_back); 117 | if (cols.url_bold) 118 | url |= A_BOLD; 119 | if (cols.url_blink) 120 | url |= A_BLINK; 121 | 122 | urlselected = COLOR_PAIR(URLSELECTED); /* selected url */ 123 | init_pair(URLSELECTED, cols.urlselected_fore, cols.urlselected_back); 124 | if (cols.urlselected_bold) 125 | urlselected |= A_BOLD; 126 | if (cols.urlselected_blink) 127 | urlselected |= A_BLINK; 128 | 129 | infohighlight = COLOR_PAIR(INFOHIGHLIGHT); /* highlight for info quotes */ 130 | init_pair(INFOHIGHLIGHT, cols.infohighlight_fore, cols.infohighlight_back); 131 | if (cols.infohighlight_bold) 132 | infohighlight |= A_BOLD; 133 | if (cols.infohighlight_blink) 134 | infohighlight |= A_BLINK; 135 | 136 | searchhighlight = COLOR_PAIR(SEARCHHIGHLIGHT); /* highlight for info quotes */ 137 | init_pair(SEARCHHIGHLIGHT, cols.searchhighlight_fore, cols.searchhighlight_back); 138 | if (cols.searchhighlight_bold) 139 | searchhighlight |= A_BOLD; 140 | if (cols.searchhighlight_blink) 141 | searchhighlight |= A_BLINK; 142 | } 143 | else 144 | { 145 | #endif /* HAVE_CURSES_COLOR */ 146 | normal = A_NORMAL; 147 | menu = A_BOLD; 148 | note = A_BOLD; 149 | url = A_BOLD; 150 | menuselected = A_REVERSE; 151 | noteselected = A_REVERSE; 152 | urlselected = A_REVERSE; 153 | topline = A_REVERSE; 154 | bottomline = A_REVERSE; 155 | manualbold = A_BOLD; 156 | manualitalic = A_BOLD; 157 | infohighlight = A_BOLD; 158 | searchhighlight = A_BOLD; 159 | #ifdef HAVE_CURSES_COLOR 160 | } 161 | #endif /* HAVE_CURSES_COLOR */ 162 | } 163 | -------------------------------------------------------------------------------- /src/colors.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __COLORS_H 23 | #define __COLORS_H 24 | 25 | /* numbers of color pairs in curses color definitions */ 26 | 27 | #define NORMAL 1 28 | #define MENUSELECTED 2 29 | #define NOTESELECTED 3 30 | #define MENU 4 31 | #define NOTE 5 32 | #define TOPLINE 6 33 | #define BOTTOMLINE 7 34 | #define MANUALBOLD 8 35 | #define MANUALITALIC 9 36 | #define URL 10 37 | #define URLSELECTED 11 38 | #define INFOHIGHLIGHT 12 39 | #define SEARCHHIGHLIGHT 13 40 | 41 | /* those bellow hold color attributes for named screen widgets */ 42 | 43 | extern int menu; 44 | extern int menuselected; 45 | extern int note; 46 | extern int noteselected; 47 | extern int normal; 48 | extern int topline; 49 | extern int bottomline; 50 | extern int manualbold; 51 | extern int manualitalic; 52 | extern int url; 53 | extern int urlselected; 54 | extern int infohighlight; 55 | extern int searchhighlight; 56 | 57 | /* 58 | * initialize color values/attributes/etc. Either for color and monochrome 59 | * mode. 60 | */ 61 | void initcolors (); 62 | 63 | #endif 64 | -------------------------------------------------------------------------------- /src/common_includes.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __COMMON_INCLUDES_H 23 | #define __COMMON_INCLUDES_H 24 | 25 | /* make sure unistd.h defines sbrk() */ 26 | #define _DEFAULT_SOURCE 1 27 | #define _BSD_SOURCE 1 28 | 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | #include 38 | #include 39 | #include 40 | #include 41 | #include 42 | 43 | #include "../config.h" 44 | 45 | #if HAVE_NCURSESW_H /* if should be used */ 46 | # include 47 | #elif HAVE_NCURSESW_CURSES_H /* if should be used */ 48 | # include 49 | #elif HAVE_NCURSES_H /* if should be used */ 50 | # include 51 | #elif HAVE_NCURSES_CURSES_H /* if should be used */ 52 | # include 53 | #elif HAVE_CURSES_H /* if is present and should be used */ 54 | # include 55 | #else 56 | # error "No valid curses headers detected" 57 | #endif 58 | 59 | #include "localestuff.h" 60 | 61 | #include "datatypes.h" 62 | #include "filehandling_functions.h" 63 | #include "video.h" 64 | #include "menu_and_note_utils.h" 65 | #include "mainfunction.h" 66 | #include "utils.h" 67 | #include "signal_handler.h" 68 | #include "colors.h" 69 | #include "regexp_search.h" 70 | #include "manual.h" 71 | #include "parse_config.h" 72 | #include "keyboard.h" 73 | #include "initializelinks.h" 74 | #include "printinfo.h" 75 | 76 | /* 77 | * Readline isn't safe for nonlinux terminals (i.e. vt100) 78 | * But if you have readline linked with ncurses you may enable readline with 79 | * ./configure --with-readline 80 | * 81 | */ 82 | #ifndef HAS_READLINE 83 | #include "readlinewrapper.h" 84 | #endif /* HAS_READLINE */ 85 | 86 | #ifndef HAVE_SIGBLOCK 87 | #include "sigblock.h" 88 | #endif 89 | 90 | /* I hear voices, that it is needed by RH5.2 ;) */ 91 | #define _REGEX_RE_COMP 92 | 93 | /* somewhat portable way of flagging unused vars 94 | * from https://stackoverflow.com/questions/7090998/portable-unused-parameter-macro-used-on-function-signature-for-c-and-c 95 | */ 96 | #ifdef UNUSED 97 | #elif defined(__GNUC__) 98 | # define UNUSED(x) x __attribute__((unused)) 99 | #elif defined(__LCLINT__) 100 | # define UNUSED(x) /*@unused@*/ x 101 | #elif defined(__cplusplus) 102 | # define UNUSED(x) 103 | #else 104 | # define UNUSED(x) x 105 | #endif 106 | 107 | #endif 108 | -------------------------------------------------------------------------------- /src/datatypes.c: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | #include "common_includes.h" 22 | 23 | int verbose = 1; 24 | 25 | char *filenameprefix = 0; 26 | 27 | char *httpviewer = "lynx"; 28 | char *ftpviewer = "lynx"; 29 | char *maileditor = "mail"; 30 | char *printutility = "lpr"; 31 | char *manlinks = "1:8:2:3:4:5:6:7:9:n:l:p:o:3X11:3Xt:3X:3x"; 32 | char *configuredinfopath = ".:/usr/share/info:/usr/info:/usr/local/share/info:/usr/local/info:/opt/info"; 33 | char *ignoredmacros = 0; 34 | char *rcfile = NULL; 35 | 36 | char *tmpfilename1 = 0; 37 | char *tmpfilename2 = 0; 38 | 39 | SearchAgain searchagain; 40 | 41 | HyperObject *hyperobjects = 0; 42 | unsigned long hyperobjectcount = 0; 43 | 44 | Indirect *indirect = 0; 45 | TagTable *tag_table = 0; 46 | long FirstNodeOffset = 0; 47 | char FirstNodeName[256]; 48 | unsigned IndirectEntries = 0; 49 | unsigned TagTableEntries = 0; 50 | unsigned int maxx, maxy; 51 | int CutManHeaders = 0; 52 | int CutEmptyManLines = 0; 53 | int ForceManualTagTable = 0; 54 | int DontHandleWithoutTagTable = 0; 55 | int LongManualLinks = 0; 56 | char *ManOptions = ""; 57 | char *StderrRedirection = "2> /dev/null"; 58 | int FilterB7 = 0; 59 | int ConfirmQuit = 0; 60 | int QuitConfirmDefault = 0; 61 | int ClearScreenAtExit = 0; 62 | int CallReadlineHistory = 1; 63 | 64 | InfoHistory infohistory; 65 | 66 | int npos = -1; 67 | int ncursor = -1; 68 | int nmenu = -1; 69 | int use_apropos = 0; 70 | int plain_apropos = 0; 71 | int use_manual = 0; 72 | int use_raw_filename = 0; 73 | int quote_ignored = 0; 74 | int grab_mouse = 0; 75 | 76 | int winchanged = 0; 77 | 78 | void 79 | inithistory() 80 | { 81 | infohistory.length = 0; 82 | infohistory.node = 0; 83 | infohistory.file = 0; 84 | infohistory.pos = 0; 85 | infohistory.cursor = 0; 86 | infohistory.menu = 0; 87 | } 88 | 89 | /* 90 | * Add history entry 91 | */ 92 | void 93 | addinfohistory(char *file, char *node, int cursor, int mymenu, int pos) 94 | { 95 | if (!infohistory.length) 96 | { 97 | infohistory.length++; 98 | infohistory.node = xmalloc(sizeof(char *) * 2); 99 | infohistory.node[0] = 0; 100 | infohistory.file = xmalloc(sizeof(char *) * 2); 101 | infohistory.file[0] = 0; 102 | infohistory.pos = xmalloc(sizeof(int) * 2); 103 | infohistory.cursor = xmalloc(sizeof(int) * 2); 104 | infohistory.menu = xmalloc(sizeof(int) * 2); 105 | } 106 | else 107 | { 108 | infohistory.length++; 109 | infohistory.node = xrealloc(infohistory.node, sizeof(char *) *(infohistory.length + 1)); 110 | infohistory.file = xrealloc(infohistory.file, sizeof(char *) *(infohistory.length + 1)); 111 | infohistory.pos = xrealloc(infohistory.pos, sizeof(int) *(infohistory.length + 1)); 112 | infohistory.cursor = xrealloc(infohistory.cursor, sizeof(int) *(infohistory.length + 1)); 113 | infohistory.menu = xrealloc(infohistory.menu, sizeof(int) *(infohistory.length + 1)); 114 | } 115 | infohistory.node[infohistory.length] = xmalloc(strlen(node) + 1); 116 | strcpy(infohistory.node[infohistory.length], node); 117 | infohistory.file[infohistory.length] = xmalloc(strlen(file) + 1); 118 | strcpy(infohistory.file[infohistory.length], file); 119 | infohistory.pos[infohistory.length] = pos; 120 | infohistory.cursor[infohistory.length] = cursor; 121 | infohistory.menu[infohistory.length] = mymenu; 122 | } 123 | 124 | /* 125 | * Delete last history entry 126 | */ 127 | void 128 | dellastinfohistory() 129 | { 130 | if (infohistory.length) 131 | { 132 | if (infohistory.node[infohistory.length]) 133 | { 134 | xfree(infohistory.node[infohistory.length]); 135 | infohistory.node[infohistory.length] = 0; 136 | } 137 | if (infohistory.file[infohistory.length]) 138 | { 139 | xfree(infohistory.file[infohistory.length]); 140 | infohistory.file[infohistory.length] = 0; 141 | } 142 | if (infohistory.length) 143 | infohistory.length--; 144 | if (infohistory.length) 145 | { 146 | infohistory.node = xrealloc(infohistory.node, sizeof(char *) *(infohistory.length + 1)); 147 | infohistory.file = xrealloc(infohistory.file, sizeof(char *) *(infohistory.length + 1)); 148 | infohistory.pos = xrealloc(infohistory.pos, sizeof(int) *(infohistory.length + 1)); 149 | infohistory.cursor = xrealloc(infohistory.cursor, sizeof(int) *(infohistory.length + 1)); 150 | infohistory.menu = xrealloc(infohistory.menu, sizeof(int) *(infohistory.length + 1)); 151 | } 152 | else 153 | { 154 | if (infohistory.node) 155 | { 156 | xfree(infohistory.node); 157 | infohistory.node = 0; 158 | } 159 | if (infohistory.file) 160 | { 161 | xfree(infohistory.file); 162 | infohistory.file = 0; 163 | } 164 | if (infohistory.pos) 165 | { 166 | xfree(infohistory.pos); 167 | infohistory.pos = 0; 168 | } 169 | if (infohistory.cursor) 170 | { 171 | xfree(infohistory.cursor); 172 | infohistory.cursor = 0; 173 | } 174 | if (infohistory.menu) 175 | { 176 | xfree(infohistory.menu); 177 | infohistory.menu = 0; 178 | } 179 | } 180 | } 181 | } 182 | 183 | void 184 | clearfilenameprefix() 185 | { 186 | if (filenameprefix) 187 | { 188 | xfree(filenameprefix); 189 | filenameprefix = 0; 190 | } 191 | } 192 | -------------------------------------------------------------------------------- /src/datatypes.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __DATATYPES_H 23 | #define __DATATYPES_H 24 | 25 | #define FREE 0 26 | #define LOCKED 1 27 | 28 | #define KEEP_HISTORY 1 29 | #define KILL_HISTORY 2 30 | 31 | #define SOFT_HYPHEN 0xAD 32 | #define KEY_NOTHING 99999 33 | 34 | #define HIGHLIGHT 1000 35 | 36 | typedef struct 37 | { 38 | char lastsearch[256]; /* last searched regexp */ 39 | char type; /* type of the last search (global/local) */ 40 | int search; /* if true -- search again */ 41 | } 42 | SearchAgain; 43 | 44 | typedef struct 45 | { 46 | char filename[256]; /* name of file, where's the given offset */ 47 | long offset; /* offset of the node */ 48 | } 49 | Indirect; 50 | 51 | typedef struct 52 | { 53 | char nodename[256]; /* name of the node */ 54 | long offset; /* offset of the node */ 55 | } 56 | TagTable; 57 | 58 | typedef struct 59 | { 60 | int length; 61 | char **node; /* array of history of nodes */ 62 | char **file; /* array of history of files, associated with given nodes */ 63 | int *pos; /* history of pos offsets in viewed nodes */ 64 | int *cursor; /* history of cursor offsets in viewed nodes */ 65 | int *menu; /* history of menu positions (in sequential reading) in viewed nodes */ 66 | } 67 | InfoHistory; 68 | 69 | typedef struct 70 | { 71 | unsigned line; /* line number of the place where the link is */ 72 | unsigned col; /* column number ----||---- */ 73 | int breakpos; /* col number, where the links breaks to next line */ 74 | int type; /* type of link: 0 - * menu::, 75 | 1 - * Comment: menu. 76 | 2 - *note note:: 77 | 3 - *note Comment: note. 78 | 4 - http url 79 | 5 - ftp url 80 | 6 - mailto url */ 81 | char node[256]; /* name of the referenced node */ 82 | int nodelen; /* length of string node */ 83 | char file[256]; /* name of the referenced file -- none=this file */ 84 | int filelen; /* length of string file */ 85 | int tagtableoffset; /* offset in tag table */ 86 | } 87 | HyperObject; 88 | 89 | extern int verbose; 90 | 91 | /* 92 | * Prefix directory of the infopage. It is used when we view a given set of 93 | * infopages, eg. bfd* pages. We want all pages to be read from one directory. 94 | * And this path points to that directory, and openinfo() will try to open the 95 | * file only in this directory (if this variable is set nonzero) 96 | */ 97 | extern char *filenameprefix; 98 | 99 | /* name of http viewer (i.e. lynx) */ 100 | extern char *httpviewer; 101 | /* name of ftp viewer */ 102 | extern char *ftpviewer; 103 | /* name of maileditor */ 104 | extern char *maileditor; 105 | /* name of the printing utility */ 106 | extern char *printutility; 107 | /* man sections, considered to be highlighted as links */ 108 | extern char *manlinks; 109 | /* configured paths to infopages */ 110 | extern char *configuredinfopath; 111 | /* groff/troff macros which are removed while preformatting manual page */ 112 | extern char *ignoredmacros; 113 | /* a user specified rc file */ 114 | extern char *rcfile; 115 | 116 | /* temporary filename */ 117 | extern char *tmpfilename1; 118 | /* second tmp filename--needed by regexp search, etc */ 119 | extern char *tmpfilename2; 120 | 121 | /* a structure for "search again" feature */ 122 | extern SearchAgain searchagain; 123 | 124 | /* an array of references for info */ 125 | extern HyperObject *hyperobjects; 126 | extern unsigned long hyperobjectcount; 127 | /* an array of indirect entries [1 to n] */ 128 | extern Indirect *indirect; 129 | /* number of indirect entries */ 130 | extern unsigned IndirectEntries; 131 | /* an array of tag table entries [1 to n] */ 132 | extern TagTable *tag_table; 133 | /* offset of the first node in info file */ 134 | extern long FirstNodeOffset; 135 | /* name of the first node in info file */ 136 | extern char FirstNodeName[256]; 137 | /* number of tag table entries */ 138 | extern unsigned TagTableEntries; 139 | /* maximum dimensions of screen */ 140 | extern unsigned int maxx, maxy; 141 | extern InfoHistory infohistory; 142 | /* position to by set when moving via history */ 143 | extern int npos; 144 | /* cursor pos to be set when..... as above */ 145 | extern int ncursor; 146 | /* sequential reading menu pos..... as above */ 147 | extern int nmenu; 148 | /* determines if the apropos should be called if searching for aproprimate 149 | * document fails */ 150 | extern int use_apropos; 151 | /* determines if we want only apropos output to be displayed */ 152 | extern int plain_apropos; 153 | /* determines if man handling routines should try to cut off the repeating 154 | * headers */ 155 | extern int CutManHeaders; 156 | /* determines if man loading routines should try to cut out the repeating empty 157 | * double-newlines */ 158 | extern int CutEmptyManLines; 159 | /* Determines if you wish to initialize the tag table automaticaly, or you wish 160 | * that pinfo does it alone. Some info pages may have corrupt tag table (i.e. 161 | * some versions of jed pages */ 162 | extern int ForceManualTagTable; 163 | /* Causes manual link sections to be treated as long names (i.e. 3x11 instead 164 | * of 3) */ 165 | extern int LongManualLinks; 166 | /* options passed to the `man' program */ 167 | extern char *ManOptions; 168 | /* shell code to redirect stderr output */ 169 | extern char *StderrRedirection; 170 | /* convert 0xb7 values in man pages to 'o'? */ 171 | extern int FilterB7; 172 | /* determines if pinfo should ask for quit confirmation */ 173 | extern int ConfirmQuit; 174 | /* determines the deafult answer to yes/no dialog, when finishing work with 175 | * pinfo */ 176 | extern int QuitConfirmDefault; 177 | /* determines if pinfo should clear the screen at exit */ 178 | extern int ClearScreenAtExit; 179 | /* determines whether when using readline wrapper to call the latest history 180 | * entry as default prompt or not */ 181 | extern int CallReadlineHistory; 182 | /* quote ignored macros when watching page */ 183 | extern int quote_ignored; 184 | /* set by SIGWINCH handler */ 185 | extern int winchanged; 186 | /* true if we prefer man pages over info pages */ 187 | extern int use_manual; 188 | /* true if pinfo/curses should grab the mouse and override normal terminal mouse behaviour */ 189 | extern int grab_mouse; 190 | /* if true, search the current directory first, before checking /sur/share/info etc */ 191 | extern int use_raw_filename; 192 | /* If set to true , pinfo will not attempt to display texinfo pages without tag tables */ 193 | extern int DontHandleWithoutTagTable; 194 | 195 | 196 | /* initialize history (see struct above) * variables for `lastread' history */ 197 | void inithistory (); 198 | /* adds a history entry to the info file `lastread' history */ 199 | void addinfohistory (char *file, char *node, int cursor, int menu, int pos); 200 | /* deletes last history entry */ 201 | void dellastinfohistory (); 202 | 203 | /* clears the default searchpath for openinfo() */ 204 | void clearfilenameprefix (); 205 | 206 | #endif 207 | -------------------------------------------------------------------------------- /src/filehandling_functions.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __FILEHANDLING_FUNCTIONS_H 23 | #define __FILEHANDLING_FUNCTIONS_H 24 | 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | 31 | 32 | #define INFO_TAG 0x1f 33 | #define INDIRECT_TAG 0x7f 34 | 35 | void initpaths (); 36 | void addrawpath (char *filename); 37 | 38 | /* seek to a node in certain info file */ 39 | int seeknode (int tag_table_pos, FILE ** Id); 40 | 41 | /* 42 | * free allocated memory, hold by buf (node** content, stored line by line), 43 | * and type (a char* pointer, which stores the node header). 44 | */ 45 | void freeitem (char **type, char ***buf, unsigned long *lines); 46 | 47 | /* 48 | * reads a node from 'id' to 'buf', and the header of node to 'type'. It sets 49 | * the numer of read lines to *lines. Warning! First line of 'buf' is left 50 | * empty. 51 | */ 52 | void read_item (FILE * id, char **type, char ***buf, unsigned long *lines); 53 | /* searches for indirect entry of info file */ 54 | int seek_indirect (FILE * id); 55 | /* as above, but with tag table entry */ 56 | int seek_tag_table (FILE * id,int quiet); 57 | /* 58 | * loads indirect table (from a special node, stored in message, of lines 59 | * length) 60 | */ 61 | void load_indirect (char **message, unsigned long lines); 62 | /* loads tag table (as above) */ 63 | void load_tag_table (char **message, unsigned long lines); 64 | /* opens info file */ 65 | FILE *openinfo (char *filename, int number); 66 | /* opens dir info file */ 67 | FILE *opendirfile (int number); 68 | 69 | /* creates tag table for info file */ 70 | void create_tag_table (FILE * id); 71 | /* creates tag table for indirect info */ 72 | void create_indirect_tag_table (); 73 | 74 | /* 75 | * look up a name, which was specified by the user in cmd line, in dir 76 | * entries. If found, return filedescriptor of the info file, which holds 77 | * needed entry. Also set `first node' to the name of node, which describes 78 | * the problem. Arguments: 79 | * type: a pointer to char*, which will hold the header line of dir entry 80 | * message: a pointer to char** buffer, which will hold the dir page line by 81 | * line 82 | * lines: pointer to long, which holds the number of lines in dir entry 83 | */ 84 | FILE * 85 | dirpage_lookup (char **type, char ***message, unsigned long *lines, 86 | char *filename, char **first_node); 87 | 88 | /* removes trailing .gz, .bz2, etc. */ 89 | void strip_compression_suffix (char *file); 90 | /* removes trailing .info */ 91 | void strip_info_suffix (char *file); 92 | 93 | #endif 94 | -------------------------------------------------------------------------------- /src/initializelinks.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __INITIALIZELINKS_H 23 | #define __INITIALIZELINKS_H 24 | void freelinks (); /* frees node-links */ 25 | /* initializes node links. */ 26 | void initializelinks (char *line1, char *line2, int line); 27 | /* 28 | * scans for url end in given url-string. 29 | * returns a pointer to the found place. 30 | */ 31 | char *findurlend (char *str); 32 | /* scans for the beginning of username. Returns a pointer to it. */ 33 | char *findemailstart (char *str); 34 | /* strcmp, which is insensitive to whitespaces */ 35 | int compare_tag_table_string (char *base, char *compared); 36 | /* 37 | * calculate length of visible part of string ('\t' included) between start and 38 | * end. Returns length. 39 | */ 40 | int calculate_len (char *start, char *end); 41 | #endif 42 | -------------------------------------------------------------------------------- /src/keyboard.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __KEYBOARD_H 23 | #define __KEYBOARD_H 24 | 25 | /* escape or alt key */ 26 | #define META_KEY 0x1b 27 | 28 | /* adapted from Midnight Commander */ 29 | 30 | /* macro to get CTRL+key sequence */ 31 | #define KEY_CTRL(x) ((x)&31) 32 | /* macro to get ALT+key sequence */ 33 | #define KEY_ALT(x) (0x200 | (x)) 34 | #define is_enter_key(c) ((c) == '\r' || (c) == '\n' || (c) == KEY_ENTER) 35 | 36 | /***********************************/ 37 | 38 | /* a structure, which holds the keybindings */ 39 | extern struct keybindings keys; 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /src/localestuff.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | /* locale support. Adapted from binutils */ 23 | 24 | #ifndef __LOCALESTUFF_H 25 | #define __LOCALESTUFF_H 26 | 27 | #ifdef HAVE_CONFIG_H 28 | # include "config.h" 29 | #endif 30 | 31 | /* Take care of NLS matters. */ 32 | 33 | #ifdef HAVE_LOCALE_H 34 | # include 35 | #endif 36 | #ifndef HAVE_SETLOCALE 37 | # define setlocale(Category, Locale) /* empty */ 38 | #endif 39 | 40 | #ifdef ENABLE_NLS 41 | # include 42 | # define _(Text) gettext (Text) 43 | #else 44 | # undef bindtextdomain 45 | # define bindtextdomain(Domain, Directory) /* empty */ 46 | # undef textdomain 47 | # define textdomain(Domain) /* empty */ 48 | # define _(Text) Text 49 | #endif 50 | 51 | #define STREQ(a,b) (strcmp((a), (b)) == 0) 52 | 53 | #endif 54 | -------------------------------------------------------------------------------- /src/mainfunction.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __MAINFUNCTION_H 23 | #define __MAINFUNCTION_H 24 | 25 | /* 26 | * return value type for work(). it is the name of node, where to go, after 27 | * viewing of current node ends. (viewing always takes place inside of the 28 | * work() function 29 | */ 30 | typedef struct 31 | { 32 | char *node; /* name of node */ 33 | char *file; /* name of file, where the node is */ 34 | } 35 | WorkRVal; 36 | 37 | /* this determines whether we are in a position, found after search */ 38 | extern int aftersearch; 39 | 40 | /* 41 | * this is main function which handles almost all of the work (keyboard 42 | * actions while viewing info). Arguments: 43 | * message: a pointer to char** node content, stored line by line. 44 | * type: a pointer to char*, which holds the header of info node. 45 | * lines: pointer to a long, which holds the number of lines in node. 46 | * id: file descriptor of current info file 47 | * tag_table_pos: position in tag table of the current node (needed for history) 48 | */ 49 | WorkRVal work (char ***message, char **type, unsigned long *lines, 50 | FILE * id, int tag_table_pos); 51 | #endif 52 | -------------------------------------------------------------------------------- /src/manual.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __MANUAL_H 23 | #define __MANUAL_H 24 | 25 | /* passes control to the manual code */ 26 | int handlemanual (char *name); 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /src/menu_and_note_utils.c: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #include "common_includes.h" 23 | 24 | void 25 | freeindirect() 26 | { 27 | if (indirect) 28 | { 29 | xfree(indirect); 30 | indirect = 0; 31 | } 32 | IndirectEntries = 0; 33 | } 34 | 35 | void 36 | freetagtable() 37 | { 38 | if (tag_table) 39 | { 40 | xfree(tag_table); 41 | tag_table = 0; 42 | } 43 | TagTableEntries = 0; 44 | } 45 | 46 | 47 | /* read the `Next:' header entry */ 48 | void 49 | getnextnode(char *type, char *node) 50 | { 51 | int j; 52 | #ifndef ___USE_STATIC___ 53 | char *tmp = xmalloc(strlen(type) + 1); 54 | #else 55 | static char tmp[1024 + 1]; 56 | #endif 57 | char *wsk; 58 | strcpy(tmp, type); 59 | wsk = strstr(tmp, "Next: "); 60 | if (wsk == 0) 61 | { 62 | strcpy(node, ERRNODE); 63 | return; 64 | } 65 | for (j = 6; wsk[j] != 0; j++) 66 | { 67 | if ((wsk[j] == ',') ||(wsk[j] == '\n')) 68 | { 69 | wsk[j] = 0; 70 | strcpy(node, wsk + 6); 71 | #ifndef ___USE_STATIC___ 72 | xfree(tmp); 73 | #endif 74 | return; 75 | } 76 | } 77 | #ifndef ___USE_STATIC___ 78 | xfree(tmp); 79 | #endif 80 | } 81 | 82 | /* read the `Prev:' header entry */ 83 | void 84 | getprevnode(char *type, char *node) 85 | { 86 | int j; 87 | #ifndef ___USE_STATIC___ 88 | char *tmp = xmalloc(strlen(type) + 1); 89 | #else 90 | static char tmp[1024 + 1]; 91 | #endif 92 | char *wsk; 93 | strcpy(tmp, type); 94 | wsk = strstr(tmp, "Prev: "); 95 | if (wsk == 0) 96 | { 97 | strcpy(node, ERRNODE); 98 | return; 99 | } 100 | for (j = 6; wsk[j] != 0; j++) 101 | { 102 | if ((wsk[j] == ',') ||(wsk[j] == '\n')) 103 | { 104 | wsk[j] = 0; 105 | strcpy(node, wsk + 6); 106 | #ifndef ___USE_STATIC___ 107 | xfree(tmp); 108 | #endif 109 | return; 110 | } 111 | } 112 | #ifndef ___USE_STATIC___ 113 | xfree(tmp); 114 | #endif 115 | } 116 | 117 | /* read the `Up:' header entry */ 118 | void 119 | getupnode(char *type, char *node) 120 | { 121 | int j; 122 | #ifndef ___USE_STATIC___ 123 | char *tmp = xmalloc(strlen(type) + 1); 124 | #else 125 | static char tmp[1024 + 1]; 126 | #endif 127 | char *wsk; 128 | strcpy(tmp, type); 129 | wsk = strstr(tmp, "Up: "); 130 | if (wsk == 0) 131 | { 132 | strcpy(node, ERRNODE); 133 | return; 134 | } 135 | for (j = 4; wsk[j] != 0; j++) 136 | { 137 | if ((wsk[j] == ',') ||(wsk[j] == '\n')) 138 | { 139 | wsk[j] = 0; 140 | strcpy(node, wsk + 4); 141 | #ifndef ___USE_STATIC___ 142 | xfree(tmp); 143 | #endif 144 | return; 145 | } 146 | } 147 | #ifndef ___USE_STATIC___ 148 | xfree(tmp); 149 | #endif 150 | } 151 | 152 | 153 | /* read the `Node:' header entry */ 154 | void 155 | getnodename(char *type, char *node) 156 | { 157 | int j; 158 | #ifndef ___USE_STATIC___ 159 | char *tmp = xmalloc(strlen(type) + 1); 160 | #else 161 | static char tmp[1024 + 1]; 162 | #endif 163 | char *wsk; 164 | strcpy(tmp, type); 165 | wsk = strstr(tmp, "Node: "); 166 | if (wsk == 0) 167 | { 168 | strcpy(node, ERRNODE); 169 | return; 170 | } 171 | for (j = 6; wsk[j] != 0; j++) 172 | { 173 | if ((wsk[j] == ',') ||(wsk[j] == '\n')) 174 | { 175 | wsk[j] = 0; 176 | strcpy(node, wsk + 6); 177 | #ifndef ___USE_STATIC___ 178 | xfree(tmp); 179 | #endif 180 | return; 181 | } 182 | } 183 | #ifndef ___USE_STATIC___ 184 | xfree(tmp); 185 | #endif 186 | } 187 | -------------------------------------------------------------------------------- /src/menu_and_note_utils.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __MENU_AND_NOTE_UTILS_H 23 | #define __MENU_AND_NOTE_UTILS_H 24 | 25 | #define ERRNODE "ERR@!#$$@#!%%^#@!OR" 26 | 27 | /* checks whether a line contains menu */ 28 | int ismenu (const char *line); 29 | /* checks whether a line contains note */ 30 | int isnote (char *line, char *nline); 31 | /* reads menu token from line */ 32 | int getmenutoken (char *line); 33 | /* reads note token from line */ 34 | int getnotetoken (char *line, char *nline); 35 | /* gets nextnode token from top line */ 36 | void getnextnode (char *type, char *node); 37 | /* gets prevnode token from top line */ 38 | void getprevnode (char *type, char *node); 39 | /* gets the up node token from top line */ 40 | void getupnode (char *type, char *node); 41 | /* reads the nodename from top line */ 42 | void getnodename (char *type, char *node); 43 | void freeindirect (); 44 | void freetagtable (); 45 | #endif 46 | -------------------------------------------------------------------------------- /src/parse_config.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __PARSE_CONFIG_H 23 | #define __PARSE_CONFIG_H 24 | 25 | #ifndef ___DONT_USE_REGEXP_SEARCH___ 26 | #include 27 | #endif 28 | 29 | #define BOLD 1 30 | #define NO_BOLD 0 31 | #define BLINK 1 32 | #define NO_BLINK 0 33 | 34 | typedef struct keybindings 35 | { 36 | int totalsearch_1, totalsearch_2; 37 | int search_1, search_2; 38 | int goto_1, goto_2; 39 | int prevnode_1, prevnode_2; 40 | int nextnode_1, nextnode_2; 41 | int upnode_1, upnode_2; 42 | int up_1, up_2; 43 | int end_1, end_2; 44 | int pgdn_1, pgdn_2; 45 | int home_1, home_2; 46 | int pgup_1, pgup_2; 47 | int down_1, down_2; 48 | int top_1, top_2; 49 | int back_1, back_2; 50 | int followlink_1, followlink_2; 51 | int quit_1, quit_2; 52 | int refresh_1, refresh_2; 53 | int shellfeed_1, shellfeed_2; 54 | int dirpage_1, dirpage_2; 55 | int pgdn_auto_1, pgdn_auto_2; 56 | int pgup_auto_1, pgup_auto_2; 57 | int search_again_1, search_again_2; 58 | int goline_1, goline_2; 59 | int twoup_1, twoup_2; 60 | int twodown_1, twodown_2; 61 | int print_1, print_2; 62 | int left_1, left_2; 63 | int right_1, right_2; 64 | } 65 | keybindings; 66 | 67 | #ifdef HAVE_CURSES_COLOR 68 | typedef struct colours 69 | { 70 | int normal_fore, normal_back, normal_bold, normal_blink; 71 | int menuselected_fore, menuselected_back, menuselected_bold, menuselected_blink; 72 | int menu_fore, menu_back, menu_bold, menu_blink; 73 | int noteselected_fore, noteselected_back, noteselected_bold, noteselected_blink; 74 | int note_fore, note_back, note_bold, note_blink; 75 | int topline_fore, topline_back, topline_bold, topline_blink; 76 | int bottomline_fore, bottomline_back, bottomline_bold, bottomline_blink; 77 | int manualbold_fore, manualbold_back, manualbold_bold, manualbold_blink; 78 | int manualitalic_fore, manualitalic_back, manualitalic_bold, manualitalic_blink; 79 | int url_fore, url_back, url_bold, url_blink; 80 | int urlselected_fore, urlselected_back, urlselected_bold, urlselected_blink; 81 | int infohighlight_fore, infohighlight_back, infohighlight_bold, infohighlight_blink; 82 | int searchhighlight_fore, searchhighlight_back, searchhighlight_bold, 83 | searchhighlight_blink; 84 | } 85 | colours; 86 | #endif /* HAVE_CURSES_COLOR */ 87 | 88 | extern int use_manual; 89 | 90 | int parse_config (void); 91 | int parse_line (char *line); 92 | char *str_toupper (char *s); 93 | char *skip_whitespace (char *s); 94 | char *remove_quotes (char *str); 95 | 96 | #ifndef ___DONT_USE_REGEXP_SEARCH___ 97 | extern regex_t *h_regexp; /* regexps to highlight */ 98 | extern int h_regexp_num; /* number of those regexps */ 99 | #endif 100 | 101 | #endif 102 | -------------------------------------------------------------------------------- /src/pinforc.in: -------------------------------------------------------------------------------- 1 | # Here are some colour setting. 2 | # Whitespace between the entries is optional. 3 | # Format: 4 | # Color_ID = Foreground , Background ,forelight, backblink(light) 5 | # 6 | COL_NORMAL = COLOR_DEFAULT, COLOR_DEFAULT, NO_BOLD, NO_BLINK 7 | COL_MENUSELECTED = COLOR_RED , COLOR_DEFAULT, BOLD , NO_BLINK 8 | COL_MENU = COLOR_BLUE , COLOR_DEFAULT, BOLD , NO_BLINK 9 | COL_NOTESELECTED = COLOR_RED , COLOR_DEFAULT, BOLD , NO_BLINK 10 | COL_NOTE = COLOR_GREEN , COLOR_DEFAULT, BOLD , NO_BLINK 11 | COL_TOPLINE = COLOR_YELLOW , COLOR_BLUE , BOLD , NO_BLINK 12 | COL_BOTTOMLINE = COLOR_YELLOW , COLOR_BLUE , BOLD , NO_BLINK 13 | COL_MANUALBOLD = COLOR_DEFAULT, COLOR_DEFAULT, BOLD , NO_BLINK 14 | COL_MANUALITALIC = COLOR_DEFAULT, COLOR_DEFAULT, BOLD , NO_BLINK 15 | COL_URL = COLOR_MAGENTA, COLOR_DEFAULT, BOLD , NO_BLINK 16 | COL_URLSELECTED = COLOR_RED , COLOR_DEFAULT, BOLD , NO_BLINK 17 | COL_INFOHIGHLIGHT = COLOR_DEFAULT, COLOR_DEFAULT, BOLD , NO_BLINK 18 | COL_SEARCHHIGHLIGHT= COLOR_DEFAULT, COLOR_DEFAULT, BOLD , NO_BLINK 19 | # 20 | # Here are some keybindings as well... 21 | # 22 | KEY_TOTALSEARCH_1 = 's' 23 | KEY_TOTALSEARCH_2 = 'S' 24 | KEY_SEARCH_1 = '/' 25 | KEY_SEARCH_2 = '.' 26 | KEY_GOTO_1='g' 27 | KEY_GOTO_2='m' 28 | KEY_HOME_1=KEY_HOME 29 | KEY_HOME_2='H' 30 | KEY_PREVNODE_1='p' 31 | KEY_PREVNODE_2='P' 32 | KEY_NEXTNODE_1='n' 33 | KEY_NEXTNODE_2='N' 34 | KEY_UP_1=KEY_UP 35 | KEY_UP_2='k' 36 | KEY_TWOUP_1=KEY_IC 37 | KEY_TWOUP_2=0 38 | KEY_END_1=KEY_END 39 | KEY_END_2='e' 40 | KEY_PGDN_1=KEY_NPAGE 41 | KEY_PGDN_2=' ' 42 | KEY_PGDN_AUTO_1=0 43 | KEY_PGDN_AUTO_2=' ' 44 | KEY_PGUP_1=KEY_PPAGE 45 | KEY_PGUP_2='b' 46 | KEY_PGUP_AUTO_1=0 47 | KEY_PGUP_AUTO_2='b' 48 | KEY_DOWN_1=KEY_DOWN 49 | KEY_DOWN_2='j' 50 | KEY_TWODOWN_1=KEY_DC 51 | KEY_TWODOWN_2=0 52 | KEY_TOP_1='t' 53 | KEY_TOP_2='T' 54 | KEY_BACK_1=KEY_LEFT 55 | KEY_BACK_2='h' 56 | KEY_FOLLOWLINK_1=KEY_RIGHT 57 | KEY_FOLLOWLINK_2='\n' 58 | KEY_REFRESH_1=KEY_CTRL('l') 59 | KEY_REFRESH_2='~' 60 | KEY_SHELLFEED_1='!' 61 | KEY_SHELLFEED_2='1' 62 | KEY_QUIT_1='q' 63 | KEY_QUIT_2='Q' 64 | KEY_DIRPAGE_1='d' 65 | KEY_DIRPAGE_2='D' 66 | KEY_GOLINE_1='l' 67 | KEY_GOLINE_2=0 68 | KEY_PRINT_1=']' 69 | KEY_PRINT_2=0 70 | KEY_SEARCH_AGAIN_1='f' 71 | KEY_SEARCH_AGAIN_2=0 72 | # 73 | # Some options, explained in the man page 74 | # 75 | MANUAL=false 76 | CUT-MAN-HEADERS=true 77 | CUT-EMPTY-MAN-LINES=true 78 | RAW-FILENAME=false 79 | APROPOS=false 80 | DONT-HANDLE-WITHOUT-TAG-TABLE=false 81 | LONG-MANUAL-LINKS=false 82 | FILTER-0xB7=true 83 | QUIT-CONFIRMATION=false 84 | QUIT-CONFIRM-DEFAULT=no 85 | CLEAR-SCREEN-AT-EXIT=true 86 | CALL-READLINE-HISTORY=true 87 | STDERR-REDIRECTION="2> /dev/null" 88 | HTTPVIEWER=lynx 89 | FTPVIEWER=lynx 90 | MAILEDITOR=clear; mail 91 | PRINTUTILITY=lpr 92 | MANLINKS=1:8:2:3:4:5:6:7:9:n:p:o:3X11:3Xt:3x:3X 93 | SAFE-USER=nobody 94 | SAFE-GROUP=nogroup 95 | # 96 | # Remember, HIGHLIGHTREGEXP may be slow (thus it's commented by default) 97 | # 98 | #HIGHLIGHTREGEXP=Bash rulez 99 | # 100 | # The bellow instructions are quoted, since although they give 101 | # more security, they are quite slow when turned on... 102 | # 103 | #IGNORE-MACROS=pso:sy:write:open:opena:pi:!:als 104 | #QUOTE-IGNORED-MACROS=true 105 | -------------------------------------------------------------------------------- /src/printinfo.c: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #include "common_includes.h" 23 | 24 | /* 25 | * Algorithm: We first print highlights, then we send `\r' to the printer, 26 | * and we draw the base line. Thus highlights are printed `twice', and 27 | * are darker than the rest :) 28 | */ 29 | void 30 | printnode(char ***message, unsigned long *lines) 31 | { 32 | #define Message (*message) 33 | #define Lines (*lines) 34 | 35 | /* counter, to point at what highlights are already * handled */ 36 | unsigned highlight = 0; 37 | /* printer fd */ 38 | FILE *prnFD; 39 | /* temporary buffer */ 40 | char *buf = xmalloc(1024); 41 | 42 | prnFD = popen(printutility, "w"); 43 | 44 | /* scan through all lines */ 45 | for (unsigned i = 1; i < Lines; i++) 46 | { 47 | /* 48 | * this says, where the printer's head is 49 | * right now.(offset in cols from the 50 | * beginning of line 51 | */ 52 | int lineprinted = 0; 53 | /* 54 | * let's handle the highlights, which belong to our(i'th) line. 55 | */ 56 | while (hyperobjects[highlight].line <= i) 57 | { 58 | /* build a complete highlighted text */ 59 | if (hyperobjects[highlight].file[0] == 0) 60 | strcpy(buf, hyperobjects[highlight].node); 61 | else 62 | { 63 | strcpy(buf, "("); 64 | strcat(buf, hyperobjects[highlight].file); 65 | strcat(buf, ")"); 66 | strcat(buf, hyperobjects[highlight].node); 67 | } 68 | /* if it's a contiunuation of last's line highlight */ 69 | if (hyperobjects[highlight].line == i - 1) 70 | { 71 | int length = 1; 72 | if (hyperobjects[highlight].breakpos == -1) 73 | length = strlen(buf) - 74 | hyperobjects[highlight].breakpos; 75 | fprintf(prnFD, "%s", buf + length - 76 | hyperobjects[highlight].breakpos); 77 | lineprinted += strlen(buf + length - 78 | hyperobjects[highlight].breakpos); 79 | } 80 | else if (hyperobjects[highlight].line == i) 81 | { 82 | for (unsigned j = 0; j < hyperobjects[highlight].col - lineprinted; j++) 83 | fprintf(prnFD, " "); 84 | fprintf(prnFD, "%s", buf); 85 | lineprinted = hyperobjects[highlight].col + 86 | strlen(buf); 87 | } 88 | if (highlight < hyperobjectcount - 1) 89 | highlight++; 90 | else 91 | break; 92 | } 93 | fprintf(prnFD, "\r%s", Message[i]); 94 | } 95 | pclose(prnFD); 96 | xfree(buf); 97 | #undef Message 98 | #undef Lines 99 | } 100 | -------------------------------------------------------------------------------- /src/printinfo.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef PRINTINFO_H 23 | #define PRINTINFO_H 24 | 25 | /* prints node, pointed by `message', of `lines' length. */ 26 | void printnode (char ***message, unsigned long *lines); 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /src/readlinewrapper.c: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | #include "common_includes.h" 22 | 23 | char **rlhistory = 0; 24 | int rlhistorylen = 0; 25 | int rlhistorypos = 0; 26 | 27 | #define KEY_BCKSPC 8 28 | 29 | char * 30 | readlinewrapper(char *prompt) 31 | { 32 | /* number of keys pressed */ 33 | int numkeys = 0; 34 | /* initial buffer for the read line */ 35 | char *buf = xmalloc(1024); 36 | /* start coords of input line */ 37 | int origx, origy; 38 | /* cursor position in input string */ 39 | int cursor = 0; 40 | /* key - a variable for getch() */ 41 | int key = 0, i; 42 | /* initial value of line - "" */ 43 | buf[0] = 0; 44 | /* print prompt */ 45 | addstr(prompt); 46 | /* get origx,origy coordinates */ 47 | getyx(stdscr, origy, origx); 48 | /* turn off echoing chars by getch() */ 49 | noecho(); 50 | /* create input line bar */ 51 | mvhline(origy, origx, ' ', maxx - origx); 52 | 53 | /* history entry for this line */ 54 | rlhistorylen++; 55 | /* move history pos to current entry */ 56 | rlhistorypos = rlhistorylen; 57 | /* alloc memory for this entry */ 58 | if (!rlhistory) 59 | rlhistory = xmalloc(sizeof(char *)); 60 | else 61 | rlhistory = xrealloc(rlhistory, sizeof(char *) * rlhistorylen); 62 | rlhistory[rlhistorylen - 1] = xmalloc(1024); 63 | /* and copy there the current value of input line */ 64 | strcpy(rlhistory[rlhistorylen - 1], buf); 65 | /* call history to be present */ 66 | if (CallReadlineHistory) 67 | { 68 | ungetch(KEY_UP); 69 | numkeys = -1; 70 | } 71 | 72 | while (key != '\n') 73 | { 74 | /* read key */ 75 | key = getch(); 76 | switch(key) 77 | { 78 | /* move cursor left */ 79 | case KEY_LEFT: 80 | if (cursor > 0) 81 | cursor--; 82 | break; 83 | /* move cursor right */ 84 | case KEY_RIGHT: 85 | if (cursor < strlen(buf)) 86 | cursor++; 87 | break; 88 | case KEY_END: 89 | cursor = strlen(buf); 90 | break; 91 | /* handle backspace: copy all */ 92 | case KEY_BCKSPC: 93 | /* chars starting from curpos */ 94 | case KEY_BACKSPACE: 95 | /* - 1 from buf[n+1] to buf */ 96 | if (cursor > 0) 97 | { 98 | for (i = cursor - 1; buf[i] != 0; i++) 99 | buf[i] = buf[i + 1]; 100 | cursor--; 101 | } 102 | break; 103 | /* handle delete key. As above */ 104 | case KEY_DC: 105 | if (cursor <= strlen(buf) - 1) 106 | { 107 | for (i = cursor; buf[i] != 0; i++) 108 | buf[i] = buf[i + 1]; 109 | } 110 | break; 111 | /* backwards-history call */ 112 | case KEY_UP: 113 | /* if there is history */ 114 | if (rlhistorylen) 115 | /* and we have */ 116 | if (rlhistorypos > 1) 117 | { /* where to move */ 118 | /* decrement history position */ 119 | rlhistorypos--; 120 | /* if the previous pos was the input line */ 121 | /* save it's value to history */ 122 | if (rlhistorypos == rlhistorylen - 1) 123 | strcpy(rlhistory[rlhistorylen - 1], buf); 124 | /* recall value from history to input buf */ 125 | strcpy(buf, rlhistory[rlhistorypos - 1]); 126 | } 127 | cursor = strlen(buf); 128 | numkeys = -1; 129 | break; 130 | /* forwards-history call */ 131 | case KEY_DOWN: 132 | if (rlhistorylen) 133 | if (rlhistorypos < rlhistorylen) 134 | { 135 | rlhistorypos++; 136 | strcpy(buf, rlhistory[rlhistorypos - 1]); 137 | } 138 | cursor = strlen(buf); 139 | numkeys = -1; 140 | break; 141 | /* eliminate nonprintable chars */ 142 | case '\n': 143 | case KEY_PPAGE: 144 | case KEY_NPAGE: 145 | case KEY_F(1): 146 | case KEY_F(2): 147 | case KEY_F(3): 148 | case KEY_F(4): 149 | case KEY_F(5): 150 | case KEY_F(6): 151 | case KEY_F(7): 152 | case KEY_F(8): 153 | case KEY_F(9): 154 | case KEY_F(10): 155 | break; 156 | default: 157 | if (key >= 32) 158 | { 159 | /* if this is the first key, delete the buffer */ 160 | if (numkeys==0 && cursor!=0) 161 | { 162 | for (i=0; buf[i]!=0; i++) 163 | buf[i] = 0; 164 | cursor = 0; 165 | /* and empty the line */ 166 | move(origy, origx); 167 | for (i = origx; i < maxx; i++) 168 | addch(' '); 169 | move(origy, origx + cursor); 170 | } 171 | 172 | /* if the cursor is not at the last pos */ 173 | if (strlen(buf + cursor)) 174 | { 175 | char *tmp = 0; 176 | tmp = xmalloc(strlen(buf + cursor) + 1); 177 | strcpy(tmp, buf + cursor); 178 | buf[cursor] = key; 179 | buf[cursor + 1] = 0; 180 | strcat(&buf[cursor + 1], tmp); 181 | xfree(tmp); 182 | cursor++; 183 | } 184 | else 185 | { 186 | buf[cursor + 1] = 0; 187 | buf[cursor] = key; 188 | cursor++; 189 | } 190 | } 191 | } 192 | move(origy, origx); 193 | for (i = origx; i < maxx; i++) 194 | addch(' '); 195 | move(origy, origx); 196 | addstr(buf); 197 | move(origy, origx + cursor); 198 | 199 | numkeys++; 200 | 201 | } 202 | strcpy(rlhistory[rlhistorylen - 1], buf); 203 | if (strlen(buf)) 204 | { 205 | rlhistory[rlhistorylen - 1] = xrealloc(rlhistory[rlhistorylen - 1], 206 | strlen(rlhistory[rlhistorylen - 1]) + 1); 207 | } 208 | else 209 | { 210 | xfree(rlhistory[rlhistorylen - 1]); 211 | rlhistorylen--; 212 | rlhistorypos = rlhistorylen; 213 | } 214 | buf = xrealloc(buf, strlen(buf) + 1); 215 | return buf; 216 | } 217 | -------------------------------------------------------------------------------- /src/readlinewrapper.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __READLINEWRAPPER_H 23 | #define __READLINEWRAPPER_H 24 | 25 | char *readlinewrapper (char *prompt); 26 | 27 | #endif /* __READLINEWRAPPER_H */ 28 | -------------------------------------------------------------------------------- /src/regexp_search.c: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #include "common_includes.h" 23 | 24 | #ifndef ___DONT_USE_REGEXP_SEARCH___ 25 | #include "regex.h" 26 | #include 27 | /* adapted partialy from midnight commander view regexp search */ 28 | 29 | enum 30 | { 31 | match_file, match_normal 32 | }; 33 | 34 | int 35 | __regexp_search(char *pattern, char *string) 36 | { 37 | int match_type = match_normal; 38 | static char *old_pattern = NULL; 39 | static int old_type; 40 | regmatch_t pmatch[1]; 41 | int i, flags = REG_ICASE; 42 | int rval; 43 | 44 | if (!old_pattern || strcmp(old_pattern, pattern) || old_type != match_type) 45 | { 46 | if (old_pattern) 47 | { 48 | free(old_pattern); 49 | old_pattern = 0; 50 | } 51 | for (i = 0; pattern[i] != 0; i++) 52 | { 53 | if (isupper((unsigned char) pattern[i])) 54 | { 55 | flags = 0; 56 | break; 57 | } 58 | } 59 | flags |= REG_EXTENDED; 60 | if (pinfo_re_offset == -1) 61 | { 62 | pinfo_re_offset = h_regexp_num; 63 | if (!h_regexp_num) 64 | h_regexp = malloc(sizeof(regex_t)); 65 | else 66 | h_regexp = realloc(h_regexp, sizeof(regex_t) *(h_regexp_num + 1)); 67 | } 68 | else 69 | { 70 | regfree(&h_regexp[pinfo_re_offset]); 71 | } 72 | /* invalid regexp */ 73 | if (regcomp(&h_regexp[pinfo_re_offset], pattern, flags)) 74 | { 75 | return -1; 76 | } 77 | old_pattern = strdup(pattern); 78 | old_type = match_type; 79 | } 80 | rval = regexec(&h_regexp[pinfo_re_offset], string, 1, pmatch, 0); 81 | if (rval != 0) 82 | return -1; 83 | else 84 | return pmatch[0].rm_so; 85 | } 86 | 87 | int 88 | regexp_search(char *pattern, char *string) 89 | { 90 | int newlines = 0, ptr_offset = -1; 91 | char *__newlines[2]; 92 | char *str = string; 93 | char *start = str; 94 | while (*str) 95 | { 96 | if (*str == '\n') 97 | { 98 | __newlines[newlines] = str + 1; 99 | newlines++; 100 | } 101 | if (newlines == 2) 102 | { 103 | *str = 0; 104 | ptr_offset = __regexp_search(pattern, start); 105 | *str = '\n'; 106 | newlines = 1; 107 | if (ptr_offset != -1) 108 | return (start - string) + ptr_offset; 109 | if (*(__newlines[0] + 1) != 0) 110 | start = __newlines[0] + 1; 111 | if (ptr_offset == -1) 112 | { 113 | __newlines[0] = __newlines[1]; 114 | } 115 | } 116 | str++; 117 | } 118 | ptr_offset = __regexp_search(pattern, start); 119 | if (ptr_offset != -1) 120 | { 121 | return (start - string) + ptr_offset; 122 | } 123 | else 124 | return -1; 125 | } 126 | #else /* non-regexp version of search */ 127 | int 128 | __regexp_search(char *pattern, char *string) 129 | { 130 | char *found = strstr(string, pattern); 131 | if (found == NULL) 132 | return -1; 133 | else 134 | return (long)(found - string); 135 | } 136 | 137 | int 138 | regexp_search(char *pattern, char *string) 139 | { 140 | int newlines = 0, ptr_offset = -1; 141 | char *found; 142 | char *__newlines[2]; 143 | char *str = string; 144 | char *start = str; 145 | while (*str) 146 | { 147 | if (*str == '\n') 148 | { 149 | __newlines[newlines] = str + 1; 150 | newlines++; 151 | } 152 | if (newlines == 2) 153 | { 154 | *str = 0; 155 | ptr_offset = __regexp_search(pattern, start); 156 | *str = '\n'; 157 | newlines = 1; 158 | if (ptr_offset != -1) 159 | return (start - string) + ptr_offset; 160 | if (*(__newlines[0] + 1) != 0) 161 | start = __newlines[0] + 1; 162 | if (ptr_offset == -1) 163 | { 164 | __newlines[0] = __newlines[1]; 165 | } 166 | } 167 | str++; 168 | } 169 | ptr_offset = __regexp_search(pattern, start); 170 | if (ptr_offset != -1) 171 | { 172 | return (start - string) + ptr_offset; 173 | } 174 | else 175 | return -1; 176 | } 177 | 178 | #endif 179 | -------------------------------------------------------------------------------- /src/regexp_search.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __REGEXP_SEARCH_H 23 | #define __REGEXP_SEARCH_H 24 | #ifndef ___DONT_USE_REGEXP_SEARCH___ 25 | extern int pinfo_re_offset; 26 | int regexp_search (char *pattern, char *string); 27 | #endif 28 | #endif 29 | -------------------------------------------------------------------------------- /src/sigblock.c: -------------------------------------------------------------------------------- 1 | /* Copyright(C) 1991, 94, 95, 96, 97, 98 Free Software Foundation, Inc. 2 | This file is part of the GNU C Library. 3 | 4 | The GNU C Library is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Library General Public License as 6 | published by the Free Software Foundation; either version 2 of the 7 | License, or(at your option) any later version. 8 | 9 | The GNU C Library is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Library General Public License for more details. 13 | 14 | You should have received a copy of the GNU Library General Public 15 | License along with the GNU C Library; see the file COPYING.LIB. If not, 16 | write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 | Boston, MA 02111-1307, USA. */ 18 | 19 | /* orginal from glibc 2.1 */ 20 | 21 | #ifdef HAVE_CONFIG_H 22 | #include "config.h" 23 | #endif 24 | 25 | #ifndef HAVE_SIGBLOCK 26 | 27 | #include 28 | #include 29 | #include "sigblock.h" 30 | 31 | /* Block signals in MASK, returning the old mask. */ 32 | int 33 | sigblock(int mask) 34 | { 35 | register int sig; 36 | sigset_t set, oset; 37 | 38 | if (sigemptyset(&set) < 0) 39 | return -1; 40 | 41 | if (sizeof(mask) == sizeof(set)) 42 | *(int *) &set = mask; 43 | else if (sizeof(unsigned long int) == sizeof(set)) 44 | *(unsigned long int *) &set =(unsigned int) mask; 45 | else 46 | for (sig = 1; sig < NSIG && sig <= sizeof(mask) * 8; ++sig) 47 | if ((mask & sigmask(sig)) && sigaddset(&set, sig) < 0) 48 | return -1; 49 | 50 | if (sigprocmask(SIG_BLOCK, &set, &oset) < 0) 51 | return -1; 52 | 53 | if (sizeof(mask) == sizeof(oset)) 54 | mask = *(int *) &oset; 55 | else if (sizeof(unsigned long int) == sizeof(oset)) 56 | mask = *(unsigned long int *) &oset; 57 | else 58 | for (sig = 1, mask = 0; sig < NSIG && sig <= sizeof(mask) * 8; ++sig) 59 | if (sigismember(&oset, sig)) 60 | mask |= sigmask(sig); 61 | 62 | return mask; 63 | } 64 | 65 | #endif /* HAVE_SIGBLOCK */ 66 | -------------------------------------------------------------------------------- /src/sigblock.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef _SIG_H 23 | #define _SIG_H 24 | 25 | #ifndef sigmask 26 | /* from bash */ 27 | #define sigmask(x) (1 << ((x)-1)) 28 | /* from glibc */ 29 | /* #define sigmask(sig) (((sigset_t) 1) << ((sig) - 1)) */ 30 | #endif /* HAVE_SIGMASK */ 31 | 32 | #if !defined (SIG_BLOCK) 33 | #define SIG_UNBLOCK 1 34 | #define SIG_BLOCK 2 35 | #define SIG_SETMASK 3 36 | #endif /* SIG_BLOCK */ 37 | 38 | /* #define BLOCK_SIGNAL(sig, nvar, ovar) \ 39 | sigemptyset (&nvar); \ 40 | sigaddset (&nvar, sig); \ 41 | sigemptyset (&ovar); \ 42 | sigprocmask (SIG_BLOCK, &nvar, &ovar) */ 43 | 44 | #ifndef HAVE_SIGBLOCK 45 | int sigblock (int mask); 46 | #endif /* HAVE_SIGBLOCK */ 47 | 48 | #endif /* _SIG_H */ 49 | -------------------------------------------------------------------------------- /src/signal_handler.c: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | #include "common_includes.h" 22 | 23 | #include 24 | #include 25 | 26 | void 27 | handle_crash(int signum) 28 | { 29 | closeprogram(); 30 | fprintf(stderr, "Caught signal %d, bye!\n", signum); 31 | if (signum == SIGSEGV) 32 | perror("pinfo: crash with"); 33 | exit(1); 34 | } 35 | 36 | void 37 | handle_window_resize(int UNUSED(signum)) 38 | { 39 | winchanged = 1; 40 | ungetch(keys.refresh_1); 41 | signal(SIGWINCH, handle_window_resize); 42 | } 43 | 44 | void 45 | handle_suspend(int UNUSED(signum)) 46 | { 47 | if (!isendwin()) { 48 | curs_set(1); 49 | endwin(); 50 | } 51 | fprintf(stderr, "\n"); 52 | signal(SIGTSTP, handle_suspend); 53 | kill(0, SIGSTOP); 54 | } 55 | 56 | void 57 | handle_resume(int UNUSED(signum)) 58 | { 59 | if (isendwin()) { 60 | refresh(); 61 | curs_set(0); 62 | } 63 | ungetch(keys.refresh_1); 64 | signal(SIGCONT, handle_resume); 65 | } 66 | 67 | void 68 | signal_handler() 69 | { 70 | sigset_t sigs; 71 | 72 | signal(SIGINT, handle_crash); /* handle ^C */ 73 | signal(SIGTERM, handle_crash); /* handle soft kill */ 74 | signal(SIGSEGV, handle_crash); /* handle seg. fault */ 75 | signal(SIGHUP, handle_crash); /* handle hup signal */ 76 | signal(SIGTSTP, handle_suspend);/* handle terminal suspend */ 77 | signal(SIGCONT, handle_resume); /* handle back from suspend */ 78 | #ifdef SIGWINCH 79 | signal(SIGWINCH, handle_window_resize); 80 | #endif 81 | /* block broken pipe signal */ 82 | sigemptyset(&sigs); 83 | sigaddset(&sigs, SIGPIPE); 84 | sigprocmask(SIG_BLOCK, &sigs, NULL); 85 | } 86 | -------------------------------------------------------------------------------- /src/signal_handler.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __SIGNAL_HANDLER_H 23 | #define __SIGNAL_HANDLER_H 24 | void signal_handler (); /* handles various signals, coming to pinfo */ 25 | #endif 26 | -------------------------------------------------------------------------------- /src/utils.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | #ifndef __UTILS_H 23 | #define __UTILS_H 24 | 25 | extern char *safe_user; 26 | extern char *safe_group; 27 | 28 | #ifndef HAVE_DECL_CURS_SET 29 | void curs_set (int a); 30 | #endif 31 | 32 | #ifdef ___DONT_USE_REGEXP_SEARCH___ 33 | extern char *pinfo_re_pattern; 34 | #endif 35 | 36 | /* wrappers for re_comp and re_exec */ 37 | int pinfo_re_comp (char *name); 38 | int pinfo_re_exec (char *name); 39 | 40 | /* user defined getch, capable of handling ALT keybindings */ 41 | int pinfo_getch (); 42 | /* free() wrapper */ 43 | void xfree (void *ptr); 44 | /* malloc() wrapper */ 45 | void *xmalloc (size_t size); 46 | /* realloc() wrapper */ 47 | void *xrealloc (void *ptr, size_t size); 48 | /* system(), but return sane error code */ 49 | int system_check(const char *command); 50 | /* safe, error-checking, command execution */ 51 | void xsystem(const char *command); 52 | /* initializes GNU locales */ 53 | void initlocale (); 54 | /* checks if file name does not cause secuirity problems */ 55 | void checkfilename (char *filename); 56 | /* closes the program, and removes temporary files */ 57 | void closeprogram (); 58 | /* initializes curses interface */ 59 | void init_curses (); 60 | /* an interface to gnu readline */ 61 | char *getstring (char *prompt); 62 | char *getstring_with_completion (char *prompt, const char * const *completions); 63 | /* create a completion table from a tag_table */ 64 | const char ** completions_from_tag_table(TagTable * table, size_t num); 65 | /* for some reasons mvhline does not work quite properly... */ 66 | void mymvhline (int y, int x, char ch, int len); 67 | /* this one supports color back/foreground */ 68 | void myclrtoeol (); 69 | /* takes care of the cursor, which is turned off */ 70 | void myendwin (); 71 | /* ? */ 72 | void handlewinch (); 73 | /* get offset of "node" in tag_table variable */ 74 | int gettagtablepos (char *node); 75 | 76 | /* handle localized `(y/n)' dialog box. */ 77 | int yesno (char *prompt, int def); 78 | /* copies the first part of string, which is without regexp */ 79 | void copy_stripped_from_regexp (char *src, char *dest); 80 | 81 | 82 | /* Block until something's on STDIN */ 83 | void waitforgetch (); 84 | 85 | /* is curses screen open? */ 86 | extern int curses_open; 87 | 88 | /* 89 | * this functions checks whether the node header node_header 90 | * corresponds to node node_name 91 | * 92 | * returns 0 if node_header does not belong to a node with name node_name 93 | * returns -1 if no checking was done (e.g. because node_name was NULL) 94 | * returns 1 if check turned out ok 95 | */ 96 | int 97 | check_node_name( const char * const node_name, const char * const node_header); 98 | 99 | 100 | /* calculate width of string, handling multibyte encodings 101 | * correctly */ 102 | int 103 | width_of_string( const char * const mbs, const int len); 104 | 105 | /* 106 | * calculates the length of string between start and end, counting `\t' as 107 | * filling up to 8 chars. (i.e. at line 22 tab will increment the counter by 2 108 | * [8-(22-int(22/8)*8)] spaces) 109 | */ 110 | int 111 | calculate_len(char *start, char *end); 112 | 113 | /* 114 | * * create a temporary file in a safe way, and return its name in a newly 115 | * * allocated string 116 | * */ 117 | char * 118 | make_tempfile(); 119 | 120 | 121 | #endif 122 | -------------------------------------------------------------------------------- /src/video.c: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * Copyright 2005 Nathanael Nerode 7 | * 8 | * This program is free software; you can redistribute it and/or modify 9 | * it under the terms of version 2 of the GNU General Public License as 10 | * published by the Free Software Foundation. 11 | * 12 | * This program is distributed in the hope that it will be useful, but 13 | * WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 | * General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program; if not, write to the Free Software 19 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 20 | * USA 21 | ***************************************************************************/ 22 | 23 | 24 | #include "common_includes.h" 25 | 26 | void info_add_highlights(unsigned pos, unsigned cursor, unsigned long lines, unsigned column, char **message); 27 | 28 | void 29 | substitutestr(char *src, char *dest, char *from, char *to) 30 | /* 31 | * Utility for substituting strings in given string. 32 | * Used for internationalization of info headers. 33 | */ 34 | { 35 | char *start = strstr(src, from); 36 | char tmp; 37 | if (!start) 38 | strcpy(dest, src); 39 | else 40 | { 41 | tmp = *start; 42 | *start = 0; 43 | strcpy(dest, src); 44 | strcat(dest, to); 45 | *start = tmp; 46 | start += strlen(from); 47 | strcat(dest, start); 48 | } 49 | } 50 | 51 | void 52 | addtopline(char *type, int column) 53 | { 54 | char *buf1 = xmalloc(strlen(type) + 50); 55 | char *buf2 = xmalloc(strlen(type) + 50); 56 | int buf2len; 57 | strcpy(buf1, type); 58 | 59 | substitutestr(buf1, buf2, "File:", _("File:")); 60 | substitutestr(buf2, buf1, "Node:", _("Node:")); 61 | substitutestr(buf1, buf2, "Next:", _("Next:")); 62 | substitutestr(buf2, buf1, "Prev:", _("Prev:")); 63 | substitutestr(buf1, buf2, "Up:", _("Up:")); 64 | attrset(topline); 65 | mymvhline(0, 0, ' ', maxx); /* pads line with spaces -- estetic */ 66 | buf2len=strlen(buf2); 67 | if (buf2len) 68 | buf2[buf2len - 1] = '\0'; 69 | if (buf2len>column) 70 | mvaddstr(0, 0, buf2+column); 71 | attrset(normal); 72 | xfree(buf1); 73 | xfree(buf2); 74 | } 75 | 76 | void 77 | showscreen(char **message, unsigned long lines, unsigned long pos, long cursor, int column) 78 | { 79 | #ifdef getmaxyx 80 | getmaxyx(stdscr, maxy, maxx); 81 | #endif 82 | #ifdef HAVE_BKGDSET 83 | bkgdset(' ' | normal); 84 | #endif 85 | attrset(normal); 86 | for (unsigned long i = pos; (i < lines) && (i < pos + maxy - 2); i++) 87 | { 88 | int tmp; 89 | 90 | if (!message[i]) continue; 91 | tmp = strlen(message[i]) - 1; 92 | message[i][tmp] = 0; 93 | if (tmp>column) 94 | mvaddstr(i + 1 - pos, 0, message[i]+column); 95 | else 96 | move(i + 1 - pos,0); 97 | #ifdef HAVE_BKGDSET 98 | clrtoeol(); 99 | #else 100 | myclrtoeol(); 101 | #endif 102 | message[i][tmp] = '\n'; 103 | } 104 | clrtobot(); 105 | #ifdef HAVE_BKGDSET 106 | bkgdset(0); 107 | #endif 108 | attrset(bottomline); 109 | mymvhline(maxy - 1, 0, ' ', maxx); 110 | move(maxy - 1, 0); 111 | if ((pos < lines - 1) &&(lines > pos + maxy - 2)) 112 | printw(_("Viewing line %ld/%ld, %ld%%"), pos + maxy - 2, lines,((pos + maxy - 2) * 100) / lines); 113 | else 114 | printw(_("Viewing line %ld/%ld, 100%%"), lines, lines); 115 | info_add_highlights(pos, cursor, lines, column, message); 116 | attrset(normal); 117 | move(0, 0); 118 | refresh(); 119 | } 120 | 121 | /* 122 | * prints a line, taking care for the horizontal scrolling. 123 | * if the string fits in the window, it is drawn. If not, 124 | * it is either cut, or completely omitted. 125 | */ 126 | void 127 | info_addstr(int y, int x, char *txt, int column, int txtlen) 128 | { 129 | int xmax, UNUSED(ymax); 130 | getmaxyx(stdscr, ymax, xmax); 131 | /* Use xmax and mvaddnstr to force clipping. 132 | * Fairly blunt instrument, but the best I could come up with. 133 | * Breaks in the presence of tabs; I don't see how to handle them. */ 134 | if (x>column) 135 | mvaddnstr(y,x-column,txt, xmax-(x-column) ); 136 | else if (x+txtlen>column) 137 | mvaddnstr(y,0,txt+(column-x), xmax ); 138 | #ifdef __DEBUG__ 139 | refresh(); 140 | #endif /* __DEBUG__ */ 141 | } 142 | 143 | void 144 | info_add_highlights(unsigned pos, unsigned cursor, unsigned long lines, unsigned column, char **message) 145 | { 146 | for (unsigned long i = 0; i < hyperobjectcount; i++) 147 | { 148 | if ((hyperobjects[i].line >= pos) && 149 | (hyperobjects[i].line < pos +(maxy - 2))) 150 | { 151 | /* first part of if's sets the required attributes */ 152 | if (hyperobjects[i].type < 2) /* menu */ 153 | { 154 | if (i == cursor) 155 | attrset(menuselected); 156 | else 157 | attrset(menu); 158 | } 159 | else if (hyperobjects[i].type < 4) /* note */ 160 | { 161 | if (i == cursor) 162 | attrset(noteselected); 163 | else 164 | attrset(note); 165 | } 166 | else if (hyperobjects[i].type < HIGHLIGHT) /* url */ 167 | { 168 | if (i == cursor) 169 | attrset(urlselected); 170 | else 171 | attrset(url); 172 | } 173 | else /* quoted text -- highlight it */ 174 | { 175 | attrset(infohighlight); 176 | } 177 | /* now we start actual drawing */ 178 | if (hyperobjects[i].file[0] == 0) 179 | { 180 | if (hyperobjects[i].breakpos == -1) 181 | { 182 | info_addstr(1 + hyperobjects[i].line - pos, 183 | hyperobjects[i].col, 184 | hyperobjects[i].node, 185 | column, 186 | hyperobjects[i].nodelen); 187 | 188 | } 189 | else 190 | { 191 | int j; 192 | char tmp = hyperobjects[i].node[hyperobjects[i].breakpos]; 193 | hyperobjects[i].node[hyperobjects[i].breakpos] = 0; 194 | info_addstr(1 + hyperobjects[i].line - pos, 195 | hyperobjects[i].col, 196 | hyperobjects[i].node, 197 | column, 198 | hyperobjects[i].breakpos); 199 | hyperobjects[i].node[hyperobjects[i].breakpos] = tmp; 200 | j = hyperobjects[i].breakpos; 201 | /* skip leading spaces after newline */ 202 | while (hyperobjects[i].node[j] == ' ') 203 | j++; 204 | if (hyperobjects[i].line - pos + 3 < maxy) 205 | info_addstr(1 + hyperobjects[i].line - pos + 1, 206 | j - hyperobjects[i].breakpos, 207 | hyperobjects[i].node + j, 208 | column, 209 | hyperobjects[i].nodelen-j); 210 | } 211 | } 212 | else 213 | { 214 | if (hyperobjects[i].breakpos == -1) 215 | { 216 | char *buf=xmalloc(hyperobjects[i].filelen+hyperobjects[i].nodelen+3); 217 | snprintf(buf,hyperobjects[i].filelen+hyperobjects[i].nodelen+3, 218 | "(%s)%s",hyperobjects[i].file,hyperobjects[i].node); 219 | info_addstr(1 + hyperobjects[i].line - pos, 220 | hyperobjects[i].col, 221 | buf, 222 | column, 223 | hyperobjects[i].filelen+hyperobjects[i].nodelen+2); 224 | xfree(buf); 225 | } 226 | else 227 | { 228 | static char buf[1024]; 229 | char tmp; 230 | int j; 231 | strcpy(buf, "("); 232 | strcat(buf, hyperobjects[i].file); 233 | strcat(buf, ")"); 234 | strcat(buf, hyperobjects[i].node); 235 | tmp = buf[hyperobjects[i].breakpos]; 236 | buf[hyperobjects[i].breakpos] = 0; 237 | info_addstr(1 + hyperobjects[i].line - pos, 238 | hyperobjects[i].col, 239 | buf, 240 | column, 241 | hyperobjects[i].breakpos+2); 242 | buf[hyperobjects[i].breakpos] = tmp; 243 | j = hyperobjects[i].breakpos; 244 | /* skip leading spaces after newline */ 245 | while (buf[j] == ' ') 246 | j++; 247 | if (hyperobjects[i].line - pos + 3 < maxy) 248 | info_addstr(1 + hyperobjects[i].line - pos + 1, 249 | j - hyperobjects[i].breakpos, 250 | buf + j, 251 | column, 252 | hyperobjects[i].filelen+hyperobjects[i].nodelen+2-j); 253 | } 254 | } 255 | attrset(normal); 256 | } 257 | } 258 | #ifndef ___DONT_USE_REGEXP_SEARCH___ 259 | if ((h_regexp_num) ||(aftersearch)) 260 | { 261 | regmatch_t pmatch[1]; 262 | if (maxy<2) maxy=2; 263 | unsigned long maxpos = pos +(maxy - 2); 264 | int maxregexp; 265 | if (maxpos > lines) 266 | { 267 | maxpos = lines; 268 | } 269 | 270 | maxregexp = aftersearch ? h_regexp_num + 1 : h_regexp_num; 271 | /* 272 | * if it is after search, then we have user defined regexps+ 273 | * a searched regexp to highlight 274 | */ 275 | /* loop over all the lines currently in the window */ 276 | for (unsigned i = pos; (i < lines) && (i < pos + maxy - 2); i++) 277 | { 278 | char *str = message[i]; 279 | 280 | /* loop over all regexps we might want to show */ 281 | int j; 282 | for (j = 0; j < maxregexp; j++) 283 | { 284 | /* check if this regexp is present on this line */ 285 | while (!regexec(&h_regexp[j], str, 1, pmatch, 0)) 286 | { 287 | int x, y; 288 | char tmp; 289 | 290 | /* yes, found something, so highlight it */ 291 | int n = pmatch[0].rm_eo - pmatch[0].rm_so; 292 | 293 | if (n==0) { /* matched empty string! */ 294 | /* display error message */ 295 | char msg[81]; 296 | snprintf(msg, 81, "%s", 297 | _("Warning: matched empty string") ); 298 | attrset(bottomline); 299 | mvhline(maxy - 1, 0, ' ', maxx); 300 | mvaddstr(maxy - 1, 0, msg); 301 | move(0, 0); 302 | attrset(normal); 303 | 304 | break; 305 | } 306 | 307 | /* point str at start of match */ 308 | str += pmatch[0].rm_so; 309 | 310 | /* calculate position on screen */ 311 | x = calculate_len(message[i], str); 312 | y = i - pos + 1; 313 | 314 | /* save the char after the end of the match, 315 | * and replace it by \0 */ 316 | tmp = str[n]; 317 | str[n] = 0; 318 | 319 | /* write out the highlighted match to screen */ 320 | attrset(searchhighlight); 321 | mvaddstr(y, x, str); 322 | attrset(normal); 323 | 324 | /* restore the original char at the end of the match */ 325 | str[n] = tmp; 326 | 327 | /* skip past this match */ 328 | str += n; 329 | } 330 | } 331 | } 332 | } 333 | 334 | #endif 335 | } 336 | -------------------------------------------------------------------------------- /src/video.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * Pinfo is a ncurses based lynx style info documentation browser 3 | * 4 | * Copyright (C) 1999 Przemek Borys 5 | * Copyright (C) 2005 Bas Zoetekouw 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of version 2 of the GNU General Public License as 9 | * published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 | * USA 20 | ***************************************************************************/ 21 | 22 | 23 | #ifndef __VIDEO_H 24 | #define __VIDEO_H 25 | /* paints the screen while viewing info file */ 26 | void showscreen (char **message, unsigned long lines, unsigned long pos, 27 | long cursor, int column); 28 | /* prints unselected menu option */ 29 | void mvaddstr_menu (int y, int x, char *line, int linenumber); 30 | /* prints selected menu option */ 31 | void mvaddstr_menu_selected (int y, int x, char *line, int linenumber); 32 | /* prints unselected note option */ 33 | void mvaddstr_note (int y, int x, char *line, char *nline, int linenumber); 34 | /* prints selected note option */ 35 | void mvaddstr_note_selected (int y, int x, char *line, char *nline, int linenumber); 36 | /* adds top line of info page */ 37 | void addtopline (char *type, int column); 38 | #endif 39 | -------------------------------------------------------------------------------- /stamp-h.in: -------------------------------------------------------------------------------- 1 | timestamp 2 | --------------------------------------------------------------------------------