diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2010-05-05 13:19:37 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2010-05-05 13:19:37 +0000 |
commit | c6e0c2d3f66468bf0dc4e71f4e96ccfca86b93c5 (patch) | |
tree | 1f6f65e4d4b91da48baff77a20c0f2ffa10aabfc /Build | |
parent | c53b86a4f756fd2a535206176fa9a3f36485ca34 (diff) |
xpdfopen 0.80 (replacing pdfopen 0.5)
git-svn-id: svn://tug.org/texlive/trunk@18111 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build')
37 files changed, 1387 insertions, 762 deletions
diff --git a/Build/source/Makefile.in b/Build/source/Makefile.in index d2115b8ceac..fef740a2229 100644 --- a/Build/source/Makefile.in +++ b/Build/source/Makefile.in @@ -65,7 +65,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/kpse-common.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/utils/chktex/ac/withenable.ac \ $(top_srcdir)/utils/dialog/ac/withenable.ac \ - $(top_srcdir)/utils/pdfopen/ac/withenable.ac \ $(top_srcdir)/utils/ps2eps/ac/withenable.ac \ $(top_srcdir)/utils/psutils/ac/withenable.ac \ $(top_srcdir)/utils/t1utils/ac/withenable.ac \ @@ -76,6 +75,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/kpse-common.m4 \ $(top_srcdir)/utils/xindy-new/ac/clisp.ac \ $(top_srcdir)/utils/xindy/ac/withenable.ac \ $(top_srcdir)/utils/xindy/ac/xindy.ac \ + $(top_srcdir)/utils/xpdfopen/ac/withenable.ac \ $(top_srcdir)/texk/web2c/ac/withenable.ac \ $(top_srcdir)/texk/web2c/ac/web2c.ac \ $(top_srcdir)/texk/afm2pl/ac/withenable.ac \ diff --git a/Build/source/configure b/Build/source/configure index 2e8da8d515d..0712740bb59 100755 --- a/Build/source/configure +++ b/Build/source/configure @@ -891,7 +891,6 @@ enable_cxx_runtime_hack enable_libtool_hack enable_chktex enable_dialog -enable_pdfopen enable_ps2eps enable_psutils enable_t1utils @@ -903,6 +902,7 @@ enable_xindy_docs with_clisp_runtime with_xindy_recode enable_xindy +enable_xpdfopen enable_web2c with_tex_banner with_editor @@ -1681,7 +1681,6 @@ Optional Features: --enable-libtool-hack ignore libtool dependency_libs --enable-chktex build the chktex package --disable-dialog do not build the dialog package - --disable-pdfopen do not build the pdfopen package --disable-ps2eps do not build the ps2eps package --disable-psutils do not build the psutils package --disable-t1utils do not build the t1utils package @@ -1691,6 +1690,7 @@ Optional Features: --enable-xindy-rules build and install make-rules package --enable-xindy-docs build and install documentation --enable-xindy build the xindy package + --disable-xpdfopen do not build the xpdfopen package --disable-web2c do not build the web2c (TeX & Co.) package --enable-auto-core cause TeX&MF to dump core, given a certain filename @@ -3141,38 +3141,6 @@ $as_echo "$as_me: Assuming \`--enable-dialog=$enable_dialog'" >&6;} esac -## utils/pdfopen/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/pdfopen/ -## configure options and TL libraries required for pdfopen -if test "x$with_x" = xno; then : - case $enable_pdfopen in #( - "") : - { $as_echo "$as_me:${as_lineno-$LINENO}: \`--without-x' -> \`--disable-pdfopen'" >&5 -$as_echo "$as_me: \`--without-x' -> \`--disable-pdfopen'" >&6;} - enable_pdfopen=no - ac_configure_args="$ac_configure_args '--disable-pdfopen'" ;; #( - yes) : - as_fn_error "Sorry, incompatible options \`--without-x' and \`--enable-pdfopen'" "$LINENO" 5 ;; #( - *) : - ;; -esac -fi -# Check whether --enable-pdfopen was given. -if test "${enable_pdfopen+set}" = set; then : - enableval=$enable_pdfopen; -fi -case $enable_pdfopen in #( - yes|no) : - ;; #( - *) : - - enable_pdfopen=$enable_all_pkgs - { $as_echo "$as_me:${as_lineno-$LINENO}: Assuming \`--enable-pdfopen=$enable_pdfopen'" >&5 -$as_echo "$as_me: Assuming \`--enable-pdfopen=$enable_pdfopen'" >&6;} - ac_configure_args="$ac_configure_args '--enable-pdfopen=$enable_pdfopen'" - ;; -esac - - ## utils/ps2eps/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/ps2eps/ ## configure options and TL libraries required for ps2eps # Check whether --enable-ps2eps was given. @@ -3383,6 +3351,38 @@ if test "${with_xindy_recode+set}" = set; then : fi +## utils/xpdfopen/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/xpdfopen/ +## configure options and TL libraries required for xpdfopen +if test "x$with_x" = xno; then : + case $enable_xpdfopen in #( + "") : + { $as_echo "$as_me:${as_lineno-$LINENO}: \`--without-x' -> \`--disable-xpdfopen'" >&5 +$as_echo "$as_me: \`--without-x' -> \`--disable-xpdfopen'" >&6;} + enable_xpdfopen=no + ac_configure_args="$ac_configure_args '--disable-xpdfopen'" ;; #( + yes) : + as_fn_error "Sorry, incompatible options \`--without-x' and \`--enable-xpdfopen'" "$LINENO" 5 ;; #( + *) : + ;; +esac +fi +# Check whether --enable-xpdfopen was given. +if test "${enable_xpdfopen+set}" = set; then : + enableval=$enable_xpdfopen; +fi +case $enable_xpdfopen in #( + yes|no) : + ;; #( + *) : + + enable_xpdfopen=$enable_all_pkgs + { $as_echo "$as_me:${as_lineno-$LINENO}: Assuming \`--enable-xpdfopen=$enable_xpdfopen'" >&5 +$as_echo "$as_me: Assuming \`--enable-xpdfopen=$enable_xpdfopen'" >&6;} + ac_configure_args="$ac_configure_args '--enable-xpdfopen=$enable_xpdfopen'" + ;; +esac + + ## texk/web2c/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory texk/web2c/ ## configure options and TL libraries required for web2c diff --git a/Build/source/libs/Makefile.in b/Build/source/libs/Makefile.in index 8a59120f095..feadddb27bf 100644 --- a/Build/source/libs/Makefile.in +++ b/Build/source/libs/Makefile.in @@ -67,7 +67,6 @@ am__aclocal_m4_deps = $(top_srcdir)/../m4/kpse-common.m4 \ $(top_srcdir)/../m4/kpse-zziplib-flags.m4 \ $(top_srcdir)/../utils/chktex/ac/withenable.ac \ $(top_srcdir)/../utils/dialog/ac/withenable.ac \ - $(top_srcdir)/../utils/pdfopen/ac/withenable.ac \ $(top_srcdir)/../utils/ps2eps/ac/withenable.ac \ $(top_srcdir)/../utils/psutils/ac/withenable.ac \ $(top_srcdir)/../utils/t1utils/ac/withenable.ac \ @@ -78,6 +77,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../m4/kpse-common.m4 \ $(top_srcdir)/../utils/xindy-new/ac/clisp.ac \ $(top_srcdir)/../utils/xindy/ac/withenable.ac \ $(top_srcdir)/../utils/xindy/ac/xindy.ac \ + $(top_srcdir)/../utils/xpdfopen/ac/withenable.ac \ $(top_srcdir)/../texk/web2c/ac/withenable.ac \ $(top_srcdir)/../texk/web2c/ac/web2c.ac \ $(top_srcdir)/../texk/afm2pl/ac/withenable.ac \ diff --git a/Build/source/libs/configure b/Build/source/libs/configure index 924fad2f4bd..d89231714c4 100755 --- a/Build/source/libs/configure +++ b/Build/source/libs/configure @@ -646,7 +646,6 @@ enable_cxx_runtime_hack enable_libtool_hack enable_chktex enable_dialog -enable_pdfopen enable_ps2eps enable_psutils enable_t1utils @@ -658,6 +657,7 @@ enable_xindy_docs with_clisp_runtime with_xindy_recode enable_xindy +enable_xpdfopen enable_web2c with_tex_banner with_editor @@ -1419,7 +1419,6 @@ Optional Features: --enable-libtool-hack ignore libtool dependency_libs --enable-chktex build the chktex package --disable-dialog do not build the dialog package - --disable-pdfopen do not build the pdfopen package --disable-ps2eps do not build the ps2eps package --disable-psutils do not build the psutils package --disable-t1utils do not build the t1utils package @@ -1429,6 +1428,7 @@ Optional Features: --enable-xindy-rules build and install make-rules package --enable-xindy-docs build and install documentation --enable-xindy build the xindy package + --disable-xpdfopen do not build the xpdfopen package --disable-web2c do not build the web2c (TeX & Co.) package --enable-auto-core cause TeX&MF to dump core, given a certain filename @@ -2260,38 +2260,6 @@ $as_echo "$as_me: Assuming \`--enable-dialog=$enable_dialog'" >&6;} esac -## utils/pdfopen/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/pdfopen/ -## configure options and TL libraries required for pdfopen -if test "x$with_x" = xno; then : - case $enable_pdfopen in #( - "") : - { $as_echo "$as_me:${as_lineno-$LINENO}: \`--without-x' -> \`--disable-pdfopen'" >&5 -$as_echo "$as_me: \`--without-x' -> \`--disable-pdfopen'" >&6;} - enable_pdfopen=no - ac_configure_args="$ac_configure_args '--disable-pdfopen'" ;; #( - yes) : - as_fn_error "Sorry, incompatible options \`--without-x' and \`--enable-pdfopen'" "$LINENO" 5 ;; #( - *) : - ;; -esac -fi -# Check whether --enable-pdfopen was given. -if test "${enable_pdfopen+set}" = set; then : - enableval=$enable_pdfopen; -fi -case $enable_pdfopen in #( - yes|no) : - ;; #( - *) : - - enable_pdfopen=$enable_all_pkgs - { $as_echo "$as_me:${as_lineno-$LINENO}: Assuming \`--enable-pdfopen=$enable_pdfopen'" >&5 -$as_echo "$as_me: Assuming \`--enable-pdfopen=$enable_pdfopen'" >&6;} - ac_configure_args="$ac_configure_args '--enable-pdfopen=$enable_pdfopen'" - ;; -esac - - ## utils/ps2eps/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/ps2eps/ ## configure options and TL libraries required for ps2eps # Check whether --enable-ps2eps was given. @@ -2502,6 +2470,38 @@ if test "${with_xindy_recode+set}" = set; then : fi +## utils/xpdfopen/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/xpdfopen/ +## configure options and TL libraries required for xpdfopen +if test "x$with_x" = xno; then : + case $enable_xpdfopen in #( + "") : + { $as_echo "$as_me:${as_lineno-$LINENO}: \`--without-x' -> \`--disable-xpdfopen'" >&5 +$as_echo "$as_me: \`--without-x' -> \`--disable-xpdfopen'" >&6;} + enable_xpdfopen=no + ac_configure_args="$ac_configure_args '--disable-xpdfopen'" ;; #( + yes) : + as_fn_error "Sorry, incompatible options \`--without-x' and \`--enable-xpdfopen'" "$LINENO" 5 ;; #( + *) : + ;; +esac +fi +# Check whether --enable-xpdfopen was given. +if test "${enable_xpdfopen+set}" = set; then : + enableval=$enable_xpdfopen; +fi +case $enable_xpdfopen in #( + yes|no) : + ;; #( + *) : + + enable_xpdfopen=$enable_all_pkgs + { $as_echo "$as_me:${as_lineno-$LINENO}: Assuming \`--enable-xpdfopen=$enable_xpdfopen'" >&5 +$as_echo "$as_me: Assuming \`--enable-xpdfopen=$enable_xpdfopen'" >&6;} + ac_configure_args="$ac_configure_args '--enable-xpdfopen=$enable_xpdfopen'" + ;; +esac + + ## texk/web2c/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory texk/web2c/ ## configure options and TL libraries required for web2c diff --git a/Build/source/m4/kpse-pkgs.m4 b/Build/source/m4/kpse-pkgs.m4 index ce2c6587eec..1eb5b821509 100644 --- a/Build/source/m4/kpse-pkgs.m4 +++ b/Build/source/m4/kpse-pkgs.m4 @@ -73,7 +73,6 @@ AC_DEFUN([KPSE_UTILS_PKGS], [m4_define([kpse_utils_pkgs], [ chktex dialog -pdfopen ps2eps psutils t1utils @@ -81,6 +80,7 @@ tpic2pdftex vlna xindy-new xindy +xpdfopen ])]) # KPSE_UTILS_PKGS # KPSE_TEXK_PKGS() diff --git a/Build/source/texk/Makefile.in b/Build/source/texk/Makefile.in index 331b6bbefeb..6e41d7008b7 100644 --- a/Build/source/texk/Makefile.in +++ b/Build/source/texk/Makefile.in @@ -67,7 +67,6 @@ am__aclocal_m4_deps = $(top_srcdir)/../m4/kpse-common.m4 \ $(top_srcdir)/../m4/kpse-zziplib-flags.m4 \ $(top_srcdir)/../utils/chktex/ac/withenable.ac \ $(top_srcdir)/../utils/dialog/ac/withenable.ac \ - $(top_srcdir)/../utils/pdfopen/ac/withenable.ac \ $(top_srcdir)/../utils/ps2eps/ac/withenable.ac \ $(top_srcdir)/../utils/psutils/ac/withenable.ac \ $(top_srcdir)/../utils/t1utils/ac/withenable.ac \ @@ -78,6 +77,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../m4/kpse-common.m4 \ $(top_srcdir)/../utils/xindy-new/ac/clisp.ac \ $(top_srcdir)/../utils/xindy/ac/withenable.ac \ $(top_srcdir)/../utils/xindy/ac/xindy.ac \ + $(top_srcdir)/../utils/xpdfopen/ac/withenable.ac \ $(top_srcdir)/../texk/web2c/ac/withenable.ac \ $(top_srcdir)/../texk/web2c/ac/web2c.ac \ $(top_srcdir)/../texk/afm2pl/ac/withenable.ac \ diff --git a/Build/source/texk/configure b/Build/source/texk/configure index 68a96385379..325aa09f31d 100755 --- a/Build/source/texk/configure +++ b/Build/source/texk/configure @@ -646,7 +646,6 @@ enable_cxx_runtime_hack enable_libtool_hack enable_chktex enable_dialog -enable_pdfopen enable_ps2eps enable_psutils enable_t1utils @@ -658,6 +657,7 @@ enable_xindy_docs with_clisp_runtime with_xindy_recode enable_xindy +enable_xpdfopen enable_web2c with_tex_banner with_editor @@ -1440,7 +1440,6 @@ Optional Features: --enable-libtool-hack ignore libtool dependency_libs --enable-chktex build the chktex package --disable-dialog do not build the dialog package - --disable-pdfopen do not build the pdfopen package --disable-ps2eps do not build the ps2eps package --disable-psutils do not build the psutils package --disable-t1utils do not build the t1utils package @@ -1450,6 +1449,7 @@ Optional Features: --enable-xindy-rules build and install make-rules package --enable-xindy-docs build and install documentation --enable-xindy build the xindy package + --disable-xpdfopen do not build the xpdfopen package --disable-web2c do not build the web2c (TeX & Co.) package --enable-auto-core cause TeX&MF to dump core, given a certain filename @@ -2281,38 +2281,6 @@ $as_echo "$as_me: Assuming \`--enable-dialog=$enable_dialog'" >&6;} esac -## utils/pdfopen/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/pdfopen/ -## configure options and TL libraries required for pdfopen -if test "x$with_x" = xno; then : - case $enable_pdfopen in #( - "") : - { $as_echo "$as_me:${as_lineno-$LINENO}: \`--without-x' -> \`--disable-pdfopen'" >&5 -$as_echo "$as_me: \`--without-x' -> \`--disable-pdfopen'" >&6;} - enable_pdfopen=no - ac_configure_args="$ac_configure_args '--disable-pdfopen'" ;; #( - yes) : - as_fn_error "Sorry, incompatible options \`--without-x' and \`--enable-pdfopen'" "$LINENO" 5 ;; #( - *) : - ;; -esac -fi -# Check whether --enable-pdfopen was given. -if test "${enable_pdfopen+set}" = set; then : - enableval=$enable_pdfopen; -fi -case $enable_pdfopen in #( - yes|no) : - ;; #( - *) : - - enable_pdfopen=$enable_all_pkgs - { $as_echo "$as_me:${as_lineno-$LINENO}: Assuming \`--enable-pdfopen=$enable_pdfopen'" >&5 -$as_echo "$as_me: Assuming \`--enable-pdfopen=$enable_pdfopen'" >&6;} - ac_configure_args="$ac_configure_args '--enable-pdfopen=$enable_pdfopen'" - ;; -esac - - ## utils/ps2eps/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/ps2eps/ ## configure options and TL libraries required for ps2eps # Check whether --enable-ps2eps was given. @@ -2523,6 +2491,38 @@ if test "${with_xindy_recode+set}" = set; then : fi +## utils/xpdfopen/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/xpdfopen/ +## configure options and TL libraries required for xpdfopen +if test "x$with_x" = xno; then : + case $enable_xpdfopen in #( + "") : + { $as_echo "$as_me:${as_lineno-$LINENO}: \`--without-x' -> \`--disable-xpdfopen'" >&5 +$as_echo "$as_me: \`--without-x' -> \`--disable-xpdfopen'" >&6;} + enable_xpdfopen=no + ac_configure_args="$ac_configure_args '--disable-xpdfopen'" ;; #( + yes) : + as_fn_error "Sorry, incompatible options \`--without-x' and \`--enable-xpdfopen'" "$LINENO" 5 ;; #( + *) : + ;; +esac +fi +# Check whether --enable-xpdfopen was given. +if test "${enable_xpdfopen+set}" = set; then : + enableval=$enable_xpdfopen; +fi +case $enable_xpdfopen in #( + yes|no) : + ;; #( + *) : + + enable_xpdfopen=$enable_all_pkgs + { $as_echo "$as_me:${as_lineno-$LINENO}: Assuming \`--enable-xpdfopen=$enable_xpdfopen'" >&5 +$as_echo "$as_me: Assuming \`--enable-xpdfopen=$enable_xpdfopen'" >&6;} + ac_configure_args="$ac_configure_args '--enable-xpdfopen=$enable_xpdfopen'" + ;; +esac + + ## texk/web2c/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory texk/web2c/ ## configure options and TL libraries required for web2c diff --git a/Build/source/utils/Makefile.in b/Build/source/utils/Makefile.in index 336973ae9da..6d3932412a8 100644 --- a/Build/source/utils/Makefile.in +++ b/Build/source/utils/Makefile.in @@ -67,7 +67,6 @@ am__aclocal_m4_deps = $(top_srcdir)/../m4/kpse-common.m4 \ $(top_srcdir)/../m4/kpse-zziplib-flags.m4 \ $(top_srcdir)/../utils/chktex/ac/withenable.ac \ $(top_srcdir)/../utils/dialog/ac/withenable.ac \ - $(top_srcdir)/../utils/pdfopen/ac/withenable.ac \ $(top_srcdir)/../utils/ps2eps/ac/withenable.ac \ $(top_srcdir)/../utils/psutils/ac/withenable.ac \ $(top_srcdir)/../utils/t1utils/ac/withenable.ac \ @@ -78,6 +77,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../m4/kpse-common.m4 \ $(top_srcdir)/../utils/xindy-new/ac/clisp.ac \ $(top_srcdir)/../utils/xindy/ac/withenable.ac \ $(top_srcdir)/../utils/xindy/ac/xindy.ac \ + $(top_srcdir)/../utils/xpdfopen/ac/withenable.ac \ $(top_srcdir)/../texk/web2c/ac/withenable.ac \ $(top_srcdir)/../texk/web2c/ac/web2c.ac \ $(top_srcdir)/../texk/afm2pl/ac/withenable.ac \ diff --git a/Build/source/utils/README b/Build/source/utils/README index 00374b2ff0b..1f9e9fb5353 100644 --- a/Build/source/utils/README +++ b/Build/source/utils/README @@ -16,10 +16,6 @@ chktex 1.6.4 - checked 3may10 dialog 1.1-20100119 - checked 21jan10 ftp://invisible-island.net/dialog/dialog.tar.gz -pdfopen 0.5 - checked 26nov06 - (really xpdfopen) - http://tex.aanhet.net/pdfopen - ps2eps 1.64 - checked 19feb08 http://www.ipv6.tm.uka.de/~bless/ps2eps @@ -36,7 +32,6 @@ tpic2pdftex vlna 1.2 - checked 26jun08 ftp://math.feld.cvut.cz/pub/olsak/vlna - xindy 2.3 - checked 24mar08 (with numerous adaptations for TL by Vladimir) http://www.ctan.org/indexing/xindy/ @@ -45,6 +40,10 @@ After building clisp as described below, run the TL Build --enable-xindy CLISP=$clisp_builddir/clisp to include xindy in the build. It is disabled by default. +xpdfopen 0.80 - checked 5may10 + http://mirror.ctan.org/support/xpdfopen.zip + + Do NOT use nohup when building clisp; this may cause weird build problems. Regular redirections of stdout/stderr seem ok. diff --git a/Build/source/utils/configure b/Build/source/utils/configure index 479d35586a4..80ff50e7a04 100755 --- a/Build/source/utils/configure +++ b/Build/source/utils/configure @@ -646,7 +646,6 @@ enable_cxx_runtime_hack enable_libtool_hack enable_chktex enable_dialog -enable_pdfopen enable_ps2eps enable_psutils enable_t1utils @@ -658,6 +657,7 @@ enable_xindy_docs with_clisp_runtime with_xindy_recode enable_xindy +enable_xpdfopen enable_web2c with_tex_banner with_editor @@ -780,14 +780,14 @@ host_alias target_alias' ac_subdirs_all='chktex dialog -pdfopen ps2eps psutils t1utils tpic2pdftex vlna xindy-new -xindy' +xindy +xpdfopen' # Initialize some variables set by options. ac_init_help= @@ -1417,7 +1417,6 @@ Optional Features: --enable-libtool-hack ignore libtool dependency_libs --enable-chktex build the chktex package --disable-dialog do not build the dialog package - --disable-pdfopen do not build the pdfopen package --disable-ps2eps do not build the ps2eps package --disable-psutils do not build the psutils package --disable-t1utils do not build the t1utils package @@ -1427,6 +1426,7 @@ Optional Features: --enable-xindy-rules build and install make-rules package --enable-xindy-docs build and install documentation --enable-xindy build the xindy package + --disable-xpdfopen do not build the xpdfopen package --disable-web2c do not build the web2c (TeX & Co.) package --enable-auto-core cause TeX&MF to dump core, given a certain filename @@ -2258,38 +2258,6 @@ $as_echo "$as_me: Assuming \`--enable-dialog=$enable_dialog'" >&6;} esac -## utils/pdfopen/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/pdfopen/ -## configure options and TL libraries required for pdfopen -if test "x$with_x" = xno; then : - case $enable_pdfopen in #( - "") : - { $as_echo "$as_me:${as_lineno-$LINENO}: \`--without-x' -> \`--disable-pdfopen'" >&5 -$as_echo "$as_me: \`--without-x' -> \`--disable-pdfopen'" >&6;} - enable_pdfopen=no - ac_configure_args="$ac_configure_args '--disable-pdfopen'" ;; #( - yes) : - as_fn_error "Sorry, incompatible options \`--without-x' and \`--enable-pdfopen'" "$LINENO" 5 ;; #( - *) : - ;; -esac -fi -# Check whether --enable-pdfopen was given. -if test "${enable_pdfopen+set}" = set; then : - enableval=$enable_pdfopen; -fi -case $enable_pdfopen in #( - yes|no) : - ;; #( - *) : - - enable_pdfopen=$enable_all_pkgs - { $as_echo "$as_me:${as_lineno-$LINENO}: Assuming \`--enable-pdfopen=$enable_pdfopen'" >&5 -$as_echo "$as_me: Assuming \`--enable-pdfopen=$enable_pdfopen'" >&6;} - ac_configure_args="$ac_configure_args '--enable-pdfopen=$enable_pdfopen'" - ;; -esac - - ## utils/ps2eps/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/ps2eps/ ## configure options and TL libraries required for ps2eps # Check whether --enable-ps2eps was given. @@ -2500,6 +2468,38 @@ if test "${with_xindy_recode+set}" = set; then : fi +## utils/xpdfopen/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/xpdfopen/ +## configure options and TL libraries required for xpdfopen +if test "x$with_x" = xno; then : + case $enable_xpdfopen in #( + "") : + { $as_echo "$as_me:${as_lineno-$LINENO}: \`--without-x' -> \`--disable-xpdfopen'" >&5 +$as_echo "$as_me: \`--without-x' -> \`--disable-xpdfopen'" >&6;} + enable_xpdfopen=no + ac_configure_args="$ac_configure_args '--disable-xpdfopen'" ;; #( + yes) : + as_fn_error "Sorry, incompatible options \`--without-x' and \`--enable-xpdfopen'" "$LINENO" 5 ;; #( + *) : + ;; +esac +fi +# Check whether --enable-xpdfopen was given. +if test "${enable_xpdfopen+set}" = set; then : + enableval=$enable_xpdfopen; +fi +case $enable_xpdfopen in #( + yes|no) : + ;; #( + *) : + + enable_xpdfopen=$enable_all_pkgs + { $as_echo "$as_me:${as_lineno-$LINENO}: Assuming \`--enable-xpdfopen=$enable_xpdfopen'" >&5 +$as_echo "$as_me: Assuming \`--enable-xpdfopen=$enable_xpdfopen'" >&6;} + ac_configure_args="$ac_configure_args '--enable-xpdfopen=$enable_xpdfopen'" + ;; +esac + + ## texk/web2c/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory texk/web2c/ ## configure options and TL libraries required for web2c @@ -4631,16 +4631,6 @@ if test -x $srcdir/dialog/configure; then fi -if test -x $srcdir/pdfopen/configure; then - test "x$enable_pdfopen" = xno || SUBUTILS="$SUBUTILS pdfopen" - DIST_SUBUTILS="$DIST_SUBUTILS pdfopen" - if false; then - subdirs="$subdirs pdfopen" - - fi -fi - - if test -x $srcdir/ps2eps/configure; then test "x$enable_ps2eps" = xno || SUBUTILS="$SUBUTILS ps2eps" DIST_SUBUTILS="$DIST_SUBUTILS ps2eps" @@ -4711,6 +4701,16 @@ if test -x $srcdir/xindy/configure; then fi +if test -x $srcdir/xpdfopen/configure; then + test "x$enable_xpdfopen" = xno || SUBUTILS="$SUBUTILS xpdfopen" + DIST_SUBUTILS="$DIST_SUBUTILS xpdfopen" + if false; then + subdirs="$subdirs xpdfopen" + + fi +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SUBUTILS" >&5 diff --git a/Build/source/utils/pdfopen/ChangeLog b/Build/source/utils/pdfopen/ChangeLog deleted file mode 100644 index 8acb751ea09..00000000000 --- a/Build/source/utils/pdfopen/ChangeLog +++ /dev/null @@ -1,25 +0,0 @@ -2009-08-22 Peter Breitenlohner <peb@mppmu.mpg.de> - - Avoid maximal compiler warnings. - * pdfopen.c: Use strdup'ed literal string (malloc+strcpy) to - initialize non-constant string. - * sendx.[ch]: Constify string args of all functions. - Consistently use wname for window name string param. - (close_channel): ANSI C function definition. - -2009-08-19 Peter Breitenlohner <peb@mppmu.mpg.de> - - * Makefile.am (AM_CFLAGS), configure.ac: Enable compiler warnings. - * pdfopen.c (usage), pdfclose.c (usage): Declare as static. - - * sendx.h (new): Declare prototypes for functions in sendx.c. - * Makefile.am (pdfopen_SOURCES, pdfclose_SOURCES): Add sendx.h. - * pdfopen.c, pdfclose.c, sendx.c: #include "sendx.h". - - * sendx.c (GetRootWindow): Slightly reformulate to avoid compiler - warning (strict-aliasing rules). - -2009-05-06 Peter Breitenlohner <peb@mppmu.mpg.de> - - Adapt to TL2009 build system. - diff --git a/Build/source/utils/pdfopen/Makefile.am b/Build/source/utils/pdfopen/Makefile.am deleted file mode 100644 index 227bacf38db..00000000000 --- a/Build/source/utils/pdfopen/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -## Makefile.am for the TeX Live subdirectory utils/pdfopen/ -## -## Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org> -## You may freely use, modify and/or distribute this file. -## -ACLOCAL_AMFLAGS = -I ../../m4 - -AM_CFLAGS = $(WARNING_CFLAGS) -INCLUDES = $(X_CFLAGS) - -LDADD = $(X_LIBS) -lX11 -lXmu $(X_EXTRA_LIBS) - -bin_PROGRAMS = pdfopen pdfclose - -pdfopen_SOURCES = pdfopen.c sendx.c sendx.h - -pdfclose_SOURCES = pdfclose.c sendx.c sendx.h - -EXTRA_DIST = xpdfopen.pdf xpdfopen.tex - diff --git a/Build/source/utils/pdfopen/README b/Build/source/utils/pdfopen/README deleted file mode 100644 index 3072326118c..00000000000 --- a/Build/source/utils/pdfopen/README +++ /dev/null @@ -1,83 +0,0 @@ - ---------------------------------------------------------- -Pdfopen 0.51 - Send open/close commands to Acrobat Reader ---------------------------------------------------------- - -This is a Linux (X11) implementation of Fabrice Popineau's pdfclose/ -pdfopen commands to control the Acrobat Reader. - -The libX code was borrowed from Reinhard Fobbe's Sendx library for -Tcl/Tk, and the programs use the same license, copied below. - -Version 0.3 adds support for Adobe Reader 7.0 for Linux. -(different window titles and key shortcuts) - -Version 0.4 uses autoconf - -Version 0.5 fixes an incorrect autoconf variable, supports -building under X11R5, handles pathnames on the command-line, -and fixes a bug where pdfopen did not exit correctly after -(automatically) starting acroread. - -Version 0.51 uses the strrchr() function instead of rindex() -to allow compilation on non-BSD derived unix platforms. - -The command lines do not behave precisely the same as under Windows, -because the Linux Reader behaves somewhat different: it is not -scriptable, but it is possible to 'fake' keypresses. - -Both commands have only one meaningful argument: - - pdfclose --file <pdfname> - Closes an existing window with the name <pdfname> - - pdfopen --file <pdfname> - Opens a window with the name <pdfname> (starting a reader if - necesary), or it reloads <pdfname> if it was already open. - -Note: <pdfname> is the name of the X window, not a filename. - - -Without argument, the pdfopen program sends a "Ctrl-<-" to an existing X -window with the name "Acrobat Reader", and "Alt-<-" to a window with the -name "Adobe Reader", if such windows exist. - -The --all and --page arguments of Fabrice's programs are silently ignored. - - -Taco Hoekwater <taco@metatex.org> - -Dordrecht, The Netherlands, March 2005. - - -License terms: --------------- -The following terms apply to all files associated with the software unless -explicitly disclaimed in individual files. - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - - - - diff --git a/Build/source/utils/pdfopen/ac/withenable.ac b/Build/source/utils/pdfopen/ac/withenable.ac deleted file mode 100644 index 5aed0888cd2..00000000000 --- a/Build/source/utils/pdfopen/ac/withenable.ac +++ /dev/null @@ -1,13 +0,0 @@ -## utils/pdfopen/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/pdfopen/ -dnl -dnl Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org> -dnl You may freely use, modify and/or distribute this file. -dnl -## configure options and TL libraries required for pdfopen -AS_IF([test "x$with_x" = xno], - [AS_CASE([$enable_pdfopen], - [""], [AC_MSG_NOTICE([`--without-x' -> `--disable-pdfopen']) - enable_pdfopen=no - ac_configure_args="$ac_configure_args '--disable-pdfopen'"], - [yes], [AC_MSG_ERROR([Sorry, incompatible options `--without-x' and `--enable-pdfopen'])])]) -KPSE_ENABLE_PROG([pdfopen]) diff --git a/Build/source/utils/pdfopen/pdfclose.c b/Build/source/utils/pdfopen/pdfclose.c deleted file mode 100644 index 9bb3d5ce247..00000000000 --- a/Build/source/utils/pdfopen/pdfclose.c +++ /dev/null @@ -1,47 +0,0 @@ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include "sendx.h" - -#define READERWINPREFIX "Adobe Reader - " -#define SUCCESS(a) (!a) - -static void usage (void) { - puts ("pdfclose 0.5: you are mistaking me for an actual program.\n"); - puts (" pdfclose --file filename.pdf"); - puts ("\n"); -} - - -int main (int argc, char **argv){ - char *filename; - char *winname; - if (argc == 3 && strcmp(argv[1],"--file") == 0) { - filename = malloc(strlen(argv[2])+1); - if (filename == NULL) { - puts ("out of memory\n"); - exit(EXIT_FAILURE); - } - strcpy(filename,argv[2]); - if(sendx_control_token("W",filename)) { - /* failed try reader 7 */ - winname = malloc(strlen(argv[2])+1+strlen(READERWINPREFIX)); - if (winname == NULL) { - puts ("out of memory\n"); - exit(EXIT_FAILURE); - } - strcpy (winname, READERWINPREFIX); - strcpy ((winname+strlen(READERWINPREFIX)), filename); - sendx_control_token("W",winname); - } - } else if (argc == 2 && strcmp(argv[1],"--all") == 0) { - ; - } else { - usage(); - } - exit(EXIT_SUCCESS); -} - diff --git a/Build/source/utils/pdfopen/pdfopen.c b/Build/source/utils/pdfopen/pdfopen.c deleted file mode 100644 index f968f6fd042..00000000000 --- a/Build/source/utils/pdfopen/pdfopen.c +++ /dev/null @@ -1,92 +0,0 @@ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/wait.h> - -#include "sendx.h" - -static void usage (void) { - puts ("pdfopen 0.51: you are mistaking me for an actual program.\n"); - puts(" pdfopen [--file filename.pdf]"); - puts ("\nusing no arguments tells the Reader to 'go back'.\n"); -} - -#define READERFIVE "Acrobat Reader" -#define READERNAME "Adobe Reader" -#define READERWINPREFIX "Adobe Reader - " -#define SUCCESS(a) (!a) - -int main (int argc, char **argv){ - char *newargv[3]; - char *winname; - char *filename; - char *basefile; - pid_t reader; - if (argc == 5 && - (strcmp(argv[3],"--page") == 0 - && strcmp(argv[1],"--file") == 0 )) { - argc = 3; - } - if (argc == 3 && strcmp(argv[1],"--file") == 0) { - filename = malloc(strlen(argv[2])+1); - basefile = malloc(strlen(argv[2])+1); - if (filename == NULL || basefile == NULL) { - puts ("out of memory\n"); - exit(EXIT_FAILURE); - } - strcpy(filename,argv[2]); - strcpy(basefile,filename); - if (strrchr(basefile,'/')) - basefile = strrchr(basefile,'/')+1; - - winname = malloc(strlen(argv[2])+1+strlen(READERWINPREFIX)); - if (winname == NULL ) { - puts ("out of memory\n"); - exit(EXIT_FAILURE); - } - strcpy (winname,READERWINPREFIX); - strcpy ((winname+strlen(READERWINPREFIX)), basefile); - if (SUCCESS(sendx_control_token("W",winname))) { - sendx_alt_token("Left",READERNAME); /* that's seven */ - sendx_control_token("Left",READERNAME); - /* that's seven, with artificial five keymaps */ - } else if (SUCCESS(sendx_control_token("W",filename))) { - sendx_control_token("Left",READERFIVE); /* that's five */ - } else if (SUCCESS(sendx_control_token("W",basefile))) { - sendx_control_token("Left",READERFIVE); /* that's five */ - } else { - if((reader = fork()) >= 0) { - if (reader) { - waitpid(reader,NULL,WNOHANG); - } else { - newargv[0] = malloc(strlen("acroread")+1); - if (newargv[0] == NULL) { - puts ("out of memory\n"); - exit(EXIT_FAILURE); - } - strcpy(newargv[0], "acroread"); - newargv[1] = filename; - newargv[2] = NULL; - if(execvp("acroread",newargv)) { - puts ("acroread startup failed\n"); - exit(EXIT_FAILURE); - } - } - } else { - puts ("fork failed\n"); - exit(EXIT_FAILURE); - } - } - } else if (argc != 1) { - usage(); - } else { - sendx_alt_token("Left",READERNAME); - sendx_control_token("Left",READERNAME); /* that's seven */ - sendx_control_token("Left",READERFIVE); - } - exit(EXIT_SUCCESS); -} - diff --git a/Build/source/utils/pdfopen/sendx.c b/Build/source/utils/pdfopen/sendx.c deleted file mode 100644 index 41defc8a6dc..00000000000 --- a/Build/source/utils/pdfopen/sendx.c +++ /dev/null @@ -1,288 +0,0 @@ -#include <stdio.h> -#include <string.h> -#include <ctype.h> - -#include <X11/Xlib.h> -#include <X11/Xatom.h> -#include <X11/keysym.h> -#include <X11/cursorfont.h> - -#include "sendx.h" - -static char *display_name = NULL; -static Display *display; -static Window root; -static Window window = None; -static XKeyEvent event; - -static char error_message[256]; -static int error_status = 0; - -static void -throw_exception3(const char *msg, const char *s, int i) { - sprintf(error_message, msg, s, i); - error_status = 1; -} - -static void -throw_exception3s(const char *msg1, const char *msg2, const char *msg3) { - sprintf(error_message, msg1, msg2, msg3); - error_status = 1; -} - -static void -throw_exception(const char *msg) { - strncpy(error_message,msg,256); - error_status = 1; -} - -/* Added for window managers like swm and tvtwm that follow solbourne's - * virtual root window concept - */ -static Window -GetRootWindow (Display * disp, int scrn) -{ - Atom __SWM_VROOT = None; - Window root, rootReturn, parentReturn, *children; - unsigned int numChildren; - unsigned i; - - root = RootWindow (disp, scrn); - - /* see if there is a virtual root */ - __SWM_VROOT = XInternAtom (disp, "__SWM_VROOT", False); - XQueryTree (disp, root, &rootReturn, &parentReturn, &children, &numChildren); - for (i = 0; i < numChildren; i++) - { - Atom actual_type; - int actual_format; - unsigned long nitems, bytesafter; - unsigned char *prop_return = NULL; - - if (XGetWindowProperty (disp, children[i], __SWM_VROOT, 0, 1, - False, XA_WINDOW, &actual_type, &actual_format, - &nitems, &bytesafter, &prop_return) == - Success && prop_return) - { - root = *(Window *)prop_return; - break; - } - } - if (children) - XFree ((char *) children); - return (root); -} - - -/* - - - - - - - - - - - * [These functions are from the file "dsimple.c" used with xwininfo.] - * - * Written by Mark Lillibridge. Last updated 7/1/87 - * - * - * Window_With_Name: routine to locate a window with a given name on a display. - * If no window with the given name is found, 0 is returned. - * If more than one window has the given name, the first - * one found will be returned. Only top and its subwindows - * are looked at. Normally, top should be the Root Window. - */ -static Window -Window_With_Name (Display * dpy, Window top, const char *wname) -{ - Window *children, dummy; - unsigned int nchildren; - unsigned i; - Window w = 0; - char *window_name; - - if (XFetchName (dpy, top, &window_name) && !strcmp (window_name, wname)) - return (top); - - if (!XQueryTree (dpy, top, &dummy, &dummy, &children, &nchildren)) - return (0); - - for (i = 0; i < nchildren; i++) - { - w = Window_With_Name (dpy, children[i], wname); - if (w) - break; - } - if (children) - XFree ((char *) children); - return (w); -} - - - -static int -open_channel (const char *wname) -{ -/* display_name = ":0.0"; */ - if ((display = XOpenDisplay (display_name)) == NULL) - { - throw_exception ("can't open display"); - return 1; - } - if ((root = GetRootWindow (display, DefaultScreen (display))) == 0) - { - throw_exception ("Cannot get DefaultScreen"); - return 1; - } - - if ((wname[0] == '\0') && (window != None)) - {} /* take selected window */ - else if (wname[0] != '\0') - { - if ((window = Window_With_Name (display, root, wname)) == None) - { - throw_exception3s ("Display %s: can't open window named \"%s\"", - XDisplayName (display_name), wname); - return 1; - } - } - else - { - throw_exception3 ("bad condition in %s at line %d", __FILE__, __LINE__); - return 1; - } - - event.type = KeyPress; - event.serial = 0; - event.send_event = False; - event.display = display; - event.x = event.y = event.x_root = event.y_root = 0; - event.time = CurrentTime; - event.same_screen = True; - event.subwindow = None; - event.window = window; - event.root = root; - return 0; -} - -static void -close_channel (void) -{ -/* XFlush(display); */ - XCloseDisplay (display); -} - -static void -sendx_channel (KeySym ks, int km) -{ -/* 0=regular, 1=shift, 2=lock, 4=control */ - if (ks < 256) - { - event.state = isupper ((char) ks); - switch (ks) - { - case 0x08: - ks = XK_BackSpace; - break; - case 0x09: - ks = XK_Tab; - break; - case 0x0A: - ks = XK_Linefeed; - break; - case 0x0B: - ks = XK_Clear; - break; - case 0x0D: - ks = XK_Return; - break; - case 0x13: - ks = XK_Pause; - break; - case 0x14: - ks = XK_Scroll_Lock; - break; - case 0x1B: - ks = XK_Escape; - break; - } - } - else - event.state = 0; - event.type = KeyPress; - event.state = km ; // Mod1Mask - event.keycode = XKeysymToKeycode (display, ks); - if (XSendEvent (display, window, True, 0xfff, (XEvent *) & event) == 0) - throw_exception ("Error in XSendEvent"); - event.type = KeyRelease; - if (XSendEvent (display, window, True, 0xfff, (XEvent *) & event) == 0) - throw_exception ("Error in XSendEvent"); - return; -} - -int -sendx_string (const char *string, const char *wname) -{ - const char *p; - if (open_channel (wname)) - return error_status; - p = string; - while (*p) - sendx_channel (*p++,0); - close_channel (); - return error_status; -} - -int -sendx_token (const char *string, const char *wname) -{ - if (open_channel (wname)) - return error_status; - sendx_channel (XStringToKeysym (string),0); - close_channel (); - return error_status; -} - - -int -sendx_alt_token (const char *string, const char *wname) -{ - if (open_channel (wname)) - return error_status; - sendx_channel (XStringToKeysym (string),Mod1Mask); - close_channel (); - return error_status; -} - -int -sendx_controlalt_token (const char *string, const char *wname) -{ - if (open_channel (wname)) - return error_status; - sendx_channel (XStringToKeysym (string), Mod1Mask | ControlMask); - close_channel (); - return error_status; -} - - -int -sendx_control_token (const char *string, const char *wname) -{ - if (open_channel (wname)) - return error_status; - sendx_channel (XStringToKeysym (string),ControlMask); - close_channel (); - return error_status; -} - -/* - void - PrintKeySyms () - { - int i; - for (i = 32; i < 127; i++) - { - printf ("%s[%c] ", XKeysymToString (i), i); - } - for (i = 128 + 32; i < 128 + 127; i++) - { - printf ("%s[%c] ", XKeysymToString (i), i); - } - printf ("\n"); - } - */ diff --git a/Build/source/utils/pdfopen/sendx.h b/Build/source/utils/pdfopen/sendx.h deleted file mode 100644 index c570dbb5920..00000000000 --- a/Build/source/utils/pdfopen/sendx.h +++ /dev/null @@ -1,15 +0,0 @@ -/* sendx.h: declare prototypes for functions defined in sendx.c - * - * Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org> - * You may freely use, modify and/or distribute this file. - */ -#ifndef SENDX_H -#define SENDX_H - -extern int sendx_string (const char *string, const char *wname); -extern int sendx_token (const char *string, const char *wname); -extern int sendx_alt_token (const char *string, const char *wname); -extern int sendx_controlalt_token (const char *string, const char *wname); -extern int sendx_control_token (const char *string, const char *wname); - -#endif diff --git a/Build/source/utils/xpdfopen/ChangeLog b/Build/source/utils/xpdfopen/ChangeLog new file mode 100644 index 00000000000..f320dcfe95c --- /dev/null +++ b/Build/source/utils/xpdfopen/ChangeLog @@ -0,0 +1,70 @@ +2010-05-03 Jim Diamond <jim.diamond@acadiau.ca> + + * pdfclose.c: make it work with all of AR{5,7,8,9} and xpdf. + * pdfopen.c: add ability to parse and send function-keys. + Add code (commented out) in an attempt to + support okular (see code comments). + * sendx.c: add code (commented out) in an attempt to + support okular (see code comments). + * configure.ac: add changes suggested by Peter Breitenlohner. + + +2010-04-24 Jim Diamond <jim.diamond@acadiau.ca> + + * utils.[ch]: put a function to create window titles there + * xpdfopen.h: put constants related to the titles of various + PDF viewers there + * pdfclose.c: modify to use utils.c and xpdfopen.h + * pdfopen.c: major modifications so it works with AR7, AR8, AR9 + xpdf and maybe AR5, and so that it might be + relatively straightforward to add other PDF viewers. + The default viewer is AR9, this can be overridden + by an environment variable and a command-line + argument. + * sendx.c: Reset the error status in open_channel() so that an + error return doesn't become permanent. + Fixed mask param in XSendEvent(). + + +2010-04-21 Jim Diamond <jim.diamond@acadiau.ca> + + * pdfopen.c: Fold in some changes submitted by + Peter Breitenlohner <tex-live@tug.org> + * pdfopen.c: Fold in some changes submitted by + Peter Breitenlohner <tex-live@tug.org> + and reformat the code. + + +2010-04-11 Jim Diamond <jim.diamond@acadiau.ca> + + * pdfopen.c: Update (in a non-backward-compatible way) to + work with AR 9. Save old version in pdfopen-AR-7-and-8.c. + + +2009-08-22 Peter Breitenlohner <peb@mppmu.mpg.de> + + Avoid maximal compiler warnings. + * pdfopen.c: Use strdup'ed literal string (malloc+strcpy) to + initialize non-constant string. + * sendx.[ch]: Constify string args of all functions. + Consistently use wname for window name string param. + (close_channel): ANSI C function definition. + + +2009-08-19 Peter Breitenlohner <peb@mppmu.mpg.de> + + * Makefile.am (AM_CFLAGS), configure.ac: Enable compiler warnings. + * pdfopen.c (usage), pdfclose.c (usage): Declare as static. + + * sendx.h (new): Declare prototypes for functions in sendx.c. + * Makefile.am (pdfopen_SOURCES, pdfclose_SOURCES): Add sendx.h. + * pdfopen.c, pdfclose.c, sendx.c: #include "sendx.h". + + * sendx.c (GetRootWindow): Slightly reformulate to avoid compiler + warning (strict-aliasing rules). + + +2009-05-06 Peter Breitenlohner <peb@mppmu.mpg.de> + + Adapt to TL2009 build system. + diff --git a/Build/source/utils/xpdfopen/Makefile.am b/Build/source/utils/xpdfopen/Makefile.am new file mode 100644 index 00000000000..34b87c703e0 --- /dev/null +++ b/Build/source/utils/xpdfopen/Makefile.am @@ -0,0 +1,21 @@ +## Makefile.am for the TeX Live subdirectory utils/xpdfopen/ +## +## Copyright (C) 2009, 2010 Peter Breitenlohner <tex-live@tug.org> +## You may freely use, modify and/or distribute this file. +## +ACLOCAL_AMFLAGS = -I ../../m4 + +AM_CFLAGS = $(WARNING_CFLAGS) +INCLUDES = $(X_CFLAGS) + +LDADD = $(X_LIBS) -lX11 -lXmu $(X_EXTRA_LIBS) + +bin_PROGRAMS = pdfopen pdfclose + +pdfopen_SOURCES = pdfopen.c sendx.c utils.c sendx.h xpdfopen.h utils.h + +pdfclose_SOURCES = pdfclose.c sendx.c utils.c sendx.h xpdfopen.h utils.h + +EXTRA_DIST = xpdfopen.pdf xpdfopen.tex + +EXTRA_DIST += Makefile.am.orig configure.ac.orig
\ No newline at end of file diff --git a/Build/source/utils/xpdfopen/Makefile.am.orig b/Build/source/utils/xpdfopen/Makefile.am.orig new file mode 100644 index 00000000000..cf371f66516 --- /dev/null +++ b/Build/source/utils/xpdfopen/Makefile.am.orig @@ -0,0 +1,20 @@ + +AM_CFLAGS = $(X_CFLAGS) +## Add warnings for gcc-3.4 +AM_CFLAGS += -Wall -Wunused -Wimplicit -Wreturn-type +AM_CFLAGS += -Wdeclaration-after-statement -Wno-unknown-pragmas +AM_CFLAGS += -Wmissing-prototypes -Wmissing-declarations -Wparentheses +AM_CFLAGS += -Wswitch -Wtrigraphs -Wpointer-arith -Wcast-qual +AM_CFLAGS += -Wcast-align -Wwrite-strings -Wold-style-definition + +LDADD = $(X_LIBS) -lX11 -lXmu $(X_EXTRA_LIBS) + +EXTRA_DIST = pdfopen-AR-7-and-8.c + +bin_PROGRAMS = pdfopen pdfclose + +pdfopen_SOURCES = pdfopen.c sendx.c utils.c sendx.h xpdfopen.h utils.h + +pdfclose_SOURCES = pdfclose.c sendx.c utils.c sendx.h xpdfopen.h utils.h + + diff --git a/Build/source/utils/pdfopen/Makefile.in b/Build/source/utils/xpdfopen/Makefile.in index 45b3f6f2fee..9e3316fd4c4 100644 --- a/Build/source/utils/pdfopen/Makefile.in +++ b/Build/source/utils/xpdfopen/Makefile.in @@ -55,12 +55,13 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) -am_pdfclose_OBJECTS = pdfclose.$(OBJEXT) sendx.$(OBJEXT) +am_pdfclose_OBJECTS = pdfclose.$(OBJEXT) sendx.$(OBJEXT) \ + utils.$(OBJEXT) pdfclose_OBJECTS = $(am_pdfclose_OBJECTS) pdfclose_LDADD = $(LDADD) am__DEPENDENCIES_1 = pdfclose_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -am_pdfopen_OBJECTS = pdfopen.$(OBJEXT) sendx.$(OBJEXT) +am_pdfopen_OBJECTS = pdfopen.$(OBJEXT) sendx.$(OBJEXT) utils.$(OBJEXT) pdfopen_OBJECTS = $(am_pdfopen_OBJECTS) pdfopen_LDADD = $(LDADD) pdfopen_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) @@ -182,9 +183,10 @@ ACLOCAL_AMFLAGS = -I ../../m4 AM_CFLAGS = $(WARNING_CFLAGS) INCLUDES = $(X_CFLAGS) LDADD = $(X_LIBS) -lX11 -lXmu $(X_EXTRA_LIBS) -pdfopen_SOURCES = pdfopen.c sendx.c sendx.h -pdfclose_SOURCES = pdfclose.c sendx.c sendx.h -EXTRA_DIST = xpdfopen.pdf xpdfopen.tex +pdfopen_SOURCES = pdfopen.c sendx.c utils.c sendx.h xpdfopen.h utils.h +pdfclose_SOURCES = pdfclose.c sendx.c utils.c sendx.h xpdfopen.h utils.h +EXTRA_DIST = xpdfopen.pdf xpdfopen.tex Makefile.am.orig \ + configure.ac.orig all: all-am .SUFFIXES: @@ -276,6 +278,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdfclose.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdfopen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< diff --git a/Build/source/utils/xpdfopen/README b/Build/source/utils/xpdfopen/README new file mode 100644 index 00000000000..51b532c7bcc --- /dev/null +++ b/Build/source/utils/xpdfopen/README @@ -0,0 +1,89 @@ +------------------------------------------------------------------ +Pdfopen 0.80 - Send open/close commands to Acrobat Reader and xpdf +------------------------------------------------------------------ + +This is a Linux (X11) implementation of Fabrice Popineau's pdfclose/ +pdfopen commands to control Acrobat Reader and xpdf. + +The libX code was borrowed from Reinhard Fobbe's Sendx library for +Tcl/Tk, and the programs use the same license, copied below. + +Version 0.3 adds support for Adobe Reader 7.0 for Linux. +(different window titles and key shortcuts) + +Version 0.4 uses autoconf + +Version 0.5 fixes an incorrect autoconf variable, supports +building under X11R5, handles pathnames on the command-line, +and fixes a bug where pdfopen did not exit correctly after +(automatically) starting acroread. + +Version 0.51 uses the strrchr() function instead of rindex() +to allow compilation on non-BSD derived unix platforms. + +Version 0.61 attempts to do something useful with Adobe Reader 8, +even though it is impossible to restore the viewport. + +Version 0.80 adds an implementation for AR 9 and xpdf. + +The AR command lines do not behave precisely the same as under Windows, +because the Linux Reader behaves somewhat differently: it is not +scriptable, but it is possible to 'fake' keypresses. + + +pdfopen has the following call sequence: + pdfopen [-viewer <ar9|ar9-tab|ar8|ar7|ar5|xpdf>] <pdf file name> +The 'ar9' version uses the '-openInNewWindow' option, the 'ar9-tab' +version does not (so if there is already an AR9 window open, a new tab +will be opened in that window). + + +pdfclose has the following call sequence: + pdfclose <pdf file name> +This program closes an existing AR5, AR7, AR8, AR9 or xpdf window +displaying the given PDF file. + + +Version 0.80 compiles on Linux (Slackware64 13.0, anyway) with +the following command: + gcc -Wall pdfopen.c sendx.c utils.c -o pdfopen -lX11 -s +should you not want to go through the process of creating and running +a configure program. + + +Taco Hoekwater <taco@metatex.org> (Version(s) up to 0.61) +Dordrecht, The Netherlands, December 2008. + +Jim Diamond <jim.diamond@acadiau.ca> (Version 0.80) +Acadia University, Wolfville, Nova Scotia, Canada; April 2010. + + + + +License terms: +-------------- +The following terms apply to all files associated with the software +unless explicitly disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, +provided that existing copyright notices are retained in all copies +and that this notice is included verbatim in any distributions. No +written agreement, license, or royalty fee is required for any of the +authorized uses. Modifications to this software may be copyrighted by +their authors and need not follow the licensing terms described here, +provided that the new terms are clearly indicated on the first page of +each file where they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" +BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE +MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. diff --git a/Build/source/utils/xpdfopen/ac/withenable.ac b/Build/source/utils/xpdfopen/ac/withenable.ac new file mode 100644 index 00000000000..1cc4b4b3f0a --- /dev/null +++ b/Build/source/utils/xpdfopen/ac/withenable.ac @@ -0,0 +1,13 @@ +## utils/xpdfopen/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/xpdfopen/ +dnl +dnl Copyright (C) 2009, 2010 Peter Breitenlohner <tex-live@tug.org> +dnl You may freely use, modify and/or distribute this file. +dnl +## configure options and TL libraries required for xpdfopen +AS_IF([test "x$with_x" = xno], + [AS_CASE([$enable_xpdfopen], + [""], [AC_MSG_NOTICE([`--without-x' -> `--disable-xpdfopen']) + enable_xpdfopen=no + ac_configure_args="$ac_configure_args '--disable-xpdfopen'"], + [yes], [AC_MSG_ERROR([Sorry, incompatible options `--without-x' and `--enable-xpdfopen'])])]) +KPSE_ENABLE_PROG([xpdfopen]) diff --git a/Build/source/utils/pdfopen/aclocal.m4 b/Build/source/utils/xpdfopen/aclocal.m4 index f004a0e2d53..f004a0e2d53 100644 --- a/Build/source/utils/pdfopen/aclocal.m4 +++ b/Build/source/utils/xpdfopen/aclocal.m4 diff --git a/Build/source/utils/pdfopen/configure b/Build/source/utils/xpdfopen/configure index 36a93820686..680da49b1be 100755 --- a/Build/source/utils/pdfopen/configure +++ b/Build/source/utils/xpdfopen/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for pdfopen for TeX Live 0.51. +# Generated by GNU Autoconf 2.65 for xpdfopen for TeX Live 0.80. # # Report bugs to <tex-k@tug.org>. # @@ -549,10 +549,10 @@ MFLAGS= MAKEFLAGS= # Identity of this package. -PACKAGE_NAME='pdfopen for TeX Live' -PACKAGE_TARNAME='pdfopen-for-tex-live' -PACKAGE_VERSION='0.51' -PACKAGE_STRING='pdfopen for TeX Live 0.51' +PACKAGE_NAME='xpdfopen for TeX Live' +PACKAGE_TARNAME='xpdfopen-for-tex-live' +PACKAGE_VERSION='0.80' +PACKAGE_STRING='xpdfopen for TeX Live 0.80' PACKAGE_BUGREPORT='tex-k@tug.org' PACKAGE_URL='' @@ -1207,7 +1207,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures pdfopen for TeX Live 0.51 to adapt to many kinds of systems. +\`configure' configures xpdfopen for TeX Live 0.80 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1256,7 +1256,7 @@ Fine tuning of the installation directories: --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root - [DATAROOTDIR/doc/pdfopen-for-tex-live] + [DATAROOTDIR/doc/xpdfopen-for-tex-live] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] @@ -1278,7 +1278,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of pdfopen for TeX Live 0.51:";; + short | recursive ) echo "Configuration of xpdfopen for TeX Live 0.80:";; esac cat <<\_ACEOF @@ -1376,7 +1376,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -pdfopen for TeX Live configure 0.51 +xpdfopen for TeX Live configure 0.80 generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. @@ -1581,7 +1581,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by pdfopen for TeX Live $as_me 0.51, which was +It was created by xpdfopen for TeX Live $as_me 0.80, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ @@ -2392,8 +2392,8 @@ fi # Define the identity of the package. - PACKAGE='pdfopen-for-tex-live' - VERSION='0.51' + PACKAGE='xpdfopen-for-tex-live' + VERSION='0.80' cat >>confdefs.h <<_ACEOF @@ -4892,7 +4892,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by pdfopen for TeX Live $as_me 0.51, which was +This file was extended by xpdfopen for TeX Live $as_me 0.80, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -4949,7 +4949,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -pdfopen for TeX Live config.status 0.51 +xpdfopen for TeX Live config.status 0.80 configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" diff --git a/Build/source/utils/pdfopen/configure.ac b/Build/source/utils/xpdfopen/configure.ac index bae004ef959..715745e1388 100644 --- a/Build/source/utils/pdfopen/configure.ac +++ b/Build/source/utils/xpdfopen/configure.ac @@ -1,12 +1,12 @@ dnl Process this file with autoconf to produce a configure script. dnl -dnl Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org> +dnl Copyright (C) 2009, 2010 Peter Breitenlohner <tex-live@tug.org> dnl dnl This file is free software; the copyright holder dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl -AC_INIT([pdfopen for TeX Live], [0.51], [tex-k@tug.org]) +AC_INIT([xpdfopen for TeX Live], [0.80], [tex-k@tug.org]) AC_PREREQ([2.65]) AC_CONFIG_SRCDIR([pdfopen.c]) AC_CONFIG_AUX_DIR([../../build-aux]) diff --git a/Build/source/utils/xpdfopen/configure.ac.orig b/Build/source/utils/xpdfopen/configure.ac.orig new file mode 100644 index 00000000000..88c475350a8 --- /dev/null +++ b/Build/source/utils/xpdfopen/configure.ac.orig @@ -0,0 +1,25 @@ +dnl Process this file with autoconf to produce a configure script. +dnl this is for autoconf 2.5x + +AC_INIT(pdfopen, 0.80, jim.diamond@acadiau.ca) + +AC_CONFIG_AUX_DIR(config) + +AM_INIT_AUTOMAKE() + +AC_CONFIG_FILES(Makefile) + +AC_PROG_CC + +dnl AC_PROG_INSTALL + +dnl Checks for header files. + +dnl Checks for typedefs, structures, and compiler characteristics. + +dnl Checks for library functions. + +dnl Find Xlibs. +AC_PATH_XTRA + +AC_OUTPUT diff --git a/Build/source/utils/xpdfopen/pdfclose.c b/Build/source/utils/xpdfopen/pdfclose.c new file mode 100644 index 00000000000..121a42762f9 --- /dev/null +++ b/Build/source/utils/xpdfopen/pdfclose.c @@ -0,0 +1,71 @@ +/* + * pdfclose.c + * + * Modified by Jim Diamond (jim.diamond@acadiau.ca) 2010/04/21 + * and Peter Breitenlohner <tex-live@tug.org> (2009). + * + * This program does not take a viewer argument, and just tries to close + * any known viewer displaying the given file. + * + * V 0.80 + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "sendx.h" +#include "xpdfopen.h" +#include "utils.h" + + +char * progname; /* set in main(); NOT static! */ + + + +static void +usage(void) +{ + fprintf(stderr, "Usage: %s <file.pdf>\n", progname); +} + + + +static int +try_name(const char * filename, const char * title_format) +{ + char * winname; + int ret ; + + winname = make_window_name(title_format, filename); + if (winname == NULL) + return 99; + + ret = sendx_control_token("W", winname); + free(winname); + + return ret; +} + + + +int +main (int argc, char * argv[]) +{ + progname = argv[0]; + + if (argc != 2) + { + usage(); + return EXIT_FAILURE; + } + + if (try_name(argv[1], AR9_WIN_NAME_FMT)) /* both AR8 and AR9 */ + if (try_name(argv[1], XPDF_WIN_NAME_FMT)) + if (try_name(argv[1], AR7_WIN_NAME_FMT)) + if (try_name(argv[1], AR5_WIN_NAME_FMT)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/Build/source/utils/xpdfopen/pdfopen.c b/Build/source/utils/xpdfopen/pdfopen.c new file mode 100644 index 00000000000..abee956964a --- /dev/null +++ b/Build/source/utils/xpdfopen/pdfopen.c @@ -0,0 +1,375 @@ +/* + * pdfopen.c. + * + * Heavily modified by Jim Diamond (jim.diamond@acadiau.ca) 2010/04/11 + * to work with AR 9 and xpdf. + * Also some mods by Peter Breitenlohner <tex-live@tug.org> from 2009 + * and suggestions from 2010. + * + * Note 1: the calling sequence was changed considerably to match what + * the program actually seemed to do as well as what made sense to me. + * + * Note 2: if there are two instances of acroread displaying that file, + * only one is reloaded. + * + * Further modified 2010/05/03 to work with ar5, and to include some code + * that does *not* work with okular (see note below). + * + * Note 3: Unlike xpdf and AR[5,7,8,9], okular will not accept X events + * from this program unless the okular window has focus. On my system + * (Slackware64 13.0, using fvwm2), the functions I added to sendx.c to try + * to change the focus to the okular window do not work. (See also the + * comments in sendx.c.) If anyone cares to contribute working code, + * please send it to me for inclusion. + */ + +#define VERSION "0.80" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> + +#include "sendx.h" +#include "xpdfopen.h" +#include "utils.h" + +#define MAX_OPTIONS 10 +#define MAX_RELOAD_CMDS 10 + +/* A string unlikely to be used as a real command by a PDF viewer */ +#define FORK_EXEC_CMD "*FORK EXEC*" + + +/* Used in the pdf_viewer_t type... see comment below */ +typedef enum +{ + USE_SENDX, USE_FORK_EXEC +} reload_method_t; + + +/* + * This struct contains the information needed for both + * (a) initially starting up a PDF viewer, and + * (b) telling the viewer to reload the document. + * Of course, the viewer has to support that functionality. + * Two possible ways are supported. + * (a) Send the viewer's window (a) simulated keypress(ss) + * (b) fork()/exec() a second instance of the program which somehow signals + * the running instance. Note that this is problematical if the + * arguments for the "reload" case are different than the options + * for the "start up the viewer" case, because the command-line + * (and environment variable) syntax have to be extended. + * Arguably, if both the start-up and reload can be done with shell + * commands, the user should just write a shell script and be done with + * it. + * These could be extended with this as well: + * (c) send a Unix signal to the currently running viewer. + * This would require augmenting reload_method_t and pdf_viewer_t. + */ + +typedef struct +{ + const char * short_name; /* cmd line option name */ + const char * program_name; /* program to exec() */ + reload_method_t method; /* method to induce reload */ + const char * window_name; /* when no file is viewed */ + const char * window_name_fmt; /* fmt string for file viewed */ + const char * exec_pre_options[MAX_OPTIONS]; /* before filename in cmd */ + const char * exec_post_options[MAX_OPTIONS];/* after filename in cmd */ + const char * reload_cmds[MAX_RELOAD_CMDS]; /* cmds to reload a file */ +} pdf_viewer_t; + + +/* Reload commands (or prefixes thereof) */ +#define CTRL "Ctrl-" +#define ALT "Alt-" +#define CTRL_ALT "Ctrl-Alt-" +#define FN "Fn-" +#define FOCUS_IN "FOCUS-IN" +#define FOCUS_OUT "FOCUS-OUT" + + + +/* + * The first struct represents the default viewer with the default options. + */ +pdf_viewer_t pdf_viewers[] = +{ + {"ar9", "acroread", USE_SENDX, + AR9_WIN_NAME, AR9_WIN_NAME_FMT, + {"-openInNewWindow", NULL}, + {NULL}, + {"Ctrl-R", NULL}}, + {"ar9-tab", "acroread", USE_SENDX, + AR9_WIN_NAME, AR9_WIN_NAME_FMT, + {NULL}, + {NULL}, + {"Ctrl-R", NULL}}, + {"ar8", "acroread", USE_SENDX, + AR8_WIN_NAME, AR8_WIN_NAME_FMT, + {NULL}, + {NULL}, + {"Ctrl-W", FORK_EXEC_CMD, NULL}}, + {"ar7", "acroread", USE_SENDX, + AR7_WIN_NAME, AR7_WIN_NAME_FMT, + {NULL}, + {NULL}, + {"Ctrl-W", "Alt-Left", NULL}}, + {"ar5", "acroread", USE_SENDX, + AR5_WIN_NAME, AR5_WIN_NAME_FMT, + {NULL}, + {NULL}, + {"Ctrl-W", "Alt-Left", NULL}}, + /* + * xpdf also allows 'xpdf -remote tex -reload', but if that xpdf server + * is not running, rather than a failure return, a blank window is + * opened. This is not much good to us. + * Using "tex-server" as the server name is an arbitrary choice. + */ + {"xpdf", "xpdf", USE_SENDX, + XPDF_WIN_NAME, XPDF_WIN_NAME_FMT, + {"-remote", "tex-server", NULL}, + {NULL}, + {"r", NULL}}, +#ifdef TRY_OCULAR + {"okular", "okular", USE_SENDX, + OKULAR_WIN_NAME, OKULAR_WIN_NAME_FMT, + {NULL}, + {NULL}, + {FOCUS_IN, "Fn-F5", FOCUS_OUT, NULL}}, +#endif +}; + +char * progname; /* set in main(); NOT static! */ + +#define DEFAULT_VIEWER (pdf_viewers[0].short_name) + + + +static void +usage(void) +{ + int i; + int viewers = sizeof(pdf_viewers) / sizeof(pdf_viewers[0]); + + fprintf(stderr, "Usage: %s [-viewer <prog>] <file.pdf>\n", progname); + fprintf(stderr, "\tIf the PDF viewer <prog> is displaying <file.pdf>, " + "reload that file.\n"); + fprintf(stderr, "\tOtherwise call <prog> to display <file.pdf>.\n"); + fprintf(stderr, "\tThe default viewer program is %s.\n", DEFAULT_VIEWER); + fprintf(stderr, "\tImplemented viewers are"); + for (i = 0; i < viewers - 1; i++) + fprintf(stderr, " '%s'", pdf_viewers[i].short_name); + fprintf(stderr, " and '%s'.\n", pdf_viewers[viewers - 1].short_name); + fprintf(stderr, "\tThis is version %s of %s\n", VERSION, progname); +} + + + +/* + * Send one "command" to the given window. + * The command can be of these forms (for X an upper case letter or arrow + * key, such as "Left", and D one or more digits; see sendx.c): + * - Ctrl-X + * - Alt-X + * - Ctrl-Atl-X + * - Fn-FD + * - FOCUS-[IN|OUT] + * - <string> (not starting with any of the above prefixes) + * Allow other variations on the cases of "Ctrl" and "Alt". + * + * Return 0 on success, non-0 otherwise. + */ + +static int +send_command(const char * window_name, const char * reload_cmd) +{ + int alt_len, ctrl_len, ctrl_alt_len, fn_len, focus_len; + + if (!strcmp(reload_cmd, FORK_EXEC_CMD)) + return 999; + + ctrl_alt_len = strlen(CTRL_ALT); + if (!strncasecmp(CTRL_ALT, reload_cmd, ctrl_alt_len)) + return sendx_controlalt_token(reload_cmd + ctrl_alt_len, window_name); + + ctrl_len = strlen(CTRL); + if (!strncasecmp(CTRL, reload_cmd, ctrl_len)) + return sendx_control_token(reload_cmd + ctrl_len, window_name); + + alt_len = strlen(ALT); + if (!strncasecmp(ALT, reload_cmd, alt_len)) + return sendx_alt_token(reload_cmd + alt_len, window_name); + + fn_len = strlen(FN); + if (!strncasecmp(FN, reload_cmd, fn_len)) + return sendx_token(reload_cmd + fn_len, window_name); + + focus_len = strlen(FOCUS_IN); + if (!strncasecmp(FOCUS_IN, reload_cmd, focus_len)) + return set_focus(window_name); + + focus_len = strlen(FOCUS_OUT); + if (!strncasecmp(FOCUS_OUT, reload_cmd, focus_len)) + return reset_focus(); + + return sendx_string(reload_cmd, window_name); +} + + + +/* + * Try to reload the file, then if not successful to start up a new + * instance of the viewer program. + * Return 0 on success, non-0 otherwise. + */ + +static int +view_file(const char * filename, int viewer_index) +{ + char * window_name; + pid_t pid; + int success = 0; + pdf_viewer_t pdf_viewer = pdf_viewers[viewer_index]; + const char ** reload_cmds = pdf_viewer.reload_cmds; + + /* First try to reload the file */ + switch (pdf_viewers[viewer_index].method) + { + case USE_SENDX: + window_name = make_window_name(pdf_viewer.window_name_fmt, filename); + if (window_name == NULL) + return 99; + while (*reload_cmds) + { + /* + * Note: there is a race condition in the sendx.c code which + * can cause the program to crash and burn with a 'BadWindow' + * fault. This has been observed for AR8 (but not AR7, oddly) + * after the ^W causes AR8 to change the window name. It seems + * that Window_With_Name() tries to access a BadWindow within + * its recursive call. + * If this continues to be a problem, a usleep() may make the + * problem go away. + */ + success = ! send_command(window_name, *reload_cmds); + if (! success && reload_cmds != pdf_viewer.reload_cmds) + { + /* + * In some cases the window name might be changed because + * of the first command. + * For example, in AR7 the first command (^W) "closes" + * the document, and the window title changes to reflect + * the fact there is no document. So try that command with + * the "plain" window name. + */ + success = ! send_command(pdf_viewer.window_name, *reload_cmds); + } + if (! success) + break; + reload_cmds++; + } + break; + + case USE_FORK_EXEC: + return 2; /* TODO: someone who cares can put some code here */ + break; + + default: + fprintf(stderr, "%s: internal error: invalid reload_method. Sorry.\n", + progname); + return 99; + break; + } + + if (success) + return 0; + + /* + * No luck re-loading the file. + * (Try to) start a new instance of the viewer program. + */ + if ((pid = fork()) == 0) + { + const char * argv_list[2 * MAX_OPTIONS + 3]; + const char ** p; + int i = 0; + + argv_list[i++] = pdf_viewer.program_name; + for (p = pdf_viewer.exec_pre_options; *p;) + argv_list[i++] = *p++; + argv_list[i++] = filename; + for (p = pdf_viewer.exec_post_options; *p;) + argv_list[i++] = *p++; + argv_list[i++] = NULL; + if (execvp(pdf_viewer.program_name, (char **)argv_list)) + { + fprintf(stderr, "%s: %s startup failed\n", progname, + pdf_viewer.program_name); + return 5; + } + } + else if (pid < 0) + { + fprintf(stderr, "%s: fork() failed!?\n", progname); + return 10; + } + + return 0; +} + + + +int +main(int argc, char * argv[]) +{ + const char * viewer = pdf_viewers[0].short_name; + char * env_viewer; + int i; + int viewer_index = -1; + + progname = argv[0]; + + env_viewer = getenv("PDF_VIEWER"); + if (env_viewer != NULL) + viewer = env_viewer; + + if (argc == 4 && !strcmp(argv[1], "-viewer")) + { + viewer = argv[2]; + argc -= 2; + argv += 2; + } + + if (argc != 2) + { + fprintf(stderr, "%s: invalid number of arguments\n", progname); + usage(); + return EXIT_FAILURE; + } + + for (i = 0; i < sizeof(pdf_viewers) / sizeof(pdf_viewers[0]); i++) + { + if (!strcmp(pdf_viewers[i].short_name, viewer)) + { + viewer_index = i; + break; + } + } + + if (viewer_index < 0) + { + fprintf(stderr, "%s: Unknown PDF viewer '%s'\n", progname, viewer); + usage(); + + return EXIT_FAILURE; + } + + if (view_file(argv[1], viewer_index)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/Build/source/utils/xpdfopen/sendx.c b/Build/source/utils/xpdfopen/sendx.c new file mode 100644 index 00000000000..f97cfb59d5a --- /dev/null +++ b/Build/source/utils/xpdfopen/sendx.c @@ -0,0 +1,408 @@ +/* + * Modified by Jim Diamond (jim.diamond@acadiau.ca) April 24, 2010 + * to reset error_status to 0 at the beginning of open_channel(). + * + * Also replaced 0xfff with KeyPressMask and KeyReleaseMask (as + * appropriate) in sendx_channel(); otherwise (at least in Slackware64 13.0) + * the events also get sent to the terminal running pdfopen; this is a Bad + * Thing. + * + * Also added set_focus() and reset_focus() functions. + * NOTE: they do not work, at least under FVWM2 on Slackware64-13.0. + * They return success, but the focus never changes (or is reverted to the + * window containing the mouse before a call to sendx_token() can do its + * work). + */ + +#include <stdio.h> +#include <string.h> +#include <ctype.h> + +#include <X11/Xlib.h> +#include <X11/Xatom.h> +#include <X11/keysym.h> +#include <X11/cursorfont.h> + +#include "sendx.h" + +static char * display_name = NULL; +static Display * display; +static Window root; +static Window window = None; +static XKeyEvent event; + +static char error_message[256]; +static int error_status = 0; + + +static void +throw_exception3(const char * msg, const char * s, int i) +{ + sprintf(error_message, msg, s, i); + error_status = 1; +} + + +static void +throw_exception3s(const char * msg1, const char * msg2, const char * msg3) +{ + sprintf(error_message, msg1, msg2, msg3); + error_status = 1; +} + + +static void +throw_exception(const char * msg) +{ + strncpy(error_message, msg, 256); + error_status = 1; +} + + + +/* + * Added for window managers like swm and tvtwm that follow solbourne's + * virtual root window concept + */ +static Window +GetRootWindow(Display * disp, int scrn) +{ + Atom __SWM_VROOT = None; + Window root, rootReturn, parentReturn, * children; + unsigned int numChildren; + unsigned i; + + root = RootWindow(disp, scrn); + + /* + * see if there is a virtual root + */ + __SWM_VROOT = XInternAtom(disp, "__SWM_VROOT", False); + XQueryTree(disp, root, &rootReturn, &parentReturn, &children, &numChildren); + + for (i = 0; i < numChildren; i++) + { + Atom actual_type; + int actual_format; + unsigned long nitems, bytesafter; + unsigned char * prop_return = NULL; + + if (XGetWindowProperty(disp, children[i], __SWM_VROOT, 0, 1, + False, XA_WINDOW, &actual_type, &actual_format, + &nitems, &bytesafter, &prop_return) + == Success && prop_return) + { + root = *(Window *)prop_return; + break; + } + } + + if (children) + XFree((char *)children); + + return (root); +} + + + +/* + * [These functions are from the file "dsimple.c" used with xwininfo.] + * + * Written by Mark Lillibridge. Last updated 7/1/87 + * + * Window_With_Name: routine to locate a window with a given name on a + * display. If no window with the given name is found, 0 is returned. + * If more than one window has the given name, the first one found + * will be returned. Only top and its subwindows are looked at. + * Normally, top should be the Root Window. + */ + +static Window +Window_With_Name(Display * dpy, Window top, const char * name) +{ + Window * children, dummy; + unsigned int nchildren; + unsigned i; + Window w = 0; + char * window_name; + + if (XFetchName(dpy, top, &window_name) && !strcmp(window_name, name)) + return (top); + + if (!XQueryTree(dpy, top, &dummy, &dummy, &children, &nchildren)) + return (0); + + for (i = 0; i < nchildren; i++) + { + w = Window_With_Name(dpy, children[i], name); + if (w) + break; + } + + if (children) + XFree((char *)children); + + return (w); +} + + + +static int +open_channel(const char * wname) +{ + /* + * display_name = ":0.0"; + */ + + error_status = 0; + + if ((display = XOpenDisplay(display_name)) == NULL) + { + throw_exception("can't open display"); + return 1; + } + + if ((root = GetRootWindow(display, DefaultScreen(display))) == 0) + { + throw_exception("Cannot get DefaultScreen"); + return 1; + } + + if ((wname[0] == '\0') && (window != None)) + { + } /* take selected window */ + else if (wname[0] != '\0') + { + if ((window = Window_With_Name(display, root, wname)) == None) + { + throw_exception3s("Display %s: can't open window named \"%s\"", + XDisplayName(display_name), wname); + return 1; + } + } + else + { + throw_exception3("bad condition in %s at line %d", __FILE__, __LINE__); + return 1; + } + + event.type = KeyPress; + event.serial = 0; + event.send_event = False; + event.display = display; + event.x = event.y = event.x_root = event.y_root = 0; + event.time = CurrentTime; + event.same_screen = True; + event.subwindow = None; + event.window = window; + event.root = root; + + return 0; +} + + + +static void +close_channel(void) +{ + /* + * XFlush(display); + */ + XCloseDisplay(display); +} + + + +static void +sendx_channel(KeySym ks, int km) +{ + /* + * km: 0=regular, 1=shift, 2=lock, 4=control + */ + if (ks < 256) + { + event.state = isupper((char)ks); + switch (ks) + { + case 0x08: + ks = XK_BackSpace; + break; + case 0x09: + ks = XK_Tab; + break; + case 0x0A: + ks = XK_Linefeed; + break; + case 0x0B: + ks = XK_Clear; + break; + case 0x0D: + ks = XK_Return; + break; + case 0x13: + ks = XK_Pause; + break; + case 0x14: + ks = XK_Scroll_Lock; + break; + case 0x1B: + ks = XK_Escape; + break; + } + } + else + event.state = 0; + + event.type = KeyPress; + event.state = km; // Mod1Mask + event.keycode = XKeysymToKeycode(display, ks); + + if (XSendEvent(display, window, True, KeyPressMask, (XEvent *)&event) == 0) + throw_exception("Error in XSendEvent"); + + event.type = KeyRelease; + if (XSendEvent(display, window, True, KeyReleaseMask, (XEvent *)&event) + == 0) + throw_exception("Error in XSendEvent"); + + return; +} + + + +int +sendx_string(const char * string, const char * window) +{ + const char * p; + + if (open_channel(window)) + return error_status; + + p = string; + while (*p) + sendx_channel(*p++, 0); + close_channel(); + + return error_status; +} + + + +int +sendx_token(const char * string, const char * window) +{ + if (open_channel(window)) + return error_status; + + sendx_channel(XStringToKeysym(string), 0); + close_channel(); + + return error_status; +} + + + +int +sendx_alt_token(const char * string, const char * window) +{ + if (open_channel(window)) + return error_status; + + sendx_channel(XStringToKeysym(string), Mod1Mask); + close_channel(); + + return error_status; +} + + + +int +sendx_controlalt_token(const char * string, const char * window) +{ + if (open_channel(window)) + return error_status; + + sendx_channel(XStringToKeysym(string), Mod1Mask | ControlMask); + close_channel(); + + return error_status; +} + + + +int +sendx_control_token(const char * string, const char * window) +{ + if (open_channel(window)) + return error_status; + + sendx_channel(XStringToKeysym(string), ControlMask); + close_channel(); + + return error_status; +} + + + + +static Window previous_window; +static int previous_window_set = 0; +static int revert_to; + +/* + * Attempt to give focus to the given window. + * Return 0 on success, non-0 on failure. + * Record the previous window for reset_focus() on success. + */ + +int +set_focus(const char * wname) +{ + if ((display = XOpenDisplay(display_name)) == NULL) + { + throw_exception("can't open display"); + return 1; + } + + if ((root = GetRootWindow(display, DefaultScreen(display))) == 0) + { + throw_exception("Cannot get DefaultScreen"); + return 1; + } + + (void)XGetInputFocus(display, &previous_window, &revert_to); + if (XSetInputFocus(display, Window_With_Name(display, root, wname), + previous_window, CurrentTime)) + { + previous_window_set = 1; + return 0; + } + + throw_exception3s("Display %s: can't focus window named \"%s\"", + XDisplayName(display_name), wname); + return 1; +} + + + +int +reset_focus(void) +{ + if (previous_window_set) + { + XSetInputFocus(display, previous_window, revert_to, CurrentTime); + previous_window_set = 0; + return 0; + } + + throw_exception("reset_focus() called when previous window not saved"); + return 1; +} + + + +/* + * void PrintKeySyms () { int i; for (i = 32; i < 127; i++) { printf ("%s[%c] + * ", XKeysymToString (i), i); } for (i = 128 + 32; i < 128 + 127; i++) { + * printf ("%s[%c] ", XKeysymToString (i), i); } printf ("\n"); } + */ diff --git a/Build/source/utils/xpdfopen/sendx.h b/Build/source/utils/xpdfopen/sendx.h new file mode 100644 index 00000000000..569a33f9494 --- /dev/null +++ b/Build/source/utils/xpdfopen/sendx.h @@ -0,0 +1,19 @@ +/* + * sendx.h: declare prototypes for functions defined in sendx.c + * + * Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org> + * You may freely use, modify and/or distribute this file. + */ + +#ifndef SENDX_H +#define SENDX_H + +extern int sendx_string(const char * string, const char * wname); +extern int sendx_token(const char * string, const char * wname); +extern int sendx_alt_token(const char * string, const char * wname); +extern int sendx_controlalt_token(const char * string, const char * wname); +extern int sendx_control_token(const char * string, const char * wname); +extern int set_focus(const char * wname); +extern int reset_focus(void); + +#endif diff --git a/Build/source/utils/xpdfopen/utils.c b/Build/source/utils/xpdfopen/utils.c new file mode 100644 index 00000000000..a75be79a02e --- /dev/null +++ b/Build/source/utils/xpdfopen/utils.c @@ -0,0 +1,46 @@ +/* + * utils.c: Items common to pdfopen and pdfclose. + * + * Copyright (C) 2010 Jim Diamond <jim.diamond@acadiau.ca> + * You may freely use, modify and/or distribute this file. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "utils.h" +#include "xpdfopen.h" + +extern char * progname; + +/* + * Allocate memory and create a window name. + * Return a pointer to the new string or NULL on failure. + * + * The caller is responsible for free()ing the memory allocated here. + * + * Note: acroread (at least AR 7, 8, 9) uses only the basename in the + * window title. + * xpdf uses the whole file name. + * Other PDF viewers may need other treatment. + */ + +char * +make_window_name(const char * fmt, const char * filename) +{ + char * window_name; + const char * title_name; + + title_name = filename; + if (strrchr(title_name, '/') != NULL + && strncasecmp(fmt, XPDF_WIN_NAME, strlen(XPDF_WIN_NAME))) + title_name = strrchr(title_name, '/') + 1; + + window_name = malloc(strlen(fmt) + strlen(title_name) + 1); + if (window_name != NULL) + sprintf(window_name, fmt, title_name); + else + fprintf(stderr, "%s: out of memory\n", progname); + + return window_name; +} diff --git a/Build/source/utils/xpdfopen/utils.h b/Build/source/utils/xpdfopen/utils.h new file mode 100644 index 00000000000..2eae6e88bf3 --- /dev/null +++ b/Build/source/utils/xpdfopen/utils.h @@ -0,0 +1,13 @@ +/* + * utils.h: declare prototypes for functions defined in utils.c + * + * Copyright (C) 2010 Jim Diamond <jim.diamond@acadiau.ca> + * You may freely use, modify and/or distribute this file. + */ + +#ifndef UTILS_H +#define UTILS_H + +char * make_window_name(const char * fmt, const char * basename); + +#endif diff --git a/Build/source/utils/xpdfopen/xpdfopen.h b/Build/source/utils/xpdfopen/xpdfopen.h new file mode 100644 index 00000000000..7430edc4229 --- /dev/null +++ b/Build/source/utils/xpdfopen/xpdfopen.h @@ -0,0 +1,36 @@ +/* + * xpdfopen.h: declare constants of possible use for xpdfopen programs. + * + * Copyright (C) 2010 Jim Diamond <jim.diamond@acadiau.ca> + * + * You may freely use, modify and/or distribute this file. + */ + +#ifndef XPDFOPEN_H +#define XPDFOPEN_H + +/* + * <prog>_WIN_NAME is the name of the window when no file is open. + * <prog>_WIN_NAME_FMT is the (sprintf) format to generate the name + * when a file is being displayed. + */ + +#define AR5_WIN_NAME "Acrobat Reader" /* Is this correct? */ +#define AR5_WIN_NAME_FMT "%s" /* Is this correct? */ + +#define AR7_WIN_NAME "Adobe Reader" +#define AR7_WIN_NAME_FMT AR7_WIN_NAME " - %s" + +#define AR8_WIN_NAME "Adobe Reader" +#define AR8_WIN_NAME_FMT "%s - " AR8_WIN_NAME + +#define AR9_WIN_NAME "Adobe Reader" +#define AR9_WIN_NAME_FMT "%s - " AR9_WIN_NAME + +#define XPDF_WIN_NAME "Xpdf" +#define XPDF_WIN_NAME_FMT XPDF_WIN_NAME ": %s" + +#define OKULAR_WIN_NAME "Okular" +#define OKULAR_WIN_NAME_FMT "%s - " OKULAR_WIN_NAME + +#endif diff --git a/Build/source/utils/pdfopen/xpdfopen.pdf b/Build/source/utils/xpdfopen/xpdfopen.pdf Binary files differindex fe41c8352ae..fe41c8352ae 100644 --- a/Build/source/utils/pdfopen/xpdfopen.pdf +++ b/Build/source/utils/xpdfopen/xpdfopen.pdf diff --git a/Build/source/utils/pdfopen/xpdfopen.tex b/Build/source/utils/xpdfopen/xpdfopen.tex index d0348f622da..d0348f622da 100644 --- a/Build/source/utils/pdfopen/xpdfopen.tex +++ b/Build/source/utils/xpdfopen/xpdfopen.tex |