diff options
Diffstat (limited to 'Master')
168 files changed, 4126 insertions, 260 deletions
diff --git a/Master/bin/sparc-linux/afm2pl b/Master/bin/sparc-linux/afm2pl Binary files differindex f9fd674c715..6945fe6a9f3 100755 --- a/Master/bin/sparc-linux/afm2pl +++ b/Master/bin/sparc-linux/afm2pl diff --git a/Master/bin/sparc-linux/afm2tfm b/Master/bin/sparc-linux/afm2tfm Binary files differindex c4a637605a4..9267c253067 100755 --- a/Master/bin/sparc-linux/afm2tfm +++ b/Master/bin/sparc-linux/afm2tfm diff --git a/Master/bin/sparc-linux/aleph b/Master/bin/sparc-linux/aleph Binary files differindex 8d17ca4e28f..0ff8b1f288c 100755 --- a/Master/bin/sparc-linux/aleph +++ b/Master/bin/sparc-linux/aleph diff --git a/Master/bin/sparc-linux/bg5conv b/Master/bin/sparc-linux/bg5conv Binary files differindex 136024c15d3..26c2726269a 100755 --- a/Master/bin/sparc-linux/bg5conv +++ b/Master/bin/sparc-linux/bg5conv diff --git a/Master/bin/sparc-linux/bg5latex b/Master/bin/sparc-linux/bg5latex index b9a36fa844c..257a8446e21 100755 --- a/Master/bin/sparc-linux/bg5latex +++ b/Master/bin/sparc-linux/bg5latex @@ -1,5 +1,22 @@ #! /bin/sh +# Copyright (C) 1994-2006 Werner Lemberg <wl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + n=1 argv= diff --git a/Master/bin/sparc-linux/bg5pdflatex b/Master/bin/sparc-linux/bg5pdflatex index f65d86d5417..80adc376a93 100755 --- a/Master/bin/sparc-linux/bg5pdflatex +++ b/Master/bin/sparc-linux/bg5pdflatex @@ -1,5 +1,22 @@ #! /bin/sh +# Copyright (C) 1994-2006 Werner Lemberg <wl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + n=1 argv= diff --git a/Master/bin/sparc-linux/bibtex b/Master/bin/sparc-linux/bibtex Binary files differindex 5234e946f26..a0ead30fb06 100755 --- a/Master/bin/sparc-linux/bibtex +++ b/Master/bin/sparc-linux/bibtex diff --git a/Master/bin/sparc-linux/bibtex8 b/Master/bin/sparc-linux/bibtex8 Binary files differindex 13a41e37f75..b334b07dc0b 100755 --- a/Master/bin/sparc-linux/bibtex8 +++ b/Master/bin/sparc-linux/bibtex8 diff --git a/Master/bin/sparc-linux/cef5conv b/Master/bin/sparc-linux/cef5conv Binary files differindex 12486907434..4d58991c527 100755 --- a/Master/bin/sparc-linux/cef5conv +++ b/Master/bin/sparc-linux/cef5conv diff --git a/Master/bin/sparc-linux/cef5latex b/Master/bin/sparc-linux/cef5latex index b8917c1cd26..7eda1633766 100755 --- a/Master/bin/sparc-linux/cef5latex +++ b/Master/bin/sparc-linux/cef5latex @@ -1,5 +1,22 @@ #! /bin/sh +# Copyright (C) 1994-2006 Werner Lemberg <wl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + n=1 argv= diff --git a/Master/bin/sparc-linux/cef5pdflatex b/Master/bin/sparc-linux/cef5pdflatex index bd398e0240c..25fe066a53f 100755 --- a/Master/bin/sparc-linux/cef5pdflatex +++ b/Master/bin/sparc-linux/cef5pdflatex @@ -1,5 +1,22 @@ #! /bin/sh +# Copyright (C) 1994-2006 Werner Lemberg <wl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + n=1 argv= diff --git a/Master/bin/sparc-linux/cefconv b/Master/bin/sparc-linux/cefconv Binary files differindex ad199e5caf0..67986f76ef1 100755 --- a/Master/bin/sparc-linux/cefconv +++ b/Master/bin/sparc-linux/cefconv diff --git a/Master/bin/sparc-linux/ceflatex b/Master/bin/sparc-linux/ceflatex index 50c5be54fd9..d34244d9a5b 100755 --- a/Master/bin/sparc-linux/ceflatex +++ b/Master/bin/sparc-linux/ceflatex @@ -1,5 +1,22 @@ #! /bin/sh +# Copyright (C) 1994-2006 Werner Lemberg <wl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + n=1 argv= diff --git a/Master/bin/sparc-linux/cefpdflatex b/Master/bin/sparc-linux/cefpdflatex index 0615149c5b9..4c7309f2bf2 100755 --- a/Master/bin/sparc-linux/cefpdflatex +++ b/Master/bin/sparc-linux/cefpdflatex @@ -1,5 +1,22 @@ #! /bin/sh +# Copyright (C) 1994-2006 Werner Lemberg <wl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + n=1 argv= diff --git a/Master/bin/sparc-linux/cefsconv b/Master/bin/sparc-linux/cefsconv Binary files differindex f9c55711ed1..c14ad4c7dfa 100755 --- a/Master/bin/sparc-linux/cefsconv +++ b/Master/bin/sparc-linux/cefsconv diff --git a/Master/bin/sparc-linux/cefslatex b/Master/bin/sparc-linux/cefslatex index fb2944ceda7..619d08c7577 100755 --- a/Master/bin/sparc-linux/cefslatex +++ b/Master/bin/sparc-linux/cefslatex @@ -1,5 +1,22 @@ #! /bin/sh +# Copyright (C) 1994-2006 Werner Lemberg <wl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + n=1 argv= diff --git a/Master/bin/sparc-linux/cefspdflatex b/Master/bin/sparc-linux/cefspdflatex index 1985eebe5c8..02bf6598f71 100755 --- a/Master/bin/sparc-linux/cefspdflatex +++ b/Master/bin/sparc-linux/cefspdflatex @@ -1,5 +1,22 @@ #! /bin/sh +# Copyright (C) 1994-2006 Werner Lemberg <wl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + n=1 argv= diff --git a/Master/bin/sparc-linux/cfftot1 b/Master/bin/sparc-linux/cfftot1 Binary files differindex f4eb11842ba..5ea949e8aee 100755 --- a/Master/bin/sparc-linux/cfftot1 +++ b/Master/bin/sparc-linux/cfftot1 diff --git a/Master/bin/sparc-linux/ctangle b/Master/bin/sparc-linux/ctangle Binary files differindex 71268a83843..ed94d3f4293 100755 --- a/Master/bin/sparc-linux/ctangle +++ b/Master/bin/sparc-linux/ctangle diff --git a/Master/bin/sparc-linux/ctie b/Master/bin/sparc-linux/ctie Binary files differindex aaeffe2fe70..3d644a07a35 100755 --- a/Master/bin/sparc-linux/ctie +++ b/Master/bin/sparc-linux/ctie diff --git a/Master/bin/sparc-linux/ctxtools b/Master/bin/sparc-linux/ctxtools new file mode 100755 index 00000000000..84e47bbee3c --- /dev/null +++ b/Master/bin/sparc-linux/ctxtools @@ -0,0 +1,2 @@ +#!/bin/sh +texmfstart ctxtools.rb "$@" diff --git a/Master/bin/sparc-linux/cweave b/Master/bin/sparc-linux/cweave Binary files differindex 9722f064454..13ded47c0ab 100755 --- a/Master/bin/sparc-linux/cweave +++ b/Master/bin/sparc-linux/cweave diff --git a/Master/bin/sparc-linux/detex b/Master/bin/sparc-linux/detex Binary files differindex 4a895678aee..ca465e08e5b 100755 --- a/Master/bin/sparc-linux/detex +++ b/Master/bin/sparc-linux/detex diff --git a/Master/bin/sparc-linux/devnag b/Master/bin/sparc-linux/devnag Binary files differindex 474e9d30e93..76b029d038b 100755 --- a/Master/bin/sparc-linux/devnag +++ b/Master/bin/sparc-linux/devnag diff --git a/Master/bin/sparc-linux/disdvi b/Master/bin/sparc-linux/disdvi Binary files differindex c3e6ef5c1f6..1320b927888 100755 --- a/Master/bin/sparc-linux/disdvi +++ b/Master/bin/sparc-linux/disdvi diff --git a/Master/bin/sparc-linux/dmp b/Master/bin/sparc-linux/dmp Binary files differindex 8739b55b4a2..3946f6e29c6 100755 --- a/Master/bin/sparc-linux/dmp +++ b/Master/bin/sparc-linux/dmp diff --git a/Master/bin/sparc-linux/dt2dv b/Master/bin/sparc-linux/dt2dv Binary files differindex e7cc28dd167..e79567b68f9 100755 --- a/Master/bin/sparc-linux/dt2dv +++ b/Master/bin/sparc-linux/dt2dv diff --git a/Master/bin/sparc-linux/dv2dt b/Master/bin/sparc-linux/dv2dt Binary files differindex 76e96a0b5ea..0f7d4659186 100755 --- a/Master/bin/sparc-linux/dv2dt +++ b/Master/bin/sparc-linux/dv2dt diff --git a/Master/bin/sparc-linux/dvi2tty b/Master/bin/sparc-linux/dvi2tty Binary files differindex c5df11ca135..66b22068c30 100755 --- a/Master/bin/sparc-linux/dvi2tty +++ b/Master/bin/sparc-linux/dvi2tty diff --git a/Master/bin/sparc-linux/dvibook b/Master/bin/sparc-linux/dvibook Binary files differindex cb207fbe5f7..eb7c50cd346 100755 --- a/Master/bin/sparc-linux/dvibook +++ b/Master/bin/sparc-linux/dvibook diff --git a/Master/bin/sparc-linux/dviconcat b/Master/bin/sparc-linux/dviconcat Binary files differindex 7a5edcba862..ed6d96443c9 100755 --- a/Master/bin/sparc-linux/dviconcat +++ b/Master/bin/sparc-linux/dviconcat diff --git a/Master/bin/sparc-linux/dvicopy b/Master/bin/sparc-linux/dvicopy Binary files differindex 8acb6a30f95..1417ee22c99 100755 --- a/Master/bin/sparc-linux/dvicopy +++ b/Master/bin/sparc-linux/dvicopy diff --git a/Master/bin/sparc-linux/dvidvi b/Master/bin/sparc-linux/dvidvi Binary files differindex afaf77f5c01..104a1152d61 100755 --- a/Master/bin/sparc-linux/dvidvi +++ b/Master/bin/sparc-linux/dvidvi diff --git a/Master/bin/sparc-linux/dvigif b/Master/bin/sparc-linux/dvigif deleted file mode 120000 index c1eef0afe05..00000000000 --- a/Master/bin/sparc-linux/dvigif +++ /dev/null @@ -1 +0,0 @@ -dvipng
\ No newline at end of file diff --git a/Master/bin/sparc-linux/dvilj b/Master/bin/sparc-linux/dvilj Binary files differindex 53d7a74d068..059d11d0e10 100755 --- a/Master/bin/sparc-linux/dvilj +++ b/Master/bin/sparc-linux/dvilj diff --git a/Master/bin/sparc-linux/dvilj2p b/Master/bin/sparc-linux/dvilj2p Binary files differindex 099ff020dde..c8c3fd2cb75 100755 --- a/Master/bin/sparc-linux/dvilj2p +++ b/Master/bin/sparc-linux/dvilj2p diff --git a/Master/bin/sparc-linux/dvilj4 b/Master/bin/sparc-linux/dvilj4 Binary files differindex 6082916df85..4e3bb821a20 100755 --- a/Master/bin/sparc-linux/dvilj4 +++ b/Master/bin/sparc-linux/dvilj4 diff --git a/Master/bin/sparc-linux/dvilj4l b/Master/bin/sparc-linux/dvilj4l Binary files differindex 1f68e54d16a..011e3fa3cc7 100755 --- a/Master/bin/sparc-linux/dvilj4l +++ b/Master/bin/sparc-linux/dvilj4l diff --git a/Master/bin/sparc-linux/dvipdfm b/Master/bin/sparc-linux/dvipdfm Binary files differindex b88c54cca15..198364a4b80 100755 --- a/Master/bin/sparc-linux/dvipdfm +++ b/Master/bin/sparc-linux/dvipdfm diff --git a/Master/bin/sparc-linux/dvipdfmx b/Master/bin/sparc-linux/dvipdfmx Binary files differindex a6725b7eed2..7466e79126a 100755 --- a/Master/bin/sparc-linux/dvipdfmx +++ b/Master/bin/sparc-linux/dvipdfmx diff --git a/Master/bin/sparc-linux/dvipng b/Master/bin/sparc-linux/dvipng Binary files differindex 7f314d550be..b37909719ba 100755 --- a/Master/bin/sparc-linux/dvipng +++ b/Master/bin/sparc-linux/dvipng diff --git a/Master/bin/sparc-linux/dvips b/Master/bin/sparc-linux/dvips Binary files differindex dafcbc5af11..446150a4571 100755 --- a/Master/bin/sparc-linux/dvips +++ b/Master/bin/sparc-linux/dvips diff --git a/Master/bin/sparc-linux/dviselect b/Master/bin/sparc-linux/dviselect Binary files differindex f0723b09176..064cd6bc498 100755 --- a/Master/bin/sparc-linux/dviselect +++ b/Master/bin/sparc-linux/dviselect diff --git a/Master/bin/sparc-linux/dvitodvi b/Master/bin/sparc-linux/dvitodvi Binary files differindex 2c75defade2..9ec08e82282 100755 --- a/Master/bin/sparc-linux/dvitodvi +++ b/Master/bin/sparc-linux/dvitodvi diff --git a/Master/bin/sparc-linux/dvitomp b/Master/bin/sparc-linux/dvitomp Binary files differindex b8749211be2..e7b575e49d2 100755 --- a/Master/bin/sparc-linux/dvitomp +++ b/Master/bin/sparc-linux/dvitomp diff --git a/Master/bin/sparc-linux/dvitype b/Master/bin/sparc-linux/dvitype Binary files differindex 9cc647f3db4..b6d2017d814 100755 --- a/Master/bin/sparc-linux/dvitype +++ b/Master/bin/sparc-linux/dvitype diff --git a/Master/bin/sparc-linux/ebb b/Master/bin/sparc-linux/ebb Binary files differindex 3d555a28551..a6b8f330544 100755 --- a/Master/bin/sparc-linux/ebb +++ b/Master/bin/sparc-linux/ebb diff --git a/Master/bin/sparc-linux/epsffit b/Master/bin/sparc-linux/epsffit Binary files differindex 2b5669f94c9..fb20f2f0081 100755 --- a/Master/bin/sparc-linux/epsffit +++ b/Master/bin/sparc-linux/epsffit diff --git a/Master/bin/sparc-linux/exatools b/Master/bin/sparc-linux/exatools new file mode 100755 index 00000000000..50ff0f07e46 --- /dev/null +++ b/Master/bin/sparc-linux/exatools @@ -0,0 +1,2 @@ +#!/bin/sh +texmfstart exatools.rb "$@" diff --git a/Master/bin/sparc-linux/extconv b/Master/bin/sparc-linux/extconv Binary files differindex 8868fd81f76..7ea27c4833e 100755 --- a/Master/bin/sparc-linux/extconv +++ b/Master/bin/sparc-linux/extconv diff --git a/Master/bin/sparc-linux/fmtutil b/Master/bin/sparc-linux/fmtutil index c8daaf8e112..e061f4f20af 100755 --- a/Master/bin/sparc-linux/fmtutil +++ b/Master/bin/sparc-linux/fmtutil @@ -29,6 +29,7 @@ ############################################################################### # program history: # Fr Apr 8 19:15:05 CEST 2005 cleanup now has an argument for the return code +# Do Mar 02 10:42:31 CET 2006 add tmpdir to TEXFORMATS # So Mär 27 18:52:06 CEST 2005 honor $TMPDIR, $TEMP and $TMP, not just $TMP # Sa Jan 15 18:13:46 CET 2005 avoid multiple variable assignments in one statement # Di Jan 11 11:42:36 CET 2005 fix --byhyphen with relative hyphenfile @@ -517,6 +518,10 @@ main() # due to KPSE_DOT, we don't search the current directory, so include # it explicitly for formats that \write and later on \read TEXINPUTS="$tmpdir:$TEXINPUTS"; export TEXINPUTS + # for formats that load other formats (e.g., jadetex loads latex.fmt), + # add the current directory to TEXFORMATS, too. Currently unnecessary + # for MFBASES and MPMEMS. + TEXFORMATS="$tmpdir:$TEXFORMATS"; export TEXFORMATS setupTmpDir cd "$tmpdir" || cleanup 1 diff --git a/Master/bin/sparc-linux/gbklatex b/Master/bin/sparc-linux/gbklatex index c7fcf7f13bc..f799f7b6e63 100755 --- a/Master/bin/sparc-linux/gbklatex +++ b/Master/bin/sparc-linux/gbklatex @@ -1,5 +1,22 @@ #! /bin/sh +# Copyright (C) 1994-2006 Werner Lemberg <wl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + n=1 argv= diff --git a/Master/bin/sparc-linux/gbkpdflatex b/Master/bin/sparc-linux/gbkpdflatex index 6cdb3cfee51..6dd3ee3de9e 100755 --- a/Master/bin/sparc-linux/gbkpdflatex +++ b/Master/bin/sparc-linux/gbkpdflatex @@ -1,5 +1,22 @@ #! /bin/sh +# Copyright (C) 1994-2006 Werner Lemberg <wl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + n=1 argv= diff --git a/Master/bin/sparc-linux/getnonfreefonts b/Master/bin/sparc-linux/getnonfreefonts index 21dd7a0fff8..41f628becc0 100755 --- a/Master/bin/sparc-linux/getnonfreefonts +++ b/Master/bin/sparc-linux/getnonfreefonts @@ -1,7 +1,7 @@ -#!/bin/sh +#!/usr/bin/env perl ## getnonfreefonts -## Copyright 2005 Reinhard Kotucha <reinhard.kotucha@web.de> +## Copyright 2006 Reinhard Kotucha <reinhard.kotucha@web.de> # # This work may be distributed and/or modified under the # conditions of the LaTeX Project Public License, either version 1.3 @@ -11,156 +11,280 @@ # # The current maintainer is Reinhard Kotucha. +my $TL_version='2006'; -# invoke the right shell (code from Thomas Esser): -test -f /bin/ksh && test -z "$RUNNING_KSH" \ - && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \ - && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; } -unset RUNNING_KSH - -test -f /bin/bsh && test -z "$RUNNING_BSH" \ - && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \ - && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; } -unset RUNNING_BSH - - -URL="${URL-ftp://tug.org/tex/getnonfreefonts/getfont}" - -die () { echo "$1." 1>&2; exit 1; } - -OLDIFS=$IFS -IFS=: -BINDIRS=`echo $PATH` -IFS=$OLDIFS - -for BINDIR in $BINDIRS; do - if test "$BINDIR" != "."; then - for FTP_CLIENT in wget lftp ncftpget curl snarf gftp; do - test -x $BINDIR/$FTP_CLIENT && FTP=$FTP_CLIENT && break - done - fi -done - -test -n "$FTP" || die "No ftp client found" - -export FTP - -case $0 in - *-sys) SYS=true; GETFONT=getfont-sys;; - *) SYS=false; GETFONT=getfont;; -esac -export SYS GETFONT - -ALL=true -RUNSHELL=false - -ARGS_FROM_GETNONFREEFONTS="$@" -export ARGS_FROM_GETNONFREEFONTS - -for ARG in "$@"; do - case $ARG in - -*) - case $ARG in - -shell|--shell) RUNSHELL=true;; - -ftp-client=*|--ftp-client=*) - FTP=`echo "$ARG" | sed 's/.*=//'`;; - -url=*|--url=*) - URL=`echo "$ARG" | sed 's/.*=//'`;; - -h|-help|--help) ALL=false;; - esac;; - *) ALL=false;; - esac -done - -export URL - -tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/getnonfreefonts.$$ -(umask 077; mkdir "${tmpdir}") || die "Can't mkdir ${tmpdir}" -trap 'rm -rf ${tmpdir}' 0 1 2 3 7 13 15 - -download () { - echo "Downloading: $1" - case ${FTP} in - wget) wget "$1" || die "$1: Download failed";; - lftp) lftp -c "get $1" || die "$1: Download failed";; - ncftpget) ncftpget "$1" || die "$1: Download failed";; - curl) curl -O "$1" || die "$1: Download failed";; - snarf) snarf "$1" || die "$1: Download failed";; - gftp) gftp -d "$1" || die "$1: Download failed";; - *) die "This can't happen";; - esac +my $getfont_url="ftp://tug.org/tex/getnonfreefonts/getfont$TL_version"; + +use File::Copy; +use Getopt::Long; +$Getopt::Long::autoabbrev=0; + +$opt_lsfonts=0; +$opt_force=0; + +sub usage { + print <<'EOF'; +Usage: + getnonfreefonts[-sys] [-a|--all] [-d|--debug] [-f|--force] + [-l|--lsfonts] [-v|--verbose] [--version] [font1] [font2] ... + + getnonfreefonts installs fonts in $TEXMFHOME. + getnonfreefonts-sys installs fonts in $TEXMFLOCAL. + + Options: + -a|--all Install all fonts. + + -d|--debug Provide additional messages for debugging. + + -f|--force Install fonts even if they are installed already. + + -h|--help Print this message. + + -l|--lsfonts List all fonts available. + + -v|--verbose Be more verbose. + + --version Print version number. + +EOF +; +} + +unless (@ARGV) { + usage; + exit 1; +} + +GetOptions + "all|a", + "debug|d", + "force|f", + "help|h", + "lsfonts|l", + "verbose|v", + "version", + "sys"; + +$^W=1 if $opt_debug; + +my $sys=($0=~/-sys$/)? 1:0; +$sys=1 if $opt_sys; + +@allpackages=@ARGV; + +sub message { + my $message=shift; + if ($message=~/^\[/) { + print "$message\n"; + } else { + printf "%-60s", $message; + } +} + + +sub debug_msg { + my $message=shift; + if ($opt_debug) { + print STDERR "DEBUG: $message.\n"; + } +} + + +sub expand_var { + my $var=shift; + + if (-d "/usr/bin") { + open KPSEWHICH, 'kpsewhich --expand-var=\$' . "$var |"; + } else { + open KPSEWHICH, 'kpsewhich --expand-var=$' . "$var |"; + } + while (<KPSEWHICH>) { + chop; + return $_; + } + close KPSEWHICH; +} + + + +# get TMP|TEMP|TMPDIR environment variable + +if ($opt_debug) { + for my $var ("TMP","TEMP","TMPDIR") { + if (defined $ENV{$var}) { + debug_msg "Environment variable $var='$ENV{$var}'"; + } else { + debug_msg "Environment variable $var not set"; + } + } } -cd "${tmpdir}" || die "Can't cd ${tmpdir}" - -echo ------------------------------------------------------- -echo "FTP client: ${FTP}" -echo "Temporary dir: ${tmpdir}" -echo "URL: ${URL}" -echo ------------------------------------------------------- - -download ${URL} - -chmod 700 getfont -ln -s getfont getfont-sys -PATH=${tmpdir}:${PATH} -export PATH - -UPDMAP_NEEDED=false - -if ${RUNSHELL}; then - if ${SYS}; then - PS1='[getfont-sys]\$ ' - else - PS1='[getfont]\$ ' - fi - export PS1 - echo ------------------------------------------------------- - echo "FTP client: ${FTP}" - echo "Temporary dir: ${tmpdir}" - echo "URL: ${URL}" - echo "SYS: ${SYS}" - echo "ARGS: ${ARGS_FROM_GETNONFREEFONTS}" - echo ------------------------------------------------------- - echo "Run program \"getfont\" or \"getfont-sys\" for each font you want to install." - echo; echo "Supported fonts are:" - for f in `getfont --lsfonts`; do - echo " $f" - done - echo; echo "Type \"getfont --help\" for more information." - echo "Type \"exit\" to leave this shell."; echo - -# Start the shell. We start a shell even if someone has -# SHELL=/sbin/shutdown in his environment. - - test -z ${SHELL} || SHELL="/bin/sh" - case ${SHELL} in - /bin/bash) /bin/bash;; - /bin/ksh) /bin/ksh;; - /bin/ksh) /bin/ksh;; - *) /bin/sh;; - esac - - echo "Please run \"updmap\" or \"updmap-sys\" now if necessary." -else # no shell - if ${ALL} ; then - for font in `getfont --lsfonts`; do - ${GETFONT} ${ARGS_FROM_GETNONFREEFONTS} ${font} && UPDMAP_NEEDED=true - done - else - ${GETFONT} ${ARGS_FROM_GETNONFREEFONTS} && UPDMAP_NEEDED=true - fi - - if ${UPDMAP_NEEDED}; then - if ${SYS}; then - updmap-sys - else - updmap - fi - fi -fi - -cd / -rm -rf "${tmpdir}" - -exit 0 +print "$TL_version\n" and exit 0 if $opt_version; + + +if (defined $ENV{'TMP'}) { + $SYSTMP="$ENV{'TMP'}"; +} elsif (defined $ENV{'TEMP'}) { + $SYSTMP="$ENV{'TEMP'}"; +} elsif (defined $ENV{'TMPDIR'}) { + $SYSTMP="$ENV{'TMPDIR'}"; +} else { + $SYSTMP="/tmp"; +} + +debug_msg "Internal variable SYSTMP set to '$SYSTMP'"; + +# Windows usually uses backslashes though forward slashes are probably +# allowed. Perl always needs forward slashes. + +# We convert backslashes to forward slashes if it looks like a Windows +# directory. +$SYSTMP=~s/\\/\//g if ($SYSTMP=~/^.:\\/); # c:\abc\def +$SYSTMP=~s/\\/\//g if ($SYSTMP=~/^\\\\/); # \\abc\def + +debug_msg "Internal variable SYSTMP converted to '$SYSTMP'"; + +die "! ERROR: The temporary directory '$SYSTMP' doesn't exist.\n" + unless (-d "$SYSTMP"); + +die "! ERROR: The temporary directory '$SYSTMP' is not writable.\n" + unless (-w "$SYSTMP"); + + +# Determine INSTALLROOT. + +if ($opt_debug) { + my @path=split ':', $ENV{PATH}; + for my $dir (@path) { + debug_msg "Search for kpsewhich in '$dir'"; + opendir DIR, "$dir"; + my @kpsewichs=grep /^kpsewhich/, readdir DIR; + closedir DIR; + for (@kpsewichs) { + debug_msg "Found $dir/$_" if /^kpsewhich/; + } + } +} + + +if ($sys) { + $INSTALLROOT=expand_var 'TEXMFLOCAL'; +} else { + $INSTALLROOT=expand_var 'TEXMFHOME'; +} + +($sys)? debug_msg "sys=true":debug_msg "sys=false"; + +debug_msg "INSTALLROOT='$INSTALLROOT'"; + +$INSTALLROOT=~s/\\/\//g if ($INSTALLROOT=~/^.:\\/); # c:\abc\def +$INSTALLROOT=~s/\\/\//g if ($INSTALLROOT=~/^\\\\/); # \\abc\def + +debug_msg "Internal variable INSTALLROOT converted to '$INSTALLROOT'"; + +die "! ERROR: The install directory '$INSTALLROOT' doesn't exist.\n" + unless (-d "$INSTALLROOT"); + +die "! ERROR: The install directory '$INSTALLROOT' is not writable.\n" + unless (-w "$INSTALLROOT"); + + +if ($opt_help) { + print "\nThis is getnonfreefonts"; + print '-sys' if ($sys); + print ", version $TL_version.\n\n"; + + usage; + print <<"ENDUSAGE"; + Directories: + temporary: '$SYSTMP/getfont-<PID>' + install: '$INSTALLROOT' + +ENDUSAGE +exit 0; +} + + +my $tmpdir="$SYSTMP/getfont-$$"; +debug_msg "Internal variable tmpdir set to '$tmpdir'"; + +mkdir "$tmpdir" or die "! ERROR: Can't mkdir '$tmpdir'."; +chdir "$tmpdir" or die "! ERROR: Can't cd '$tmpdir'."; + +sub remove_tmpdir { + chdir "$SYSTMP" or die "! ERROR: Can't cd '$SYSTMP'.\n"; + opendir TMPDIR, "$tmpdir" + or print "! ERROR: Can't read directory '$tmpdir'.\n"; + + @alltmps=readdir TMPDIR; + closedir TMPDIR; + + foreach $file (@alltmps) { + next if $file=~/^\./; + unlink "$tmpdir/$file"; + } + rmdir "$tmpdir" or die "! ERROR: Can't remove directory '$tmpdir'.\n"; +} + +# Signal handlers for UNIX, maybe ignored by Windows. + +$SIG{INT} =\&remove_tmpdir; +$SIG{QUIT}=\&remove_tmpdir; +$SIG{BUS} =\&remove_tmpdir; +$SIG{PIPE}=\&remove_tmpdir; +$SIG{TERM}=\&remove_tmpdir; +$SIG{ABRT}=\&remove_tmpdir; +$SIG{SEGV}=\&remove_tmpdir; + +# Download the script from tug.org. + +debug_msg "Running 'wget $getfont_url'"; + +system ('wget', "$getfont_url"); + +# Download the fonts. + +my @getfont=('perl', "./getfont$TL_version", '--getnonfreefonts'); +push @getfont, "--installroot=$INSTALLROOT"; +push @getfont, '--lsfonts' if $opt_lsfonts; +push @getfont, '--force' if $opt_force; +push @getfont, '--debug' if $opt_debug; +push @getfont, '--verbose' if $opt_verbose; +push @getfont, '--sys' if $sys; +push @getfont, '--all' if $opt_all; +push @getfont, @allpackages; + +debug_msg "Running '@getfont'"; + +system @getfont; + +# Evaluate the exit status. It will be 2 if something had been +# installed and in this case we need to run texhash/updmap. + +my $exit_code=$?; +my $exit_status=int($exit_code/256); + +if ($sys) { + debug_msg "Info: Execute updmap-sys if exit status is 2"; +} else { + debug_msg "Info: Execute updmap if exit status is 2"; +} + +debug_msg "Exit status of getfont$TL_version is $exit_status"; + +if ($exit_status==2) { + print "\n"; + system 'texhash', "$INSTALLROOT"; + $updmap_command=($sys)? 'updmap-sys':'updmap'; + @updmap=("$updmap_command"); + push @updmap, '--quiet' unless $opt_verbose; + print "\n"; + message "Updating map files ($updmap_command)..."; + system @updmap; + + message $?? '[failed]':'[done]'; +} + +remove_tmpdir; + +__END__ diff --git a/Master/bin/sparc-linux/gftodvi b/Master/bin/sparc-linux/gftodvi Binary files differindex 52129eafc63..85e0ea9dc83 100755 --- a/Master/bin/sparc-linux/gftodvi +++ b/Master/bin/sparc-linux/gftodvi diff --git a/Master/bin/sparc-linux/gftopk b/Master/bin/sparc-linux/gftopk Binary files differindex 03abd6ba4e2..10b734a3327 100755 --- a/Master/bin/sparc-linux/gftopk +++ b/Master/bin/sparc-linux/gftopk diff --git a/Master/bin/sparc-linux/gftype b/Master/bin/sparc-linux/gftype Binary files differindex 5a92f4eae0e..c1aa4970acd 100755 --- a/Master/bin/sparc-linux/gftype +++ b/Master/bin/sparc-linux/gftype diff --git a/Master/bin/sparc-linux/gsftopk b/Master/bin/sparc-linux/gsftopk Binary files differindex f0fd597e574..8f87db6e5f5 100755 --- a/Master/bin/sparc-linux/gsftopk +++ b/Master/bin/sparc-linux/gsftopk diff --git a/Master/bin/sparc-linux/hbf2gf b/Master/bin/sparc-linux/hbf2gf Binary files differindex 4307e10cfb3..e3a0415fc9a 100755 --- a/Master/bin/sparc-linux/hbf2gf +++ b/Master/bin/sparc-linux/hbf2gf diff --git a/Master/bin/sparc-linux/htcontext b/Master/bin/sparc-linux/htcontext index 190ac31f862..9d6d4549574 100755 --- a/Master/bin/sparc-linux/htcontext +++ b/Master/bin/sparc-linux/htcontext @@ -1,7 +1,7 @@ #!/bin/sh - texexec --arg="opt-arg=$2" --use=tex4ht $5 $1 + texexec --arg="ht-1=$2" --use=tex4ht $5 $1 tex4ht -f/$1 -i~/tex4ht.dir/texmf/tex4ht/ht-fonts/$3 - t4ht -f/$1 $4 -cvalidatehtml ## -d~/WWW/temp/ -m644 + t4ht -f/$1 $4 ## -d~/WWW/temp/ -m644 diff --git a/Master/bin/sparc-linux/htlatex b/Master/bin/sparc-linux/htlatex index 04713bb7794..1b8b7cea74a 100755 --- a/Master/bin/sparc-linux/htlatex +++ b/Master/bin/sparc-linux/htlatex @@ -3,7 +3,7 @@ latex $5 '\makeatletter\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCode"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\def\Link#1.a.b.c.{\g@addto@macro\@documentclasshook{\RequirePackage[#1,html]{tex4ht}}\let\HCode\documentstyle\def\documentstyle{\let\documentstyle\HCode\expandafter\def\csname tex4ht\endcsname{#1,html}\def\HCode####1{\documentstyle[tex4ht,}\@ifnextchar[{\HCode}{\documentstyle[tex4ht]}}}\makeatother\HCode '$2'.a.b.c.\input ' $1 latex $5 '\makeatletter\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCode"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\def\Link#1.a.b.c.{\g@addto@macro\@documentclasshook{\RequirePackage[#1,html]{tex4ht}}\let\HCode\documentstyle\def\documentstyle{\let\documentstyle\HCode\expandafter\def\csname tex4ht\endcsname{#1,html}\def\HCode####1{\documentstyle[tex4ht,}\@ifnextchar[{\HCode}{\documentstyle[tex4ht]}}}\makeatother\HCode '$2'.a.b.c.\input ' $1 tex4ht -f/$1 -i~/tex4ht.dir/texmf/tex4ht/ht-fonts/$3 - t4ht -f/$1 $4 -cvalidatehtml ## -d~/WWW/temp/ -m644 + t4ht -f/$1 $4 ## -d~/WWW/temp/ -m644 diff --git a/Master/bin/sparc-linux/htmex b/Master/bin/sparc-linux/htmex index 7e34ac6d523..b4aa3d9a06e 100755 --- a/Master/bin/sparc-linux/htmex +++ b/Master/bin/sparc-linux/htmex @@ -3,7 +3,7 @@ mex $5 '\def\Link#1.a.b.c.{\expandafter\def\csname tex4ht\endcsname{\expandafter\def\csname tex4ht\endcsname{#1,html}\input tex4ht.sty }}\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCode"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\HCode '$2'.a.b.c.\input ' $1 mex $5 '\def\Link#1.a.b.c.{\expandafter\def\csname tex4ht\endcsname{\expandafter\def\csname tex4ht\endcsname{#1,html}\input tex4ht.sty }}\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCode"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\HCode '$2'.a.b.c.\input ' $1 tex4ht -f/$1 -i~/tex4ht.dir/texmf/tex4ht/ht-fonts/$3 - t4ht -f/$1 $4 -cvalidatehtml ## -d~/WWW/temp/ -m644 + t4ht -f/$1 $4 ## -d~/WWW/temp/ -m644 diff --git a/Master/bin/sparc-linux/httex b/Master/bin/sparc-linux/httex index 1fdf5f3d940..44920e72077 100755 --- a/Master/bin/sparc-linux/httex +++ b/Master/bin/sparc-linux/httex @@ -3,7 +3,7 @@ tex $5 '\def\Link#1.a.b.c.{\expandafter\def\csname tex4ht\endcsname{\expandafter\def\csname tex4ht\endcsname{#1,html}\input tex4ht.sty }}\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCode"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\HCode '$2'.a.b.c.\input ' $1 tex $5 '\def\Link#1.a.b.c.{\expandafter\def\csname tex4ht\endcsname{\expandafter\def\csname tex4ht\endcsname{#1,html}\input tex4ht.sty }}\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCode"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\HCode '$2'.a.b.c.\input ' $1 tex4ht -f/$1 -i~/tex4ht.dir/texmf/tex4ht/ht-fonts/$3 - t4ht -f/$1 $4 -cvalidatehtml ## -d~/WWW/temp/ -m644 + t4ht -f/$1 $4 ## -d~/WWW/temp/ -m644 diff --git a/Master/bin/sparc-linux/httexi b/Master/bin/sparc-linux/httexi index b3d841ed9a3..0ce3cb4a589 100755 --- a/Master/bin/sparc-linux/httexi +++ b/Master/bin/sparc-linux/httexi @@ -3,7 +3,7 @@ tex $5 '\def\Link#1.a.b.c.{\expandafter\def\csname tex4ht\endcsname{\expandafter\def\csname tex4ht\endcsname{#1,html}\input tex4ht.sty }}\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCode"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\let\svrm=\rm\def\rm{\svrm\ifx\c\comment\def\rm{\let\rm=\svrm\catcode`\@=12\catcode`\\=0 \csname tex4ht\endcsname\catcode`\@=0\catcode`\\=13 }\expandafter\rm\fi}\HCode '$2'.a.b.c.\input ' $1 tex $5 '\def\Link#1.a.b.c.{\expandafter\def\csname tex4ht\endcsname{\expandafter\def\csname tex4ht\endcsname{#1,html}\input tex4ht.sty }}\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCode"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\let\svrm=\rm\def\rm{\svrm\ifx\c\comment\def\rm{\let\rm=\svrm\catcode`\@=12\catcode`\\=0 \csname tex4ht\endcsname\catcode`\@=0\catcode`\\=13 }\expandafter\rm\fi}\HCode '$2'.a.b.c.\input ' $1 tex4ht -f/$1 -i~/tex4ht.dir/texmf/tex4ht/ht-fonts/$3 - t4ht -f/$1 $4 -cvalidatehtml ## -d~/WWW/temp/ -m644 + t4ht -f/$1 $4 ## -d~/WWW/temp/ -m644 # texindex ? diff --git a/Master/bin/sparc-linux/info b/Master/bin/sparc-linux/info Binary files differindex 012604add60..9e7186ff87b 100755 --- a/Master/bin/sparc-linux/info +++ b/Master/bin/sparc-linux/info diff --git a/Master/bin/sparc-linux/infokey b/Master/bin/sparc-linux/infokey Binary files differindex 45ba32ced02..edfbab9a33f 100755 --- a/Master/bin/sparc-linux/infokey +++ b/Master/bin/sparc-linux/infokey diff --git a/Master/bin/sparc-linux/install-info b/Master/bin/sparc-linux/install-info Binary files differindex 458a8cc653a..047b1455788 100755 --- a/Master/bin/sparc-linux/install-info +++ b/Master/bin/sparc-linux/install-info diff --git a/Master/bin/sparc-linux/kpseaccess b/Master/bin/sparc-linux/kpseaccess Binary files differindex d000d0560d1..127494a4d01 100755 --- a/Master/bin/sparc-linux/kpseaccess +++ b/Master/bin/sparc-linux/kpseaccess diff --git a/Master/bin/sparc-linux/kpsereadlink b/Master/bin/sparc-linux/kpsereadlink Binary files differindex f861452c52e..ee8c59ec3eb 100755 --- a/Master/bin/sparc-linux/kpsereadlink +++ b/Master/bin/sparc-linux/kpsereadlink diff --git a/Master/bin/sparc-linux/kpsestat b/Master/bin/sparc-linux/kpsestat Binary files differindex 4d2990ccf0e..81c3ad3fa84 100755 --- a/Master/bin/sparc-linux/kpsestat +++ b/Master/bin/sparc-linux/kpsestat diff --git a/Master/bin/sparc-linux/kpsewhich b/Master/bin/sparc-linux/kpsewhich Binary files differindex ad90be46317..651956d253f 100755 --- a/Master/bin/sparc-linux/kpsewhich +++ b/Master/bin/sparc-linux/kpsewhich diff --git a/Master/bin/sparc-linux/lacheck b/Master/bin/sparc-linux/lacheck Binary files differindex d7601ea787c..ba06ad5e093 100755 --- a/Master/bin/sparc-linux/lacheck +++ b/Master/bin/sparc-linux/lacheck diff --git a/Master/bin/sparc-linux/luatools b/Master/bin/sparc-linux/luatools new file mode 100755 index 00000000000..cb3ec1add4a --- /dev/null +++ b/Master/bin/sparc-linux/luatools @@ -0,0 +1,2 @@ +#!/bin/sh +texmfstart luatools.lua "$@" diff --git a/Master/bin/sparc-linux/mag b/Master/bin/sparc-linux/mag Binary files differindex 1ec66ea64c6..0ea7d0adfba 100755 --- a/Master/bin/sparc-linux/mag +++ b/Master/bin/sparc-linux/mag diff --git a/Master/bin/sparc-linux/makeindex b/Master/bin/sparc-linux/makeindex Binary files differindex c2a380b5d64..c99a153b2ae 100755 --- a/Master/bin/sparc-linux/makeindex +++ b/Master/bin/sparc-linux/makeindex diff --git a/Master/bin/sparc-linux/makeinfo b/Master/bin/sparc-linux/makeinfo Binary files differindex 5edd85c96b2..668487f7d7b 100755 --- a/Master/bin/sparc-linux/makeinfo +++ b/Master/bin/sparc-linux/makeinfo diff --git a/Master/bin/sparc-linux/makempx b/Master/bin/sparc-linux/makempx Binary files differindex 8aaa9bac1dc..58ebe7590c6 100755 --- a/Master/bin/sparc-linux/makempx +++ b/Master/bin/sparc-linux/makempx diff --git a/Master/bin/sparc-linux/makempy b/Master/bin/sparc-linux/makempy index afced152700..4bf7a1af230 120000..100755 --- a/Master/bin/sparc-linux/makempy +++ b/Master/bin/sparc-linux/makempy @@ -1 +1,2 @@ -texexec
\ No newline at end of file +#!/bin/sh +texmfstart makempy.pl "$@" diff --git a/Master/bin/sparc-linux/mf b/Master/bin/sparc-linux/mf Binary files differindex 0e4053411f0..2f7e349921f 100755 --- a/Master/bin/sparc-linux/mf +++ b/Master/bin/sparc-linux/mf diff --git a/Master/bin/sparc-linux/mf-nowin b/Master/bin/sparc-linux/mf-nowin Binary files differindex 7c262d3aa25..08ffb48a191 100755 --- a/Master/bin/sparc-linux/mf-nowin +++ b/Master/bin/sparc-linux/mf-nowin diff --git a/Master/bin/sparc-linux/mft b/Master/bin/sparc-linux/mft Binary files differindex f036d25ddee..5eab8db9e7c 100755 --- a/Master/bin/sparc-linux/mft +++ b/Master/bin/sparc-linux/mft diff --git a/Master/bin/sparc-linux/mk4ht b/Master/bin/sparc-linux/mk4ht index 019d9cfc7c8..0f4b664506c 100755 --- a/Master/bin/sparc-linux/mk4ht +++ b/Master/bin/sparc-linux/mk4ht @@ -1,7 +1,7 @@ #!/usr/bin/env perl #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -# mk4ht 2005-09-23-22:09 % -# Copyright (C) 2003--2005 Eitan M. Gurari % +# mk4ht 2006-08-28-20:45 % +# Copyright (C) 2003--2006 Eitan M. Gurari % # % # % # This work may be distributed and/or modified under the % @@ -29,56 +29,72 @@ my @options = ( "ht", "htlatex", "latex", "", "", "-cvalidatehtml", "ht", "httex", "tex", "", "", "-cvalidatehtml", "ht", "httexi", "texi", "", "", "-cvalidatehtml", - "ht", "htcontext", "texexec", "", "", "-cvalidatehtml", + "ht", "htcontext", "context", "", "", "-cvalidatehtml", + "xh", "xhlatex", "latex", "xhtml", "", "-cvalidate", + "xh", "xhtex", "tex", "xhtml", "", "-cvalidate", + "xh", "xhtexi", "texi", "xhtml", "", "-cvalidate", + "xh", "xhcontext","context", "xhtml", "", "-cvalidat", "uxh", "uxhlatex", "latex", "xhtml,uni-html4", " -cunihtf", "-cvalidate", "uxh", "uxhtex", "tex", "xhtml,uni-html4", " -cunihtf", "-cvalidate", "uxh", "uxhtexi", "texi", "xhtml,uni-html4", " -cunihtf", "-cvalidate", - "uxh", "uxhcontext","texexec", "xhtml,uni-html4", " -cunihtf", "-cvalidate", + "uxh", "uxhcontext","context", "xhtml,uni-html4", " -cunihtf", "-cvalidate", "xhm", "xhmlatex", "latex", "xhtml,mathml", " -cunihtf", "-cvalidate", "xhm", "xhmtex", "tex", "xhtml,mathml", " -cunihtf", "-cvalidate", "xhm", "xhmtexi", "texi", "xhtml,mathml", " -cunihtf", "-cvalidate", - "xhm", "xhmcontext","texexec", "xhtml,mathml", " -cunihtf", "-cvalidate", + "xhm", "xhmcontext","context", "xhtml,mathml", " -cunihtf", "-cvalidate", "mz", "mzlatex", "latex", "xhtml,mozilla", " -cmozhtf", "-cvalidate", "mz", "mztex", "tex", "xhtml,mozilla", " -cmozhtf", "-cvalidate", "mz", "mztexi", "texi", "xhtml,mozilla", " -cmozhtf", "-cvalidate", - "mz", "mzcontext", "texexec", "xhtml,mozilla", " -cmozhtf", "-cvalidate", - "oo", "oolatex", "latex", "xhtml,ooffice", "ooffice/\! -cmozhtf", "-coo -cvalidate", - "oo", "ootex", "tex", "xhtml,ooffice", "ooffice/\! -cmozhtf", "-coo -cvalidate", - "oo", "ootexi", "texi", "xhtml,ooffice", "ooffice/\! -cmozhtf", "-coo -cvalidate", - "oo", "oocontext", "texexec", "xhtml,ooffice", "ooffice/\! -cmozhtf", "-coo -cvalidate", + "mz", "mzcontext", "context", "xhtml,mozilla", " -cmozhtf", "-cvalidate", + "oo", "oolatex", "latex", "xhtml,ooffice", "ooffice/\! -cmozhtf", "-cooxtpipes -coo", + "oo", "ootex", "tex", "xhtml,ooffice", "ooffice/\! -cmozhtf", "-cooxtpipes -coo", + "oo", "ootexi", "texi", "xhtml,ooffice", "ooffice/\! -cmozhtf", "-cooxtpipes -coo", + "oo", "oocontext", "context", "xhtml,ooffice", "ooffice/\! -cmozhtf", "-cooxtpipes -coo", + "es", "eslatex", "latex", "xhtml,emspk", " -cemspkhtf -s4es", "-cemspk", + "es", "estex", "tex", "xhtml,emspk", " -cemspkhtf -s4es", "-cemspk", + "es", "estexi", "texi", "xhtml,emspk", " -cemspkhtf -s4es", "-cemspk", + "es", "escontext", "context", "xhtml,emspk", " -cemspkhtf -s4es", "-cemspk", + "js", "jslatex", "latex", "xhtml,jsml", " -cjsmlhtf", "-cjsml", + "js", "jstex", "tex", "xhtml,jsml", " -cjsmlhtf", "-cjsml", + "js", "jstexi", "texi", "xhtml,jsml", " -cjsmlhtf", "-cjsml", + "js", "jscontext", "context", "xhtml,jsml", " -cjsmlhtf", "-cjsml", "tei", "teilatex", "latex", "xhtml,tei", " -cunihtf", "-cvalidate", "tei", "teitex", "tex", "xhtml,tei", " -cunihtf", "-cvalidate", "tei", "teitexi", "texi", "xhtml,tei", " -cunihtf", "-cvalidate", - "tei", "teicontext","texexec", "xhtml,tei", " -cunihtf", "-cvalidate", + "tei", "teicontext","context", "xhtml,tei", " -cunihtf", "-cvalidate", "teim", "teimlatex", "latex", "xhtml,tei-mml"," -cunihtf", "-cvalidate", "teim", "teimtex", "tex", "xhtml,tei-mml"," -cunihtf", "-cvalidate", "teim", "teimtexi", "texi", "xhtml,tei-mml"," -cunihtf", "-cvalidate", - "teim", "teimcontext","texexec","xhtml,tei-mml"," -cunihtf", "-cvalidate", - "db", "dblatex", "latex", "xhtml,docbook", " -cunihtf", "-cvalidate", - "db", "dbtex", "tex", "xhtml,docbook", " -cunihtf", "-cvalidate", - "db", "dbtexi", "texi", "xhtml,docbook", " -cunihtf", "-cvalidate", - "db", "dbcontext", "texexec", "xhtml,docbook", " -cunihtf", "-cvalidate", - "dbm", "dbmlatex", "latex", "xhtml,docbook-mml", " -cunihtf", "-cvalidate", - "dbm", "dbmtex", "tex", "xhtml,docbook-mml", " -cunihtf", "-cvalidate", - "dbm", "dbmtexi", "texi", "xhtml,docbook-mml", " -cunihtf", "-cvalidate", - "dbm", "dbmcontext","texexec", "xhtml,docbook-mml", " -cunihtf", "-cvalidate", + "teim", "teimcontext","context","xhtml,tei-mml"," -cunihtf", "-cvalidate", + "db", "dblatex", "latex", "xhtml,docbook", " -cunihtf", "-cvalidate -cdocbk", + "db", "dbtex", "tex", "xhtml,docbook", " -cunihtf", "-cvalidate -cdocbk", + "db", "dbtexi", "texi", "xhtml,docbook", " -cunihtf", "-cvalidate -cdocbk", + "db", "dbcontext", "context", "xhtml,docbook", " -cunihtf", "-cvalidate -cdocbk", + "dbm", "dbmlatex", "latex", "xhtml,docbook-mml", " -cunihtf", "-cdocbk", + "dbm", "dbmtex", "tex", "xhtml,docbook-mml", " -cunihtf", "-cdocbk", + "dbm", "dbmtexi", "texi", "xhtml,docbook-mml", " -cunihtf", "-cdocbk", + "dbm", "dbmcontext","context", "xhtml,docbook-mml", " -cunihtf", "-cdocbk", "w", "wlatex", "latex", "xhtml,word", " -csymhtf", "", "w", "wtex", "tex", "xhtml,word", " -csymhtf", "", "w", "wtexi", "texi", "xhtml,word", " -csymhtf", "", - "w", "wcontext", "texexec", "xhtml,word", " -csymhtf", "", - "jh", "jhlatex", "latex", "html,javahelp,3.2,unicode,jh1.0", " -cmozhtf -u10", " -d%1-doc/ -cjavahelp -cvalidate", - "jh", "jhtex", "tex", "html,javahelp,3.2,unicode,jh1.0", " -cmozhtf -u10", " -d%1-doc/ -cjavahelp -cvalidate", - "jh", "jhtexi", "texi", "html,javahelp,3.2,unicode,jh1.0", " -cmozhtf -u10", " -d%1-doc/ -cjavahelp -cvalidate", - "jh", "jhcontext","texexec", "html,javahelp,3.2,unicode,jh1.0", " -cmozhtf -u10", " -d%1-doc/ -cjavahelp -cvalidate", + "w", "wcontext", "context", "xhtml,word", " -csymhtf", "", + "jh", "jhlatex", "latex", "html,javahelp,3.2,unicode", " -cmozhtf -u10", " -d%1-doc/ -cjavahelp -cvalidatehtml", + "jh", "jhtex", "tex", "html,javahelp,3.2,unicode", " -cmozhtf -u10", " -d%1-doc/ -cjavahelp -cvalidatehtml", + "jh", "jhtexi", "texi", "html,javahelp,3.2,unicode", " -cmozhtf -u10", " -d%1-doc/ -cjavahelp -cvalidatehtml", + "jh", "jhcontext","context", "html,javahelp,3.2,unicode", " -cmozhtf -u10", " -d%1-doc/ -cjavahelp -cvalidatehtml", + "jh1", "jh1latex", "latex", "html,javahelp,3.2,unicode,jh1.0", " -cmozhtf -u10", " -d%1-doc/ -cjavahelp", + "jh1", "jh1tex", "tex", "html,javahelp,3.2,unicode,jh1.0", " -cmozhtf -u10", " -d%1-doc/ -cjavahelp", + "jh1", "jh1texi", "texi", "html,javahelp,3.2,unicode,jh1.0", " -cmozhtf -u10", " -d%1-doc/ -cjavahelp", + "jh1", "jh1context","context", "html,javahelp,3.2,unicode,jh1.0", " -cmozhtf -u10", " -d%1-doc/ -cjavahelp", ); sub showInstrucions(){ print " option1: mk4ht #1 \"#2\" \"#3\" \"#4\" \"#5\"\n"; print " \n"; - print " #1: htlatex, mzlatex, oolatex, dblatex, dbmlatex,\n"; - print " teilatex, teimlatex, uxhlatex, wlatex, xhlatex,\n"; - print " xhmlatex\n"; + print " #1: htlatex, xhlatex, mzlatex, oolatex, dblatex, dbmlatex,\n"; + print " jhlatex, eslatex, teilatex, teimlatex, uxhlatex, \n"; + print " wlatex, xhmlatex\n"; print " \n"; print " also 'tex', 'texi', and 'context' instead of 'latex'\n"; print " \n"; @@ -99,9 +115,70 @@ sub showInstrucions(){ print " variable, the requests for the commands \"latex\",\n"; print " \"tex\", etc. can be replaced with other equivalent\n"; print " commands (e.g., \"tex -fmt=latex\").\n"; + + print "--------------------------------------------------------------------------\n"; +print " Private configuration file: mk4ht.cfg\n"; +print "--------------------------------------------------------------------------\n"; +print "\n"; +print "A private configuration file mk4ht.cfg or .mk4ht may be placed at the\n"; +print "work or home directory, to update existing commands and introduce new\n"; +print "ones. The configuration file may contain records of the following\n"; +print "kinds.\n"; +print "\n"; +print " # Comment\n"; +print " \n"; +print " name = type\n"; +print " Defines a ht*tex like command, and assocites to it the \n"; +print " TeX compiler of the specified type. Examples of TeX \n"; +print " types: latex, tex, texi, and context.\n"; +print " \n"; +print " name.tex = options\n"; +print " Command line options for the compilation under\n"; +print " the (la)tex compiler\n"; +print " \n"; +print " name.tex4ht = options\n"; +print " Command line options for tex4ht.c \n"; +print " \n"; +print " name.t4ht = options\n"; +print " Command line options for t4ht.c\n"; +print " \n"; +print "Each record should appear in a different line. Variants\n"; +print "`name.tex += options', `name.tex4ht += options',\n"; +print "`name.t4ht += options' of the above records are also allowed.\n"; +print "They append the listed options to the base values.\n"; +print "\n"; +print "Example:\n"; +print "\n"; +print " foohlatex = latex\n"; +print " foohlatex.tex = xhtml,uni-html4\n"; +print " foohlatex.tex4ht += -cunihtf\n"; +print " foohlatex.t4ht = -cvalidate\n"; +print " htlatex.t4ht += -d./\n"; + + + print "--------------------------------------------------------------------------\n"; +print " Deleting files\n"; +print "--------------------------------------------------------------------------\n"; +print "\n"; +print "The configuration file mk4ht.cfg may also contain requests for\n"; +print "removing files created in the work directory during the compilation.\n"; +print "The requests are to be made through records of the following forms.\n"; +print "\n"; +print " clean ext1 ext2 ...\n"; +print " The extensions of the file name to be removed.\n"; +print " \n"; +print " clean.name ext1 ext2 ...\n"; +print " Conditional request. The `name' refers to the ht*tex \n"; +print " like command in use.\n"; +print "\n"; +print "Example:\n"; +print " clean dvi idv\n"; +print " clean.foohlatex lg \n"; +print " clean.htlatex lg tmp\n"; + } -print "mk4ht (2005-09-23-22:09)\n"; +print "mk4ht (2006-08-28-20:45)\n"; if( !@ARGV ){ print "improper command\n"; showInstrucions(); exit(1); @@ -110,22 +187,118 @@ my @command=("","","","",""); my $i=0; my $j=0; my $param; +my $name; +my $compiler; +my $tex; +my $tex4ht; +my $t4ht; +my $texp; +my $tex4htp = ""; +my $t4htp = ""; +my @ext; + foreach $param (@ARGV) { if( $i == 0 ){ + my $inf; +open $inf, "<mk4ht.cfg" +or +( open $inf, "<.mk4ht" + or + ( + open $inf, "<" . $ENV{HOME} . "/mk4ht.cfg" + or + ( + open $inf, "<" . $ENV{HOME} . "/.mk4ht" + or $inf = "" +) ) ) +; + +if( $inf ){ + print "(mk4ht cfg)\n"; + while(<$inf>) { + my($line) = $_; + chomp($line); # remove eoln char + if ($line =~ m|\s*#.*|) {} + elsif($line =~ m|^\s*(\S*)\.(\S*)\s*\+=\s*(.*\S)\s*$|) { + if( ($param."tex4ht") eq ($1.$2) ){ + $tex4htp = $tex4htp . " " . $3; + } + elsif( ($param."t4ht") eq ($1.$2) ){ + $t4htp = $t4htp . " " . $3; + } + elsif( ($param."tex") eq ($1.$2) ){ + $texp = $texp . "," . $3; + } + } + elsif($line =~ m|^\s*(\S*)\.(\S*)\s*=\s*(.*\S)\s*$|) { + if( ($param."tex4ht") eq ($1.$2) ){ + $tex4ht = $3 . " "; + $tex4htp = ""; + } + elsif( ($param."t4ht") eq ($1.$2) ){ + $t4ht = $3 . " "; + $t4htp = ""; + } + elsif( ($param."tex") eq ($1.$2) ){ + $tex = $3 . ","; + $texp = ""; + } + } + elsif($line =~ m|^\s*(\S*)\s*=\s*(.*\S)\s*$|) { + if( $param eq $1 ){ + $name = $1; + $compiler = $2; + } + } + elsif($line =~ m|^\s*clean\s+(.+)|){ + my(@array) = split(' ',$1); + push(@ext,@array); +} elsif($line =~ m|^\s*clean\.(\S+)\s+(.+)|){ + if( $1 eq @ARGV[0] ){ + my(@array) = split(' ',$2); + push(@ext,@array); +} } + + elsif ($line) { print "--- Error --- " . $line . "\n"; } + } + close $inf; +} + for( $j=1; $j<$#options; $j+=6 ){ if( $param eq $options[$j] ){ - if( $options[$j-1] eq "" ){ - $command[0] = $options[$j]; + if( $name ){ + $command[0] = "ht".$compiler; +if( $tex ){ $command[2] = $tex; } else { $command[2] = ""; } +if( $tex4ht ){ $command[3] = $tex4ht; } else { $command[3] = ""; } +if( $t4ht ){ $command[4] = $t4ht; } else { $command[4] = ""; } + } else { - $command[0] = "ht".$options[$j+1]; + if( $options[$j-1] eq "" ){ + $command[0] = $options[$j]; +} else { + $command[0] = "ht".$options[$j+1]; +} +if( $tex ){ $command[2] = $tex; } else { $command[2] = $options[$j+2]; } +if( $tex4ht ){ $command[3] = $tex4ht; } else { $command[3] = $options[$j+3]; } +if( $t4ht ){ $command[4] = $t4ht; } else { $command[4] = $options[$j+4]; } + } - $command[2] = $options[$j+2]; - $command[3] = $options[$j+3]; - $command[4] = $options[$j+4]; + if( $texp ){ $command[2] = $command[2] . "," . $texp; } +if( $tex4htp){ $command[3] = $command[3] . " " . $tex4htp; } +if( $t4htp ){ $command[4] = $command[4] . " " . $t4htp; } + last; } } - if( $j>$#options ){ print "improper command: $param \n"; - showInstrucions(); exit(1); } + if( $j>$#options ){ + if( $name ){ $command[0] = "ht".$compiler; +if( $tex ){ $command[2] = $tex; } else { $command[2] = ""; } +if( $tex4ht ){ $command[3] = $tex4ht; } else { $command[3] = ""; } +if( $t4ht ){ $command[4] = $t4ht; } else { $command[4] = ""; } + } + else { + print "improper command: $param \n"; + showInstrucions(); exit(1); + } } } elsif ( $i== 1 ) { $command[1] = $param; } elsif ( $i== 2 ) { @@ -148,6 +321,22 @@ print "$commando\n"; my $rtrn; if( $rtrn = system($commando) ){ print "--- error --- failed to execute command\n"; -} else { exit( !$rtrn ); } +} else { + my $file; +my $ext; +my(@array) = split('\.',@ARGV[1]); +my $texFile = @array[0]; +opendir(DIR,".") ; +while ($file = readdir(DIR) ){ + if(index($file,$texFile) == 0 ){ + foreach $ext(@ext){ + if (index($file,$ext,length($file)-length($ext)) != -1){ + if( stat($file)){ + unlink($file); + print "Deleted: ". $file . "\n"; +} } } } } +closedir(DIR); + exit( !$rtrn ); +} diff --git a/Master/bin/sparc-linux/mktexlsr b/Master/bin/sparc-linux/mktexlsr index 3d2523d875b..663c36c1598 100755 --- a/Master/bin/sparc-linux/mktexlsr +++ b/Master/bin/sparc-linux/mktexlsr @@ -133,11 +133,17 @@ for TEXMFLS_R in "$@"; do # The main task. We put ./: in the output, so top-level files can be # found via ls-R. Probably irrelevant in practice. # The sed command inserts the leading ./ for directory names, and - # removes . and .. from the list. Note that using colons in directory - # names results in nothing but grief. + # removes ., .., and .svn entries from the list. Also omit contents + # of any .svn directories; sed apparently requires that we do that + # operation in a separate invocation. + # We do not try to support colons in directory names. + # echo "./:" >>"$db_file_tmp" - (cd "$TEXMFLS_R" && \ls -LRa 2>/dev/null) | - sed '/^$/{n;s%^\./%%;s%^%./%;}; /^\.$/d; /^\.\.$/d; /^[\.\/]*lsR[0-9]*\.tmp:*$/d' >>"$db_file_tmp" + (cd "$TEXMFLS_R" && \ls -LRa 2>/dev/null) \ + | sed -e '/^$/{n;s%^\./%%;s%^%./%;}; /^\.$/d; /^\.\.$/d; /^\.svn$/d;' \ + -e '/^[\.\/]*lsR[0-9]*\.tmp:*$/d' \ + | sed -e '/\.svn.*:$/,/^$/d' \ + >>"$db_file_tmp" # To be really safe, a loop. until PERMS=`kpsestat = "$db_file"`; do sleep 1; done diff --git a/Master/bin/sparc-linux/mmafm b/Master/bin/sparc-linux/mmafm Binary files differindex 770076359ba..63a282a64c4 100755 --- a/Master/bin/sparc-linux/mmafm +++ b/Master/bin/sparc-linux/mmafm diff --git a/Master/bin/sparc-linux/mmpfb b/Master/bin/sparc-linux/mmpfb Binary files differindex 143856cc193..7ad11023e2d 100755 --- a/Master/bin/sparc-linux/mmpfb +++ b/Master/bin/sparc-linux/mmpfb diff --git a/Master/bin/sparc-linux/mpost b/Master/bin/sparc-linux/mpost Binary files differindex 46e36deda7a..359b2d45f6e 100755 --- a/Master/bin/sparc-linux/mpost +++ b/Master/bin/sparc-linux/mpost diff --git a/Master/bin/sparc-linux/mpstools b/Master/bin/sparc-linux/mpstools new file mode 100755 index 00000000000..b4c8f634548 --- /dev/null +++ b/Master/bin/sparc-linux/mpstools @@ -0,0 +1,2 @@ +#!/bin/sh +texmfstart mpstools.rb "$@" diff --git a/Master/bin/sparc-linux/mpto b/Master/bin/sparc-linux/mpto Binary files differindex 78d213c253a..5686fd54e25 100755 --- a/Master/bin/sparc-linux/mpto +++ b/Master/bin/sparc-linux/mpto diff --git a/Master/bin/sparc-linux/mptopdf b/Master/bin/sparc-linux/mptopdf index afced152700..980a3123d1a 120000..100755 --- a/Master/bin/sparc-linux/mptopdf +++ b/Master/bin/sparc-linux/mptopdf @@ -1 +1,2 @@ -texexec
\ No newline at end of file +#!/bin/sh +texmfstart mptopdf.pl "$@" diff --git a/Master/bin/sparc-linux/mtxtools b/Master/bin/sparc-linux/mtxtools new file mode 100755 index 00000000000..2922e0b4674 --- /dev/null +++ b/Master/bin/sparc-linux/mtxtools @@ -0,0 +1,2 @@ +#!/bin/sh +texmfstart mtxtools.rb "$@" diff --git a/Master/bin/sparc-linux/musixflx b/Master/bin/sparc-linux/musixflx Binary files differindex b91efe90c78..b977557df79 100755 --- a/Master/bin/sparc-linux/musixflx +++ b/Master/bin/sparc-linux/musixflx diff --git a/Master/bin/sparc-linux/newer b/Master/bin/sparc-linux/newer Binary files differindex 59fa61fdf26..d61b5401532 100755 --- a/Master/bin/sparc-linux/newer +++ b/Master/bin/sparc-linux/newer diff --git a/Master/bin/sparc-linux/odvicopy b/Master/bin/sparc-linux/odvicopy Binary files differindex 9a53a022927..9c7e5c252b1 100755 --- a/Master/bin/sparc-linux/odvicopy +++ b/Master/bin/sparc-linux/odvicopy diff --git a/Master/bin/sparc-linux/odvitype b/Master/bin/sparc-linux/odvitype Binary files differindex d6c0c3005f6..bc0b3053bc6 100755 --- a/Master/bin/sparc-linux/odvitype +++ b/Master/bin/sparc-linux/odvitype diff --git a/Master/bin/sparc-linux/omega b/Master/bin/sparc-linux/omega Binary files differindex 6199f1a8820..ae9a6805ce2 100755 --- a/Master/bin/sparc-linux/omega +++ b/Master/bin/sparc-linux/omega diff --git a/Master/bin/sparc-linux/omfonts b/Master/bin/sparc-linux/omfonts Binary files differindex 2a5966c5312..4f4a014feaf 100755 --- a/Master/bin/sparc-linux/omfonts +++ b/Master/bin/sparc-linux/omfonts diff --git a/Master/bin/sparc-linux/otangle b/Master/bin/sparc-linux/otangle Binary files differindex 3a6d46c1f67..c8e7fbb0d85 100755 --- a/Master/bin/sparc-linux/otangle +++ b/Master/bin/sparc-linux/otangle diff --git a/Master/bin/sparc-linux/otfinfo b/Master/bin/sparc-linux/otfinfo Binary files differindex 7662d231aa9..347eca1fb66 100755 --- a/Master/bin/sparc-linux/otfinfo +++ b/Master/bin/sparc-linux/otfinfo diff --git a/Master/bin/sparc-linux/otftotfm b/Master/bin/sparc-linux/otftotfm Binary files differindex 62689e7da0c..2f12cad7b28 100755 --- a/Master/bin/sparc-linux/otftotfm +++ b/Master/bin/sparc-linux/otftotfm diff --git a/Master/bin/sparc-linux/otp2ocp b/Master/bin/sparc-linux/otp2ocp Binary files differindex 386b794edfd..cbaae451032 100755 --- a/Master/bin/sparc-linux/otp2ocp +++ b/Master/bin/sparc-linux/otp2ocp diff --git a/Master/bin/sparc-linux/outocp b/Master/bin/sparc-linux/outocp Binary files differindex 801200cf917..bcae400de17 100755 --- a/Master/bin/sparc-linux/outocp +++ b/Master/bin/sparc-linux/outocp diff --git a/Master/bin/sparc-linux/patgen b/Master/bin/sparc-linux/patgen Binary files differindex 7d6e79dfefb..3f4d33c823d 100755 --- a/Master/bin/sparc-linux/patgen +++ b/Master/bin/sparc-linux/patgen diff --git a/Master/bin/sparc-linux/pdfclose b/Master/bin/sparc-linux/pdfclose Binary files differindex 1472f17eaed..04f8abf3e83 100755 --- a/Master/bin/sparc-linux/pdfclose +++ b/Master/bin/sparc-linux/pdfclose diff --git a/Master/bin/sparc-linux/pdfcrop b/Master/bin/sparc-linux/pdfcrop index afced152700..c7d2319af7a 120000..100755 --- a/Master/bin/sparc-linux/pdfcrop +++ b/Master/bin/sparc-linux/pdfcrop @@ -1 +1,308 @@ -texexec
\ No newline at end of file +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q' + if 0; +use strict; +$^W=1; # turn warning on +# +# pdfcrop.pl +# +# Copyright (C) 2002, 2004 Heiko Oberdiek. +# +# This program may be distributed and/or modified under the +# conditions of the LaTeX Project Public License, either version 1.2 +# of this license or (at your option) any later version. +# The latest version of this license is in +# http://www.latex-project.org/lppl.txt +# and version 1.2 or later is part of all distributions of LaTeX +# version 1999/12/01 or later. +# +# See file "readme.txt" for a list of files that belong to this project. +# +# This file "pdfcrop.pl" may be renamed to "pdfcrop" +# for installation purposes. +# +my $file = "pdfcrop.pl"; +my $program = uc($&) if $file =~ /^\w+/; +my $version = "1.5"; +my $date = "2004/06/24"; +my $author = "Heiko Oberdiek"; +my $copyright = "Copyright (c) 2002, 2004 by $author."; +# +# Reqirements: Perl5, Ghostscript +# History: +# 2002/10/30 v1.0: First release. +# 2002/10/30 v1.1: Option --hires added. +# 2002/11/04 v1.2: "nul" instead of "/dev/null" for windows. +# 2002/11/23 v1.3: Use of File::Spec module's "devnull" call. +# 2002/11/29 v1.4: Option --papersize added. +# 2004/06/24 v1.5: Clear map file entries so that pdfTeX +# does not touch the fonts. +# + +### program identification +my $title = "$program $version, $date - $copyright\n"; + +### error strings +my $Error = "!!! Error:"; # error prefix + +### string constants for Ghostscript run +# get Ghostscript command name +my $GS = "gs"; +$GS = "gs386" if $^O =~ /dos/i; +$GS = "gsos2" if $^O =~ /os2/i; +$GS = "gswin32c" if $^O =~ /mswin32/i; +$GS = "gswin32c" if $^O =~ /cygwin/i; + +# Windows detection (no SIGHUP) +my $Win = 0; +$Win = 1 if $^O =~ /mswin32/i; +$Win = 1 if $^O =~ /cygwin/i; + +# "null" device +use File::Spec::Functions qw(devnull); +my $null = devnull(); + +### variables +my $inputfile = ""; +my $outputfile = ""; +my $tmp = "tmp-\L$program\E-$$"; + +### option variables +my @bool = ("false", "true"); +$::opt_help = 0; +$::opt_debug = 0; +$::opt_verbose = 0; +$::opt_gscmd = $GS; +$::opt_pdftexcmd = "pdftex"; +$::opt_margins = "0 0 0 0"; +$::opt_clip = 0; +$::opt_hires = 0; +$::opt_papersize = ""; + +my $usage = <<"END_OF_USAGE"; +${title}Syntax: \L$program\E [options] <input[.pdf]> [output file] +Function: Margins are calculated and removed for each page in the file. +Options: (defaults:) + --help print usage + --(no)verbose verbose printing ($bool[$::opt_verbose]) + --(no)debug debug informations ($bool[$::opt_debug]) + --gscmd <name> call of ghostscript ($::opt_gscmd) + --pdftexcmd <name> call of pdfTeX ($::opt_pdftexcmd) + --margins "<left> <top> <right> <bottom>" ($::opt_margins) + add extra margins, unit is bp. If only one number is + given, then it is used for all margins, in the case + of two numbers they are also used for right and bottom. + --(no)clip clipping support, if margins are set ($bool[$::opt_clip]) + --(no)hires using `%%HiResBoundingBox' ($bool[$::opt_hires]) + instead of `%%BoundingBox' + --papersize <foo> parameter for gs's -sPAPERSIZE=<foo>, + use only with older gs versions <7.32 ($::opt_papersize) +Examples: + \L$program\E --margins 10 input.pdf output.pdf + \L$program\E --margins '5 10 5 20' --clip input.pdf output.pdf +END_OF_USAGE + +### process options +my @OrgArgv = @ARGV; +use Getopt::Long; +GetOptions( + "help!", + "debug!", + "verbose!", + "gscmd=s", + "pdftexcmd=s", + "margins=s", + "clip!", + "hires!", + "papersize=s", +) or die $usage; +!$::opt_help or die $usage; + +$::opt_verbose = 1 if $::opt_debug; + +@ARGV >= 1 or die $usage; + +print $title; + +@ARGV <= 2 or die "$Error Too many files!\n"; + +### input file +$inputfile = shift @ARGV; + +if (! -f $inputfile) { + if (-f "$inputfile.pdf") { + $inputfile .= ".pdf"; + } + else { + die "$Error Input file `$inputfile' not found!\n"; + } +} + +print "* Input file: $inputfile\n" if $::opt_debug; + +### output file +if (@ARGV) { + $outputfile = shift @ARGV; +} +else { + $outputfile = $inputfile; + $outputfile =~ s/\.pdf$//i; + $outputfile .= "-crop.pdf"; +} + +print "* Output file: $outputfile\n" if $::opt_debug; + +### margins +my ($llx, $lly, $urx, $ury) = (0, 0, 0, 0); +if ($::opt_margins =~ + /^\s*([\-\.\d]+)\s+([\-\.\d]+)\s+([\-\.\d]+)\s+([\-\.\d]+)\s*$/) { + ($llx, $lly, $urx, $ury) = ($1, $2, $3, $4); +} +else { + if ($::opt_margins =~ /^\s*([\-\.\d]+)\s+([\-\.\d]+)\s*$/) { + ($llx, $lly, $urx, $ury) = ($1, $2, $1, $2); + } + else { + if ($::opt_margins =~ /^\s*([\-\.\d]+)\s*$/) { + ($llx, $lly, $urx, $ury) = ($1, $1, $1, $1); + } + else { + die "$Error Parse error (option --margins)!\n"; + } + } +} +print "* Margins: $llx $lly $urx $ury\n" if $::opt_debug; + +### cleanup system +my @unlink_files = (); +my $exit_code = 1; +sub clean { + print "* Cleanup\n" if $::opt_debug; + if ($::opt_debug) { + print "* Temporary files: @unlink_files\n"; + } + else { + for (; @unlink_files>0; ) { + unlink shift @unlink_files; + } + } +} +sub cleanup { + clean(); + exit($exit_code); +} +$SIG{'INT'} = \&cleanup; +$SIG{'__DIE__'} = \&clean; + +### Calculation of BoundingBoxes + +my $cmd = "$::opt_gscmd -sDEVICE=bbox -dBATCH -dNOPAUSE "; +$cmd .= "-sPAPERSIZE=$::opt_papersize " if $::opt_papersize; +$cmd .= "-c save pop -f " . $inputfile; +my $cmdpipe = $cmd . " 2>&1 1>$null |"; + +my $tmpfile = "$tmp.tex"; +push @unlink_files, $tmpfile; +open(TMP, ">$tmpfile") or + die "$Error Cannot write tmp file `$tmpfile'!\n"; +print TMP "\\def\\pdffile{$inputfile}\n"; +print TMP <<'END_TMP_HEAD'; +\csname pdfmapfile\endcsname{} +\def\page #1 [#2 #3 #4 #5]{% + \count0=#1\relax + \setbox0=\hbox{% + \pdfximage page #1{\pdffile}% + \pdfrefximage\pdflastximage + }% + \pdfhorigin=-#2bp\relax + \pdfvorigin=#3bp\relax + \pdfpagewidth=#4bp\relax + \advance\pdfpagewidth by -#2bp\relax + \pdfpageheight=#5bp\relax + \advance\pdfpageheight by -#3bp\relax + \ht0=\pdfpageheight + \shipout\box0\relax +} +\def\pageclip #1 [#2 #3 #4 #5][#6 #7 #8 #9]{% + \count0=#1\relax + \dimen0=#4bp\relax \advance\dimen0 by -#2bp\relax + \edef\imagewidth{\the\dimen0}% + \dimen0=#5bp\relax \advance\dimen0 by -#3bp\relax + \edef\imageheight{\the\dimen0}% + \pdfximage page #1{\pdffile}% + \setbox0=\hbox{% + \kern -#2bp\relax + \lower #3bp\hbox{\pdfrefximage\pdflastximage}% + }% + \wd0=\imagewidth\relax + \ht0=\imageheight\relax + \dp0=0pt\relax + \pdfhorigin=#6pt\relax + \pdfvorigin=#7bp\relax + \pdfpagewidth=\imagewidth + \advance\pdfpagewidth by #6bp\relax + \advance\pdfpagewidth by #8bp\relax + \pdfpageheight=\imageheight\relax + \advance\pdfpageheight by #7bp\relax + \advance\pdfpageheight by #9bp\relax + \pdfxform0\relax + \shipout\hbox{\pdfrefxform\pdflastxform}% +}% +END_TMP_HEAD + +print "* Running ghostscript for BoundingBox calculation ...\n" + if $::opt_verbose; +print "* Ghostscript pipe: $cmdpipe\n" if $::opt_debug; + +my $page = 0; +open(CMD, $cmdpipe) or + die "$Error Cannot call ghostscript!\n"; +while (<CMD>) { + my $bb = ($::opt_hires) ? "%%HiResBoundingBox" : "%%BoundingBox"; + next unless + /^$bb:\s*([\.\d]+) ([\.\d]+) ([\.\d]+) ([\.\d]+)/o; + $page++; + print "* Page $page: $1 $2 $3 $4\n" if $::opt_verbose; + if ($::opt_clip) { + print TMP "\\pageclip $page [$1 $2 $3 $4][$llx $lly $urx $ury]\n"; + } + else { + my ($a, $b, $c, $d) = ($1 - $llx, $2 - $ury, $3 + $urx, $4 + $lly); + print TMP "\\page $page [$a $b $c $d]\n"; + } +} +close(CMD); + +print TMP "\\csname \@\@end\\endcsname\n\\end\n"; +close(TMP); + +### Run pdfTeX + +push @unlink_files, "$tmp.log"; +if ($::opt_verbose) { + $cmd = "$::opt_pdftexcmd -interaction=nonstopmode $tmp"; +} +else { + $cmd = "$::opt_pdftexcmd -interaction=batchmode $tmp"; +} +print "* Running pdfTeX ...\n" if $::opt_verbose; +print "* pdfTeX call: $cmd\n" if $::opt_debug; +if ($::opt_verbose) { + system($cmd); +} +else { + `$cmd`; +} +if ($?) { + die "$Error pdfTeX run failed!\n"; +} + +### Move temp file to output +rename "$tmp.pdf", $outputfile or + die "$Error Cannot move `$tmp.pdf' to `$outputfile'!\n"; + +print "==> $page pages written on `$outputfile'.\n"; + +$exit_code = 0; +cleanup(); + +__END__ diff --git a/Master/bin/sparc-linux/pdfetex b/Master/bin/sparc-linux/pdfetex Binary files differindex 568cc44877f..810ae7101ed 100755 --- a/Master/bin/sparc-linux/pdfetex +++ b/Master/bin/sparc-linux/pdfetex diff --git a/Master/bin/sparc-linux/pdfopen b/Master/bin/sparc-linux/pdfopen Binary files differindex 5e52e211549..5921e45e0f7 100755 --- a/Master/bin/sparc-linux/pdfopen +++ b/Master/bin/sparc-linux/pdfopen diff --git a/Master/bin/sparc-linux/pdftools b/Master/bin/sparc-linux/pdftools new file mode 100755 index 00000000000..92ee803a868 --- /dev/null +++ b/Master/bin/sparc-linux/pdftools @@ -0,0 +1,2 @@ +#!/bin/sh +texmfstart pdftools.rb "$@" diff --git a/Master/bin/sparc-linux/perltex b/Master/bin/sparc-linux/perltex index 09a656dae3f..dd8dda2804b 100755 --- a/Master/bin/sparc-linux/perltex +++ b/Master/bin/sparc-linux/perltex @@ -15,19 +15,23 @@ # # This is a generated file. # -# Copyright (C) 2004 by Scott Pakin <scott+pt@pakin.org> +# Copyright (C) 2006, Scott Pakin <scott+pt@pakin.org> # # This file may be distributed and/or modified under the conditions -# of the LaTeX Project Public License, either version 1.2 of this +# of the LaTeX Project Public License, either version 1.3c of this # license or (at your option) any later version. The latest # version of this license is in: # # http://www.latex-project.org/lppl.txt # -# and version 1.2 or later is part of all distributions of LaTeX -# version 1999/12/01 or later. +# and version 1.3c or later is part of all distributions of LaTeX +# version 2006/05/20 or later. #------------------------------------------------------------------- +sub top_level_eval ($) +{ + return eval $_[0]; +} use Safe; use Opcode; use Getopt::Long; @@ -49,6 +53,7 @@ my $fromflag; my $doneflag; my $logfile; my $sandbox = new Safe; +my $sandbox_eval; my $latexpid; $latexprog = $ENV{"PERLTEX"} || "latex"; Getopt::Long::Configure("require_order", "pass_through"); @@ -97,9 +102,14 @@ if (!$latexpid) { exec {$latexcmdline[0]} @latexcmdline; die "exec('@latexcmdline'): $!\n"; } -@permittedops=(":browse") if $#permittedops==-1; -@permittedops=(Opcode::full_opset()) if !$runsafely; -$sandbox->permit_only (@permittedops); +if ($runsafely) { + @permittedops=(":browse") if $#permittedops==-1; + $sandbox->permit_only (@permittedops); + $sandbox_eval = sub {$sandbox->reval($_[0])}; +} +else { + $sandbox_eval = \&top_level_eval; +} while (1) { my $awaitexists = sub { while (!-e $_[0]) { @@ -136,12 +146,18 @@ while (1) { } my $perlcode; if ($optag eq "DEF") { - $perlcode = - sprintf "sub %s {%s}\n", - $macroname, $otherstuff[0]; + $perlcode = + sprintf "sub %s {%s}\n", + $macroname, $otherstuff[0]; + } + elsif ($optag eq "USE") { + $perlcode = sprintf "%s (%s);\n", $macroname, join(", ", @otherstuff); + } + elsif ($optag eq "RUN") { + $perlcode = $otherstuff[0]; } else { - $perlcode = sprintf "%s (%s);\n", $macroname, join(", ", @otherstuff); + die "${progname}: Internal error -- unexpected operation tag \"$optag\"\n"; } print LOGFILE "#" x 31, " PERL CODE ", "#" x 32, "\n"; print LOGFILE $perlcode, "\n"; @@ -151,13 +167,13 @@ while (1) { my $warningmsg; local $SIG{__WARN__} = sub {chomp ($warningmsg=$_[0]); return 0}; - $result = $sandbox->reval ($perlcode); + $result = $sandbox_eval->($perlcode); if (defined $warningmsg) { $warningmsg =~ s/at \(eval \d+\) line \d+\W+//; print LOGFILE "# ===> $warningmsg\n\n"; } } - $result="" if !$result; + $result="" if !$result || $optag eq "RUN"; if ($@) { my $msg = $@; $msg =~ s/at \(eval \d+\) line \d+\W+//; diff --git a/Master/bin/sparc-linux/pfb2pfa b/Master/bin/sparc-linux/pfb2pfa Binary files differindex f97300632dd..ca0596e1269 100755 --- a/Master/bin/sparc-linux/pfb2pfa +++ b/Master/bin/sparc-linux/pfb2pfa diff --git a/Master/bin/sparc-linux/pk2bm b/Master/bin/sparc-linux/pk2bm Binary files differindex 5319f8efa52..81b68d535f2 100755 --- a/Master/bin/sparc-linux/pk2bm +++ b/Master/bin/sparc-linux/pk2bm diff --git a/Master/bin/sparc-linux/pktogf b/Master/bin/sparc-linux/pktogf Binary files differindex 4bf2f41f1e0..321d5a41ad5 100755 --- a/Master/bin/sparc-linux/pktogf +++ b/Master/bin/sparc-linux/pktogf diff --git a/Master/bin/sparc-linux/pktype b/Master/bin/sparc-linux/pktype Binary files differindex c6b44851dc9..3fa252b88ff 100755 --- a/Master/bin/sparc-linux/pktype +++ b/Master/bin/sparc-linux/pktype diff --git a/Master/bin/sparc-linux/pltotf b/Master/bin/sparc-linux/pltotf Binary files differindex 554fe10a51d..4e03680e633 100755 --- a/Master/bin/sparc-linux/pltotf +++ b/Master/bin/sparc-linux/pltotf diff --git a/Master/bin/sparc-linux/pooltype b/Master/bin/sparc-linux/pooltype Binary files differindex b8369e8a0fa..7c233b0ab1b 100755 --- a/Master/bin/sparc-linux/pooltype +++ b/Master/bin/sparc-linux/pooltype diff --git a/Master/bin/sparc-linux/ps2pk b/Master/bin/sparc-linux/ps2pk Binary files differindex bcb65687c4c..cac16af5c8d 100755 --- a/Master/bin/sparc-linux/ps2pk +++ b/Master/bin/sparc-linux/ps2pk diff --git a/Master/bin/sparc-linux/ps4pdf b/Master/bin/sparc-linux/ps4pdf index 81f254a3735..cbdcb022926 100755 --- a/Master/bin/sparc-linux/ps4pdf +++ b/Master/bin/sparc-linux/ps4pdf @@ -1,6 +1,13 @@ #!/bin/sh # Copyright (C) 2004, Thomas Esser. Public domain. +# 2005-03-08: New option "--crop", Rolf Niepraschk. +# dvips call only if the dvi file exist (RN). +# 2005-06-27: ps2pdf call only if the ps file exist (RN). +# 2006-04-05: "\RequirePackage{pst-pdf}" added to the (pdf)LaTeX calls +# as suggested by Niall Murphy. +# 2006-07-14: Better temp dir handling (suggested by Karl Berry) (RN). +# 2006-07-23: New option --Xps2pdf and code cleanup (thanks to Karl Berry) (RN). # First, work around bugs/limitations in some shells on some systems: test -f /bin/sh5 && test -z "$RUNNING_SH5" \ @@ -22,7 +29,7 @@ test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"' ############################################################################### cleanup() { - rc=$1 + rc=$? $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \ && { rm -f "$tmpdir"/*; cd /; rmdir "$tmpdir"; } @@ -38,7 +45,7 @@ setupTmpDir() { $needsCleanup && return - trap 'cleanup 1' 1 2 3 7 13 15 + trap 'cleanup' 1 2 3 7 13 15 needsCleanup=true (umask 077; mkdir "$tmpdir") \ || abort "could not create directory \`$tmpdir'" @@ -61,14 +68,17 @@ myexec() if test $rc != 0; then echo "$0: command $@ returned with code $rc" cat <$log - cleanup $rc + (exit $rc) # set return value + cleanup fi } # some initializations progname=pdflatexps silent=true # default setting; change if you like +crop=false needsCleanup=false +ps2pdf_opts="-dAutoRotatePages=/None" tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/.$progname$$ log=$tmpdir/log version="1.0" @@ -76,10 +86,16 @@ version="1.0" # look for optional things first while case $1 in - --help|-h) echo "$0 [-v|-q] file" - echo "Process LaTeX document containing PSforPDF macros." - exit 0;; + --help|-h) echo "$0 [-v|-q|--crop|--version|--Xps2pdf OPT] FILE" + echo "Process LaTeX document FILE using the pst-pdf package," + echo "including running latex, dvips, and ps2pdf as necessary." + echo "--Xps2pdf OPT passes OPT to ps2pdf." + echo " (-dAutoRotatePages=/None is always passed.)" + echo "--crop runs pdfcrop on ps2pdf output." + exit 0;; --version) echo "$progname version $version"; exit 0;; + --crop|-c) crop=true;; + --Xps2pdf|-Xps2pdf) shift; ps2pdf_opts="$ps2pdf_opts $1";; -q) silent=true;; -v) silent=false;; -*) echo "$progname: unknown option $1 ignored";; @@ -88,17 +104,30 @@ while do shift done + # remaining option: filename file=$1 +if test -z "$file"; then + echo "$0: no file to process, try --help for more information." >&2 + exit 1 +fi # jobname von TeX: Verzeichnisse entfernen, evtl. vorhandene Extension # entfernen. job=`echo "x$1" | sed 's@x@@; s@.*/@@; s@\.[^.]*$@@'` setupTmpDir -myexec latex "$file" -myexec dvips -Ppdf -o "$job-pics.ps" "$job.dvi" -myexec ps2pdf -dAutoRotatePages=/None "$job-pics.ps" "$job-pics.pdf" -myexec pdflatex "$file" +myexec latex \ + "\AtBeginDocument{\RequirePackage{pst-pdf}} \input{$file}" +test -f "$job.dvi" && myexec dvips -Ppdf -o "$job-pics.ps" "$job.dvi" +test -f "$job-pics.ps" && myexec ps2pdf \ + "$ps2pdf_opts" "$job-pics.ps" "$job-pics.pdf" +if $crop; then + myexec pdfcrop "$job-pics.pdf" "$job-pics-crop.pdf" + mv "$job-pics-crop.pdf" "$job-pics.pdf" +fi +myexec pdflatex \ + "\AtBeginDocument{\RequirePackage{pst-pdf}} \input{$file}" +true +cleanup -cleanup 0 diff --git a/Master/bin/sparc-linux/psbook b/Master/bin/sparc-linux/psbook Binary files differindex a5ea5d71b7b..202213962a3 100755 --- a/Master/bin/sparc-linux/psbook +++ b/Master/bin/sparc-linux/psbook diff --git a/Master/bin/sparc-linux/psnup b/Master/bin/sparc-linux/psnup Binary files differindex 9a38a9d688a..f164a0e983c 100755 --- a/Master/bin/sparc-linux/psnup +++ b/Master/bin/sparc-linux/psnup diff --git a/Master/bin/sparc-linux/psresize b/Master/bin/sparc-linux/psresize Binary files differindex fdc97be7d92..df140494bf1 100755 --- a/Master/bin/sparc-linux/psresize +++ b/Master/bin/sparc-linux/psresize diff --git a/Master/bin/sparc-linux/psselect b/Master/bin/sparc-linux/psselect Binary files differindex c776ae21d0d..dcf0b342715 100755 --- a/Master/bin/sparc-linux/psselect +++ b/Master/bin/sparc-linux/psselect diff --git a/Master/bin/sparc-linux/pstopdf b/Master/bin/sparc-linux/pstopdf new file mode 100755 index 00000000000..5b38ed426cb --- /dev/null +++ b/Master/bin/sparc-linux/pstopdf @@ -0,0 +1,2 @@ +#!/bin/sh +texmfstart pstopdf.rb "$@" diff --git a/Master/bin/sparc-linux/pstops b/Master/bin/sparc-linux/pstops Binary files differindex 20f0fd69739..10eafe52f4b 100755 --- a/Master/bin/sparc-linux/pstops +++ b/Master/bin/sparc-linux/pstops diff --git a/Master/bin/sparc-linux/rlxtools b/Master/bin/sparc-linux/rlxtools new file mode 100755 index 00000000000..41cea40fc09 --- /dev/null +++ b/Master/bin/sparc-linux/rlxtools @@ -0,0 +1,2 @@ +#!/bin/sh +texmfstart rlxtools.rb "$@" diff --git a/Master/bin/sparc-linux/runtools b/Master/bin/sparc-linux/runtools new file mode 100755 index 00000000000..ff9a333791b --- /dev/null +++ b/Master/bin/sparc-linux/runtools @@ -0,0 +1,2 @@ +#!/bin/sh +texmfstart runtools.rb "$@" diff --git a/Master/bin/sparc-linux/sjisconv b/Master/bin/sparc-linux/sjisconv Binary files differindex e61b5b55743..42f4cf0b887 100755 --- a/Master/bin/sparc-linux/sjisconv +++ b/Master/bin/sparc-linux/sjisconv diff --git a/Master/bin/sparc-linux/sjislatex b/Master/bin/sparc-linux/sjislatex index 2c9bc229c7b..68c554e6d71 100755 --- a/Master/bin/sparc-linux/sjislatex +++ b/Master/bin/sparc-linux/sjislatex @@ -1,5 +1,22 @@ #! /bin/sh +# Copyright (C) 1994-2006 Werner Lemberg <wl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + n=1 argv= diff --git a/Master/bin/sparc-linux/sjispdflatex b/Master/bin/sparc-linux/sjispdflatex index 294c5b188d0..e8d070e9dc6 100755 --- a/Master/bin/sparc-linux/sjispdflatex +++ b/Master/bin/sparc-linux/sjispdflatex @@ -1,5 +1,22 @@ #! /bin/sh +# Copyright (C) 1994-2006 Werner Lemberg <wl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + n=1 argv= diff --git a/Master/bin/sparc-linux/t1ascii b/Master/bin/sparc-linux/t1ascii Binary files differindex 1f1a8a4e6ac..5c1a926b93d 100755 --- a/Master/bin/sparc-linux/t1ascii +++ b/Master/bin/sparc-linux/t1ascii diff --git a/Master/bin/sparc-linux/t1asm b/Master/bin/sparc-linux/t1asm Binary files differindex 364e2a3c763..082deb340b5 100755 --- a/Master/bin/sparc-linux/t1asm +++ b/Master/bin/sparc-linux/t1asm diff --git a/Master/bin/sparc-linux/t1binary b/Master/bin/sparc-linux/t1binary Binary files differindex eb3f3e188fe..f5155ce653d 100755 --- a/Master/bin/sparc-linux/t1binary +++ b/Master/bin/sparc-linux/t1binary diff --git a/Master/bin/sparc-linux/t1disasm b/Master/bin/sparc-linux/t1disasm Binary files differindex 1e2397ade81..fe311d73856 100755 --- a/Master/bin/sparc-linux/t1disasm +++ b/Master/bin/sparc-linux/t1disasm diff --git a/Master/bin/sparc-linux/t1dotlessj b/Master/bin/sparc-linux/t1dotlessj Binary files differindex 5363801d627..624c26019b3 100755 --- a/Master/bin/sparc-linux/t1dotlessj +++ b/Master/bin/sparc-linux/t1dotlessj diff --git a/Master/bin/sparc-linux/t1lint b/Master/bin/sparc-linux/t1lint Binary files differindex cb9c7d7e313..9503a39a875 100755 --- a/Master/bin/sparc-linux/t1lint +++ b/Master/bin/sparc-linux/t1lint diff --git a/Master/bin/sparc-linux/t1mac b/Master/bin/sparc-linux/t1mac Binary files differindex bec1e019a77..a09ec045f2f 100755 --- a/Master/bin/sparc-linux/t1mac +++ b/Master/bin/sparc-linux/t1mac diff --git a/Master/bin/sparc-linux/t1reencode b/Master/bin/sparc-linux/t1reencode Binary files differindex 8f04cef8850..02d4ec73ca2 100755 --- a/Master/bin/sparc-linux/t1reencode +++ b/Master/bin/sparc-linux/t1reencode diff --git a/Master/bin/sparc-linux/t1testpage b/Master/bin/sparc-linux/t1testpage Binary files differindex 4db8012f1ab..70ee5cf4e78 100755 --- a/Master/bin/sparc-linux/t1testpage +++ b/Master/bin/sparc-linux/t1testpage diff --git a/Master/bin/sparc-linux/t1unmac b/Master/bin/sparc-linux/t1unmac Binary files differindex f0d4304ff53..a70eb043a15 100755 --- a/Master/bin/sparc-linux/t1unmac +++ b/Master/bin/sparc-linux/t1unmac diff --git a/Master/bin/sparc-linux/t4ht b/Master/bin/sparc-linux/t4ht Binary files differindex 0ef8db1df22..30800d5c28c 100755 --- a/Master/bin/sparc-linux/t4ht +++ b/Master/bin/sparc-linux/t4ht diff --git a/Master/bin/sparc-linux/tangle b/Master/bin/sparc-linux/tangle Binary files differindex 2de442afa2d..cc9471ce7a9 100755 --- a/Master/bin/sparc-linux/tangle +++ b/Master/bin/sparc-linux/tangle diff --git a/Master/bin/sparc-linux/tcdialog b/Master/bin/sparc-linux/tcdialog Binary files differindex 42bf24507a4..715665d1d4c 100755 --- a/Master/bin/sparc-linux/tcdialog +++ b/Master/bin/sparc-linux/tcdialog diff --git a/Master/bin/sparc-linux/tex b/Master/bin/sparc-linux/tex Binary files differindex 7899ae8beb3..36ef28cc399 100755 --- a/Master/bin/sparc-linux/tex +++ b/Master/bin/sparc-linux/tex diff --git a/Master/bin/sparc-linux/tex4ht b/Master/bin/sparc-linux/tex4ht Binary files differindex 016803f0098..f59c9000872 100755 --- a/Master/bin/sparc-linux/tex4ht +++ b/Master/bin/sparc-linux/tex4ht diff --git a/Master/bin/sparc-linux/texexec b/Master/bin/sparc-linux/texexec index 529d2a8dc23..2158172906a 100755 --- a/Master/bin/sparc-linux/texexec +++ b/Master/bin/sparc-linux/texexec @@ -1,24 +1,2 @@ #!/bin/sh - -test -f /bin/sh5 && test -z "$RUNNING_SH5" \ - && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \ - && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; } -unset RUNNING_SH5 - -test -f /bin/bsh && test -z "$RUNNING_BSH" \ - && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \ - && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; } -unset RUNNING_BSH - -export PATH - -# hack around a bug in zsh: -test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"' - -what=`echo $0 | sed 's@.*/@@'` - -p=`kpsewhich -format=texmfscripts $what.pl` -{ test -n "$p" && test -f "$p"; } \ - || { echo "\`$what.pl' not found."; exit 1; } - -perl "$p" ${1+"$@"} +texmfstart texexec.rb "$@" diff --git a/Master/bin/sparc-linux/texfont b/Master/bin/sparc-linux/texfont index afced152700..a91f786e3f8 120000..100755 --- a/Master/bin/sparc-linux/texfont +++ b/Master/bin/sparc-linux/texfont @@ -1 +1,2 @@ -texexec
\ No newline at end of file +#!/bin/sh +texmfstart texfont.pl "$@" diff --git a/Master/bin/sparc-linux/texi2html b/Master/bin/sparc-linux/texi2html index 2338ce27088..515c41b0e6d 100755 --- a/Master/bin/sparc-linux/texi2html +++ b/Master/bin/sparc-linux/texi2html @@ -75,7 +75,7 @@ my $THISVERSION = '1.76'; my $THISPROG = "texi2html $THISVERSION"; # program name and version # set by configure, prefix for the sysconfdir and so on -my $prefix = '/home/vvv/src/tl/inst'; +my $prefix = '/home/vvv/src/texlive/source/inst'; my $sysconfdir; my $pkgdatadir; my $datadir; @@ -92,10 +92,10 @@ else $sysconfdir = "/usr/local/etc"; } -if ('/home/vvv/src/tl/inst' ne '@' . 'datadir@') +if ('/home/vvv/src/texlive/source/inst' ne '@' . 'datadir@') { - $pkgdatadir = eval '"/home/vvv/src/tl/inst/texi2html"'; - $datadir = eval '"/home/vvv/src/tl/inst"'; + $pkgdatadir = eval '"/home/vvv/src/texlive/source/inst/texi2html"'; + $datadir = eval '"/home/vvv/src/texlive/source/inst"'; } else { diff --git a/Master/bin/sparc-linux/texindex b/Master/bin/sparc-linux/texindex Binary files differindex f2fb8f72ced..ce5c8e02ad0 100755 --- a/Master/bin/sparc-linux/texindex +++ b/Master/bin/sparc-linux/texindex diff --git a/Master/bin/sparc-linux/texmfstart b/Master/bin/sparc-linux/texmfstart new file mode 100755 index 00000000000..a886b2aa142 --- /dev/null +++ b/Master/bin/sparc-linux/texmfstart @@ -0,0 +1,2556 @@ +#!/usr/bin/env ruby + +# program : texmfstart +# copyright : PRAGMA Advanced Document Engineering +# version : 1.9.0 - 2003/2006 +# author : Hans Hagen +# +# project : ConTeXt / eXaMpLe +# info : j.hagen@xs4all.nl +# www : www.pragma-pod.com / www.pragma-ade.com + +# no special requirements, i.e. no exa modules/classes used + +# texmfstart [switches] filename [optional arguments] +# +# ruby2exe texmfstart --help -> avoids stub test +# +# Of couse I can make this into a nice class, which i'll undoubtely will +# do when I feel the need. In that case it will be part of a bigger game. + +# turning this into a service would be nice, so some day ... + +# --locate => provides location +# --exec => exec instead of system +# --iftouched=a,b => only if timestamp a<>b +# --ifchanged=a,b => only if checksum changed +# +# file: path: bin: + +# texmfstart --exec bin:scite *.tex + +# we don't depend on other libs + +$: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq! + +require "rbconfig" +require "md5" + +# kpse_merge_done: require 'base/kpseremote' +# kpse_merge_done: require 'base/kpsedirect' +# kpse_merge_done: require 'base/kpsefast' +# kpse_merge_done: require 'base/merge' + +# kpse_merge_start + +# kpse_merge_file: 'C:/data/develop/context/ruby/base/kpseremote.rb' + +# kpse_merge_done: require 'base/kpsefast' + +case ENV['KPSEMETHOD'] + when /soap/o then # kpse_merge_done: require 'base/kpse/soap' + when /drb/o then # kpse_merge_done: require 'base/kpse/drb' + else # kpse_merge_done: require 'base/kpse/drb' +end + +class KpseRemote + + @@port = ENV['KPSEPORT'] || 7000 + @@method = ENV['KPSEMETHOD'] || 'drb' + + def KpseRemote::available? + @@method && @@port + end + + def KpseRemote::start_server(port=nil) + kpse = KpseServer.new(port || @@port) + kpse.start + end + + def KpseRemote::start_client(port=nil) # keeps object in server + kpseclient = KpseClient.new(port || @@port) + kpseclient.start + kpse = kpseclient.object + tree = kpse.choose(KpseUtil::identify, KpseUtil::environment) + [kpse, tree] + end + + def KpseRemote::fetch(port=nil) # no need for defining methods but slower, send whole object + kpseclient = KpseClient.new(port || @@port) + kpseclient.start + kpseclient.object.fetch(KpseUtil::identify, KpseUtil::environment) rescue nil + end + + def initialize(port=nil) + if KpseRemote::available? then + begin + @kpse, @tree = KpseRemote::start_client(port) + rescue + @kpse, @tree = nil, nil + end + else + @kpse, @tree = nil, nil + end + end + + def progname=(value) + @kpse.set(@tree,'progname',value) + end + def format=(value) + @kpse.set(@tree,'format',value) + end + def engine=(value) + @kpse.set(@tree,'engine',value) + end + + def progname + @kpse.get(@tree,'progname') + end + def format + @kpse.get(@tree,'format') + end + def engine + @kpse.get(@tree,'engine') + end + + def load + @kpse.load(KpseUtil::identify, KpseUtil::environment) + end + def okay? + @kpse && @tree + end + def set(key,value) + @kpse.set(@tree,key,value) + end + def load_cnf + @kpse.load_cnf(@tree) + end + def load_lsr + @kpse.load_lsr(@tree) + end + def expand_variables + @kpse.expand_variables(@tree) + end + def expand_braces(str) + clean_name(@kpse.expand_braces(@tree,str)) + end + def expand_path(str) + clean_name(@kpse.expand_path(@tree,str)) + end + def expand_var(str) + clean_name(@kpse.expand_var(@tree,str)) + end + def show_path(str) + clean_name(@kpse.show_path(@tree,str)) + end + def var_value(str) + clean_name(@kpse.var_value(@tree,str)) + end + def find_file(filename) + clean_name(@kpse.find_file(@tree,filename)) + end + def find_files(filename,first=false) + # dodo: each filename + @kpse.find_files(@tree,filename,first) + end + + private + + def clean_name(str) + str.gsub(/\\/,'/') + end + +end + + +# kpse_merge_file: 'C:/data/develop/context/ruby/base/kpsefast.rb' + +# module : base/kpsefast +# copyright : PRAGMA Advanced Document Engineering +# version : 2005 +# author : Hans Hagen +# +# project : ConTeXt / eXaMpLe +# concept : Hans Hagen +# info : j.hagen@xs4all.nl + +# todo: multiple cnf files +# + +class String + + def split_path + if self =~ /\;/o || self =~ /^[a-z]\:/io then + self.split(";") + else + self.split(":") + end + end + +end + +class Array + + def join_path + self.join(File::PATH_SEPARATOR) + end + +end + +class File + + def File.locate_file(path,name) + begin + files = Dir.entries(path) + if files.include?(name) then + fullname = File.join(path,name) + return fullname if FileTest.file?(fullname) + end + files.each do |p| + fullname = File.join(path,p) + if p != '.' and p != '..' and FileTest.directory?(fullname) and result = locate_file(fullname,name) then + return result + end + end + rescue + # bad path + end + return nil + end + + def File.glob_file(pattern) + return Dir.glob(pattern).first + end + +end + +module KpseUtil + + # to be adapted, see loading cnf file + + @@texmftrees = ['texmf-local','texmf.local','../..','texmf'] # '../..' is for gwtex + @@texmfcnf = 'texmf.cnf' + + def KpseUtil::identify + # we mainly need to identify the local tex stuff and wse assume that + # the texmfcnf variable is set; otherwise we need to expand the + # TEXMF variable and that takes time since it may involve more + ownpath = File.expand_path($0) + if ownpath.gsub!(/texmf.*?$/o, '') then + ENV['SELFAUTOPARENT'] = ownpath + else + ENV['SELFAUTOPARENT'] = '.' # fall back + # may be too tricky: + # + # (ENV['PATH'] ||'').split_path.each do |p| + # if p.gsub!(/texmf.*?$/o, '') then + # ENV['SELFAUTOPARENT'] = p + # break + # end + # end + end + filenames = Array.new + if ENV['TEXMFCNF'] && ! ENV['TEXMFCNF'].empty? then + ENV['TEXMFCNF'].to_s.split_path.each do |path| + filenames << File.join(path,@@texmfcnf) + end + elsif ENV['SELFAUTOPARENT'] == '.' then + filenames << File.join('.',@@texmfcnf) + else + @@texmftrees.each do |tree| + filenames << File.join(ENV['SELFAUTOPARENT'],tree,'web2c',@@texmfcnf) + end + end + loop do + busy = false + filenames.collect! do |f| + f.gsub(/\$([a-zA-Z0-9\_\-]+)/o) do + if (! ENV[$1]) || (ENV[$1] == $1) then + "$#{$1}" + else + busy = true + ENV[$1] + end + end + end + break unless busy + end + filenames.delete_if do |f| + ! FileTest.file?(f) + end + return filenames + end + + def KpseUtil::environment + Hash.new.merge(ENV) + end + +end + +class KpseFast + + # formats are an incredible inconsistent mess + + @@suffixes = Hash.new + @@formats = Hash.new + @@suffixmap = Hash.new + + @@texmfcnf = 'texmf.cnf' + + @@suffixes['gf'] = ['.<resolution>gf'] # todo + @@suffixes['pk'] = ['.<resolution>pk'] # todo + @@suffixes['tfm'] = ['.tfm'] + @@suffixes['afm'] = ['.afm'] + @@suffixes['base'] = ['.base'] + @@suffixes['bib'] = ['.bib'] + @@suffixes['bst'] = ['.bst'] + @@suffixes['cnf'] = ['.cnf'] + @@suffixes['ls-R'] = ['ls-R', 'ls-r'] + @@suffixes['fmt'] = ['.fmt', '.efmt', '.efm', '.ofmt', '.ofm', '.oft', '.eofmt', '.eoft', '.eof', '.pfmt', '.pfm', '.epfmt', '.epf', '.xpfmt', '.xpf', '.afmt', '.afm'] + @@suffixes['map'] = ['.map'] + @@suffixes['mem'] = ['.mem'] + @@suffixes['mf'] = ['.mf'] + @@suffixes['mfpool'] = ['.pool'] + @@suffixes['mft'] = ['.mft'] + @@suffixes['mp'] = ['.mp'] + @@suffixes['mppool'] = ['.pool'] + @@suffixes['ocp'] = ['.ocp'] + @@suffixes['ofm'] = ['.ofm', '.tfm'] + @@suffixes['opl'] = ['.opl'] + @@suffixes['otp'] = ['.otp'] + @@suffixes['ovf'] = ['.ovf'] + @@suffixes['ovp'] = ['.ovp'] + @@suffixes['graphic/figure'] = ['.eps', '.epsi'] + @@suffixes['tex'] = ['.tex'] + @@suffixes['texpool'] = ['.pool'] + @@suffixes['PostScript header'] = ['.pro'] + @@suffixes['type1 fonts'] = ['.pfa', '.pfb'] + @@suffixes['vf'] = ['.vf'] + @@suffixes['ist'] = ['.ist'] + @@suffixes['truetype fonts'] = ['.ttf', '.ttc'] + @@suffixes['web'] = ['.web', '.ch'] + @@suffixes['cweb'] = ['.w', '.web', '.ch'] + @@suffixes['enc files'] = ['.enc'] + @@suffixes['cmap files'] = ['.cmap'] + @@suffixes['subfont definition files'] = ['.sfd'] + @@suffixes['lig files'] = ['.lig'] + @@suffixes['bitmap font'] = [] + @@suffixes['MetaPost support'] = [] + @@suffixes['TeX system documentation'] = [] + @@suffixes['TeX system sources'] = [] + @@suffixes['Troff fonts'] = [] + @@suffixes['dvips config'] = [] + @@suffixes['type42 fonts'] = [] + @@suffixes['web2c files'] = [] + @@suffixes['other text files'] = [] + @@suffixes['other binary files'] = [] + @@suffixes['misc fonts'] = [] + @@suffixes['opentype fonts'] = [] + @@suffixes['pdftex config'] = [] + @@suffixes['texmfscripts'] = [] + + # replacements + + @@suffixes['fmt'] = ['.fmt'] + @@suffixes['type1 fonts'] = ['.pfa', '.pfb', '.pfm'] + @@suffixes['tex'] = ['.tex', '.xml'] + @@suffixes['texmfscripts'] = ['rb','lua','py','pl'] + + @@suffixes.keys.each do |k| @@suffixes[k].each do |s| @@suffixmap[s] = k end end + + # TTF2TFMINPUTS + # MISCFONTS + # TEXCONFIG + # DVIPDFMINPUTS + # OTFFONTS + + @@formats['gf'] = '' + @@formats['pk'] = '' + @@formats['tfm'] = 'TFMFONTS' + @@formats['afm'] = 'AFMFONTS' + @@formats['base'] = 'MFBASES' + @@formats['bib'] = '' + @@formats['bst'] = '' + @@formats['cnf'] = '' + @@formats['ls-R'] = '' + @@formats['fmt'] = 'TEXFORMATS' + @@formats['map'] = 'TEXFONTMAPS' + @@formats['mem'] = 'MPMEMS' + @@formats['mf'] = 'MFINPUTS' + @@formats['mfpool'] = 'MFPOOL' + @@formats['mft'] = '' + @@formats['mp'] = 'MPINPUTS' + @@formats['mppool'] = 'MPPOOL' + @@formats['ocp'] = 'OCPINPUTS' + @@formats['ofm'] = 'OFMFONTS' + @@formats['opl'] = 'OPLFONTS' + @@formats['otp'] = 'OTPINPUTS' + @@formats['ovf'] = 'OVFFONTS' + @@formats['ovp'] = 'OVPFONTS' + @@formats['graphic/figure'] = '' + @@formats['tex'] = 'TEXINPUTS' + @@formats['texpool'] = 'TEXPOOL' + @@formats['PostScript header'] = 'TEXPSHEADERS' + @@formats['type1 fonts'] = 'T1FONTS' + @@formats['vf'] = 'VFFONTS' + @@formats['ist'] = '' + @@formats['truetype fonts'] = 'TTFONTS' + @@formats['web'] = '' + @@formats['cweb'] = '' + @@formats['enc files'] = 'ENCFONTS' + @@formats['cmap files'] = 'CMAPFONTS' + @@formats['subfont definition files'] = 'SFDFONTS' + @@formats['lig files'] = 'LIGFONTS' + @@formats['bitmap font'] = '' + @@formats['MetaPost support'] = '' + @@formats['TeX system documentation'] = '' + @@formats['TeX system sources'] = '' + @@formats['Troff fonts'] = '' + @@formats['dvips config'] = '' + @@formats['type42 fonts'] = 'T42FONTS' + @@formats['web2c files'] = 'WEB2C' + @@formats['other text files'] = '' + @@formats['other binary files'] = '' + @@formats['misc fonts'] = '' + @@formats['opentype fonts'] = 'OPENTYPEFONTS' + @@formats['pdftex config'] = 'PDFTEXCONFIG' + @@formats['texmfscripts'] = 'TEXMFSCRIPTS' + + attr_accessor :progname, :engine, :format, :rootpath, :treepath, + :verbose, :remember, :scandisk, :diskcache, :renewcache + + @@cacheversion = '1' + + def initialize + @rootpath = '' + @treepath = '' + @progname = 'kpsewhich' + @engine = 'pdfetex' + @variables = Hash.new + @expansions = Hash.new + @files = Hash.new + @found = Hash.new + @kpsevars = Hash.new + @lsrfiles = Array.new + @cnffiles = Array.new + @verbose = true + @remember = true + @scandisk = true + @diskcache = true + @renewcache = false + @isolate = false + + @diskcache = false + @cachepath = nil + @cachefile = 'tmftools.log' + + @environment = ENV + end + + def set(key,value) + case key + when 'progname' then @progname = value + when 'engine' then @engine = value + when 'format' then @format = value + end + end + + def push_environment(env) + @environment = env + end + + # {$SELFAUTOLOC,$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,}/web2c} + # + # $SELFAUTOLOC : /usr/tex/bin/platform + # $SELFAUTODIR : /usr/tex/bin + # $SELFAUTOPARENT : /usr/tex + # + # since we live in scriptpath we need a slightly different method + + def load_cnf(filenames=nil) + unless filenames then + ownpath = File.expand_path($0) + if ownpath.gsub!(/texmf.*?$/o, '') then + @environment['SELFAUTOPARENT'] = ownpath + else + @environment['SELFAUTOPARENT'] = '.' + end + unless @treepath.empty? then + unless @rootpath.empty? then + @treepath = @treepath.split(',').collect do |p| File.join(@rootpath,p) end.join(',') + end + @environment['TEXMF'] = @treepath + # only the first one + @environment['TEXMFCNF'] = File.join(@treepath.split(',').first,'texmf/web2c') + end + unless @rootpath.empty? then + @environment['TEXMFCNF'] = File.join(@rootpath,'texmf/web2c') + @environment['SELFAUTOPARENT'] = @rootpath + @isolate = true + end + filenames = Array.new + if @environment['TEXMFCNF'] and not @environment['TEXMFCNF'].empty? then + @environment['TEXMFCNF'].to_s.split_path.each do |path| + filenames << File.join(path,@@texmfcnf) + end + elsif @environment['SELFAUTOPARENT'] == '.' then + filenames << File.join('.',@@texmfcnf) + else + ['texmf-local','texmf'].each do |tree| + filenames << File.join(@environment['SELFAUTOPARENT'],tree,'web2c',@@texmfcnf) + end + end + end + # <root>/texmf/web2c/texmf.cnf + filenames = _expanded_path_(filenames) + @rootpath = filenames.first + 3.times do + @rootpath = File.dirname(@rootpath) + end + filenames.collect! do |f| + f.gsub("\\", '/') + end + filenames.each do |fname| + if FileTest.file?(fname) and f = File.open(fname) then + @cnffiles << fname + while line = f.gets do + loop do + # concatenate lines ending with \ + break unless line.sub!(/\\\s*$/o) do + f.gets || '' + end + end + case line + when /^[\%\#]/o then + # comment + when /^\s*(.*?)\s*\=\s*(.*?)\s*$/o then + key, value = $1, $2 + unless @variables.key?(key) then + value.sub!(/\%.*$/,'') + value.sub!(/\~/, "$HOME") + @variables[key] = value + end + @kpsevars[key] = true + end + end + f.close + end + end + end + + def load_lsr + @lsrfiles = [] + simplified_list(expansion('TEXMF')).each do |p| + ['ls-R','ls-r'].each do |f| + filename = File.join(p,f) + if FileTest.file?(filename) then + @lsrfiles << [filename,File.size(filename)] + break + end + end + end + @files = Hash.new + if @diskcache then + ['HOME','TEMP','TMP','TMPDIR'].each do |key| + if @environment[key] then + if FileTest.directory?(@environment[key]) then + @cachepath = @environment[key] + @cachefile = [@rootpath.gsub(/[^A-Z0-9]/io, '-').gsub(/\-+/,'-'),File.basename(@cachefile)].join('-') + break + end + end + end + if @cachepath and not @renewcache and FileTest.file?(File.join(@cachepath,@cachefile)) then + begin + if f = File.open(File.join(@cachepath,@cachefile)) then + cacheversion = Marshal.load(f) + if cacheversion == @@cacheversion then + lsrfiles = Marshal.load(f) + if lsrfiles == @lsrfiles then + @files = Marshal.load(f) + end + end + f.close + end + rescue + @files = Hash.new + end + end + end + return if @files.size > 0 + @lsrfiles.each do |filedata| + filename, filesize = filedata + filepath = File.dirname(filename) + begin + path = '.' + data = IO.readlines(filename) + if data[0].chomp =~ /% ls\-R \-\- filename database for kpathsea\; do not change this line\./io then + data.each do |line| + case line + when /^[a-zA-Z0-9]/o then + line.chomp! + if @files[line] then + @files[line] << path + else + @files[line] = [path] + end + when /^\.\/(.*?)\:$/o then + path = File.join(filepath,$1) + end + end + end + rescue + # sorry + end + end + if @diskcache and @cachepath and f = File.open(File.join(@cachepath,@cachefile),'wb') then + f << Marshal.dump(@@cacheversion) + f << Marshal.dump(@lsrfiles) + f << Marshal.dump(@files) + f.close + end + end + + def expand_variables + @expansions = Hash.new + if @isolate then + @variables['TEXMFCNF'] = @environment['TEXMFCNF'].dup + @variables['SELFAUTOPARENT'] = @environment['SELFAUTOPARENT'].dup + else + @environment.keys.each do |e| + if e =~ /^([a-zA-Z]+)\_(.*)\s*$/o then + @expansions["#{$1}.#{$2}"] = (@environment[e] ||'').dup + else + @expansions[e] = (@environment[e] ||'').dup + end + end + end + @variables.keys.each do |k| + @expansions[k] = @variables[k].dup unless @expansions[k] + end + loop do + busy = false + @expansions.keys.each do |k| + @expansions[k].gsub!(/\$([a-zA-Z0-9\_\-]*)/o) do + busy = true + @expansions[$1] || '' + end + @expansions[k].gsub!(/\$\{([a-zA-Z0-9\_\-]*)\}/o) do + busy = true + @expansions[$1] || '' + end + end + break unless busy + end + @expansions.keys.each do |k| + @expansions[k] = @expansions[k].gsub("\\", '/') + end + end + + def variable(name='') + (name and not name.empty? and @variables[name.sub('$','')]) or '' + end + + def expansion(name='') + (name and not name.empty? and @expansions[name.sub('$','')]) or '' + end + + def variable?(name='') + name and not name.empty? and @variables.key?(name.sub('$','')) + end + + def expansion?(name='') + name and not name.empty? and @expansions.key?(name.sub('$','')) + end + + def simplified_list(str) + lst = str.gsub(/^\{/o,'').gsub(/\}$/o,'').split(",") + lst.collect do |l| + l.sub(/^[\!]*/,'').sub(/[\/\\]*$/o,'') + end + end + + def original_variable(variable) + if variable?("#{@progname}.#{variable}") then + variable("#{@progname}.#{variable}") + elsif variable?(variable) then + variable(variable) + else + '' + end + end + + def expanded_variable(variable) + if expansion?("#{variable}.#{@progname}") then + expansion("#{variable}.#{@progname}") + elsif expansion?(variable) then + expansion(variable) + else + '' + end + end + + def original_path(filename='') + _expanded_path_(original_variable(var_of_format_or_suffix(filename)).split(";")) + end + + def expanded_path(filename='') + _expanded_path_(expanded_variable(var_of_format_or_suffix(filename)).split(";")) + end + + def _expanded_path_(pathlist) + i, n = 0, 0 + pathlist.collect! do |mainpath| + mainpath.gsub(/([\{\}])/o) do + if $1 == "{" then + i += 1 ; n = i if i > n ; "<#{i}>" + else + i -= 1 ; "</#{i+1}>" + end + end + end + n.times do |i| + loop do + more = false + newlist = [] + pathlist.each do |path| + unless path.sub!(/^(.*?)<(#{n-i})>(.*?)<\/\2>(.*?)$/) do + pre, mid, post = $1, $3, $4 + mid.gsub!(/\,$/,',.') + mid.split(',').each do |m| + more = true + if m == '.' then + newlist << "#{pre}#{post}" + else + newlist << "#{pre}#{m}#{post}" + end + end + end then + newlist << path + end + end + if more then + pathlist = [newlist].flatten # copy -) + else + break + end + end + end + pathlist = pathlist.uniq.collect do |path| + p = path + # p.gsub(/^\/+/o) do '' end + # p.gsub!(/(.)\/\/(.)/o) do "#{$1}/#{$2}" end + # p.gsub!(/\/\/+$/o) do '//' end + p.gsub!(/\/\/+/o) do '//' end + p + end + pathlist + end + + # todo: ignore case + + def var_of_format(str) + @@formats[str] || '' + end + + def var_of_suffix(str) # includes . + if @@suffixmap.key?(str) then @@formats[@@suffixmap[str]] else '' end + end + + def var_of_format_or_suffix(str) + if @@formats.key?(str) then + @@formats[str] + elsif @@suffixmap.key?(File.extname(str)) then # extname includes . + @@formats[@@suffixmap[File.extname(str)]] # extname includes . + else + '' + end + end + +end + +class KpseFast + + # test things + + def list_variables(kpseonly=true) + @variables.keys.sort.each do |k| + if kpseonly then + puts("#{k} = #{@variables[k]}") if @kpsevars[k] + else + puts("#{if @kpsevars[k] then 'K' else 'E' end} #{k} = #{@variables[k]}") + end + end + end + + def list_expansions(kpseonly=true) + @expansions.keys.sort.each do |k| + if kpseonly then + puts("#{k} = #{@expansions[k]}") if @kpsevars[k] + else + puts("#{if @kpsevars[k] then 'K' else 'E' end} #{k} = #{@expansions[k]}") + end + end + end + + def list_lsr + puts("files = #{@files.size}") + end + + def set_test_patterns + @variables["KPSE_TEST_PATTERN_A"] = "foo/{1,2}/bar//" + @variables["KPSE_TEST_PATTERN_B"] = "!!x{A,B{1,2}}y" + @variables["KPSE_TEST_PATTERN_C"] = "x{A,B//{1,2}}y" + @variables["KPSE_TEST_PATTERN_D"] = "x{A,B//{1,2,}}//y" + end + + def show_test_patterns + ['A','B','D'].each do |i| + puts "" + puts @variables ["KPSE_TEST_PATTERN_#{i}"] + puts "" + puts expand_path("KPSE_TEST_PATTERN_#{i}").split_path + puts "" + end + end + +end + +class KpseFast + + # kpse stuff + + def expand_braces(str) # output variable and brace expansion of STRING. + _expanded_path_(original_variable(str).split_path).join_path + end + + def expand_path(str) # output complete path expansion of STRING. + _expanded_path_(expanded_variable(str).split_path).join_path + end + + def expand_var(str) # output variable expansion of STRING. + expanded_variable(str) + end + + def show_path(str) # output search path for file type NAME + expanded_path(str).join_path + end + + def var_value(str) # output the value of variable $STRING. + original_variable(str) + end + +end + +class KpseFast + + def _is_cnf_?(filename) + filename == File.basename((@cnffiles.first rescue @@texmfcnf) || @@texmfcnf) + end + + def find_file(filename) + if _is_cnf_?(filename) then + @cnffiles.first rescue '' + else + [find_files(filename,true)].flatten.first || '' + end + end + + def find_files(filename,first=false) + if _is_cnf_?(filename) then + result = @cnffiles.dup + else + if @remember then + # stamp = "#{filename}--#{@format}--#{@engine}--#{@progname}" + stamp = "#{filename}--#{@engine}--#{@progname}" + return @found[stamp] if @found.key?(stamp) + end + pathlist = expanded_path(filename) + result = [] + filelist = if @files.key?(filename) then @files[filename].uniq else nil end + done = false + if pathlist.size == 0 then + if FileTest.file?(filename) then + done = true + result << '.' + end + else + pathlist.each do |path| + doscan = if path =~ /^\!\!/o then false else true end + recurse = if path =~ /\/\/$/o then true else false end + pathname = path.dup + pathname.gsub!(/^\!+/o, '') + done = false + if not done and filelist then + # checking for exact match + if filelist.include?(pathname) then + result << pathname + done = true + end + if not done and recurse then + # checking for fuzzy // + pathname.gsub!(/\/+$/o, '/.*') + # pathname.gsub!(/\/\//o,'/[\/]*/') + pathname.gsub!(/\/\//o,'/.*?/') + re = /^#{pathname}/ + filelist.each do |f| + if re =~ f then + result << f # duplicates will be filtered later + done = true + end + break if done + end + end + end + if not done and doscan then + # checking for path itself + pname = pathname.sub(/\.\*$/,'') + if not pname =~ /\*/o and FileTest.file?(File.join(pname,filename)) then + result << pname + done = true + end + end + break if done and first + end + end + if not done and @scandisk then + pathlist.each do |path| + pathname = path.dup + unless pathname.gsub!(/^\!+/o, '') then # !! prevents scan + recurse = pathname.gsub!(/\/+$/o, '') + complex = pathname.gsub!(/\/\//o,'/*/') + if recurse then + if complex then + if ok = File.glob_file("#{pathname}/**/#{filename}") then + result << File.dirname(ok) + done = true + end + elsif ok = File.locate_file(pathname,filename) then + result << File.dirname(ok) + done = true + end + elsif complex then + if ok = File.glob_file("#{pathname}/#{filename}") then + result << File.dirname(ok) + done = true + end + elsif FileTest.file?(File.join(pathname,filename)) then + result << pathname + done = true + end + break if done and first + end + end + end + result = result.uniq.collect do |pathname| + File.join(pathname,filename) + end + @found[stamp] = result if @remember + end + return result # redundant + end + +end + +class KpseFast + + class FileData + attr_accessor :tag, :name, :size, :date + def initialize(tag=0,name=nil,size=nil,date=nil) + @tag, @name, @size, @date = tag, name, size, date + end + def FileData.sizes(a) + a.collect do |aa| + aa.size + end + end + def report + case @tag + when 1 then "deleted | #{@size.to_s.rjust(8)} | #{@date.strftime('%m/%d/%Y %I:%M')} | #{@name}" + when 2 then "present | #{@size.to_s.rjust(8)} | #{@date.strftime('%m/%d/%Y %I:%M')} | #{@name}" + when 3 then "obsolete | #{' '*8} | #{' '*16} | #{@name}" + end + end + end + + def analyze_files(filter='',strict=false,sort='',delete=false) + puts("command line = #{ARGV.join(' ')}") + puts("number of files = #{@files.size}") + puts("filter pattern = #{filter}") + puts("loaded cnf files = #{@cnffiles.join(' ')}") + puts('') + if filter.gsub!(/^not:/,'') then + def the_same(filter,filename) + not filter or filter.empty? or /#{filter}/ !~ filename + end + else + def the_same(filter,filename) + not filter or filter.empty? or /#{filter}/ =~ filename + end + end + @files.keys.each do |name| + if @files[name].size > 1 then + data = Array.new + @files[name].each do |path| + filename = File.join(path,name) + # if not filter or filter.empty? or /#{filter}/ =~ filename then + if the_same(filter,filename) then + if FileTest.file?(filename) then + if delete then + data << FileData.new(1,filename,File.size(filename),File.mtime(filename)) + begin + File.delete(filename) if delete + rescue + end + else + data << FileData.new(2,filename,File.size(filename),File.mtime(filename)) + end + else + # data << FileData.new(3,filename) + end + end + end + if data.length > 1 then + if strict then + # if data.collect do |d| d.size end.uniq! then + # data.sort! do |a,b| b.size <=> a.size end + # data.each do |d| puts d.report end + # puts '' + # end + data.sort! do |a,b| + if a.size and b.size then + b.size <=> a.size + else + 0 + end + end + bunch = Array.new + done = false + data.each do |d| + if bunch.size == 0 then + bunch << d + elsif bunch[0].size == d.size then + bunch << d + else + if bunch.size > 1 then + bunch.each do |b| + puts b.report + end + done = true + end + bunch = [d] + end + end + puts '' if done + else + case sort + when 'size' then data.sort! do |a,b| a.size <=> b.size end + when 'revsize' then data.sort! do |a,b| b.size <=> a.size end + when 'date' then data.sort! do |a,b| a.date <=> b.date end + when 'revdate' then data.sort! do |a,b| b.date <=> a.date end + end + data.each do |d| puts d.report end + puts '' + end + end + end + end + end + +end + + + # k = KpseFast.new # (root) + # k.set_test_patterns + # k.load_cnf + # k.expand_variables + # k.load_lsr + + # k.show_test_patterns + + # puts k.list_variables + # puts k.list_expansions + # k.list_lsr + # puts k.expansion("$TEXMF") + # puts k.expanded_path("TEXINPUTS","context") + + # k.progname, k.engine, k.format = 'context', 'pdfetex', 'tfm' + # k.scandisk = false # == must_exist + # k.expand_variables + + # 10.times do |i| puts k.find_file('texnansi-lmr10.tfm') end + + # puts "expand braces $TEXMF" + # puts k.expand_braces("$TEXMF") + # puts "expand path $TEXMF" + # puts k.expand_path("$TEXMF") + # puts "expand var $TEXMF" + # puts k.expand_var("$TEXMF") + # puts "expand path $TEXMF" + # puts k.show_path('tfm') + # puts "expand value $TEXINPUTS" + # puts k.var_value("$TEXINPUTS") + # puts "expand value $TEXINPUTS.context" + # puts k.var_value("$TEXINPUTS.context") + + # exit + + + +# kpse_merge_file: 'C:/data/develop/context/ruby/base/kpse/drb.rb' + +require 'drb' +# kpse_merge_done: require 'base/kpse/trees' + +class KpseServer + + attr_accessor :port + + def initialize(port=7000) + @port = port + end + + def start + puts "starting drb service at port #{@port}" + DRb.start_service("druby://localhost:#{@port}", KpseTrees.new) + trap(:INT) do + DRb.stop_service + end + DRb.thread.join + end + + def stop + # todo + end + +end + +class KpseClient + + attr_accessor :port + + def initialize(port=7000) + @port = port + @kpse = nil + end + + def start + # only needed when callbacks are used / slow, due to Socket::getaddrinfo + # DRb.start_service + end + + def object + @kpse = DRbObject.new(nil,"druby://localhost:#{@port}") + end + +end + + +# SERVER_URI="druby://localhost:8787" +# +# # Start a local DRbServer to handle callbacks. +# # +# # Not necessary for this small example, but will be required +# # as soon as we pass a non-marshallable object as an argument +# # to a dRuby call. +# DRb.start_service +# + + +# kpse_merge_file: 'C:/data/develop/context/ruby/base/kpse/trees.rb' + +require 'monitor' +# kpse_merge_done: require 'base/kpsefast' + +class KpseTrees < Monitor + + def initialize + @trees = Hash.new + end + + def pattern(filenames) + filenames.join('|').gsub(/\\+/o,'/').downcase + end + + def choose(filenames,environment) + current = pattern(filenames) + load(filenames,environment) unless @trees[current] + puts "enabling tree #{current}" + current + end + + def fetch(filenames,environment) # will send whole object ! + current = pattern(filenames) + load(filenames,environment) unless @trees[current] + puts "fetching tree #{current}" + @trees[current] + end + + def load(filenames,environment) + current = pattern(filenames) + puts "loading tree #{current}" + @trees[current] = KpseFast.new + @trees[current].push_environment(environment) + @trees[current].load_cnf(filenames) + @trees[current].expand_variables + @trees[current].load_lsr + end + + def set(tree,key,value) + case key + when 'progname' then @trees[tree].progname = value + when 'engine' then @trees[tree].engine = value + when 'format' then @trees[tree].format = value + end + end + def get(tree,key) + case key + when 'progname' then @trees[tree].progname + when 'engine' then @trees[tree].engine + when 'format' then @trees[tree].format + end + end + + def load_cnf(tree) + @trees[tree].load_cnf + end + def load_lsr(tree) + @trees[tree].load_lsr + end + def expand_variables(tree) + @trees[tree].expand_variables + end + def expand_braces(tree,str) + @trees[tree].expand_braces(str) + end + def expand_path(tree,str) + @trees[tree].expand_path(str) + end + def expand_var(tree,str) + @trees[tree].expand_var(str) + end + def show_path(tree,str) + @trees[tree].show_path(str) + end + def var_value(tree,str) + @trees[tree].var_value(str) + end + def find_file(tree,filename) + @trees[tree].find_file(filename) + end + def find_files(tree,filename,first) + @trees[tree].find_files(filename,first) + end + +end + + +# kpse_merge_file: 'C:/data/develop/context/ruby/base/kpsedirect.rb' + +class KpseDirect + + attr_accessor :progname, :format, :engine + + def initialize + @progname, @format, @engine = '', '', '' + end + + def expand_path(str) + clean_name(`kpsewhich -expand-path=#{str}`.chomp) + end + + def expand_var(str) + clean_name(`kpsewhich -expand-var=#{str}`.chomp) + end + + def find_file(str) + clean_name(`kpsewhich #{_progname_} #{_format_} #{str}`.chomp) + end + + def _progname_ + if @progname.empty? then '' else "-progname=#{@progname}" end + end + def _format_ + if @format.empty? then '' else "-format=\"#{@format}\"" end + end + + private + + def clean_name(str) + str.gsub(/\\/,'/') + end + +end + + +# kpse_merge_file: 'C:/data/develop/context/ruby/base/merge.rb' + +# module : base/merge +# copyright : PRAGMA Advanced Document Engineering +# version : 2006 +# author : Hans Hagen +# +# project : ConTeXt / eXaMpLe +# concept : Hans Hagen +# info : j.hagen@xs4all.nl + + +# this module will package all the used modules in the file itself +# so that we can relocate the file at wish, usage: +# +# merge: +# +# unless SelfMerge::ok? && SelfMerge::merge then +# puts("merging should happen on the path were the base inserts reside") +# end +# +# cleanup: +# +# unless SelfMerge::cleanup then +# puts("merging should happen on the path were the base inserts reside") + +module SelfMerge + + @@kpsemergestart = "\# kpse_merge_start" + @@kpsemergestop = "\# kpse_merge_stop" + @@kpsemergefile = "\# kpse_merge_file: " + @@kpsemergedone = "\# kpse_merge_done: " + + @@filename = File.basename($0) + @@ownpath = File.expand_path(File.dirname($0)) + @@modroot = '(base|graphics|rslb|www)' # needed in regex in order not to mess up SelfMerge + @@modules = $".collect do |file| File.expand_path(file) end + + @@modules.delete_if do |file| + file !~ /^#{@@ownpath}\/#{@@modroot}.*$/ + end + + def SelfMerge::ok? + begin + @@modules.each do |file| + return false unless FileTest.file?(file) + end + rescue + return false + else + return true + end + end + + def SelfMerge::merge + begin + if SelfMerge::ok? && rbfile = IO.read(@@filename) then + begin + inserts = "#{@@kpsemergestart}\n\n" + @@modules.each do |file| + inserts << "#{@@kpsemergefile}'#{file}'\n\n" + inserts << IO.read(file).gsub(/^#.*?\n$/,'') + inserts << "\n\n" + end + inserts << "#{@@kpsemergestop}\n\n" + # no gsub! else we end up in SelfMerge + rbfile.sub!(/#{@@kpsemergestart}\s*#{@@kpsemergestop}/mois) do + inserts + end + rbfile.gsub!(/^(.*)(require [\"\'].*?#{@@modroot}.*)$/) do + pre, post = $1, $2 + if pre =~ /#{@@kpsemergedone}/ then + "#{pre}#{post}" + else + "#{pre}#{@@kpsemergedone}#{post}" + end + end + rescue + return false + else + begin + File.open(@@filename,'w') do |f| + f << rbfile + end + rescue + return false + end + end + end + rescue + return false + else + return true + end + end + + def SelfMerge::cleanup + begin + if rbfile = IO.read(@@filename) then + begin + rbfile.sub!(/#{@@kpsemergestart}(.*)#{@@kpsemergestop}\s*/mois) do + "#{@@kpsemergestart}\n\n#{@@kpsemergestop}\n\n" + end + rbfile.gsub!(/^(.*#{@@kpsemergedone}.*)$/) do + str = $1 + if str =~ /require [\"\']/ then + str.gsub(/#{@@kpsemergedone}/, '') + else + str + end + end + rescue + return false + else + begin + File.open(@@filename,'w') do |f| + f << rbfile + end + rescue + return false + end + end + end + rescue + return false + else + return true + end + end + + def SelfMerge::replace + if SelfMerge::ok? then + SelfMerge::cleanup + SelfMerge::merge + end + end + +end + + +# kpse_merge_stop + + + +$mswindows = Config::CONFIG['host_os'] =~ /mswin/ +$separator = File::PATH_SEPARATOR +$version = "2.0.2" +$ownpath = File.dirname($0) + +if $mswindows then + require "win32ole" + require "Win32API" +end + +# exit if defined?(REQUIRE2LIB) + +$stdout.sync = true +$stderr.sync = true + +$applications = Hash.new +$suffixinputs = Hash.new +$predefined = Hash.new + +$suffixinputs['pl'] = 'PERLINPUTS' +$suffixinputs['rb'] = 'RUBYINPUTS' +$suffixinputs['py'] = 'PYTHONINPUTS' +$suffixinputs['lua'] = 'LUAINPUTS' +$suffixinputs['jar'] = 'JAVAINPUTS' +$suffixinputs['pdf'] = 'PDFINPUTS' + +$predefined['texexec'] = 'texexec.rb' +$predefined['texutil'] = 'texutil.rb' +$predefined['texfont'] = 'texfont.pl' +$predefined['texshow'] = 'texshow.pl' + +$predefined['makempy'] = 'makempy.pl' +$predefined['mptopdf'] = 'mptopdf.pl' +$predefined['pstopdf'] = 'pstopdf.rb' + +$predefined['examplex'] = 'examplex.rb' +$predefined['concheck'] = 'concheck.rb' + +$predefined['runtools'] = 'runtools.rb' +$predefined['textools'] = 'textools.rb' +$predefined['tmftools'] = 'tmftools.rb' +$predefined['ctxtools'] = 'ctxtools.rb' +$predefined['rlxtools'] = 'rlxtools.rb' +$predefined['pdftools'] = 'pdftools.rb' +$predefined['mpstools'] = 'mpstools.rb' +$predefined['exatools'] = 'exatools.rb' +$predefined['xmltools'] = 'xmltools.rb' +$predefined['luatools'] = 'luatools.lua' +$predefined['mtxtools'] = 'mtxtools.rb' + +$predefined['newpstopdf'] = 'pstopdf.rb' +$predefined['newtexexec'] = 'texexec.rb' +$predefined['pdftrimwhite'] = 'pdftrimwhite.pl' + +$makelist = [ + # context + 'texexec', + 'texutil', + 'texfont', + # mp/ps + 'pstopdf', + 'mptopdf', + 'makempy', + # misc + 'ctxtools', + 'pdftools', + 'xmltools', + 'textools', + 'mpstools', + 'tmftools', + 'exatools', + 'runtools', + 'rlxtools', + 'luatools', + 'mtxtools', + # + # no, 'texmfstart' +] + +$scriptlist = 'rb|pl|py|lua|jar' +$documentlist = 'pdf|ps|eps|htm|html' + +$editor = ENV['TEXMFSTART_EDITOR'] || ENV['EDITOR'] || ENV['editor'] || 'scite' + +$crossover = true # to other tex tools, else only local +$kpse = nil + +def set_applications(page=1) + + $applications['unknown'] = '' + $applications['perl'] = $applications['pl'] = 'perl' + $applications['ruby'] = $applications['rb'] = 'ruby' + $applications['python'] = $applications['py'] = 'python' + $applications['lua'] = $applications['lua'] = 'lua' + $applications['java'] = $applications['jar'] = 'java' + + if $mswindows then + $applications['pdf'] = ['',"pdfopen --page #{page} --file",'acroread'] + $applications['html'] = ['','netscape','mozilla','opera','iexplore'] + $applications['ps'] = ['','gview32','gv','gswin32','gs'] + else + $applications['pdf'] = ["pdfopen --page #{page} --file",'acroread'] + $applications['html'] = ['netscape','mozilla','opera'] + $applications['ps'] = ['gview','gv','gs'] + end + + $applications['htm'] = $applications['html'] + $applications['eps'] = $applications['ps'] + +end + +set_applications() + +def check_kpse + if $kpse then + # already done + else + begin + if KpseRemote::available? then + $kpse = KpseRemote.new + if $kpse.okay? then + puts("kpse : remote") if $verbose + else + $kpse = KpseDirect.new + puts("kpse : direct (forced)") if $verbose + end + else + $kpse = KpseDirect.new + puts("kpse : direct") if $verbose + end + rescue + puts("kpse : direct (fallback)") if $verbose + end + end +end + +if $mswindows then + + GetShortPathName = Win32API.new('kernel32', 'GetShortPathName', ['P','P','N'], 'N') + GetLongPathName = Win32API.new('kernel32', 'GetLongPathName', ['P','P','N'], 'N') + + def dowith_pathname (filename,filemethod) + filename = filename.gsub(/\\/o,'/') # no gsub! because filename can be frozen + case filename + when /\;/o then + # could be a path spec + return filename + when /\s+/o then + # danger lurking + buffer = ' ' * 260 + length = filemethod.call(filename,buffer,buffer.size) + if length>0 then + return buffer.slice(0..length-1) + else + # when the path or file does not exist, nothing is returned + # so we try to handle the path separately from the basename + basename = File.basename(filename) + pathname = File.dirname(filename) + length = filemethod.call(pathname,buffer,260) + if length>0 then + return buffer.slice(0..length-1) + '/' + basename + else + return filename + end + end + else + # no danger + return filename + end + end + + def longpathname (filename) + dowith_pathname(filename,GetLongPathName) + end + + def shortpathname (filename) + dowith_pathname(filename,GetShortPathName) + end + +else + + def longpathname (filename) + filename + end + + def shortpathname (filename) + filename + end + +end + +class File + + # def File.needsupdate(oldname,newname) + # begin + # if $mswindows then + # return File.stat(oldname).mtime > File.stat(newname).mtime + # else + # return File.stat(oldname).mtime != File.stat(newname).mtime + # end + # rescue + # return true + # end + # end + + @@update_eps = 1 + + def File.needsupdate(oldname,newname) + begin + oldtime = File.stat(oldname).mtime.to_i + newtime = File.stat(newname).mtime.to_i + if newtime >= oldtime then + return false + elsif oldtime-newtime < @@update_eps then + return false + else + return true + end + rescue + return true + end + end + + def File.syncmtimes(oldname,newname) + return + begin + if $mswindows then + # does not work (yet) / gives future timestamp + # t = File.mtime(oldname) # i'm not sure if the time is frozen, so we do it here + # File.utime(0,t,oldname,newname) + else + t = File.mtime(oldname) # i'm not sure if the time is frozen, so we do it here + File.utime(0,t,oldname,newname) + end + rescue + end + end + + def File.timestamp(name) + begin + "#{File.stat(name).mtime}" + rescue + return 'unknown' + end + end + +end + +def hashed (arr=[]) + arg = if arr.class == String then arr.split(' ') else arr.dup end + hsh = Hash.new + if arg.length > 0 + hsh['arguments'] = '' + done = false + arg.each do |s| + if done then + hsh['arguments'] += ' ' + s + else + kvl = s.split('=') + if kvl[0].sub!(/^\-+/,'') then + hsh[kvl[0]] = if kvl.length > 1 then kvl[1] else true end + else + hsh['file'] = s + done = true + end + end + end + end + return hsh +end + +def launch(filename) + if $browser && $mswindows then + filename = filename.gsub(/\.[\/\\]/) do + Dir.getwd + '/' + end + report("launching #{filename}") + ie = WIN32OLE.new("InternetExplorer.Application") + ie.visible = true + ie.navigate(filename) + return true + else + return false + end +end + +# env|environment +# rel|relative +# loc|locate|kpse|path|file + +def expanded(arg) # no "other text files", too restricted + arg.gsub(/(env|environment)\:([a-zA-Z\-\_\.0-9]+)/o) do + method, original, resolved = $1, $2, '' + if resolved = ENV[original] then + report("environment variable #{original} expands to #{resolved}") unless $report + resolved + else + report("environment variable #{original} cannot be resolved") unless $report + original + end + end . gsub(/(rel|relative)\:([a-zA-Z\-\_\.0-9]+)/o) do + method, original, resolved = $1, $2, '' + ['.','..','../..'].each do |r| + if FileTest.file?(File.join(r,original)) then + resolved = File.join(r,original) + break + end + end + if resolved.empty? then + original + else + resolved + end + end . gsub(/(kpse|loc|locate|file|path)\:([a-zA-Z\-\_\.0-9]+)/o) do + method, original, resolved = $1, $2, '' + if $program && ! $program.empty? then + # pstrings = ["-progname=#{$program}"] + pstrings = [$program] + else + # pstrings = ['','-progname=context'] + pstrings = ['','context'] + end + # auto suffix with texinputs as fall back + if ENV["_CTX_K_V_#{original}_"] then + resolved = ENV["_CTX_K_V_#{original}_"] + report("environment provides #{original} as #{resolved}") unless $report + resolved + else + check_kpse + pstrings.each do |pstr| + if resolved.empty? then + # command = "kpsewhich #{pstr} #{original}" + # report("running #{command}") + report("locating '#{original}' in program space '#{pstr}'") + begin + # resolved = `#{command}`.chomp + $kpse.progname = pstr + $kpse.format = '' + resolved = $kpse.find_file(original).gsub(/\\/,'/') + rescue + resolved = '' + end + end + # elsewhere in the tree + if resolved.empty? then + # command = "kpsewhich #{pstr} -format=\"other text files\" #{original}" + # report("running #{command}") + report("locating '#{original}' in program space '#{pstr}' using format 'other text files'") + begin + # resolved = `#{command}`.chomp + $kpse.progname = pstr + $kpse.format = 'other text files' + resolved = $kpse.find_file(original).gsub(/\\/,'/') + rescue + resolved = '' + end + end + end + if resolved.empty? then + original = File.dirname(original) if method =~ /path/ + report("#{original} is not resolved") unless $report + ENV["_CTX_K_V_#{original}_"] = original if $crossover + original + else + resolved = File.dirname(resolved) if method =~ /path/ + report("#{original} is resolved to #{resolved}") unless $report + ENV["_CTX_K_V_#{original}_"] = resolved if $crossover + resolved + end + end + end +end + +def changeddir?(path) + if path.empty? then + return true + else + begin + Dir.chdir(path) if ! path.empty? + rescue + report("unable to change to directory: #{path}") + else + report("changed to directory: #{path}") + end + return File.expand_path(Dir.getwd) == File.expand_path(path) + end +end + +def runcommand(command) + if $locate then + command = command.split(' ').collect do |c| + if c =~ /\//o then + begin + cc = File.expand_path(c) + c = cc if FileTest.file?(cc) + rescue + end + end + c + end . join(' ') + print command # to stdout and no newline + elsif $execute then + report("using 'exec' instead of 'system' call: #{command}") + exec(command) if changeddir?($path) + else + report("using 'system' call: #{command}") + system(command) if changeddir?($path) + end +end + +def runoneof(application,fullname,browserpermitted) + if browserpermitted && launch(fullname) then + return true + else + report("starting #{$filename}") unless $report + output("\n") if $report && $verbose + applications = $applications[application.downcase] + if ! applications then + output("problems with determining application type") + return true + elsif applications.class == Array then + if $report then + output([fullname,expanded($arguments)].join(' ')) + return true + else + applications.each do |a| + return true if runcommand([a,fullname,expanded($arguments)].join(' ')) + end + end + elsif applications.empty? then + if $report then + output([fullname,expanded($arguments)].join(' ')) + return true + else + return runcommand([fullname,expanded($arguments)].join(' ')) + end + else + if $report then + output([applications,fullname,expanded($arguments)].join(' ')) + return true + else + return runcommand([applications,fullname,expanded($arguments)].join(' ')) + end + end + return false + end +end + +def report(str) + $stdout.puts(str) if $verbose +end + +def output(str) + $stdout.puts(str) +end + +def usage + print "version : #{$version} - 2003/2006 - www.pragma-ade.com\n" + print("\n") + print("usage : texmfstart [switches] filename [optional arguments]\n") + print("\n") + print("switches : --verbose --report --browser --direct --execute --locate --iftouched --ifchanged\n") + print(" --program --file --page --arguments --batch --edit --report --clear\n") + print(" --make --lmake --wmake --path --stubpath --indirect --before --after\n") + print(" --tree --autotree --environment --showenv\n") + print("\n") + print("example : texmfstart pstopdf.rb cow.eps\n") + print(" texmfstart --locate examplex.rb\n") + print(" texmfstart --execute examplex.rb\n") + print(" texmfstart --browser examplap.pdf\n") + print(" texmfstart showcase.pdf\n") + print(" texmfstart --page=2 --file=showcase.pdf\n") + print(" texmfstart --program=yourtex yourscript.rb arg-1 arg-2\n") + print(" texmfstart --direct xsltproc kpse:somefile.xsl somefile.xml\n") + print(" texmfstart --direct ruby rel:wn-cleanup-1.rb oldfile.xml newfile.xml\n") + print(" texmfstart bin:xsltproc env:somepreset path:somefile.xsl somefile.xml\n") + print(" texmfstart --iftouched=normal,lowres downsample.rb normal lowres\n") + print(" texmfstart --ifchanged=somefile.dat --direct processit somefile.dat\n") + print(" texmfstart bin:scite kpse:texmf.cnf\n") + print(" texmfstart --exec bin:scite *.tex\n") + print(" texmfstart --edit texmf.cnf\n") + print(" texmfstart --edit kpse:texmf.cnf\n") + print(" texmfstart --serve\n") + print("\n") + print(" texmfstart --stubpath=/usr/local/bin [--make --remove] --verbose all\n") + print(" texmfstart --stubpath=auto [--make --remove] all\n") + print("\n") + check_kpse +end + +# somehow registration does not work out (at least not under windows) + +def tag(name) + if $crossover then "_CTX_K_S_#{name}_" else "TEXMFSTART.#{name}" end +end + +def registered?(filename) + return ENV[tag(filename)] != nil +end + +def registered(filename) + return ENV[tag(filename)] || 'unknown' +end + +def register(filename,fullname) + if fullname && ! fullname.empty? then # && FileTest.file?(fullname) + ENV[tag(filename)] = fullname + report("registering '#{filename}' as '#{fullname}'") + return true + else + return false + end +end + +def find(filename,program) + begin + filename = filename.sub(/script:/o, '') # so we have bin: and script: and nothing + if $predefined.key?(filename) then + report("expanding '#{filename}' to '#{$predefined[filename]}'") + filename = $predefined[filename] + end + if registered?(filename) then + report("already located '#{filename}'") + return registered(filename) + end + # create suffix list + if filename =~ /^(.*)\.(.+)$/ then + filename = $1 + suffixlist = [$2] + else + suffixlist = [$scriptlist.split('|'),$documentlist.split('|')].flatten + end + # first we honor a given path + if filename =~ /[\\\/]/ then + report("trying to honor '#{filename}'") + suffixlist.each do |suffix| + fullname = filename+'.'+suffix + if FileTest.file?(fullname) && register(filename,fullname) + return shortpathname(fullname) + end + end + end + filename.sub!(/^.*[\\\/]/, '') + # next we look at the current path and the callerpath + [ ['.','current'], + [$ownpath,'caller'], ["#{$ownpath}/../#{suffixlist[0]}",'caller'], + [registered("THREAD"),'thread'], ["#{registered("THREAD")}/../#{suffixlist[0]}",'thread'], + ].each do |p| + if p && ! p.empty? && ! (p[0] == 'unknown') then + suffixlist.each do |suffix| + fname = "#{filename}.#{suffix}" + fullname = File.expand_path(File.join(p[0],fname)) + report("locating '#{fname}' in #{p[1]} path '#{p[0]}'") + if FileTest.file?(fullname) && register(filename,fullname) then + report("'#{fname}' located in #{p[1]} path") + return shortpathname(fullname) + end + end + end + end + # now we consult environment settings + fullname = nil + check_kpse + $kpse.progname = program + suffixlist.each do |suffix| + begin + break unless $suffixinputs[suffix] + environment = ENV[$suffixinputs[suffix]] || ENV[$suffixinputs[suffix]+".#{$program}"] + if ! environment || environment.empty? then + begin + # environment = `kpsewhich -expand-path=\$#{$suffixinputs[suffix]}`.chomp + environment = $kpse.expand_path("\$#{$suffixinputs[suffix]}") + rescue + environment = nil + else + if environment && ! environment.empty? then + report("using kpsewhich variable #{$suffixinputs[suffix]}") + end + end + elsif environment && ! environment.empty? then + report("using environment variable #{$suffixinputs[suffix]}") + end + if environment && ! environment.empty? then + environment.split($separator).each do |e| + e.strip! + e = '.' if e == '\.' # somehow . gets escaped + e += '/' unless e =~ /[\\\/]$/ + fullname = e + filename + '.' + suffix + report("testing '#{fullname}'") + if FileTest.file?(fullname) then + break + else + fullname = nil + end + end + end + rescue + report("environment string '#{$suffixinputs[suffix]}' cannot be used to locate '#{filename}'") + fullname = nil + else + return shortpathname(fullname) if register(filename,fullname) + end + end + return shortpathname(fullname) if register(filename,fullname) + # then we fall back on kpsewhich + suffixlist.each do |suffix| + # TDS script scripts location as per 2004 + if suffix =~ /(#{$scriptlist})/ then + begin + report("using 'kpsewhich' to locate '#{filename}' in suffix space '#{suffix}' (1)") + # fullname = `kpsewhich -progname=#{program} -format=texmfscripts #{filename}.#{suffix}`.chomp + $kpse.format = 'texmfscripts' + fullname = $kpse.find_file("#{filename}.#{suffix}").gsub(/\\/,'/') + rescue + report("kpsewhich cannot locate '#{filename}' in suffix space '#{suffix}' (1)") + fullname = nil + else + return shortpathname(fullname) if register(filename,fullname) + end + end + # old TDS location: .../texmf/context/... + begin + report("using 'kpsewhich' to locate '#{filename}' in suffix space '#{suffix}' (2)") + # fullname = `kpsewhich -progname=#{program} -format="other text files" #{filename}.#{suffix}`.chomp + $kpse.format = 'other text files' + fullname = $kpse.find_file("#{filename}.#{suffix}").gsub(/\\/,'/') + rescue + report("kpsewhich cannot locate '#{filename}' in suffix space '#{suffix}' (2)") + fullname = nil + else + return shortpathname(fullname) if register(filename,fullname) + end + end + return shortpathname(fullname) if register(filename,fullname) + # let's take a look at the path + paths = ENV['PATH'].split($separator) + suffixlist.each do |s| + paths.each do |p| + suffixedname = "#{filename}.#{s}" + report("checking #{p} for #{filename}") + if FileTest.file?(File.join(p,suffixedname)) then + fullname = File.join(p,suffixedname) + return shortpathname(fullname) if register(filename,fullname) + end + end + end + # bad luck, we need to search the tree ourselves + if (suffixlist.length == 1) && (suffixlist.first =~ /(#{$documentlist})/) then + report("aggressively locating '#{filename}' in document trees") + begin + # texroot = `kpsewhich -expand-var=$SELFAUTOPARENT`.chomp + texroot = $kpse.expand_var("$SELFAUTOPARENT") + rescue + texroot = '' + else + texroot.sub!(/[\\\/][^\\\/]*?$/, '') + end + if not texroot.empty? then + sffxlst = suffixlist.join(',') + begin + report("locating '#{filename}' in document tree '#{texroot}/doc*'") + if (result = Dir.glob("#{texroot}/doc*/**/#{filename}.{#{sffxlst}}")) && result && result[0] && FileTest.file?(result[0]) then + fullname = result[0] + end + rescue + report("locating '#{filename}.#{suffixlist.join('|')}' in tree '#{texroot}' aborted") + end + end + return shortpathname(fullname) if register(filename,fullname) + end + report("aggressively locating '#{filename}' in tex trees") + begin + # textrees = `kpsewhich -expand-var=$TEXMF`.chomp + textrees = $kpse.expand_var("$TEXMF") + rescue + textrees = '' + end + if not textrees.empty? then + textrees.gsub!(/[\{\}\!]/, '') + textrees = textrees.split(',') + if (suffixlist.length == 1) && (suffixlist.first =~ /(#{$documentlist})/) then + speedup = ['doc**','**'] + else + speedup = ['**'] + end + sffxlst = suffixlist.join(',') + speedup.each do |speed| + textrees.each do |tt| + tt.gsub!(/[\\\/]$/, '') + if FileTest.directory?(tt) then + begin + report("locating '#{filename}' in tree '#{tt}/#{speed}/#{filename}.{#{sffxlst}}'") + if (result = Dir.glob("#{tt}/#{speed}/#{filename}.{#{sffxlst}}")) && result && result[0] && FileTest.file?(result[0]) then + fullname = result[0] + break + end + rescue + report("locating '#{filename}' in tree '#{tt}' aborted") + next + end + end + end + break if fullname && ! fullname.empty? + end + end + if register(filename,fullname) then + return shortpathname(fullname) + else + return '' + end + rescue + error, trace = $!, $@.join("\n") + report("fatal error: #{error}\n#{trace}") + # report("fatal error") + end +end + +def run(fullname) + if ! fullname || fullname.empty? then + output("the file '#{$filename}' is not found") + elsif FileTest.file?(fullname) then + begin + case fullname + when /\.(#{$scriptlist})$/i then + return runoneof($1,fullname,false) + when /\.(#{$documentlist})$/i then + return runoneof($1,fullname,true) + else + return runoneof('unknown',fullname,false) + end + rescue + report("starting '#{$filename}' in program space '#{$program}' fails (#{$!})") + end + else + report("the file '#{$filename}' in program space '#{$program}' is not accessible") + end + return false +end + +def direct(fullname) + begin + return runcommand([fullname.sub(/^(bin|binary)\:/, ''),expanded($arguments)].join(' ')) + rescue + return false + end +end + +def edit(filename) + begin + return runcommand([$editor,expanded(filename),expanded($arguments)].join(' ')) + rescue + return false + end +end + +def make(filename,windows=false,linux=false,remove=false) + basename = File.basename(filename).gsub(/\.[^.]+?$/, '') + if $stubpath == 'auto' then + basename = File.dirname($0) + '/' + basename + else + basename = $stubpath + '/' + basename unless $stubpath.empty? + end + if filename == 'texmfstart' then + program = 'ruby' + command = 'kpsewhich --format=texmfscripts --progname=context texmfstart.rb' + filename = `#{command}`.chomp.gsub(/\\/, '/') + if filename.empty? then + report("failure: #{command}") + return + elsif not remove then + if windows then + ['bat','exe'].each do |suffix| + if FileTest.file?("#{basename}.#{suffix}") then + report("windows stub '#{basename}.#{suffix}' skipped (already present)") + return + end + end + elsif linux && FileTest.file?(basename) then + report("unix stub '#{basename}' skipped (already present)") + return + end + end + else + program = nil + if filename =~ /[\\\/]/ && filename =~ /\.(#{$scriptlist})$/ then + program = $applications[$1] + end + filename = "\"#{filename}\"" if filename =~ /\s/ + program = 'texmfstart' if $indirect || ! program || program.empty? + end + begin + callname = $predefined[filename.sub(/\.*?$/,'')] || filename + if remove then + if windows && (File.delete(basename+'.bat') rescue false) then + report("windows stub '#{basename}.bat' removed (calls #{callname})") + elsif linux && (File.delete(basename) rescue false) then + report("unix stub '#{basename}' removed (calls #{callname})") + end + else + if windows && f = open(basename+'.bat','w') then + f.binmode + f.write("@echo off\015\012") + f.write("#{program} #{callname} %*\015\012") + f.close + report("windows stub '#{basename}.bat' made (calls #{callname})") + elsif linux && f = open(basename,'w') then + f.binmode + f.write("#!/bin/sh\012") + f.write("#{program} #{callname} \"$@\"\012") + f.close + report("unix stub '#{basename}' made (calls #{callname})") + end + end + rescue + report("failed to make stub '#{basename}' #{$!}") + return false + else + return true + end +end + +def process(&block) + if $iftouched then + files = $directives['iftouched'].split(',') + oldname, newname = files[0], files[1] + if oldname && newname && File.needsupdate(oldname,newname) then + report("file #{oldname}: #{File.timestamp(oldname)}") + report("file #{newname}: #{File.timestamp(newname)}") + report("file is touched, processing started") + yield + File.syncmtimes(oldname,newname) + else + report("file #{oldname} is untouched") + end + elsif $ifchanged then + filename = $directives['ifchanged'] + checkname = filename + ".md5" + oldchecksum, newchecksum = "old", "new" + begin + newchecksum = MD5.new(IO.read(filename)).hexdigest.upcase + rescue + newchecksum = "new" + else + begin + oldchecksum = IO.read(checkname).chomp + rescue + oldchecksum = "old" + end + end + if $verbose then + report("old checksum #{filename}: #{oldchecksum}") + report("new checksum #{filename}: #{newchecksum}") + end + if oldchecksum != newchecksum then + report("file is changed, processing started") + begin + File.open(checkname,'w') do |f| + f << newchecksum + end + rescue + end + yield + else + report("file #{filename} is unchanged") + end + else + yield + end +end + +def checkenvironment(tree) + report('') + ENV['TMP'] = ENV['TMP'] || ENV['TEMP'] || ENV['TMPDIR'] || ENV['HOME'] + case RUBY_PLATFORM + when /(mswin|bccwin|mingw|cygwin)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-mswin' + when /(linux)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-linux' + when /(darwin|rhapsody|nextstep)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-macosx' + # when /(netbsd|unix)/i then # todo + else # todo + end + ENV['TEXOS'] = "#{ENV['TEXOS'].sub(/^[\\\/]*/, '').sub(/[\\\/]*$/, '')}" + ENV['TEXPATH'] = tree.sub(/\/+$/,'') # + '/' + ENV['TEXMFOS'] = "#{ENV['TEXPATH']}/#{ENV['TEXOS']}" + report('') + report("preset : TEXPATH => #{ENV['TEXPATH']}") + report("preset : TEXOS => #{ENV['TEXOS']}") + report("preset : TEXMFOS => #{ENV['TEXMFOS']}") + report("preset : TMP => #{ENV['TMP']}") + report('') +end + +def loadfile(filename) + begin + IO.readlines(filename).each do |line| + case line.chomp + when /^[\#\%]/ then + # comment + when /^(.*?)\s*(\>|\=|\<)\s*(.*)\s*$/ then + # = assign | > prepend | < append + key, how, value = $1, $2, $3 + begin + # $SAFE = 0 + value.gsub!(/\%(.*?)\%/) do + ENV[$1] || '' + end + # value.gsub!(/\;/,$separator) if key =~ /PATH/i then + case how + when '=', '<<' then ENV[key] = value + when '?', '??' then ENV[key] = ENV[key] || value + when '<', '+=' then ENV[key] = (ENV[key] || '') + $separator + value + when '>', '=+' then ENV[key] = value + $separator + (ENV[key] ||'') + end + rescue + report("user set failed : #{key} (#{$!})") + else + report("user set : #{key} => #{ENV[key]}") + end + end + end + rescue + report("error in reading file '#{filename}'") + end +end + +def loadtree(tree) + begin + unless tree.empty? then + if File.directory?(tree) then + setuptex = File.join(tree,'setuptex.tmf') + else + setuptex = tree.dup + end + if FileTest.file?(setuptex) then + report("tex tree definition: #{setuptex}") + checkenvironment(File.dirname(setuptex)) + loadfile(setuptex) + else + report("no setup file '#{setuptex}'") + end + end + rescue + # maybe tree is empty or boolean (no arg given) + end +end + +def loadenvironment(environment) + begin + unless environment.empty? then + filename = if $path.empty? then environment else File.expand_path(File.join($path,environment)) end + if FileTest.file?(filename) then + report("environment : #{environment}") + loadfile(filename) + else + report("no environment file '#{environment}'") + end + end + rescue + report("problem while loading '#{environment}'") + end +end + +def show_environment + if $showenv then + keys = ENV.keys.sort + size = 0 + keys.each do |k| + size = k.size if k.size > size + end + report('') + keys.each do |k| + report("#{k.rjust(size)} => #{ENV[k]}") + end + report('') + end +end + +def execute(arguments) + + arguments = arguments.split(/\s+/) if arguments.class == String + + $directives = hashed(arguments) + + $help = $directives['help'] || false + $batch = $directives['batch'] || false + $filename = $directives['file'] || '' + $program = $directives['program'] || 'context' + $direct = $directives['direct'] || false + $edit = $directives['edit'] || false + $page = $directives['page'] || 1 + $browser = $directives['browser'] || false + $report = $directives['report'] || false + $verbose = $directives['verbose'] || false + $arguments = $directives['arguments'] || '' + $execute = $directives['execute'] || $directives['exec'] || false + $locate = $directives['locate'] || false + + $autotree = if $directives['autotree'] then (ENV['TEXMFSTART_TREE'] || ENV['TEXMFSTARTTREE'] || '') else '' end + + $path = $directives['path'] || '' + $tree = $directives['tree'] || $autotree || '' + $environment = $directives['environment'] || '' + + $make = $directives['make'] || false + $remove = $directives['remove'] || $directives['delete'] || false + $unix = $directives['unix'] || false + $windows = $directives['windows'] || $directives['mswin'] || false + $stubpath = $directives['stubpath'] || '' + $indirect = $directives['indirect'] || false + + $before = $directives['before'] || '' + $after = $directives['after'] || '' + + $iftouched = $directives['iftouched'] || false + $ifchanged = $directives['ifchanged'] || false + + $openoffice = $directives['oo'] || false + + $crossover = false if $directives['clear'] + + $showenv = $directives['showenv'] || false + $verbose = true if $showenv + + $serve = $directives['serve'] || false + + $verbose = true if (ENV['_CTX_VERBOSE_'] =~ /(y|yes|t|true|on)/io) && ! $locate && ! $report + + set_applications($page) + + # private: + + $selfmerge = $directives['selfmerge'] || false + $selfcleanup = $directives['selfclean'] || $directives['selfcleanup'] || false + + ENV['_CTX_VERBOSE_'] = 'yes' if $verbose + + if $openoffice then + if ENV['OOPATH'] then + if FileTest.directory?(ENV['OOPATH']) then + report("using open office python") + if $mswindows then + $applications['python'] = $applications['py'] = "\"#{File.join(ENV['OOPATH'],'program','python.bat')}\"" + else + $applications['python'] = $applications['py'] = File.join(ENV['OOPATH'],'python') + end + report("python path #{$applications['python']}") + else + report("environment variable 'OOPATH' does not exist") + end + else + report("environment variable 'OOPATH' is not set") + end + end + + if $selfmerge then + output("ruby libraries are cleaned up") if SelfMerge::cleanup + output("ruby libraries are merged") if SelfMerge::merge + elsif $selfcleanup then + output("ruby libraries are cleaned up") if SelfMerge::cleanup + elsif $serve then + if ENV['KPSEMETHOD'] && ENV['KPSEPORT'] then + # # kpse_merge_done: require 'base/kpseremote' + begin + KpseRemote::start_server + rescue + end + else + usage + puts("") + puts("message : set 'KPSEMETHOD' and 'KPSEPORT' variables") + end + elsif $help || ! $filename || $filename.empty? then + usage + loadtree($tree) + loadenvironment($environment) + show_environment() + elsif $batch && $filename && ! $filename.empty? then + # todo, take commands from file and avoid multiple starts and checks + else + report("texmfstart version #{$version}") + loadtree($tree) + loadenvironment($environment) + show_environment() + if $make || $remove then + if $filename == 'all' then + makelist = $makelist + else + makelist = [$filename] + end + makelist.each do |filename| + if $windows then + make(filename,true,false,$remove) + elsif $unix then + make(filename,false,true,$remove) + else + make(filename,$mswindows,!$mswindows,$remove) + end + end + elsif $browser && $filename =~ /^http\:\/\// then + launch($filename) + else + begin + process do + if $direct || $filename =~ /^bin\:/ then + direct($filename) + elsif $edit && ! $editor.empty? then + edit($filename) + else # script: or no prefix + command = find(shortpathname($filename),$program) + if command then + register("THREAD",File.dirname(File.expand_path(command))) + run(command) + else + report('unable to locate program') + end + end + end + rescue + report('fatal error in starting process') + end + end + end + +end + +execute(ARGV) + +exit (if ($?.to_i rescue 0) > 0 then 1 else 0 end) diff --git a/Master/bin/sparc-linux/textools b/Master/bin/sparc-linux/textools new file mode 100755 index 00000000000..7445eac371c --- /dev/null +++ b/Master/bin/sparc-linux/textools @@ -0,0 +1,2 @@ +#!/bin/sh +texmfstart textools.rb "$@" diff --git a/Master/bin/sparc-linux/texutil b/Master/bin/sparc-linux/texutil index afced152700..607154af059 120000..100755 --- a/Master/bin/sparc-linux/texutil +++ b/Master/bin/sparc-linux/texutil @@ -1 +1,2 @@ -texexec
\ No newline at end of file +#!/bin/sh +texmfstart texutil.rb "$@" diff --git a/Master/bin/sparc-linux/tftopl b/Master/bin/sparc-linux/tftopl Binary files differindex 13803705f39..8f34ef11622 100755 --- a/Master/bin/sparc-linux/tftopl +++ b/Master/bin/sparc-linux/tftopl diff --git a/Master/bin/sparc-linux/tie b/Master/bin/sparc-linux/tie Binary files differindex 27c273bb8c4..144272c6fcf 100755 --- a/Master/bin/sparc-linux/tie +++ b/Master/bin/sparc-linux/tie diff --git a/Master/bin/sparc-linux/tmftools b/Master/bin/sparc-linux/tmftools new file mode 100755 index 00000000000..7531a966390 --- /dev/null +++ b/Master/bin/sparc-linux/tmftools @@ -0,0 +1,2 @@ +#!/bin/sh +texmfstart tmftools.rb "$@" diff --git a/Master/bin/sparc-linux/ttf2afm b/Master/bin/sparc-linux/ttf2afm Binary files differindex 5985f186fab..da405549e97 100755 --- a/Master/bin/sparc-linux/ttf2afm +++ b/Master/bin/sparc-linux/ttf2afm diff --git a/Master/bin/sparc-linux/ttf2pk b/Master/bin/sparc-linux/ttf2pk Binary files differindex b36f5740c85..c933a2b6dff 100755 --- a/Master/bin/sparc-linux/ttf2pk +++ b/Master/bin/sparc-linux/ttf2pk diff --git a/Master/bin/sparc-linux/ttf2tfm b/Master/bin/sparc-linux/ttf2tfm Binary files differindex 7ac9288c039..d6c926c9c3a 100755 --- a/Master/bin/sparc-linux/ttf2tfm +++ b/Master/bin/sparc-linux/ttf2tfm diff --git a/Master/bin/sparc-linux/ttftotype42 b/Master/bin/sparc-linux/ttftotype42 Binary files differnew file mode 100755 index 00000000000..e5233c4270d --- /dev/null +++ b/Master/bin/sparc-linux/ttftotype42 diff --git a/Master/bin/sparc-linux/uniqleaf b/Master/bin/sparc-linux/uniqleaf deleted file mode 120000 index afced152700..00000000000 --- a/Master/bin/sparc-linux/uniqleaf +++ /dev/null @@ -1 +0,0 @@ -texexec
\ No newline at end of file diff --git a/Master/bin/sparc-linux/updmap b/Master/bin/sparc-linux/updmap index c66303fdeee..ced046f76b9 100755 --- a/Master/bin/sparc-linux/updmap +++ b/Master/bin/sparc-linux/updmap @@ -1052,7 +1052,8 @@ syncWithTrees() ############################################################################### # normalizeLines() # remove comments, whitespace is exactly one space, no empty lines, -# no whitespace at end of line, one space before and after " +# no whitespace at end of line, one space before and after ", +# no CR's (as in skaknew). ############################################################################### normalizeLines() { @@ -1062,7 +1063,9 @@ normalizeLines() -e '/^ *$/d' \ -e 's@ $@@' \ -e 's@ *" *@ " @g' \ - -e 's@" \([^"]*\) "@"\1"@g' | sort | uniq + -e 's@" \([^"]*\) "@"\1"@g' \ + | tr -d '\r' \ + | sort | uniq } ############################################################################### diff --git a/Master/bin/sparc-linux/vftovp b/Master/bin/sparc-linux/vftovp Binary files differindex 966324cbdbd..9d9ed54be86 100755 --- a/Master/bin/sparc-linux/vftovp +++ b/Master/bin/sparc-linux/vftovp diff --git a/Master/bin/sparc-linux/vpe b/Master/bin/sparc-linux/vpe new file mode 100755 index 00000000000..9eb52b69e3c --- /dev/null +++ b/Master/bin/sparc-linux/vpe @@ -0,0 +1,421 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q' + if 0; +use strict; +# +# vpe.pl +# +# Copyright (C) 2000 Heiko Oberdiek. +# +# This program may be distributed and/or modified under the +# conditions of the LaTeX Project Public License, either version 1.2 +# of this license or (at your option) any later version. +# The latest version of this license is in +# http://www.latex-project.org/lppl.txt +# and version 1.2 or later is part of all distributions of LaTeX +# version 1999/12/01 or later. +# +# See file "vpe.txt" for a list of files that belong to this project. +# +# This file "vpe.pl" may be renamed to "vpe" +# for installation purposes. +# +my $file = "vpe.pl"; +my $program = uc($&) if $file =~ /^\w+/; +my $version = "0.1"; +my $date = "2000/09/15"; +my $author = "Heiko Oberdiek"; +my $copyright = "Copyright (c) 2000 by $author."; +# +# History: +# 2000/09/15 v0.1: First release. +# + +### program identification +my $title = "$program $version, $date - $copyright\n"; + +### editor call +# %F: file name +# %L: line number +my $EditorCall = "xterm -e joe +%d %s"; +$EditorCall = $ENV{TEXEDIT} if $ENV{TEXEDIT}; +$EditorCall = $ENV{VPE} if $ENV{VPE}; + +### error strings +my $Error = "!!! Error:"; # error prefix + +my $usage = <<"END_OF_USAGE"; +${title} +Depending on the name of the script `vpe' works in four modes: + +* [vpe] Syntax: vpe <pdf file>[.pdf] + The pdf file is scanned for actions created by VTeX, + that start an editor with the source file at the + specified line under Windows. + A symbol link is made from the source file name + extended by the extension `.vpe' to this script. + The line number is encoded in the path and the + action is changed to start this script. + +* [sty] Internal for vpe.sty: + Syntax: vpe --sty [--progname=...] <latex file> <vpe file> + +* [system] Internal for vpe.sty: + Syntax: vpe --system <vpe file> + +* [launch] Syntax: <source file name>.vpe + The script decodes the line number in the path of + the source file name and starts an editor with + this file at that line number. + +Options: + --help: print usage. + --verbose: print additional informations during running. + --force: force symbol links + --delete: delete symbol links + --sty: internal for `vpe.sty' (get absolute file name and lines) + --system: internal for `vpe.sty' (get system info linux or win) + --progname: latex, pdflatex, elatex, pdfelatex +END_OF_USAGE + +### options +$::opt_verbose = 0; +$::opt_help = 0; +$::opt_force = 0; +$::opt_delete = 0; +$::opt_sty = 0; +$::opt_system = 0; +$::opt_progname = "latex"; +use Getopt::Long; +GetOptions( + "help!", + "verbose!", + "force!", + "delete!", + "sty!", + "system!", + "progname=s", +) or die $usage; +if ($::opt_help) { + die $usage; +} + +if ($::opt_sty and $::opt_system) { + die "$usage" . + "$Error Options --sty and --system cannot used together!\n"; +} + +################### +### launch mode ### +################### +if ($0 =~ /\.vpe/) { + + @ARGV == 0 or + die "$usage$Error Too many arguments [launch mode]!\n"; + + my $file = ""; + $0 =~ m|(^[\./]+\./)(.+)\.vpe$| or + die "$Error Cannot extract line number ($0)!\n"; + my $str = $1; + $file = "/$2"; + + my $line = ""; + while ($str ne "") { + $str =~ m|^(/*)(\.?)\./(.*)$| or + die "$Error Parse error!\n"; + $line .= length($1) + (($2 eq ".") ? 5 : 0); + $str = $3; + } + + my $callstr = $EditorCall; + $EditorCall =~ s/%s/$file/; + $EditorCall =~ s/%d/$line/; + print "File: $file, line: $line\n" if $::opt_verbose; + exec($EditorCall); + exit 1; +} + +### +### used by both sty and system mode: +### +my $system = "linux"; +$system = "" if $^O =~ /os2/i; +$system = "" if $^O =~ /mac/i; +$system = "win" if $^O =~ /dos/i; +$system = "win" if $^O =~ /win/i; + +################ +### sty mode ### +################ +if ($::opt_sty) { + + @ARGV == 2 or + die "$usage$Error Wrong arguments [sty mode]!\n"; + + my $vpefile = $ARGV[1]; + print "VPE file: $vpefile\n" if $::opt_verbose; + + my $file = `kpsewhich -progname=$::opt_progname $ARGV[0]`; + chomp $file; + if (!($file =~ m|^/| or $file =~ m|^\w:|)) { + use Cwd; + $file = cwd() . "/" . $file; + $file =~ s|/[^/]+/\.\./|/|g; + $file =~ s|/\./|/|g; + } + -f $file or + die "$Error Cannot find file `$file' [sty mode]!\n"; + print "File: $file\n" if $::opt_verbose; + + my $last = 0; + if (open(IN, $file)) { + while (<IN>) { + $last++; + } + } + if ($last == 0) { + $last = 10000; + } + print "Last line: $last\n" if $::opt_verbose; + + open(OUT, ">>$vpefile") or + die "$Error Cannot open file `$vpefile`!\n"; + print OUT "\\vpeentry{$file}{$last}\n"; + + exit 1; +} + +################### +### system mode ### +################### +if ($::opt_system) { + + @ARGV == 1 or + die "$usage$Error Wrong arguments [system mode]!\n"; + + my $vpefile = $ARGV[0]; + print "VPE file: $vpefile\n" if $::opt_verbose; + + open(OUT, ">>$vpefile") or + die "$Error Cannot open file `$vpefile`!\n"; + print OUT "\\vpesystem{$system}\n"; + + exit 1; +} + +################ +### vpe mode ### +################ +if (@ARGV < 1) { + die "$usage$Error Missing pdf file [vpe mode]!\n"; +} +if (@ARGV > 2) { + die "$usage$Error Too many arguments [vpe mode]!\n"; +} + +my $pdffile = $ARGV[0]; +if (!-f $pdffile) { + my $name = $pdffile; + $pdffile .= ".pdf"; + -f $pdffile or + die "$Error File `$name' not found [vpe mode]!\n"; +} + +open(IN, "+<$pdffile") or + die "$Error Cannot open `$pdffile' [vpe mode]!\n"; +binmode(IN); +my %symlinks = (); +while (<IN>) { + + if (m|/F\([\./]*(/.*)\.vpe\)|) { + $symlinks{$1} = 1; + next; + } + + my $do = 0; + my ($action, $file, $line, $type); + # my $color; # only for debugging + + if (m|^ + /A \s* << \s* + /Type \s* /Action \s* + /S \s* /Launch \s* + /Win \s* << \s* + /F \s* \(aftcomp.exe\) \s* + /P \s* \("(.*)\" \s+ \d+\-(\d+)\) \s* + >> \s* + >> \s* + $ + |x + ) { + $action = $_; + $file = $1; + $line = $2; + # $color = "/C[0 0 1]"; # only for debugging + $type = "aftcomp"; + $do = 1; + } + + if (m|^ + /A \s* << \s* + /Type \s* /Action \s* + /S \s* /Launch \s* + /Win \s* << \s* + /F \s* \(repos.exe\) \s* + /P \s* \( + "(.*)" \s* + "(\d+)" \s* + "(.*)" \s* + "(\d+)" + \) \s* + >> \s* + >> \s* + $ + |x + ) { + $action = $_; + if ($3 eq "") { + $file = $1; + $line = $2; + } + else { + # ??? + $file = $1; + $line = $2; + } + # $color = "/C[1 0 0]"; # only for debugging + $type = "repos"; + $do = 1; + } + + if ($do) { + my $length = length($action); + print "* File: $file, line: $line, type: $type\n" if $::opt_verbose; + + if (!($file =~ m|^/|)) { + print STDERR "$Error File `$file' lacks of absolute path!\n"; + next; + } + + if (!$::opt_delete) { + if ($line <= 0) { + $line = 1; + } + + my $newaction = ""; + { + my $digit = substr($line, 0, 1); + if ($digit <= 5) { + $newaction .= "/" x $digit; + } + else { + $newaction .= "/" x ($digit - 5) . "."; + } + $newaction .= "./"; + my $rest = $line; + while (($rest = substr($rest, 1)) ne "") { + $digit = substr($rest, 0, 1); + if ($digit < 5) { + $newaction .= "/" x $digit; + } + else { + $newaction .= "/" x ($digit - 5) . "."; + } + $newaction .= "./"; + } + } + $newaction .= substr($file, 1) . ".vpe"; + $newaction = # $color . # only for debugging + "/A<</Type/Action/S/Launch/F($newaction)>>"; + $newaction .= " " x ($length - length($newaction) - 1); + if (length($newaction) > $length) { + print STDERR "$Error Action too long!\n"; + next; + } + + seek(IN, -length($action), 1); + print IN $newaction; + } + + $symlinks{$file} = 1; + } +} + +if (keys(%symlinks)) { + + my $this = $0; + if (!$::opt_delete) { + if (!-f $0 or !-x $0) { + $this = `which $0`; + ($this ne "") or die "$Error Cannot find this script!\n"; + } + if (!($this =~ m|^/|)) { + use Cwd; + $this = cwd() . "/" . $this; + } + $this =~ s|/[^/]+/\.\./|/|g; + $this =~ s|/\./|/|g; + } + + if ($::opt_delete) { + print "Delete symlinks:\n"; + } + else { + if ($::opt_force) { + print "Forced symlinks to $this:\n"; + } + else { + print "Symlinks to $this:\n"; + } + } + + foreach (keys(%symlinks)) { + my $sym = $_ . ".vpe"; + print " $sym ["; + + if ($::opt_delete) { + if (!-l $sym) { + print "ok, not existing]\n"; + next; + } + unlink($sym); + if (!-l $sym) { + print "ok, deleted]\n"; + next; + } + print "failed]\n"; + next; + } + if ($::opt_force) { + if (-l $sym) { + unlink($sym); + if (-l $sym) { + print "deletion failed]\n"; + next; + } + if (symlink($this, $sym)) { + print "ok, deleted and created]\n"; + next; + } + print "deleted, creation failed]\n"; + next; + } + if (symlink($this, $sym)) { + print "ok, created]\n"; + next; + } + print "creation failed]\n"; + next; + } + if (-f $sym) { + print "exists]\n"; + next; + } + if (symlink($this, $sym)) { + print "ok, created]\n"; + next; + } + print "failed]\n"; + next; + } +} +__END__ diff --git a/Master/bin/sparc-linux/vptovf b/Master/bin/sparc-linux/vptovf Binary files differindex 13c2e14588c..40f4b54b40a 100755 --- a/Master/bin/sparc-linux/vptovf +++ b/Master/bin/sparc-linux/vptovf diff --git a/Master/bin/sparc-linux/weave b/Master/bin/sparc-linux/weave Binary files differindex f53b453f3de..1ab8703820d 100755 --- a/Master/bin/sparc-linux/weave +++ b/Master/bin/sparc-linux/weave diff --git a/Master/bin/sparc-linux/xdvi-xaw.bin b/Master/bin/sparc-linux/xdvi-xaw.bin Binary files differindex c268a27240a..b96e7a2e838 100755 --- a/Master/bin/sparc-linux/xdvi-xaw.bin +++ b/Master/bin/sparc-linux/xdvi-xaw.bin diff --git a/Master/bin/sparc-linux/xdvipdfmx b/Master/bin/sparc-linux/xdvipdfmx Binary files differnew file mode 100755 index 00000000000..d1e9ff8be00 --- /dev/null +++ b/Master/bin/sparc-linux/xdvipdfmx diff --git a/Master/bin/sparc-linux/xelatex b/Master/bin/sparc-linux/xelatex new file mode 120000 index 00000000000..ef9fe406fd6 --- /dev/null +++ b/Master/bin/sparc-linux/xelatex @@ -0,0 +1 @@ +xetex
\ No newline at end of file diff --git a/Master/bin/sparc-linux/xeplain b/Master/bin/sparc-linux/xeplain new file mode 120000 index 00000000000..ef9fe406fd6 --- /dev/null +++ b/Master/bin/sparc-linux/xeplain @@ -0,0 +1 @@ +xetex
\ No newline at end of file diff --git a/Master/bin/sparc-linux/xetex b/Master/bin/sparc-linux/xetex Binary files differnew file mode 100755 index 00000000000..83754714772 --- /dev/null +++ b/Master/bin/sparc-linux/xetex diff --git a/Master/bin/sparc-linux/xmltools b/Master/bin/sparc-linux/xmltools new file mode 100755 index 00000000000..03086d0436b --- /dev/null +++ b/Master/bin/sparc-linux/xmltools @@ -0,0 +1,2 @@ +#!/bin/sh +texmfstart xmltools.rb "$@" |