summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlaf Weber <olaf@infovore.xs4all.nl>2008-07-17 17:34:33 +0000
committerOlaf Weber <olaf@infovore.xs4all.nl>2008-07-17 17:34:33 +0000
commit6004974d246907fa8f734c225d71d5c0ba0c2157 (patch)
tree3195a48c605eadf869c95bb89c3b9400a0cf5e5c
parent55b6390d0fab9ddc5918cb45f0ada0fb4824e201 (diff)
Updated IRIX binaries.
git-svn-id: svn://tug.org/texlive/trunk@9634 c570f23f-e606-0410-a88d-b1316a301751
l---------[-rwxr-xr-x]Master/bin/mips-irix/a2ping2400
-rwxr-xr-xMaster/bin/mips-irix/afm2plbin135444 -> 135612 bytes
-rwxr-xr-xMaster/bin/mips-irix/afm2tfmbin141272 -> 157804 bytes
-rwxr-xr-xMaster/bin/mips-irix/alephbin811136 -> 852792 bytes
-rwxr-xr-xMaster/bin/mips-irix/bboxbin19772 -> 19772 bytes
-rwxr-xr-xMaster/bin/mips-irix/bg5convbin18212 -> 18212 bytes
-rwxr-xr-xMaster/bin/mips-irix/bibtexbin256800 -> 273448 bytes
-rwxr-xr-xMaster/bin/mips-irix/bibtex8bin300888 -> 301052 bytes
-rwxr-xr-xMaster/bin/mips-irix/cef5convbin18316 -> 18316 bytes
-rwxr-xr-xMaster/bin/mips-irix/cefconvbin18288 -> 18288 bytes
-rwxr-xr-xMaster/bin/mips-irix/cefsconvbin18316 -> 18316 bytes
-rwxr-xr-xMaster/bin/mips-irix/cfftot1bin629524 -> 650544 bytes
-rwxr-xr-xMaster/bin/mips-irix/ctanglebin155228 -> 155396 bytes
-rwxr-xr-xMaster/bin/mips-irix/ctiebin113316 -> 113484 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/ctxtools3
-rwxr-xr-xMaster/bin/mips-irix/cweavebin198116 -> 214660 bytes
-rwxr-xr-xMaster/bin/mips-irix/detexbin120436 -> 137940 bytes
-rwxr-xr-xMaster/bin/mips-irix/devnagbin47732 -> 47748 bytes
-rwxr-xr-xMaster/bin/mips-irix/disdvibin22964 -> 22964 bytes
-rwxr-xr-xMaster/bin/mips-irix/dmpbin134332 -> 134520 bytes
-rwxr-xr-xMaster/bin/mips-irix/dt2dvbin51000 -> 51000 bytes
-rwxr-xr-xMaster/bin/mips-irix/dv2dtbin22376 -> 22376 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvi2ttybin44248 -> 44248 bytes
l---------Master/bin/mips-irix/dviasm1
-rwxr-xr-xMaster/bin/mips-irix/dvibookbin60992 -> 60992 bytes
-rwxr-xr-xMaster/bin/mips-irix/dviconcatbin60504 -> 60504 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvicopybin193668 -> 210224 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvidvibin40768 -> 40768 bytes
l---------Master/bin/mips-irix/dvigif1
-rwxr-xr-xMaster/bin/mips-irix/dviljbin157272 -> 159832 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvilj2pbin157456 -> 160016 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvilj4bin175392 -> 177840 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvilj4lbin175392 -> 177848 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvipdfmbin648208 -> 648652 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvipdfmxbin1194468 -> 1220476 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvipngbin1364548 -> 1467104 bytes
-rwxr-xr-xMaster/bin/mips-irix/dviposbin161404 -> 161584 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvipsbin381192 -> 381596 bytes
-rwxr-xr-xMaster/bin/mips-irix/dviselectbin60360 -> 60360 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvitodvibin78268 -> 78268 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvitompbin158388 -> 158624 bytes
-rwxr-xr-xMaster/bin/mips-irix/dvitypebin158192 -> 158352 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/e2pall90
l---------[-rwxr-xr-x]Master/bin/mips-irix/ebbbin369244 -> 8 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/ebong347
-rwxr-xr-xMaster/bin/mips-irix/epsffitbin20280 -> 20372 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/epstopdf423
l---------[-rwxr-xr-x]Master/bin/mips-irix/exatools3
-rwxr-xr-xMaster/bin/mips-irix/extconvbin18212 -> 18212 bytes
l---------Master/bin/mips-irix/extractbb1
l---------[-rwxr-xr-x]Master/bin/mips-irix/getnonfreefonts300
-rwxr-xr-xMaster/bin/mips-irix/gftodvibin171064 -> 171224 bytes
-rwxr-xr-xMaster/bin/mips-irix/gftopkbin135452 -> 152008 bytes
-rwxr-xr-xMaster/bin/mips-irix/gftypebin137012 -> 137180 bytes
-rwxr-xr-xMaster/bin/mips-irix/gsftopkbin133312 -> 133480 bytes
-rwxr-xr-xMaster/bin/mips-irix/hbf2gfbin137028 -> 153576 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/ht8
l---------[-rwxr-xr-x]Master/bin/mips-irix/htcontext8
l---------[-rwxr-xr-x]Master/bin/mips-irix/htlatex10
l---------[-rwxr-xr-x]Master/bin/mips-irix/htmex10
l---------[-rwxr-xr-x]Master/bin/mips-irix/httex10
l---------[-rwxr-xr-x]Master/bin/mips-irix/httexi11
l---------Master/bin/mips-irix/htxelatex1
l---------Master/bin/mips-irix/htxetex1
-rwxr-xr-xMaster/bin/mips-irix/infobin250648 -> 270436 bytes
-rwxr-xr-xMaster/bin/mips-irix/infokeybin44528 -> 45316 bytes
-rwxr-xr-xMaster/bin/mips-irix/install-infobin43936 -> 66432 bytes
-rwxr-xr-xMaster/bin/mips-irix/kpseaccessbin18856 -> 18856 bytes
-rwxr-xr-xMaster/bin/mips-irix/kpsereadlinkbin18836 -> 18836 bytes
-rwxr-xr-xMaster/bin/mips-irix/kpsestatbin18992 -> 18992 bytes
-rwxr-xr-xMaster/bin/mips-irix/kpsewhichbin114868 -> 115640 bytes
-rwxr-xr-xMaster/bin/mips-irix/lacheckbin70720 -> 71700 bytes
l---------Master/bin/mips-irix/lualatex1
-rwxr-xr-xMaster/bin/mips-irix/luatexbin0 -> 5933036 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/luatools3
-rwxr-xr-xMaster/bin/mips-irix/magbin18812 -> 18812 bytes
l---------Master/bin/mips-irix/makeglossaries1
-rwxr-xr-xMaster/bin/mips-irix/makeindexbin192872 -> 209504 bytes
-rwxr-xr-xMaster/bin/mips-irix/makeinfobin330980 -> 367104 bytes
-rwxr-xr-xMaster/bin/mips-irix/makempxbin112460 -> 112652 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/makempy3
l---------Master/bin/mips-irix/metafun1
-rwxr-xr-xMaster/bin/mips-irix/mfbin484772 -> 513512 bytes
-rwxr-xr-xMaster/bin/mips-irix/mf-nowinbin483364 -> 512100 bytes
-rwxr-xr-xMaster/bin/mips-irix/mftbin167968 -> 168132 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/mk4ht347
l---------Master/bin/mips-irix/mkjobtexmf1
-rwxr-xr-xMaster/bin/mips-irix/mktexlsr110
-rwxr-xr-xMaster/bin/mips-irix/mktexpk9
-rwxr-xr-xMaster/bin/mips-irix/mktextfm2
-rwxr-xr-xMaster/bin/mips-irix/mmafmbin328160 -> 346584 bytes
-rwxr-xr-xMaster/bin/mips-irix/mmpfbbin505164 -> 523660 bytes
-rwxr-xr-xMaster/bin/mips-irix/mpostbin649248 -> 650916 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/mpstools3
-rwxr-xr-xMaster/bin/mips-irix/mptobin21796 -> 21892 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/mptopdf3
l---------[-rwxr-xr-x]Master/bin/mips-irix/mtxtools3
-rwxr-xr-xMaster/bin/mips-irix/musixflxbin22148 -> 22148 bytes
-rwxr-xr-xMaster/bin/mips-irix/newerbin19360 -> 19360 bytes
-rwxr-xr-xMaster/bin/mips-irix/odvicopybin211112 -> 211280 bytes
-rwxr-xr-xMaster/bin/mips-irix/odvitypebin158364 -> 158524 bytes
-rwxr-xr-xMaster/bin/mips-irix/omegabin827828 -> 868516 bytes
-rwxr-xr-xMaster/bin/mips-irix/omfontsbin286640 -> 287776 bytes
-rwxr-xr-xMaster/bin/mips-irix/otanglebin102352 -> 102360 bytes
-rwxr-xr-xMaster/bin/mips-irix/otfinfobin714248 -> 734888 bytes
-rwxr-xr-xMaster/bin/mips-irix/otftotfmbin1179840 -> 1208692 bytes
-rwxr-xr-xMaster/bin/mips-irix/otp2ocpbin138088 -> 138872 bytes
-rwxr-xr-xMaster/bin/mips-irix/outocpbin111504 -> 111656 bytes
-rwxr-xr-xMaster/bin/mips-irix/patgenbin80148 -> 80156 bytes
l---------Master/bin/mips-irix/pdfatfi1
-rwxr-xr-xMaster/bin/mips-irix/pdfclosebin20000 -> 20000 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/pdfcrop309
l---------Master/bin/mips-irix/pdflualatex1
l---------Master/bin/mips-irix/pdfluatex1
-rwxr-xr-xMaster/bin/mips-irix/pdfopenbin20260 -> 20260 bytes
-rwxr-xr-xMaster/bin/mips-irix/pdftexbin1962412 -> 2077416 bytes
-rwxr-xr-xMaster/bin/mips-irix/pdftexi2dvi19
l---------[-rwxr-xr-x]Master/bin/mips-irix/pdfthumb30
l---------[-rwxr-xr-x]Master/bin/mips-irix/pdftools3
-rwxr-xr-xMaster/bin/mips-irix/pdftosrcbin583832 -> 601648 bytes
l---------Master/bin/mips-irix/pdftrimwhite1
l---------[-rwxr-xr-x]Master/bin/mips-irix/perltex477
-rwxr-xr-xMaster/bin/mips-irix/pfb2pfabin19544 -> 19544 bytes
-rwxr-xr-xMaster/bin/mips-irix/pk2bmbin21396 -> 21396 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/pkfix861
-rwxr-xr-xMaster/bin/mips-irix/pktogfbin133096 -> 149648 bytes
-rwxr-xr-xMaster/bin/mips-irix/pktypebin131864 -> 132028 bytes
-rwxr-xr-xMaster/bin/mips-irix/pltotfbin101472 -> 101480 bytes
-rwxr-xr-xMaster/bin/mips-irix/pooltypebin42424 -> 42432 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/ps2eps930
-rwxr-xr-xMaster/bin/mips-irix/ps2pkbin275864 -> 276016 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/ps4pdf134
-rwxr-xr-xMaster/bin/mips-irix/psbookbin22572 -> 22572 bytes
-rwxr-xr-xMaster/bin/mips-irix/psnupbin43352 -> 43352 bytes
-rwxr-xr-xMaster/bin/mips-irix/psresizebin26496 -> 26516 bytes
-rwxr-xr-xMaster/bin/mips-irix/psselectbin22852 -> 22852 bytes
l---------Master/bin/mips-irix/pst2pdf1
l---------[-rwxr-xr-x]Master/bin/mips-irix/pstopdf3
-rwxr-xr-xMaster/bin/mips-irix/pstopsbin43484 -> 43484 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/rlxtools3
l---------Master/bin/mips-irix/rungs1
l---------[-rwxr-xr-x]Master/bin/mips-irix/runtools3
l---------[-rwxr-xr-x]Master/bin/mips-irix/simpdftex571
-rwxr-xr-xMaster/bin/mips-irix/sjisconvbin18212 -> 18212 bytes
-rwxr-xr-xMaster/bin/mips-irix/synctexbin0 -> 178052 bytes
-rwxr-xr-xMaster/bin/mips-irix/t1asciibin43732 -> 44024 bytes
-rwxr-xr-xMaster/bin/mips-irix/t1asmbin63588 -> 63876 bytes
-rwxr-xr-xMaster/bin/mips-irix/t1binarybin43408 -> 43704 bytes
-rwxr-xr-xMaster/bin/mips-irix/t1disasmbin62224 -> 62504 bytes
-rwxr-xr-xMaster/bin/mips-irix/t1dotlessjbin498328 -> 517064 bytes
-rwxr-xr-xMaster/bin/mips-irix/t1lintbin465580 -> 467536 bytes
-rwxr-xr-xMaster/bin/mips-irix/t1macbin65488 -> 65776 bytes
-rwxr-xr-xMaster/bin/mips-irix/t1reencodebin502632 -> 504352 bytes
-rwxr-xr-xMaster/bin/mips-irix/t1testpagebin488564 -> 490584 bytes
-rwxr-xr-xMaster/bin/mips-irix/t1unmacbin63540 -> 63828 bytes
-rwxr-xr-xMaster/bin/mips-irix/t4htbin133760 -> 134392 bytes
-rwxr-xr-xMaster/bin/mips-irix/tanglebin175124 -> 175280 bytes
-rwxr-xr-xMaster/bin/mips-irix/tcdialogbin213632 -> 213636 bytes
-rwxr-xr-xMaster/bin/mips-irix/texbin522180 -> 558060 bytes
-rwxr-xr-xMaster/bin/mips-irix/tex4htbin222812 -> 241056 bytes
-rwxr-xr-xMaster/bin/mips-irix/texconfig-dialog18
-rwxr-xr-xMaster/bin/mips-irix/texconfig-sys2
l---------Master/bin/mips-irix/texcount1
l---------[-rwxr-xr-x]Master/bin/mips-irix/texdoc207
l---------[-rwxr-xr-x]Master/bin/mips-irix/texdoctk1795
l---------[-rwxr-xr-x]Master/bin/mips-irix/texexec3
l---------Master/bin/mips-irix/texfind1
l---------[-rwxr-xr-x]Master/bin/mips-irix/texfont3
-rwxr-xr-xMaster/bin/mips-irix/texi2dvi2030
-rwxr-xr-xMaster/bin/mips-irix/texi2pdf8
-rwxr-xr-xMaster/bin/mips-irix/texindexbin40536 -> 38824 bytes
-rwxr-xr-xMaster/bin/mips-irix/texlinks79
l---------Master/bin/mips-irix/texlua1
l---------Master/bin/mips-irix/texluac1
l---------[-rwxr-xr-x]Master/bin/mips-irix/texmfstart2502
l---------Master/bin/mips-irix/texshow1
l---------[-rwxr-xr-x]Master/bin/mips-irix/textools3
l---------[-rwxr-xr-x]Master/bin/mips-irix/texutil3
-rwxr-xr-xMaster/bin/mips-irix/tftoplbin153260 -> 153496 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/thumbpdf1563
-rwxr-xr-xMaster/bin/mips-irix/tiebin20180 -> 20180 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/tmftools3
-rwxr-xr-xMaster/bin/mips-irix/ttf2afmbin138464 -> 138632 bytes
-rwxr-xr-xMaster/bin/mips-irix/ttf2pkbin384524 -> 384692 bytes
-rwxr-xr-xMaster/bin/mips-irix/ttf2tfmbin412944 -> 413116 bytes
-rwxr-xr-xMaster/bin/mips-irix/ttftotype42bin559216 -> 562580 bytes
-rwxr-xr-xMaster/bin/mips-irix/vftovpbin174724 -> 174892 bytes
-rwxr-xr-xMaster/bin/mips-irix/vlnabin0 -> 22060 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/vpe422
-rwxr-xr-xMaster/bin/mips-irix/vptovfbin121316 -> 121324 bytes
-rwxr-xr-xMaster/bin/mips-irix/weavebin194388 -> 210932 bytes
-rwxr-xr-xMaster/bin/mips-irix/xdvi19
-rwxr-xr-xMaster/bin/mips-irix/xdvi-motifbin0 -> 1273352 bytes
-rwxr-xr-xMaster/bin/mips-irix/xdvi-motif.binbin1246644 -> 0 bytes
-rwxr-xr-xMaster/bin/mips-irix/xdvipdfmxbin1898860 -> 2026836 bytes
-rwxr-xr-xMaster/bin/mips-irix/xetexbin9140684 -> 10608552 bytes
l---------[-rwxr-xr-x]Master/bin/mips-irix/xmltools3
197 files changed, 1694 insertions, 14438 deletions
diff --git a/Master/bin/mips-irix/a2ping b/Master/bin/mips-irix/a2ping
index 82d202b022e..5cbfe106996 100755..120000
--- a/Master/bin/mips-irix/a2ping
+++ b/Master/bin/mips-irix/a2ping
@@ -1,2399 +1 @@
-#! /bin/sh
-eval '(exit $?0)' && eval 'PERL_BADLANG=x;export PERL_BADLANG;: \
-;exec perl -x -S -- "$0" ${1+"$@"};#'if 0;
-eval 'setenv PERL_BADLANG x;exec perl -x -S -- "$0" $argv:q;#'.q+
-#!perl -w
-package Htex::a2ping; $0=~/(.*)/s;unshift@INC,'.';do($1);die$@if$@;__END__+if !1;
-# This Perl script was generated by JustLib2 at Wed Apr 23 09:14:13 2003.
-# Don't touch/remove any lines above; http://www.inf.bme.hu/~pts/justlib
-#
-# This program is free software, licensed under the GNU GPL, >=2.0.
-# This software comes with absolutely NO WARRANTY. Use at your own risk!
-#
-package just; BEGIN{$INC{'just.pm'}='just.pm'}
-BEGIN{ $just::VERSION=2 }
-sub end(){1}
-sub main(){}
-
-BEGIN{$ INC{'strict.pm'}='strict.pm'} {
-package strict;
-use just;
-# by pts@fazekas.hu at Wed Jan 10 12:42:08 CET 2001
-require 5.002;
-sub bits {
- (grep{'refs'eq$_}@_ && 2)|
- (grep{'subs'eq$_}@_ && 0x200)|
- (grep{'vars'eq$_}@_ && 0x400)|
- ($@ || 0x602)
-}
-sub import { shift; $^H |= bits @_ }
-sub unimport { shift; $^H &= ~ bits @_ }
-just::end}
-
-BEGIN{$ INC{'integer.pm'}='integer.pm'} {
-package integer;
-use just;
-# by pts@fazekas.hu at Wed Jan 10 12:42:08 CET 2001
-sub import { $^H |= 1 }
-sub unimport { $^H &= ~1 }
-just::end}
-
-BEGIN{$ INC{'Pts/string.pm'}='Pts/string.pm'} {
-package Pts::string;
-# by pts@fazekas.hu at Sat Dec 21 21:32:18 CET 2002
-use just;
-use integer;
-use strict;
-
-#** @param $_[0] a string
-#** @param $_[1] index of first bit to return. Bit 128 of byte 0 is index 0.
-#** @param $_[2] number of bits to return (<=32)
-#** @return an integer (negative on overflow), bit at $_[1] is its MSB
-sub get_bits_msb($$$) {
- # assume: use integer;
- my $loop=$_[1];
- my $count=$_[2];
- my $ret=0;
- ($ret+=$ret+(1&(vec($_[0],$loop>>3,8)>>(7-($loop&7)))), $loop++) while $count--!=0;
- $ret
-}
-
-#** @param $_[0] a string
-#** @return value if $_[0] represents a floating point numeric constant
-#** in the C language (without the LU etc. modifiers) -- or undef. Returns
-#** undef for integer constants
-sub c_floatval($) {
- my $S=$_[0];
- no integer; # very important; has local scope
- return 0.0+$S if $S=~/\A[+-]?(?:[0-9]*\.[0-9]+|[0-9]+\.])(?:[eE][+-]?[0-9]+)?\Z(?!\n)/;
- undef
-}
-
-#** @param $_[0] a string
-#** @return value if $_[0] represents a floating point or integer numeric
-#** constant in the C language (without the LU etc. modifiers) -- or undef
-sub c_numval($) {
- my $S=$_[0];
- no integer; # very important; has local scope
- return 0+$S if $S=~/\A[+-]?(?:[0-9]*\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+\.?)\Z(?!\n)/;
- undef
-}
-
-#** @param $_[0] a string
-#** @return the integer value of $_[0] in C -- or undef
-sub c_intval($) {
- my $S=$_[0];
- my $neg=1;
- $neg=-1 if $S=~s@\A([+-])@@ and '-'eq$1;
- return $neg*hex $1 if $S=~/\A0[xX]([0-9a-fA-F]+)\Z(?!\n)/;
- return $neg*oct $1 if $S=~/\A0([0-7]+)\Z(?!\n)/;
- return $neg*$1 if $S=~/\A([0-9]+)\Z(?!\n)/;
- undef
-}
-
-sub import {
- no strict 'refs';
- my $package = (caller())[0];
- shift; # my package
- for my $p (@_ ? @_ : qw{get_bits_msb c_floatval c_numval c_intval}) { *{$package."::$p"}=\&{$p} }
-}
-
-just::end}
-
-BEGIN{$ INC{'Htex/dimen.pm'}='Htex/dimen.pm'} {
-package Htex::dimen;
-# by pts@fazekas.hu at Sat Dec 21 21:26:15 CET 2002
-use just;
-use integer;
-use strict;
-use Pts::string qw(c_numval);
-
-my %bp_mul;
-{ no integer; %bp_mul=(
- 'bp'=>1, # 1 bp = 1 bp (big point)
- 'in'=>72, # 1 in = 72 bp (inch)
- 'pt'=>72/72.27, # 1 pt = 72/72.27 bp (point)
- 'pc'=>12*72/72.27, # 1 pc = 12*72/72.27 bp (pica)
- 'dd'=>1238/1157*72/72.27, # 1 dd = 1238/1157*72/72.27 bp (didot point) [about 1.06601110141206 bp]
- 'cc'=>12*1238/1157*72/72.27, # 1 cc = 12*1238/1157*72/72.27 bp (cicero)
- 'sp'=>72/72.27/65536, # 1 sp = 72/72.27/65536 bp (scaled point)
- 'cm'=>72/2.54, # 1 cm = 72/2.54 bp (centimeter)
- 'mm'=>7.2/2.54, # 1 mm = 7.2/2.54 bp (millimeter)
-) }
-
-#** @param $_[0] a (real or integer) number, optionally postfixed by a
-#** TeX dimension specifier (default=bp)
-#** @return the number in bp, or undef
-sub dimen2bp($) {
- no integer;
- my $S=$_[0];
- my $mul;
- $mul=$bp_mul{$1} if $S=~s/\s*([a-z][a-z0-9]+)\Z(?!\n)// and exists $bp_mul{$1};
- my $val=c_numval($S);
- $val*=$mul if defined $val and defined $mul;
- $val
-}
-
-just::end}
-
-BEGIN{$ INC{'Htex/papers.pm'}='Htex/papers.pm'} {
-package Htex::papers;
-# contains paper size information
-# by pts@fazekas.hu at Sun Dec 22 00:30:58 CET 2002
-use just;
-use integer;
-use strict;
-use Htex::dimen;
-
-my @papers=(
-#
-# paper.txt
-# by pts@fazekas.hu at Tue Jan 16 18:21:59 CET 2001
-# by pts@fazekas.hu at Tue Jan 16 19:13:16 CET 2001
-#
-# Examined: dvips, gs, libpaperg
-#
-# all units are measured in Big Points (bp)
-# 72 bp == 1 in
-# 2.54 cm == 1 in
-#
-# papername width height
-qw{Comm10 297 684},
-qw{Monarch 279 540},
-qw{halfexecutive 378 522},
-
-qw{Legal 612 1008},
-qw{Statement 396 612},
-qw{Tabloid 792 1224},
-qw{Ledger 1224 792},
-qw{Folio 612 936},
-qw{Quarto 610 780},
-qw{7x9 504 648},
-qw{9x11 648 792},
-qw{9x12 648 864},
-qw{10x13 720 936},
-qw{10x14 720 1008},
-qw{Executive 540 720},
-
-qw{ISOB0 2835 4008},
-qw{ISOB1 2004 2835},
-qw{ISOB2 1417 2004},
-qw{ISOB3 1001 1417},
-qw{ISOB4 709 1001},
-qw{ISOB5 499 709},
-qw{ISOB6 354 499},
-qw{ISOB7 249 354},
-qw{ISOB8 176 249},
-qw{ISOB9 125 176},
-qw{ISOB10 88 125},
-qw{jisb0 2916 4128},
-qw{jisb1 2064 2916},
-qw{jisb2 1458 2064},
-qw{jisb3 1032 1458},
-qw{jisb4 729 1032},
-qw{jisb5 516 729},
-qw{jisb6 363 516},
-
-qw{C7 230 323},
-qw{DL 312 624},
-
-qw{a3 842 1190}, # defined by Adobe
-qw{a4 595 842}, # defined by Adobe; must precede a4small
-
-# a4small should be a4 with an ImagingBBox of [25 25 570 817].},
-qw{a4small 595 842},
-qw{letter 612 792}, # must precede lettersmall
-# lettersmall should be letter with an ImagingBBox of [25 25 587 767].
-qw{lettersmall 612 792},
-# note should be letter (or some other size) with the ImagingBBox
-# shrunk by 25 units on all 4 sides.
-qw{note 612 792},
-qw{letterLand 792 612},
-# End of Adobe-defined page sizes
-
-qw{a0 2380 3368},
-qw{a1 1684 2380},
-qw{a2 1190 1684},
-qw{a5 421 595},
-qw{a6 297 421},
-qw{a7 210 297},
-qw{a8 148 210},
-qw{a9 105 148},
-qw{a10 74 105},
-qw{b0 2836 4008},
-qw{b1 2004 2836},
-qw{b2 1418 2004},
-qw{b3 1002 1418},
-qw{b4 709 1002},
-qw{b5 501 709}, # defined by Adobe
-
-qw{a0Land 3368 2380},
-qw{a1Land 2380 1684},
-qw{a2Land 1684 1190},
-qw{a3Land 1190 842},
-qw{a4Land 842 595},
-qw{a5Land 595 421},
-qw{a6Land 421 297},
-qw{a7Land 297 210},
-qw{a8Land 210 148},
-qw{a9Land 148 105},
-qw{a10Land 105 74},
-qw{b0Land 4008 2836},
-qw{b1Land 2836 2004},
-qw{b2Land 2004 1418},
-qw{b3Land 1418 1002},
-qw{b4Land 1002 709},
-qw{b5Land 709 501},
-
-qw{c0 2600 3677},
-qw{c1 1837 2600},
-qw{c2 1298 1837},
-qw{c3 918 1298},
-qw{c4 649 918},
-qw{c5 459 649},
-qw{c6 323 459},
-
-# vvv U.S. CAD standard paper sizes
-qw{archE 2592 3456},
-qw{archD 1728 2592},
-qw{archC 1296 1728},
-qw{archB 864 1296},
-qw{archA 648 864},
-
-qw{flsa 612 936}, # U.S. foolscap
-qw{flse 612 936}, # European foolscap
-qw{halfletter 396 612},
-qw{csheet 1224 1584}, # ANSI C 17x22
-qw{dsheet 1584 2448}, # ANSI D 22x34
-qw{esheet 2448 3168}, # ANSI E 34x44
-qw{17x22 1224 1584}, # ANSI C 17x22
-qw{22x34 1584 2448}, # ANSI D 22x34
-qw{34x44 2448 3168}, # ANSI E 34x44
-);
-
-#** Converts a numeric paper size to a well-defined paper name. Tolerance is
-#** 8.5bp
-#** @param $_[0] width, in bp
-#** @param $_[1] height, in bp
-#** @return () or ("papername", ret.paper.width.bp, ret.paper.height.bp)
-sub valid_bp($$;$$) {
- no integer;
- my ($W1,$H1)=(defined$_[2]?$_[2]:0,defined$_[3]?$_[3]:0);
- my ($WW,$HH)=(Htex::dimen::dimen2bp($_[0])-$W1, Htex::dimen::dimen2bp($_[1])-$H1);
- # Dat: 1mm == 720/254bp; 3mm =~ 8.5bp
- no integer;
- for (my $I=0; $I<@papers; $I+=3) {
- return @papers[$I,$I+1,$I+2] if abs($papers[$I+1]-$WW)<=8.5 and abs($papers[$I+2]-$HH)<=8.5;
- }
- ()
-}
-
-#** @param $_[0] (width width_unit "," height height_unit)
-#** @return () or ("papername", width.bp, height.bp)
-sub valid($) { # valid_papersize
- my $S=lc$_[0];
- $S=~/^\s*(\d+(\.\d+)?)\s*([a-z][a-z0-9]+)\s*,\s*(\d+(\.\d+)?)\s*([a-z][a-z0-9]+)\s*\Z(?!\n)/ ?
- valid_bp("$1$3","$4$6") : ();
-}
-
-#** @param $_[0] (width width_unit? ("," || "x") height height_unit?) || (papername)
-#** @return () or ("papername"?, width.bp, height.bp)
-sub any($) {
- my $S=lc$_[0];
- if ($S=~/\A[a-z]\w+\Z(?!\n)/) {
- for (my $I=0; $I<@papers; $I+=3) {
- return @papers[$I,$I+1,$I+2] if lc($papers[$I]) eq $S;
- }
- }
- return () if $S!~/^\s*(\d+(\.\d+)?)\s*((?:[a-z][a-z0-9]+)?)\s*[,xX]\s*(\d+(\.\d+)?)\s*((?:[a-z][a-z0-9]+)?)\s*\Z(?!\n)/;
- # ^^^ Dat: [xX] is xdvi-style, [,] is dvips-style spec
- my($w,$h)=($1.$3, $4.$6);
- my @L=valid_bp($w,$h);
- @L ? @L : (undef,Htex::dimen::dimen2bp($w),Htex::dimen::dimen2bp($h))
-}
-
-just::end}
-
-BEGIN{$ INC{'Htex/a2ping.pm'}='Htex/a2ping.pm'}
-
-package Htex::a2ping;
-# a2ping.pl -- convert between PS, EPS and PDF and other page description formats
-# by pts@fazekas.hu et al. at Wed Apr 16 14:54:13 CEST 2003
-# a2ping.pa created at Sun Apr 20 22:25:47 2003
-#
-# This file contains perldoc(1) documentation. Search for `=head1'.
-# See revision history at end of this file.
-#
-
-use just +1; # a JustLib application
-use strict;
-use integer;
-use Htex::papers;
-BEGIN { $Htex::a2ping::VERSION="2.77p" }
-
-# Imp: gs(704?!) sometimes finds too small bbox, see Univers.eps
-# Imp: respect bbox in METAPOST %! (not EPS), don't use Compute-GS T-
-# Imp: -sPDFPassword=...
-# Imp: `a2ping.pl -v jf.eps pdf1: t.pdf' PDF1: must be forced to have --below
-# Imp: option to `clip' an EPS to the specified bbox -- does file size decrease?
-# Imp: fix bug a2ping -v ~/a2ping_bug.ps a2ping_bug.pdf; running type1fix on
-# all fonts with dff.pl has fixed the problem
-# Imp: post-process PNG etc. written by sam2p
-# Imp: better help and docs
-# Imp: respect full /MediaBox for a PDF -> EPS|PDF1 conversion
-# Imp: --ll x,y command line option
-# Imp: Htex/a2ping.pa -v ../image/tuzv.ps t.pdf (1st and second page different)
-# Imp: also save+restore /pdfmark ??
-# Imp: fix /MediaBox an all PDF pages if !$ll_zero
-# Imp: PDF -> PDF1 conversion with gs -sDEVICE=pdfwrite
-# Imp: direct PDF to PCL5 conversion with gs
-# Imp: remove %%BeginDefaults | %%PageMedia: plain | %%EndDefaults (pdftops(1))
-# Imp: fix completely bogus margin and papersize handling:
-# ../justlib2/Htex/a2ping.pa --duplex=force-short -v -p:a3 -r force-unknown tuzv.ps t.pdf
-# Imp: careful distinction between PDF and PDF1
-# Imp: psnup support (-1 -2 -3 -4 ...)
-# Imp: idempotent PS -> PS, add other header
-# Imp: use convert(1) etc.
-# Imp: possibly disable compute-pipe
-# Imp: $header_remove_p ??
-# Imp: --leftright option instead of --below
-# Imp: pdfboxes.pl, get offset from gs
-# Imp: detect error messages from GS, abort...
-# Imp: use all pdftops + gs + acroread
-# Imp: possibly accept /PageSize from %%DocumentMedia
-# Imp: /DocumentMedia seems to screw up sub-pt placement in gv(1)
-#
-# Dat: example: a2ping.pl --extra=-c:ijg:50 -r86 nn1.eps nn1.jpg
-# Dat: calling ``showpage'' is not required for -sDEVICE=pdfwrite with gs 6.50,
-# but -sDEVICE=pgmraw depends on it
-# Dat: the functionality of pdfboxes.pl cannot be provided here with a shorter
-# implementation, because gs always outputs the content stream of the PDF
-# objects first
-# Dat: pdftops -eps writes negative bbox correctly
-# Dat: markedEPS: include pdfmarks
-# Dat: gs 7.04 gdevdjet.[ch], gdevdljm.[ch]
-# Dat: to be undeffed in setpagedevice: /.MarginsHWResolution /PageSize
-# /ImagingBBox /HWResolution /HWSize /.MediaSize (we undef all)
-
-### program identification
-my $program = "a2ping.pl";
-my $filedate="2004-04-28"; # my $filedate="2001/03/05";
-my $copyright = "Written by <pts\@fazekas.hu> from April 2003.
-This is free software, GNU GPL >=2.0. There is NO WARRANTY.
-(epstopdf 2.7 Copyright 1998-2001 by Sebastian Rahtz et al.)\n";
-# "Contains modifications by pts\@fazekas.hu";
-my $title = "$program $Htex::a2ping::VERSION, $filedate -- $copyright\n";
-
-### ghostscript command name
-my($quote,$GS)=("'","gs");
-($quote,$GS) = ("\"","gswin32c") if $^O eq 'MSWin32' or $^O =~ /cygwin/i;
-
-# --- help functions
-
-sub fnq($) {
- my $fn=$_[0];
- return $fn if $fn!~y@-a-zA-Z0-9/.+_@@c;
- $fn=~s@'@\\'@g if $quote eq "'";
- $quote.$fn.$quote
-}
-
-sub debug {
- print STDERR "* @_\n" if $::opt_verbose;
-}
-sub warning {
- print STDERR "$0: warning: @_\n";
-}
-sub error {
- my $s=$title; $title="";
- die "$s$0: @_\n";
-}
-
-# unlink temporary files?
-my $tmpunlink_p=1;
-my $tmpsig=1;
-my %tmpfiles;
-my $tmpdir=exists $ENV{TMPDIR} ? $ENV{TMPDIR} : '/tmp';
-$tmpdir="." if (!-d $tmpdir or !-w $tmpdir) and -w '.';
-sub cleanup() {
- unlink keys %tmpfiles;
- exit 125;
-}
-END { unlink keys %tmpfiles; }
-sub temp_unlink($) {
- if (exists $tmpfiles{$_[0]}) {
- unlink $_[0] if $tmpunlink_p;
- delete $tmpfiles{$_[0]};
- }
-}
-sub temp_prefix() {
- my $prog0=$program;
- $prog0=~y@a-zA-Z0-9@_@c;
- if ($tmpsig) {
- $tmpsig=0;
- $SIG{INT}=$SIG{TERM}=$SIG{HUP}=$SIG{QUIT}=\&cleanup;
- }
- return "$tmpdir/$prog0-$$-".int(rand(1<<30))."-"; # 30: nonnegative
-}
-
-#** @return arg rounded down to int
-sub floor($) {
- # Dat: Perl int() rounds towards zero
- no integer;
- $_[0] < 0 ? -int(-$_[0]) : int($_[0])
-}
-
-#** @return arg rounded up to int
-sub ceil($) {
- no integer;
- $_[0]==int($_[0]) ? $_[0] : 1+ ($_[0] < 0 ? -int(-$_[0]) : int($_[0]))
-}
-
-
-just::main;
-
-# ---
-
-sub FL_PAGE1_STOP(){1} # is file format single-page?
-sub FL_SET_PAGESIZE_OK(){2}
-sub FL_PDFMARK(){4}
-sub FL_NEED_SHOWPAGE(){8} # does gs -sDEVICE=... need showpage?
-sub FL_SAMPLED(){16} # is it a sampled (raster, pixel-based)
-sub FL_ANY_ORIGIN_OK(){32} # (llx,lly) may be anything, not just (0,0)
-sub FL_HAS_ANTIALIAS(){64}
-sub FL_VIA_SAM2P(){128} # sam2p(1) can convert PNM to such a format
-sub FL_OK_SAM2P(){256}
-
-my %fmts=( # Name=>[flags]
- 'EPS'=>[FL_PAGE1_STOP],
- 'markedEPS'=>[FL_PAGE1_STOP|FL_PDFMARK], # Imp: should we have FL_SET_PAGESIZE_OK?
- 'PDF1'=>[FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_PDFMARK],
- 'PDF'=>[FL_SET_PAGESIZE_OK|FL_PDFMARK|FL_ANY_ORIGIN_OK],
- 'PS'=>[FL_SET_PAGESIZE_OK|FL_ANY_ORIGIN_OK],
- 'markedPS'=>[FL_SET_PAGESIZE_OK|FL_PDFMARK|FL_ANY_ORIGIN_OK],
- 'PCL5'=>[FL_SET_PAGESIZE_OK|FL_ANY_ORIGIN_OK],
- # ^^^ Dat: no FL_HAS_ANTIALIAS -- would need lj5gray, which is loonger
- # ^^^ Dat: no FL_SAMPLED, because cannot set resolution
- 'PBM'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_OK_SAM2P], # Dat FL_HAS_ANTIALIAS produces obscure image
- 'PGM'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_OK_SAM2P],
- 'PPM'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_OK_SAM2P],
- # Now come the FileFormats supported via sam2p
- 'PNG'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P],
- 'XWD'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P],
- 'BMP'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P],
- 'TIFF'=>[FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P],
- 'JPEG'=>[FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P],
- 'GIF'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P], # Imp: disable antialias for few colors?
- 'XPM'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P], # Imp: disable antialias for few colors?
-);
-my %fmt_aliases=qw(MARKEDPS markedPS MARKEDEPS markedEPS PCL PCL5
- UNMARKEDPS PS UNMARKEDEPS EPS EPDF PDF1 MEPS markedEPS);
-# Dat: .ps will be unmarked PS
-# Imp: sometimes markedEPS for .eps?
-my %fmt_exts=qw(eps EPS epsi EPS epsf EPS eps2 EPS ps PS ps2 PS
- pcl PCL5 pcl5 PCL5 pbm PBM pgm PGM pnm PPM ppm PPM pdf PDF png PNG
- xwd XWD bmp BMP rle BMP tif TIFF tiff TIFF jpg JPEG jpe JPEG
- jpg JPEG gif GIF xpm XPM);
-
-### usage
-# vvv deprecated options:
-# --outfile=<file>: write result to <file>
-# --debug: verbose debug informations (default: $bool[$::opt_verbose])
-# --(no)filter: d. read standard input (default: false)
-# --(no)gs d. run Ghostscript to create PDF
-my $usage=
-"${title}Usage: $program [options] <inputfile> [[<outformat>:] <outputfile>]
-Run with --doc to read documentation as a UNIX man(1) page.
-Options: --help print this help message
---(no)compress use compression (def: best)
---(no)hires scan HiResBoundingBox (def: yes)
---(no)exact scan ExactBoundingBox (def: no)
---(no)verbose verbose debug informations (def: no)
---(no)below allow below+left_from baseline (def: no)
---(no)tmpunlink unlink temporary files (def: yes)
---(no)antialias render shades at outlines (def: scale3no) (=scale3yes =no =yes)
---gs-cmd= path to Ghostscript (def: gs or gswin32c)
---gs-ccmd= path to Ghostscript, 4 bbox calc (def: gs or gswin32c)
---gsextra= extra arg to gs
---extra= extra arg to external prg (i.e pdftops)
---bboxfrom= adsc|compute-gs|pagesize (def: guess)
---papersize= unchanged|force-unknown|600bpx5cm (def: default) (bp)
---threshold= min color for 1 in 8->1 bit conv (def: 128)
-Possible input formats: PS EPS PDF JPEG GIF TIFF PNG PNM PCX BMP LBM XPM TGA
-Possible output formats: @{[sort keys %fmts]}
-Examples for producing 'test.pdf':
- * $program test.eps
- * produce postscript | $program -v - test.pdf
-Example: look for HiResBoundingBox and produce corrected PostScript:
- * $program -d --nogs -hires test.ps>testcorr.ps
-";
-sub errorUsage {
- die "$usage\U!\E!\U!\E Error: @_\n";
-}
-
-# --- @ARGV parsing
-
-### default option values
-my @extra=();
-my @gsextra=();
-#** Output file format (string)
-my $FileFormat=undef;
-$::opt_help=0;
-$::opt_verbose=0;
-my %vals_compression=map{$_=>1} qw(best none flate zip);
-$::opt_compression='best';
-#** Prefer %%HiResBoundingBox over %%BoundingBox, but emit both
-$::opt_hires=1;
-$::opt_exact=0;
-# $::opt_filter=0; # deprecated
-# $::opt_outputfile=undef; # deprecated
-$::opt_below=undef;
-$::opt_antialias=undef; # render shades at path outlines for better readability
-$::opt_gs_cmd=undef;
-$::opt_extra="";
-$::opt_duplex="default";
-$::opt_threshold=128;
-my %vals_antialias=map{$_=>1} qw(no yes scale3yes scale3no);
-my %vals_duplex=map{$_=>1} qw(force-unknown force-simplex force-long
- force-short unchanged default-simplex default-long default-short);
-# ^^^ short: duplex printing, will bind short edge of paper (ideal for
-# duplexing psnup -2)
-#** Dat: force-unknown is forced by /setpagedevice/load def
-$::opt_resolution="default"; # unchanged force-unknown 600x600 (DPI)
-$::opt_papersize="default"; # unchanged force-unknown 600bpx600cm (bp)
-#** --bboxfrom=adsc sets %%BoundingBox from the 1st page if no ADSC comment in non-EPS ps
-my %vals_bboxfrom=map{$_=>1} qw(adsc compute-gs guess pagesize);
-$::opt_bboxfrom="guess";
-my $InputFilename;
-my $OutputFilename;
-
-sub is_page1_stop() { 0!=($fmts{$FileFormat}[0]&FL_PAGE1_STOP) }
-sub is_set_pagesize_ok() { 0!=($fmts{$FileFormat}[0]&FL_SET_PAGESIZE_OK) }
-sub is_pdfmark() { 0!=($fmts{$FileFormat}[0]&FL_PDFMARK) }
-sub is_need_showpage() { 0!=($fmts{$FileFormat}[0]&FL_NEED_SHOWPAGE) }
-sub is_sampled() { 0!=($fmts{$FileFormat}[0]&FL_SAMPLED) }
-sub is_any_origin_ok() { 0!=($fmts{$FileFormat}[0]&FL_ANY_ORIGIN_OK) }
-sub is_has_antialias() { 0!=($fmts{$FileFormat}[0]&FL_HAS_ANTIALIAS) }
-sub is_via_sam2p() { 0!=($fmts{$FileFormat}[0]&FL_VIA_SAM2P) }
-sub is_ok_sam2p() { 0!=($fmts{$FileFormat}[0]&FL_OK_SAM2P) }
-
-# ---
-
-sub show_doc() {
- # run `pod2man __FILE__ | man -l -', same as `perldoc __FILE', but perldoc(1)
- # is missing from some Debian sites that have pod2man.
- my @path=split/:+/,$ENV{PATH};
- my $pod2man_='pod2man --center="a2ping: advanced PS, PDF, EPS converter" ';
- $pod2man_=q~perl -ne 'if($a>1){print}elsif($a&&/^=head1/){$a=2}else{$a=!/\S/}' ~
- if !grep { -x "$_/pod2man" } @path;
- my $pager='';
- for my $pageri ((defined $ENV{PAGER} ? $ENV{PAGER}: ''),'less','most','more','view - ','vim -R - ','vi - ','joe -rdonly -asis -','pager') {
- next if $pageri!~/^(\S+)/;
- my $pagert="/$1";
- if (grep { -x $_.$pagert } @path) { $pager=$pageri; last }
- }
- $pager=q~perl -pe 's@\010_@@g;s@.\010@@gs' | ~.$pager
- if substr($pager,-2)eq' ' or $pager=~/\A(?:view|vim?|joe|emacs|mcedit|nano|nano-tiny|ae)\b/;
- # ^^^ Dat: these cannot handle underline/bold backspace directly
- $ENV{PAGER}=$pager;
- my $man='';
- if (substr($pod2man_,0,5)ne 'perl ') {
- $man=' | man -l -'; # calls $PAGER
- if ((!grep { -x "$_/man" } @path) or qx(man -l 2>&1)=~/\binvalid option\b/) {
- $man=' | nroff -Tlatin1 -mandoc'; # Linux, no need for eqn(1), tbl(1) etc.
- if (!grep { -x "$_/nroff" } @path) { $man='' } # just write it
- }
- }
- my $cmd=$pod2man_.fnq(__FILE__).$man;
- if ($cmd!~/[|] man -l -\Z(?!\n)/) {
- if (!length $pager) {
- die unless open PIPE, "$cmd|";
- print while sysread PIPE, $_, 4096;
- die "$0: error showing doc\n" unless close PIPE;
- exit 0;
- }
- $cmd.=' | $PAGER';
- }
- ##die $cmd;
- $ENV{LESS}="" if !defined $ENV{LESS};
- $ENV{LESS}="$ENV{LESS}R"; # show ANSI escapes
- die "$0: exec ($cmd) failed: $!\n" if !exec $cmd;
-}
-
-die $usage if !@ARGV or (1==@ARGV and $ARGV[0] eq '-h' or $ARGV[0] eq '--help'
- or $ARGV[0] eq 'help');
-show_doc() if 1==@ARGV and $ARGV[0] eq '--doc' or $ARGV[0] eq 'doc';
-
-{ my($I,$optname,$optval);
- my %optmap=qw(o outputfile outfile outputfile r resolution h help
- f filter d verbose v verbose debug verbose p papersize
- c compression compress compression h hires b below e exact x extra);
- #** Options that have a mandatory argument
- my %argopt1=qw(outputfile 1 duplex 1 resolution 1 extra 1 compression 1 gs-cmd 1
- gs-ccmd 1
- papersize 1 paper 1 bboxfrom 1 antialias 1 gsextra 1 threshold 1); # 1 arg
- my %argnone=qw(help 1 verbose 1 noverbose 1 nocompress 1 noantialias 1); # 0 arg
- my %argmaybe=qw(); # 0 or 1 arg
- my %argbool=qw(hires 1 exact 1 below 1 gs 1 filter 1 tmpunlink 1
- approx 1); # boolean arg
- # Dat: --noverbose --nocompress
- my $opts_ok=1;
- for ($I=0; $I<@ARGV; $I++) {
- if ($ARGV[$I]eq '--') {
- $OutputFilename=$InputFilename if defined $InputFilename and
- !defined $OutputFilename and $opts_ok;
- $opts_ok=0;
- } elsif ($opts_ok and $ARGV[$I]=~/\A--+(\w[\w-]*)(?:[:=](.*))?\Z(?!\n)/s) {
- $optname=lc$1; $optval=$2;
- } elsif ($opts_ok and $ARGV[$I]=~/\A-(\w)(.*)\Z(?!\n)/s) {
- $optname=lc$1;
- if (length($2)==0) { $optval=undef }
- elsif (index(":=",substr($2,0,1))>=0) { $optval=substr($2,1) }
- else { $optval=$2 }
- } elsif ($opts_ok and !defined $FileFormat and defined $InputFilename and $ARGV[$I]=~s@\A(\w+):@@) {
- my $fmtag=uc$1;
- # errorUsage "invalid FileFormat tag: $fmtag" if $fmtag!~s@:\Z(?!\n)@@;
- if (exists $fmts{$fmtag}) { $FileFormat=$fmtag }
- elsif (exists $fmt_aliases{$fmtag}) { $FileFormat=$fmt_aliases{$fmtag} }
- else { errorUsage "Unknown FileFormat tag: $fmtag" }
- if (0!=length($ARGV[$I])) {
- errorUsage "Multiple output filenames" if defined $OutputFilename;
- $OutputFilename=$ARGV[$I];
- }
- next
- } elsif (!defined $InputFilename) { $InputFilename=$ARGV[$I]; next }
- elsif (!defined $OutputFilename) { $OutputFilename=$ARGV[$I]; next }
- else { errorUsage "Too many arguments (multiple input/output files?)" }
- $optname=$optmap{$optname} if exists $optmap{$optname};
- if (exists $argopt1{$optname} and !defined $optval) {
- errorUsage "Argument expected for --$optname" if $I==@ARGV;
- $optval=$ARGV[++$I];
- }
- # Dat: $optname and $optval are now correct
- errorUsage "No argument expected for --$optname=$optval" if exists $argnone{$optname} and defined $optval;
- if (substr($optname,0,2)eq"no" and exists $argbool{substr($optname,2)}) {
- $optname=substr($optname,2);
- errorUsage "No argument expected for no --no$optname=$optval" if defined $optval;
- $optval="no";
- }
- if (exists $argbool{$optname}) {
- # same as sam2p GenBuffer::parseBool, understands:
- # on true yes ja igen oui enable 1 true vrai? right sure allowed
- # off false no nein nem non disable 0 false faux? wrong nope disallowed
- $optval=(!defined($optval) or 0==length($optval)
- or $optval=~/\Ao[nu]/i or $optval!~/\A[fndw0]/i) ? 1 : 0;
- } elsif (!exists $argopt1{$optname} and !exists $argnone{$optname} and !exists $argmaybe{$optname}) {
- errorUsage "Unknown option --$optname, see --help"
- }
- # vvv application-specific
- if ($optname eq "help") { die $usage }
- elsif ($optname eq "help") { show_doc() }
- elsif ($optname eq "noverbose") { $::opt_verbose=0 }
- elsif ($optname eq "nocompress") { $::opt_compression='none' }
- elsif ($optname eq "verbose") { $::opt_verbose++ }
- elsif ($optname eq "hires") { $::opt_hires =$optval }
- elsif ($optname eq "exact") { $::opt_exact =$optval }
- elsif ($optname eq "below") { $::opt_below =$optval }
- elsif ($optname eq "approx") { $::opt_approx=$optval }
- elsif ($optname eq "threshold") { $::opt_threshold=$optval+0 } # Imp: accept only int 0..256
- elsif ($optname eq "filter") {
- # errorUsage "Multiple input filenames" if defined $InputFilename;
- # $InputFilename='-';
- errorUsage "Multiple output filenames" if defined $OutputFilename;
- $OutputFilename='-';
- } elsif ($optname eq "tmpunlink") { $tmpunlink_p=$optval }
- elsif ($optname eq "gs") { $FileFormat=$optval ? 'PDF1' : 'markedEPS' }
- elsif ($optname eq "compression") {
- errorUsage "--$optname expects one of: @{[keys%vals_compression]}" if !exists $vals_compression{$optval};
- $::opt_compression=$optval;
- $::opt_compression='zip' if $::opt_compression eq 'flate';
- } elsif ($optname eq "outputfile") {
- errorUsage "Multiple output filenames" if defined $OutputFilename;
- $OutputFilename=$optval;
- } elsif ($optname eq "gs-cmd") {
- errorUsage "Multiple --gs-cmd" if defined $::opt_gs_cmd;
- $::opt_gs_cmd=$optval;
- } elsif ($optname eq "gs-ccmd") {
- errorUsage "Multiple --gs-ccmd" if defined $::opt_gs_ccmd;
- $::opt_gs_ccmd=$optval;
- } elsif ($optname eq "extra") { push @extra, $optval }
- elsif ($optname eq "gsextra") { push @gsextra, $optval }
- elsif ($optname eq "duplex") {
- errorUsage "--$optname expects one of: @{[keys%vals_duplex]}" if !exists $vals_duplex{$optval};
- $::opt_duplex=$optval
- } elsif ($optname eq "bboxfrom") {
- errorUsage "--$optname expects one of: @{[keys%vals_bboxfrom]}" if !exists $vals_bboxfrom{$optval};
- $::opt_bboxfrom=$optval
- } elsif ($optname eq "noantialias") {
- $::opt_antialias='no'
- } elsif ($optname eq "antialias") {
- errorUsage "--$optname expects one of: @{[keys%vals_antialias]}" if !exists $vals_antialias{$optval};
- $::opt_antialias=$optval
- } elsif ($optname eq "resolution") {
- if ($optval eq "unchanged" or $optval eq "force-unknown") { }
- elsif ($optval=~/^(\d+(?:[.]\d+)?)\Z(?!\n)/) { $optval="$1x$1" }
- elsif ($optval=~/^(\d+(?:[.]\d+)?[x,]\d+(?:[.]\d+)?)\Z(?!\n)/) { }
- else { errorUsage "--Resultion expects unchanged | force-unknown | DPI | XDPIxYDPI" }
- $::opt_resolution=$optval
- } elsif ($optname eq "papersize" or $optname eq"paper") {
- if ($optval eq "unchanged" or $optval eq "force-unknown") { $::opt_papersize=$optval }
- else {
- my @L=Htex::papers::any($optval);
- errorUsage "invalid or unknown for --papersize" if !@L;
- $::opt_papersize="$L[1],$L[2]" # width, height
- }
- } else { die } # unreachable
- } # NEXT opt
- errorUsage "Too many arguments (multiple input/output files?)" if $I!=@ARGV;
- # splice @ARGV, 0, $I;
-}
-
-$GS=$::opt_gs_cmd if defined $::opt_gs_cmd;
-my $CGS=$GS;
-$CGS=$::opt_gs_ccmd if defined $::opt_gs_ccmd;
-$GS.= " -dSAFER"; # -dWRITESYSTEMDICT
-$CGS.=" -dSAFER"; # -dWRITESYSTEMDICT
-
-### get input and output filename
-if (!defined $InputFilename and defined $OutputFilename) { # --filter
- $InputFilename='-';
-} elsif (!defined $InputFilename) {
- errorUsage "Input filename missing"
-} elsif (!defined $OutputFilename) {
- $FileFormat='PDF1' if !defined $FileFormat;
- if ($FileFormat eq 'PDF1' or $FileFormat eq 'PDF') {
- if (($OutputFilename=$InputFilename) ne '-') {
- $OutputFilename =~ s/\.[^\.]*$//;
- $OutputFilename .= ".pdf";
- }
- } else {
- $OutputFilename = '-'; # standard output
- }
-}
-print STDERR $title if $::opt_verbose;
-$title="";
-
-# Dat: no more @ARGV
-errorUsage "please specify <outformat>" if
- !defined $FileFormat and ($OutputFilename!~m@[.]([^/.]+)\Z(?!\n)@ or
- !defined($FileFormat=$fmt_exts{lc$1}));
-$::opt_below=is_any_origin_ok() if !defined $::opt_below;
-error "--below=1 invalid for FileFormat $FileFormat" if $::opt_below and
- !is_any_origin_ok() and $FileFormat ne 'PDF1' and $FileFormat ne 'EPS' and
- $FileFormat ne 'markedEPS';
-error "--below=0 invalid for FileFormat $FileFormat" if !$::opt_below and
- is_any_origin_ok();
-$::opt_antialias=is_has_antialias() ?
- (is_sampled() ? 'scale3no' : 'yes') : 'no' if
- !defined $::opt_antialias;
-
-if ($FileFormat eq 'PBM' and ($::opt_antialias eq 'scale3yes' or
- $::opt_antialias eq 'scale3no')) {
-} elsif ($::opt_antialias ne 'no' and !is_has_antialias()) {
- $::opt_antialias='no';
- warning "--AntiAlias ignored for FileFormat $FileFormat"
-}
-if ($::opt_antialias eq 'scale3no' or $::opt_antialias eq 'scale3yes') {
- $::opt_resolution="72,72" if $::opt_resolution eq 'unchanged' or $::opt_resolution eq 'force-unknown' or $::opt_resolution eq 'default';
- # ^^^ GS raster default
- my @L=split/[,x]/,$::opt_resolution;
- @L=(@L,@L); # Imp: ..
- $L[0]*=3; $L[1]*=3;
- $::opt_resolution="$L[0],$L[0]";
-}
-
-### option compress
-my $GSOPTS=join(" ",map{fnq$_}@gsextra);
-# $GSOPTS.=" -r72 -sPAPERSIZE=a4 "; # default -- will be overridden by `setpagedevice'
-# ^^^ Dat: default does only harm; user should specify on command line
-
-### option BoundingBox types
-#**** pts ****
-# scan all of them and find the best
-{ my $BBprint = "%%BoundingBox:";
- $BBprint = "%%HiResBoundingBox:" if $::opt_hires;
- $BBprint = "%%ExactBoundingBox:" if $::opt_exact;
- debug "Strongest BoundingBox comment:", $BBprint;
-}
-my $BBregex='%%(Hi[Rr]es|Exact|)BoundingBox:';
-
-if (!is_set_pagesize_ok()) {
- if ($::opt_papersize ne'default' and $::opt_papersize ne'force-unknown') {
- error "Cannot set --PaperSize for FileFormat $FileFormat"
- } else { $::opt_papersize='force-unknown' }
-} elsif ($::opt_papersize eq'default') { $::opt_papersize='unchanged' }
-
-if ($::opt_resolution eq'default') { $::opt_resolution='force-unknown' }
-error "Cannot set --Resolution for FileFormat $FileFormat (must be markedPS or sampled)"
- if $FileFormat ne 'markedPS' and !is_sampled()
- and $::opt_resolution ne'force-unknown';
-error "Bad --Resolution=$::opt_resolution" if $::opt_resolution ne 'unchanged'
- and $::opt_resolution ne 'force-unknown' and $::opt_resolution!~/\A(\d+)+[,x](\d+)\Z(?!\n)/;
-
-if ($FileFormat ne 'markedPS' and $FileFormat ne 'PCL5') {
- if ($::opt_duplex ne'default' and $::opt_duplex ne'force-unknown') {
- error "Cannot set --Duplex for FileFormat $FileFormat (must be markedPS or PCL5)"
- } else { $::opt_duplex='force-unknown' }
-} elsif ($::opt_duplex eq'default') { $::opt_duplex='force-unknown' }
-
-debug "Doing --PaperSize $::opt_papersize" if $::opt_papersize ne 'force-unknown';
-debug "Doing --Duplex $::opt_duplex" if $::opt_duplex ne 'force-unknown';
-debug "Doing --Resolution $::opt_resolution" if $::opt_resolution ne 'force-unknown';
-debug "Doing --AntiAlias=$::opt_antialias" if $::opt_antialias ne 'no';
-
-### option outfile
-if ($OutputFilename eq '-') {
- debug "Output file: standard output";
-} else {
- debug "Output filename: $OutputFilename";
- #error "$OutputFilename: won't overwrite input file with itself"
- # if $OutputFilename eq $InputFilename;
-}
-
-### option gs
-debug "Output FileFormat: $FileFormat";
-$::opt_compression='zip' if $::opt_compression ne 'none';
-if ($FileFormat eq 'PDF' or $FileFormat eq 'PDF1') {
- debug "Ghostscript ps2pdf command: $GS $GSOPTS";
- debug "Compression: $::opt_compression";
-} elsif ($FileFormat eq 'PCL5') {
- debug "Ghostscript ps2ljet command: $GS $GSOPTS";
-} elsif (is_sampled()) {
- debug "Ghostscript ps2sampled command: $GS $GSOPTS";
-}
-
-#**** pts ****
-sub read_error() { error "read $InputFilename: $!" }
-my $bytes_left=-1; # -1==unlimited
-my $already_read=0;
-sub dem1($){defined$_[0]?$_[0]:-1}
-#** @param $_[0] number of bytes to read, or undef to read a line
-#** @return the string read
-sub readIN(;$) {
- my $S;
- ## return "" if $bytes_left==0;
- ## print STDERR "READ($_[0])\n";
- if (defined $_[0]) { read_error if 0>dem1 read IN, $S, $_[0] }
- else {
- $!=0; # clean up error code
- $S=<IN>;
- read_error if !defined($S) and $!;
- $S="" if !defined $S; # EOF
- }
- if ($bytes_left<0) { # unlimited
- } elsif (length($S)>=$bytes_left) {
- $S=substr($S, 0, $bytes_left);
- $bytes_left=0;
- } else { $bytes_left-=length($S) }
- $already_read+=length($S);
- $S
-}
-
-sub open_OUT() {
- error "Cannot write outfile '$OutputFilename'" unless
- open(OUT, $OutputFilename eq '-' ? ">-" : "> $OutputFilename")
-}
-
-#** @param $_[0] temp file extension (e.g ".img")
-#** @param $_[1] preprint
-#** @param $_[2] bool: force pipe even if seekable?
-sub fix_pipe_in($$$) {
- my $c="";
- if ($_[2] or (length($c=readIN(1))!=0 and !seek IN,-1,1)) { # we cannot seek back
- # Dat: ^^^ test seekability instead of $InputFilename eq '-'
- my($ext,$preprint)=@_;
- my $tifn;
- # $ext=$1 if $InputFilename=~/[.](\w+)\Z(?!\n)/; # never true
- $tifn=temp_prefix()."M$ext";
- error "Cannot open temp input: $tifn" unless open TI, "> $tifn";
- $tmpfiles{$tifn}=1;
- die unless print TI $preprint, $c;
- print TI or die while length($_=readIN 4096);
- die unless close TI;
- $InputFilename=$tifn;
- debug "Temp input file: $InputFilename";
- die unless open IN, "< $tifn";
- die unless seek IN, length($preprint), 0;
- $already_read=length($preprint);
- $bytes_left=-1; # unlimited, since readIN() has copied only part
- # $bytes_left++ if $bytes_left>=0; # ungetc($c)
- # temp_unlink $tifn; # do it later (at END{})
- } else {
- $already_read--; $bytes_left++ if $bytes_left>=0; # BUGFIX at Fri May 14 00:21:18 CEST 2004
- }
-}
-
-my $temp_out_fn;
-
-#** Does overwrite $temp_out_fn. Fine.
-sub fix_force_out($) {
- my($ext)=$_[0];
- # $ext=$1 if $InputFilename=~/[.](\w+)\Z(?!\n)/; # never true
- $temp_out_fn=temp_prefix()."O$ext";
- # error "Cannot save output: $!" unless open SAVEOUT, ">&OUT"; # always STDOUT; maybe not open yet
- error "Cannot open temp output: $temp_out_fn" unless open OUT, "> $temp_out_fn";
- $tmpfiles{$temp_out_fn}=1;
- # $OutputFilename=$temp_out_fn;
- debug "Temp output file: $temp_out_fn";
- # temp_unlink $temp_out_fn; # do it later (at END{})
- return $temp_out_fn;
-}
-
-#** @param $_[0] temp file extension (e.g ".img")
-#** @return new output filename
-sub fix_pipe_out($) {
- if (!defined $temp_out_fn) {
- return $OutputFilename if $OutputFilename ne '-';
- return fix_force_out($_[0]);
- }
- $temp_out_fn
-}
-sub fix_close_out() {
- # error "closing filter out: $? $!" unless close OUT;
- if (defined $temp_out_fn) {
- my $buf;
- die unless open FCO, "< $temp_out_fn";
- print STDOUT $buf while sysread FCO, $buf, 4096;
- die unless close FCO;
- temp_unlink $temp_out_fn;
- undef $temp_out_fn;
- }
-}
-
-sub do_system {
- my($progname)=splice@_,0,1;
- debug "Running: $progname @extra @_";
- error "prog $progname failed: $? $!"
- if 0!=system $progname, @extra, @_; # Dat: non-zero exit() or not found
-}
-
-sub do_exec {
- my($progname)=splice@_,0,1;
- if (scalar keys %tmpfiles) {
- # Cannot exec() right now, because we have to unlink some temporary files
- # later.
- do_system $progname, @_;
- } else {
- debug "Execing: $progname @extra @_";
- 1 if exec $progname, @extra, @_;
- # ^^^ Dat: $OutputFilename eq '-' should be OK
- error "exec failed: $!";
- }
- exit(0);
-}
-
-#sub shq($) {
-# my $S=$_[0];
-# return $S if $S!~y@A-Za-z0-9_,:./-@@c and length($S)>0;
-# $S=~s@'@'\\''@g;
-# return "'$S'"
-#}
-
-### open input file
-if ($InputFilename eq '-') {
- debug "Input file: standard input";
- open(IN, "<&STDIN") or error "cannot open standard input";
-} else {
- # -f $InputFilename or error "input file missing: $InputFilename"; # Imp: named pipe?
- open(IN,"< $InputFilename") or error "cannot open input file: $InputFilename";
- debug "Input filename:", $InputFilename;
- if ($InputFilename eq $OutputFilename) {
- # error "same input and output file: $InputFilename";
- my $ext=$InputFilename=~m@([.][^./]+)\Z(?!\n)@ ? $1 : "";
- binmode IN; $bytes_left=-1;
- fix_pipe_in($ext, "", 1); # Dat: defined later
- }
-}
-binmode IN;
-
-### scan first line, check for DOS EPSF (and remove DOS headers)
-my $header;
-{ SCAN_AGAIN:
- my $S;
- $_=$header="";
- read_error if 0>read IN, $S, 4;
- error "$InputFilename: empty file" if 0==length($S);
- $already_read+=length($S);
- ##print tell(IN)." bar=$already_read\n";
- my $iff="?"; # Input File Format
- # vvv be permissive, since we have only 4 chars
- if ($S eq "\211PNG") { $iff="PNG" }
- elsif ($S=~/\A(\377+\330)\377/) { $iff="JPEG" }
- elsif ($S eq "MM\000\052" or $S eq "II\052\000") { $iff="TIFF" }
- elsif ($S=~m@\AP([1-6])[\s#]@) { $iff="PNM" }
- elsif ($S=~/\ABM/) { $iff="BMP" }
- elsif ($S eq "GIF8") { $iff="GIF" }
- elsif ($S eq "FORM") { $iff="LBM" }
- elsif ($S eq "/* X" or $S eq "/*XP") { $iff="XPM" }
- elsif ($S=~/\A\12[\0-\005]\001[\001-\10]/) { $iff="PCX" }
- elsif ($S=~/\A[\36-\77](?:\001[\001\11]|\0[\002\12\003\13])\0/) { $iff="TGA" }
- elsif ($S eq "\305\320\323\306") { $iff="DOS-EPSF" }
- elsif ($S eq "\033%-1") { $iff="UEL" }
- elsif (substr($S,0,1)eq'%') { $iff="P" } # PS, EPS or PDF
-
- # PNG JPEG TIFF PNM BMP GIF LBM XPM PCX TGA
- if ($iff eq "DOS-EPSF") { # DOS EPSF header
- read_error if 30-4>read IN, $S, 30-4, 4;
- my ($eheader,$ps_ofs,$ps_len,$wmf_ofs,$wmf_len,$tif_ofs,$tif_len,$checksum)=
- unpack"A4VVVVVVv", $S;
- $already_read+=30-4;
- error "$InputFilename: bad DOS EPS" if $eheader ne "\305\320\323\306" or $ps_ofs<30;
- my($ps_end, $wmf_end, $tif_end)=($ps_ofs+$ps_len, $wmf_ofs+$wmf_len, $tif_ofs+$tif_len);
- $ps_ofs-=30;
- if (!seek IN, $ps_ofs, 1) {
- while ($ps_ofs>4096) { $ps_ofs-=4096; readIN 4096 }
- read_in $ps_ofs if $ps_ofs>0;
- }
- $bytes_left=($ps_end>$wmf_end and $ps_end>$tif_end) ? -1 : $ps_len;
- $S=readIN(1);
- } elsif ($iff eq "UEL") { # HP PJL UEL, untested
- $S.=readIN;
- $S=substr($S,1);
- error "$InputFilename: bad HP PJL UEL header: ".(~chomp($S)&&$S)
- if $S!~/\A%-12345X\@PJL ENTER LANGUAGE\s*=\s*POSTSCRIPT\s*\r?$/i;
- 1 while length($S=readIN())!=0 and substr($S,0,4)ne'%!PS';
- die "$InputFilename: premature HP PJL UEL header" if length($S)==0;
- } elsif ($iff eq "P") {
- # no-op yet, see later
- } elsif ($iff eq "?") {
- error "unknown input image format: $InputFilename";
- } else { # some vector graphics format
- # Imp: why isn't sam2p(1) PNG -> PNG idempotent?
- my $sfmt=$FileFormat eq'markedEPS' || $FileFormat eq 'EPS' ? 'EPS'
- : $FileFormat eq'markedPS' || $FileFormat eq 'PS' ? 'PS' # Dat: emits no /PageSize
- : $FileFormat eq'PDF1' || $FileFormat eq 'PDF' ? 'PDF'
- : undef;
- if (defined $sfmt) {}
- elsif (is_via_sam2p() or is_ok_sam2p()) {$sfmt=$FileFormat; $::opt_approx=1}
- else { error "sam2p doesn't support our FileFormat $FileFormat" }
- fix_pipe_in ".img", $S, 0;
- if ($::opt_approx) {
- do_exec('sam2p', ("$sfmt:", '--', $InputFilename, $OutputFilename));
- } else {
- warning "post-processing of sam2p PDF output increases file size" if $sfmt eq 'PDF';
- $sfmt='EPS' if $sfmt eq 'PDF'; # Imp: PDF1<->PDF
- close IN;
- my $tpfn=temp_prefix()."Psimg";
- error "Cannot open temp pipe dest: $tpfn" unless open TP, "> $tpfn";
- $tmpfiles{$tpfn}=1;
- die unless close TP;
- do_system('sam2p', ("$sfmt:", '--', $InputFilename, $tpfn));
- error "Cannot open temp pipe src: $tpfn" unless open IN, "< $tpfn";
- $already_read=0; $bytes_left=-1;
- $InputFilename=$tpfn; # '-'
- goto SCAN_AGAIN
- }
- }
-
- # now deal with PS, EPS and PDF
- if (substr($S,0,1) eq '%') {
- $S.=readIN;
- if (substr($S,0,4)eq'%PDF') {
- # error "$InputFilename: won't read a PDF file";
- if ($FileFormat eq 'PDF') { # convert PDF to PDF
- # !! PDF->PS->PDF
- open_OUT();
- $_=$S;
- debug "Doing a bit-by-bit copy";
- do {
- error "input error: $!" unless print OUT;
- } while (length($_=readIN 4096));
- close OUT; close IN;
- exit 0;
- } elsif ($FileFormat eq 'PDF1') { # Dat: remove extra pages by running pdftops and gs -sDEVICE=pdfwrite
- # !! Imp: possibly Run MetaPost output through full dvips (texc.pro) when prologues:=0
- # !! Imp: add full dvips %* font comment when prologues:=1 (design sizes missing :-()
- # Dat: no way to use $::opt_approx, because it doesn't remove extra pages
- fix_pipe_in ".pdf", $S, 0; # in case of stdin
- # Imp: option to open pdftops pipe instead of temp file
- # Dat: we rather use a temp file here for safety and early error detection
- do_input_pdftops: # come from EPS: and markedEPS:
- close IN; # after fix_pipe_in()
- my $tpfn=temp_prefix()."Peps";
- error "Cannot open temp pipe dest: $tpfn" unless open TP, "> $tpfn";
- $tmpfiles{$tpfn}=1;
- die unless close TP;
- do_system qw(pdftops -f 1 -l 1 -eps -- ), $InputFilename, $tpfn;
- error "Cannot open temp pipe src: $tpfn" unless open IN, "< $tpfn";
- $already_read=0; $bytes_left=-1;
- $InputFilename=$tpfn; # '-'
- goto SCAN_AGAIN
- } elsif ($FileFormat eq 'EPS' or $FileFormat eq 'markedEPS') { # convert PDF to EPS
- # Dat: limitation: markedEPS and EPS are treated the same
- # vvv Dat: pdftops(1) is part of the xpdf package
- # vvv Dat: pdftops(1) can emit to stdout
- fix_pipe_in ".pdf", $S, 0;
- if ($::opt_approx) {
- do_exec qw(pdftops -f 1 -l 1 -eps --), $InputFilename, $OutputFilename;
- } else { goto do_input_pdftops }
- } elsif ($FileFormat eq 'PS' or $FileFormat eq 'markedPS') {
- # Dat: limitation: markedEPS and EPS are treated the same
- fix_pipe_in ".pdf", $S, 0;
- close IN;
- # vvv we must query the BoundingBox first
- my $cmd="pdftops -f 1 -l 1 -eps ".fnq($InputFilename)." -";
- debug "pdftops bbox pipe: $cmd";
- error "pipe: $!" unless open PIPE, "$cmd |";
- my $line;
- error "expected PS document" if !defined($line=<PIPE>) or $line!~/^%!PS-Adobe-\d.*EPSF-\d/;
- my @L; # $papersize_x, $papersize_y
- while (<PIPE>) {
- last if /^%%EndComments/ or !/^%/;
- @L=($1,$2) if /^%%(?:Hires|Exact)BoundingBox:\s*\S+\s*\S+\s*(\S+)\s*(\S+)\s*$/i;
- @L=($1,$2) if /^%%BoundingBox:\s*\S+\s*\S+\s*(\S+)\s*(\S+)\s*$/i and !@L;
- # ^^^ Dat: HiRes has priority
- # ^^^ Dat: ignore llx and lly coordinates
- }
- 1 while read PIPE, $line, 4096;
- error "closing PIPE: $?" unless close PIPE;
- error "BoundingBox not found in pdftops output" if !@L;
- debug "Got PaperSize: @L";
- $L[0]=ceil $L[0]; $L[1]=ceil $L[1]; # Dat: pdftops expects integer papersize :-( )
- if ($::opt_approx) {
- do_exec 'pdftops', '-paperw', $L[0], '-paperh', $L[1], $InputFilename, $OutputFilename;
- } else {
- my $tpfn=temp_prefix()."Pps";
- error "Cannot open temp pipe dest: $tpfn" unless open TP, "> $tpfn";
- $tmpfiles{$tpfn}=1;
- die unless close TP;
- do_system 'pdftops', '-paperw', $L[0], '-paperh', $L[1], $InputFilename, $tpfn;
- error "Cannot open temp pipe src: $tpfn" unless open IN, "< $tpfn";
- $already_read=0; $bytes_left=-1;
- $InputFilename=$tpfn; # '-'
- goto SCAN_AGAIN
- }
- }
- error "cannot create from PDF: FileFormat $FileFormat";
- OK:
- }
- error "$InputFilename: EPS DSC must be %!PS-Adobe" if substr($S,0,4)ne'%!PS';
- # ^^^ Dat: mpost outputs "%!PS\n"
- } else {
- warning "$InputFilename: no PS ADSC header, BoundingBox not found\n"
- }
- $header=$S;
-}
-
-# Dat: Now we are converting from PS|EPS to EPS|markedEPS|PDF|PCL5|PGM
-# So we're converting from PS|EPS with Ghostscript
-
-### variables and pattern for BoundingBox search
-my $bbxpatt = '[0-9eE\.\-]';
-my $BBValues = "\\s*($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)"; # protect backslashes: "\\" gets '\'
-
-my $ll_zero=0; # ($llx,$lly)==(0,0) in the output file
-my $need_grestore=0; # 0 v 1
-#** Applies %%*BoundingBox, %%EndComments, special setpagedevice, gsave..translate
-#** @param $_[0] llx, may be undef to signify that bbox is undetected
-#** @param $_[1] lly
-#** @param $_[2] urx
-#** @param $_[3] ury
-#** @param $_[4] after_correct PostScript code (resolution, page size)
-#** @return PostScript code to be printed after the header
-sub CorrectBoundingBox($$$$$$$) {
- no integer;
- my $bbx="";
- my $pagedev_mark="";
- my $translate="";
- my ($llx, $lly, $urx, $ury, $after_correct, $fontsdefs, $is_restored) = @_;
- if (defined $llx) {
- my ($xoffset, $yoffset) = (0, 0);
- my $old_bbox="$llx $lly $urx $ury"; # debug "Old BoundingBox: $old_bbox";
- # my ($width, $height) = ($urx - $llx, $ury - $lly);
- ($xoffset, $yoffset) = (-$llx, -$lly);
- # $::opt_below=0 if $lly>=0; # always move to (0,0)
- # my ($urxh,$uryh)=($urx,$ury);
- # my $no_translate=$::opt_below;
- #die $no_translate;
- ($llx,$lly,$urx,$ury)=(0,0,$urx-$llx,$ury-$lly) if !$::opt_below;
- $urx=1 if $urx<=0; # Dat: GS dislikes empty image; fix also negative image
- $ury=1 if $ury<=0;
- my($px,$py)=($urx,$ury);
- ($px,$py)=($1+0,$2+0) if $after_correct=~m@/PageSize\s*\[(\S+)\s+(\S+)+\]@;
- my @paper=Htex::papers::any("$px,$py");
- $paper[0]=defined $paper[0] ? "%%DocumentPaperSizes: $paper[0]\n" : "";
- $bbx.="%%BoundingBox: ".floor($llx)." ".floor($lly)." ".
- ceil($urx)." ". ceil($ury)."\n";
- $bbx.="%%HiResBoundingBox: $llx $lly $urx $ury\n".
- "%%ExactBoundingBox: $llx $lly $urx $ury\n" if floor($llx)!=$llx
- or floor($lly)!=$lly or ceil($urx)!=$urx or ceil($ury)!=$ury;
- $bbx.="%%DocumentMedia: plain $px $py 0 () ()\n". # like pdftops(1)
- "$paper[0]";
- # ^^^ Imp: can DocumentMedia be non-integer? As of us, it can.
- # vvv we output a second /MediaBox here, and we'll remove the first one
- # (written by GS) later
- # vvv Dat: old version of Ghostscript insisted on an integer /CropBox (??).
- # we do not force it now
- $pagedev_mark.="mark /CropBox [$llx $lly $urx $ury] /PAGE pdfmark\n" if is_pdfmark();
- # die "$xoffset $yoffset $::opt_below";
- if ($xoffset==0 and $yoffset==0) { #**** pts ****
- $need_grestore=0;
- $ll_zero=1; # Dat: we do not insert extra /MediaBox here, gs -sDEVICE=pdfwrite will do
- } elsif ($::opt_below) {
- # Do not translate (set (0,0) to the origin) with --below or multi-page
- # file formats.
- $need_grestore=0;
- $ll_zero=0; # fix /MediaBox because it become non-(0,0)-based
- $pagedev_mark.="mark /MediaBox [$llx $lly $urx $ury] /PAGE pdfmark\n" if
- is_pdfmark(); # $FileFormat eq 'markedEPS' or $FileFormat eq 'markedPS';
- # Dat: markedPS and contains pdfmark!
- } else {
- # debug "Offset:", $xoffset, $yoffset; # no new information, see -$llx, -$lly
- $xoffset=0 if $xoffset==0; # get rid of `-0'
- $yoffset=0 if $yoffset==0; # get rid of `-0'
- if ($is_restored) { $translate="" } # save..restore does gsave..grestore
- else { $translate="gsave "; $need_grestore=1 }
- $ll_zero=0;
- # vvv the /MediaBox is different from what gs dumps
- # $pagedev_mark=~s@/PageSize\s*\[[^\]]*]@/PageSize [$urx $ury]@; # BUGFIX at Tue Apr 22 10:08:17 CEST 2003
- $pagedev_mark.="mark /MediaBox [$llx $lly $urx $ury] /PAGE pdfmark\n" if is_pdfmark();
- $translate.="$xoffset $yoffset translate\n"
- }
- my $new_bbox="$llx $lly $urx $ury";
- if ($old_bbox eq $new_bbox) {
- debug "Final BoundingBox: $new_bbox";
- } else {
- debug "Old BoundingBox: $old_bbox";
- debug "Final corrected BoundingBox: $new_bbox";
- }
- $pagedev_mark="/pdfmark where{pop}{/pdfmark/cleartomark load def}ifelse\n$pagedev_mark"
- if length($pagedev_mark)!=0;
- }
- # vvv Imp: `<<' -> `dict'
- # Dat: it is inherently impossible to tell GS that it shouldn't
- # recompress the images already compressed in the EPS file, but keep
- # them in their original, compressed form. So we rather instruct GS to
- # recompress
- my $markpagedevices="";
- if (is_pdfmark()) {
- $markpagedevices="
-/CompatibilityLevel 1.2 %PDF-1.2
-/EmbedAllFonts true
-/Optimize true % ignored by gs-6.70
-/AutoRotatePages /None
-/UseFlateCompression ".($::opt_compression ne 'none'?"true":"false")."
-/AutoPositionEPSFiles false
-/AutoFilterGrayImages false
-/ConvertImagesToIndexed false
-/DownsampleMonoImages false
-/DownsampleGrayImages false
-/DownsampleColorImages false
-/AutoFilterColorImages false
-/EncodeMonoImages true
-/EncodeGrayImages true
-/EncodeColorImages true
-/AntiAliasMonoImages false
-/AntiAliasGrayImages false
-/AntiAliasColorImages false\n";
- $markpagedevices=(length($markpagedevices)!=0 ? "<< $markpagedevices >> setpagedevice\n" : "");
- $markpagedevices.="1 dict dup /ImagingBBox null put setpagedevice\n";
- $markpagedevices.="1 dict dup /Policies 1 dict dup /PageSize 3 put put setpagedevice\n"; # ripped from pdftops(1)
- }
- my $setpagesize="";
- # die defined $urx;
- # die is_set_pagesize_ok();
- # die $after_correct;
- if (defined $urx and is_set_pagesize_ok()
- and $::opt_papersize ne'force-unknown'
- and $after_correct!~m@/PageSize\s*\[@) { # Imp: m@/Pagesize ugly
- # Dat: true for FileFormat PGM
- # Dat: emit /PageSize even for PDF1
- # Dat: Ghostscript 6.70 rounds /PageSize down, but we need up when creating /MediaBox for PDF
- $setpagesize="2 dict dup /PageSize [".ceil($urx)." ".ceil($ury)."] put setpagedevice\n";
- # ^^^ Dat: PLRM.pdf doesn't forbid a non-integer /PageSize
- }
- my $bsetup=is_page1_stop()?"":"%%BeginSetup\n%%EndSetup\n";
- # ^^^ Dat: CUPS inserts its setpagedevice calls for /Duplex and /PageSize
- # etc. just after the %%BeginSetup line (or, if missing, puts it in
- # front of the first %%Page). We'd like this execution order: CUPS,
- # ours, PStoPS (or psnup). (When we come after CUPS, we'll have a
- # chance to override its settings.) So we emit a fake
- # %%BeginSetup..%%EndSetup pair just before our code doing
- # `setpagedevice'.
- # !! ?? run pstops first, and then a2ping.pl
- my $save=$is_restored?"save\n":"";
- $bbx.$fontsdefs."%%EndComments\n".$bsetup.$setpagesize.$markpagedevices.$pagedev_mark.$after_correct.$save.$translate
-}
-
-### scan header
-my $to_OUT="";
-my $after_code="";
-my $do_fix_tumble=0;
-my $is_restored=0;
-if (1<length($header)) {
- my($llx,$lly,$urx,$ury);
- my($bbtype)='-'; # None
- my $allow_adsc_bb=1;
- my $after_correct="";
- my $do_bb_line=sub { # sub do_bbline($$)
- no integer;
- # Decreasing precedence of various BoundingBoxes:
- # The last valid *bbox entry has effect.
- # Active policy:
- # normal mode : BoundingBox ExactBoundingBox HiResBoundingBox
- # --hires mode: HiResBoundingBox BoundingBox ExactBoundingBox
- # --exact mode: ExactBoundingBox BoundingBox HiResBoundingBox
- # -hi -ex mode: ExactBoundingBox HiResBoundingBox BoundingBox
- # Another possible policy:
- # normal mode : BoundingBox HiResBoundingBox==ExactBoundingBox
- # --hires mode: HiResBoundingBox ExactBoundingBox BoundingBox
- # --exact mode: ExactBoundingBox HiResBoundingBox BoundingBox
- # -hi -ex mode: ExactBoundingBox==HiResBoundingBox BoundingBox
- my($S,$from)=@_;
- return if $S!~/^(?:$BBregex|set)$BBValues/oi;
- # print STDERR "($S)\n";
- my $E1=defined$1 ? $1 : "+";
- my $T=!defined($1) ? 'S' : uc substr $1,0,1; # '' || 'H' || 'E'
- # debug "Trying BoundingBox T-$bbtype: $llx $lly $urx $ury";
- if ($T eq 'S'
- or !$::opt_hires and !$::opt_exact and ($T eq '' or ($bbtype ne '' and ($T eq 'E' or $bbtype ne 'E')))
- or $::opt_hires and !$::opt_exact and ($T eq 'H' or ($bbtype ne 'H' and ($T eq '' or $bbtype ne '')))
- or $::opt_exact and !$::opt_hires and ($T eq 'E' or ($bbtype ne 'E' and ($T eq '' or $bbtype ne '')))
- or $::opt_exact and $::opt_hires and ($T eq 'E' or ($bbtype ne 'E' and ($T eq 'H' or $bbtype ne 'H')))
- ) {
- # if ($allow_bb) {
- ($bbtype,$llx,$lly,$urx,$ury)=($T,$2+0,$3+0,$4+0,$5+0);
- debug "Applying ${E1}BoundingBox$from T-$bbtype: $llx $lly $urx $ury";
- # }
- } else {
- my @L=($2+0,$3+0,$4+0,$5+0); # convert 0.00 to 0
- debug "Ignoring ${E1}BoundingBox$from T-$bbtype: @L";
- }
- # Dat: don't do $do_bb_line=sub{};# same as $allow_bb=0;
- };
- $header=~s@\r\n?\Z(?!\n)@@;
- my $after_comments=""; # after %%EndComments
- # my $res;
- { my $headEPSF;
- my $headPS="PS-Adobe-3.0";
- # vvv Imp: run this correction even w/o input EPS header
- if ($header!~s/\s+(EPSF-[.\d]+)$// or $::opt_bboxfrom ne 'guess') { # a PS not an EPS already
- # This is the compute-pipe routine.
- # To convert an [E]PS to an EPS:
- # -- find the end of the 1st page in the code, and remove everything after it
- # -- `pop' off the execution stack after the 1st page
- # -- `end' the dictionary stack after the 1st page
- # -- change the ADSC magic `%!PS-Adobe-...' to `%!PS-Adobe-3.0 EPSF-3.0'
- # -- remove the `%%Pages', `%%DocumentPaperSizes', `%%PageOrder:'
- # (Ascending) comment from the ADSC header
- # -- possibly remove the `%%Page' ADSC comment [no]
- # -- ignore calls to = setpage setpagemargin setpageparams .setpagesize
- # setpagedevice setpagetype setprintername setresolution a4 letter ...
- # -- surround the code by save ... pop* end* restore (implies gsave ... grestore)
- # -- possibly ignore calls to showpage [showpage is forced]
- $headEPSF=" EPSF-3.0";
- debug "Computing BBox info from non-EPS PS file";
- fix_pipe_in 'i.ps', "%!$headPS\n", 0;
- my $tfn=temp_prefix()."c.tgs";
- error "temp open $tfn: $!" unless open F, "> $tfn";
- $tmpfiles{$tfn}=1;
- ##print tell(IN)." car=$already_read\n";
- die "$0: $!\n" unless print F "% this is temporary gs command file created by $program".'
-/DOCUT true def
-/MAINFILE FN (r) file def
-/DICTCOUNT countdictstack def
-count /OPCOUNT exch def
-<</BeginPage { % <PageCount> BeginPage -
- dup 1 eq {
- count OPCOUNT sub 1 sub (pop-count==) ..print ===
- countdictstack DICTCOUNT sub (end-count==) ..print ===
- DOCUT { (cut-offset==) ..print MAINFILE fileposition === flush } if
- (bbox-success\n) ..print
- quit
- } if
- .callbeginpage
- }
->> setpagedevice
-
-% vvv do these after our call to /setpagedevice
-.currentglobal true .setglobal
-systemdict begin
-/..paper.redef<< >>def
-/..print/print load def
-/setpageparams{pop pop pop pop (\nset-called-4==/setpageparams\n) ..print flush}def
-/setpage{pop pop pop (\nset-called-3==/setpage\n) ..print flush}def
-/setpagesize{pop pop (\nset-called-2==/setpagesize\n) ..print flush}def
-/.setpagesize{pop pop (\nset-called-2==/.setpagesize\n) ..print flush}def
-/setpagemargin{pop (\nset-called-1==/setpagemargin\n) ..print flush}def
-{% anti-Windows-printer-driver `%%[ ProductName:` etc.
- dup type/stringtype eq{
- dup length 3 ge{
- dup 0 3 getinterval (%%[) eq{
- (\nset-called-1==/=\n) ..print flush
- (\nset-called-1==/print\n) ..print flush
- }if}if}if
- pop
-}
-dup/= exch def /print exch def
-/setpagedevice{pop (\nset-called-1==/setpagedevice\n) ..print flush}def
-/..sdict <<
- /PageSize { % [. .] PageSize -
- dup type /arraytype eq {
- dup length 2 ge {
- dup 0 get type dup /integertype eq exch /realtype eq or {
- dup 1 get type dup /integertype eq exch /realtype eq or {
- (\npapersize-x==) ..print dup 0 get ===
- (\npapersize-y==) ..print dup 1 get === (\n) ..print
- } if
- } if
- } if
- } if
- pop
- }
- /HWResolution { % [. .] PageSize -
- dup type /arraytype eq {
- dup length 2 ge {
- dup 0 get type dup /integertype eq exch /realtype eq or {
- dup 1 get type dup /integertype eq exch /realtype eq or {
- (\nresolution-x==) ..print dup 0 get ===
- (\nresolution-y==) ..print dup 1 get === (\n) ..print
- } if
- } if
- } if
- } if
- pop
- }
- /Duplex { % [. .] PageSize -
- dup type /booleantype eq {
- (\nsides-duplex==) ..print dup === (\n) ..print
- } if
- pop
- }
- /Tumble { % [. .] PageSize -
- dup type /booleantype eq {
- (\nsides-tumble==) ..print dup === (\n) ..print
- } if
- pop
- }
->> def
-%/.setpagesize{pop pop (hehehe\n) print} def
-% /a4{(hehehe\n) ..print} def % doesn"t work, has to be put into userdict
-/setpagedevice{
- { % <key> <val>
- exch dup ..sdict exch known { % run all keys known in ..sdict
- ..sdict exch get exec
- } {pop pop} ifelse
- } forall
- (\nset-called-1==/setpagedevice\n) ..print flush
-}def
-/setpagetype{pop (\nset-called-1==/setpagetype\n) ..print flush}def
-/setprintername{pop (\nset-called-1==/setprintername\n) ..print flush}def
-/setresolution{pop (\nset-called-1==/setresolution\n) ..print flush}def
-[ % Dat: fixed at Mon May 19 14:32:31 CEST 2003
- statusdict /.pagetypenames 2 copy known {get}{pop pop{}}ifelse
- % ^^^ Dat: may be {/a4 STRICT {(%END SIZES) .skipeof} if /a5}
- { /11x17/a3/a4/a4small/b5/ledger/legal/letter % GS 7.04
- /lettersmall/note/a0/a1/a2/a5/a6/a7/a8/a9/c0/c1/c2/c3/c4/c5/c6
- /a10/b0/b1/b2/b3/b4/b5/b6
- /isob0/isob1/isob2/isob3/isob4/isob5/isob6
- /jisb0/jisb1/jisb2/jisb3/jisb4/jisb5/jisb6
- /archE/archD/archC/archB/archA/flsa/flse/halfletter
- /tabloid/csheet/dsheet/esheet/executivepage/com10envelope
- /monarchenvelope/c5envelope/dlenvelope/folio/quarto
- }
-]{{
- dup type /nametype eq { dup xcheck not { % Dat: fixed
- % dup ===
- dup ..paper.redef exch known {pop} {
- dup ..paper.redef exch null put
- dup userdict exch 2 copy known { 2 copy get
- 1 index userdict exch undef
- % Stack: /a4 userdict /a4 {...}
- % 3 copy pop undef
- 4 2 roll exch undef
- } { exch pop pop {} } ifelse
- % Stack: /a4 {595 842 //.setpagesize --exec--}
- % Stack: /a4 {595 842 {/statusdict --.systemvar-- --begin-- .setpagesize --end--} --exec--}
- { /get exec /pop (\nset-called-0==) ..print === flush } % dump
- dup length array copy cvx % make a copy for subsequent invocations
- 2 copy exch 0 exch put exch pop % change /get to {...}
- 2 copy exch 2 exch put % change /pop to /a4
- def % overwrite it in systemdict
- } ifelse
- true
- } if } if
- pop
-}forall} forall
-end % systemdict
-.setglobal
-systemdict readonly pop
-
-(bbox-begin\n) ..print
-MAINFILE cvx exec
-(add-showpage==1\n) ..print
-/DOCUT false def
-showpage quit
-';
- die unless close F;
- # vvv Imp: make it work on Win32 (no >&1 redirection)
- my $gs3=$CGS. # "-dPAGE1QUIT=".($FileFormat eq 'EPS' or $FileFormat eq 'markedEPS' ? 'quit' : '{}').
- " -dWRITESYSTEMDICT -dNOPAUSE -sDEVICE=bbox -sFN=".fnq($InputFilename)." ".fnq($tfn)." 2>&1";
- debug "Ghostscript compute pipe: $gs3";
- my $res=`$gs3`;
- ## die $res;
- temp_unlink $tfn;
- ## print STDERR $res;
- error "not a GS output from $GS"
- if !defined $res # BUGFIX at Sun Mar 7 18:51:34 CET 2004
- or $res!~s/\A\w+ Ghostscript \d.*\n// # AFPL Ghostscript 6.50 (2000-12-02)
- or $res!~s/.*?^bbox-begin\n//m;
- if ($res!~s/\nbbox-success\n\Z(?!\n)/\n/) {
- warning # not `error', mpost(1) `prologues:=0; ... btex fonts' output won't compile
- "BBox discovery was not successful";
- # !! continue only if MetaPost output?
- goto SKIP_BBOX_DISC;
- }
- #: Copyright (C) 2000 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
- #: This software comes with NO WARRANTY: see the file PUBLIC for details.
- #: set-called-0==/a4
- #: %%BoundingBox: 56 41 539 783
- #: %%HiResBoundingBox: 56.645998 41.849999 538.811984 782.351976
- #: pop-count==0
- #: end-count==1
- #: cut-offset==81898
- my $pop_count=0;
- my $end_count=0;
- my $cut_offset=-1;
- my $papersize_x=undef; # page_width
- my $papersize_y=undef; # page_height
- my $resolution_x=undef;
- my $resolution_y=undef;
- my $duplexi=0;
- my $tumblei=0;
- my %H;
- my $undefs="";
- my $bbc=0; # required
- for my $line (split/\n/, $res) {
- if ($line=~/^$BBregex$BBValues/oi) { $do_bb_line->($line," from Compute-GS"); $bbc++ }
- elsif ($line=~m@^set-called-(\d+)==/(\S+)$@) {
- if (not exists $H{$2}) {
- $H{$2}=1;
- $undefs.="/$2".(
- $1==0 ? "{}def\n" :
- $1==1 ? "/pop load def\n" :
- "{".("pop "x$1)."}bind def\n"
- );
- }
- # Dat: Safe, restorable, EPS-wise: /setpagedevice {pop} def
- # Dat: Smart, documentwise /a4 dup where{dup wcheck{exch{}put}{pop{}def}ifelse}{pop}ifelse
- }
- elsif ($line=~/^pop-count==(\d+)$/) { $pop_count=$1+0 }
- elsif ($line=~/^end-count==(\d+)$/) { $end_count=$1+0 }
- elsif ($line=~/^cut-offset==(\d+)$/) { $cut_offset=$1+0 }
- elsif ($line=~/^papersize-x==([-+0-9eE.]+)$/) { no integer; $papersize_x=$1+0 }
- elsif ($line=~/^papersize-y==([-+0-9eE.]+)$/) { no integer; $papersize_y=$1+0 }
- elsif ($line=~/^resolution-x==([-+0-9eE.]+)$/) { no integer; $resolution_x=$1+0 }
- elsif ($line=~/^resolution-y==([-+0-9eE.]+)$/) { no integer; $resolution_y=$1+0 }
- elsif ($line=~/^sides-duplex==true$/) { $duplexi=1 }
- elsif ($line=~/^sides-dumplex==false$/) { $duplexi=2 }
- elsif ($line=~/^sides-tumble==true$/) { $tumblei=1 }
- elsif ($line=~/^sides-tumble==false$/) { $tumblei=2 }
- elsif (length($line)==0 or $line=~/^(?:Copyright |This software )/) {}
- elsif ($line=~/^Loading (\S+) font from.*[.][.][.]/) { debug "GS builtin font used: $1" }
- else { debug "unknown line ($line)" }
- }
- undef $papersize_y if !defined $papersize_x;
- die unless $allow_adsc_bb==1;
- # Dat: This only applies when converting fron non-EPS PS:
- # Setting $allow_adsc_bb=0|1 now would disallow/allow the %%BoundingBox
- # etc. ADSC comment override the bbox computed by -sDEVICE=bbox.
- # When converting PS -> EPS, the PS file usually contains
- # `%%BoundingBox: 0 0 paperwidth paperheight', but the figure
- # itself is smaller.
- $bbtype='-';
- ## die "$papersize_x;;"; # PDF -sPAPERSIZE=a4
- #if ($::opt_papersize ne 'force-unknown' and $::opt_papersize ne 'unchanged') {
- # # override bbox
- # ($llx,$lly)=(0,0);
- # ($urx,$ury)=split/,/,$::opt_papersize;
- #} elsif (!is_page1_stop() and defined $papersize_x and defined $papersize_y) {
- #}
- debug "PaperSize wd=${papersize_x}bp ht=${papersize_y}bp" if defined $papersize_x;
- if ($::opt_papersize eq 'force-unknown' or ($::opt_papersize eq 'unchanged' and !defined $papersize_x)) {}
- elsif ($::opt_papersize ne 'unchanged') {
- die if is_page1_stop();
- ($papersize_x,$papersize_y)=split/,/,$::opt_papersize;
- goto do_force_papersize
- } else {
- # Dat: no $do_bb_line here, because we've done it with $bbc++, and we'll also do it later
- do_force_papersize:
- die if is_page1_stop();
- # vvv ($llx,$lly,$urx,$ury)=(0,0,$papersize_x,$papersize_y);
- # $do_bb_line->("set 0 0 $papersize_x $papersize_y"," from /PageSize");
- $after_correct.="1 dict dup /PageSize [".ceil($papersize_x)." ".ceil($papersize_y)."] put setpagedevice\n";
- # ^^^ Dat: both PS and markedPS would benefit from /PaperSize
- # ^^^ Dat: will be put after CorrectBoundingBox
- # Dat: unneeded: $allow_adsc_bb=0 if $FileFormat eq 'PDF'; # force this into /CropBox (otherwise only /MediaBox)
- }
- if (defined $papersize_x and ($::opt_bboxfrom eq 'papersize' or ($::opt_bboxfrom eq 'guess' and is_set_pagesize_ok()))) {
- $allow_adsc_bb=0;
- $do_bb_line->("set 0 0 $papersize_x $papersize_y"," from /PageSize"); # does ($llx,$lly,$urx,$ury)=(0,0,$papersize_x,$papersize_y);
- }
- $allow_adsc_bb=0 if ($::opt_bboxfrom eq 'compute-gs') ? ($bbc!=0)
- : ($::opt_bboxfrom eq 'guess') ? ($bbc!=0 and is_page1_stop()) # Imp: is is_page1_stop() OK here?
- : 0;
- if (!is_page1_stop()) {
- $pop_count=$end_count=0; # assume PS is correct
- $cut_offset=-1;
- }
- # if ($FileFormat ne 'EPS' and $FileFormat ne 'PS') { # device-specific (marked)
- # ^^^ Dat: $::opt_resolution and $::opt_duplex are already 'force-unknown' if $FileFormat is appropriate
- {
- $::opt_resolution=$resolution_x.','.$resolution_y if
- $::opt_resolution eq 'unchanged' and defined $resolution_x and defined $resolution_y;
-
- # vvv Imp: move down like $::opt_resolution
- if ($::opt_duplex eq 'force-unknown' or ($::opt_duplex eq 'unchanged' and $duplexi==0)) { $do_fix_tumble=($duplexi==1 && $tumblei==1) }
- elsif ($::opt_duplex eq 'force-simplex') { do_simplex: $after_correct.="1 dict dup /Duplex false put setpagedevice\n" }
- elsif ($::opt_duplex eq 'force-long' ) { do_long: $after_correct.="2 dict dup /Duplex true put dup /Tumble false put setpagedevice\n" }
- elsif ($::opt_duplex eq 'force-short') { do_short: $do_fix_tumble=1; $after_correct.="2 dict dup /Duplex true put dup /Tumble true put setpagedevice\n" }
- else {
- $duplexi ||= $::opt_duplex eq 'default-simplex' ? 2 : 1;
- $tumblei ||= $::opt_duplex eq 'default-short' ? 1 : 2;
- goto do_simplex if $duplexi!=1;
- goto do_long if $tumblei!=1;
- goto do_short;
- }
- }
- # vvv Dat: save...restore is _always_ necessary to undo the changes made
- # in the file itself
- $is_restored=1; # $after_comments.="save\n";
- $after_comments.=$undefs; # after our precious setpagedevice calls
- # debug "pop_count=$pop_count;";
- # debug "end_count=$end_count;";
- # debug "cut_offset=$cut_offset;";
- $after_code.=("pop\n"x$pop_count).("end\n"x$end_count);
- if ($cut_offset>=0 and ($bytes_left==-1 or $cut_offset<$bytes_left)) {
- $bytes_left=$cut_offset-$already_read;
- ##print tell(IN)." ar=$already_read\n";
- debug "Cutting after showpage at $cut_offset -> $bytes_left";
- # ^^^ Dat: cutting after `showpage' makes PS -> EPS conversion easy
- # sleep 1000;
- }
- # Dat: don't unlink $tifn yet, we'll continue scanning it
- # Imp: verify EPS created
- } else { $headEPSF=" $1" }
- SKIP_BBOX_DISC:
- if ($::opt_resolution eq 'force-unknown' or $::opt_resolution eq 'unchanged') {}
- else { $after_correct.="1 dict dup /HWResolution [@{[split/[x,]/,$::opt_resolution]}] put setpagedevice\n" }
- # ^^^ Dat: syntax already ok for $::opt_resolution
- $after_correct.="2 dict dup /TextAlphaBits 4 put dup /GraphicsAlphaBits 4 put setpagedevice\n" if
- $::opt_antialias eq 'yes' or $::opt_antialias eq 'scale3yes';
-
- $headEPSF="" if $FileFormat ne 'EPS' and $FileFormat ne 'markedEPS';
- $headPS=$1 if $header=~s/(PS-Adobe-[.\d]+)$//;
- $to_OUT.="%!$headPS$headEPSF\n";
- }
-
- debug "Scanning header for BoundingBox";
- my $do_atend=0;
- my $doing_atend=0;
- my $saved_pos;
- my $saved_bytes_left;
- my $creator_metapost_p=0; # HiResBoundingBox: after EndProlog
- my $creator_adobeps_p=0;
- my $had_pages=is_page1_stop(); # Dat: don't put `Pages:' to target EPS
- my $fontsdefs="";
- my %fontsnames;
- my @creator;
- read_again: while (length($_=readIN)) {
- ##print STDERR "(($_))\n";
- ### end of header
- next unless /\S/;
- y@\r@@d; chomp;
- if (!$doing_atend) {
- if (/^%%EndComments\b/i) {
- # Dat: EPSI created by ImageMagick has BeginDefaults+EndDefaults+BeginPreview
- # Dat: PS output by ADOBEPS4.DRV has BeginDefaults+PageBoundingBox+ViewingOrientation+PageFeatures+EndDefaults
- 1 while length($_=readIN) and !/\S/;
- if (!/^%%BeginDefaults\b/i) { y@\r@@d; chomp; $after_comments.="$_\n"; last }
- 1 while length($_=readIN) and !/\S/;
- if (!/^%%EndDefaults\b/i) { y@\r@@d; chomp; $after_comments.="%%BeginDefaults\n$_\n"; last }
- next
- } elsif (/^%%EndDefaults\b/i) { # EPSI created by ImageMagick
- } elsif (/^%%Creator:\s*ADOBEPS/i) { # ADOBEPS4.DRV
- # Emits ``%%BoundingBox 1 1 ...' instead of `0 0'
- $creator_adobeps_p=1;
- } elsif (/^%%Creator:\s*MetaPost\b/i) {
- $creator_metapost_p=1;
- } elsif ((substr($_,0,2)ne'%%' and substr($_,0,7)ne'%*Font:')
- and substr($_,0,5)ne'%EPS ' # epsincl.mp
- or !$creator_metapost_p and substr($_,0,5)eq'%%End'
- or /^%%Begin(?:Prolog|Setup)\b/i
- ) { $after_comments.="$_\n"; last }
- }
- if (/^%%BeginPreview\b/i) { # remove EPSI preview ballast ****pts****
- while (1) {
- error "Missing EPSI %%EndPreview" if !length($_=readIN);
- last if /^%%EndPreview\b/;
- y@\r@@d; chomp
- }
- } elsif (/^%%Creator:\s*(.*)/i) {
- push @creator, $1;
- $creator[-1]=~s@\s+\Z(?!\n)@@;
- $creator[-1]=~s@, a2ping .*@@; # remove old
- } elsif (/^%%(?:DocumentPaperSizes|PageOrder|DocumentMedia):/i) {
- # silently ignore these -- will be recalculated
- } elsif (/^%%Pages:\s+(\d+)\s*/i and !$had_pages) { # Not `%%Pages: (atend)'
- # Dat: don't `$do_atend=1' only for %%Pages
- $to_OUT.="$_\n"; $had_pages=1
- } elsif (/^%%Pages:/i) {
- # silently ignore these -- not significant for EPS
- } elsif (/^$BBregex$BBValues/oi) { ### BoundingBox with values
- s@($BBregex)\s*1\s+1\s+@$1 0 0 @ if $creator_adobeps_p;
- # vvv $bbtype may be possibly already set by compute-gs
- $do_bb_line->($_," from ADSC") if $allow_adsc_bb;
- } elsif (/^$BBregex\s*\(atend\)/oi) {
- ### BoundingBox with (atend)
- debug "At end $1BoundingBox";
- # warning "Cannot look for BoundingBox in the trailer with option --filter" if $::opt_filter;
- # ^^^ Dat: may be seekable anyway, omit warning
- $do_atend=1
- } elsif (/^%%Page:/i and !$creator_metapost_p) { # at Thu Sep 25 15:59:52 CEST 2003
- $after_comments.="$_\n"; last
- } elsif (/^%\*Font:\s+(\S+)\s+/) { # mpost(1) output
- ## debug $_;
- $fontsdefs.="$_\n"; # put in front (before `gsave ... translate')
- $fontsnames{$1}=1;
- } elsif (substr($_,0,5) eq '%EPS ') { # epsincl.mp
- $after_correct.="$_\n" if !$doing_atend; # before `gsave'
- } elsif ($doing_atend or /^%%End/) {
- # we might be in mid-line
- } else {
- $to_OUT.="$_\n"
- }
- }
- if ($doing_atend) { # already read (atend); restore file position
- seek(IN, $saved_pos, 0) or error "Input unseekable, cannot go back to line `: (atend)'";
- $bytes_left=$saved_bytes_left;
- } elsif ($do_atend) { # seek to near EOF and try again
- # error "Cannot leave line `: (atend)'" if ($saved_pos=tell IN)<0 or !seek(IN,0,1);
- fix_pipe_in "j.ps", $to_OUT, 0;
- die if ($saved_pos=tell IN)<0;
- $saved_bytes_left=$bytes_left;
- # vvv get the very last *BoundingBox entry from the last 4096 bytes
- if ($bytes_left>4096) {
- die unless seek(IN, $bytes_left-4096, 1);
- $bytes_left=4096;
- } elsif ($bytes_left<0) {
- die unless seek(IN, -4096, 2) or seek(IN, 0,0); # Dat: 0,0 for short files
- }
- $doing_atend=1; goto read_again;
- }
- # if (!$had_pages) { debug "Lying %%Pages: 1"; $to_OUT.="%%Pages: 1\n" }
- # ^^^ Dat: rather not lie !! go to (atend) if command line
- # vvv Dat: $bbtype ne'-' would be a bad idea
- warning "BoundingBox not found, try --bboxfrom=compute-gs" if !defined $llx; # !! compute-gs
- push @creator, "$program $Htex::a2ping::VERSION"; # if "@creator"!~/\ba2ping\b/;
- $to_OUT.="%%Creator: ".join(", ",@creator)."\n"; # before CorrectBoundingBox to be before `gsave' etc.
- $to_OUT.=CorrectBoundingBox $llx, $lly, $urx, $ury, $after_correct, $fontsdefs, $is_restored;
- $to_OUT.=$after_comments;
- if (%fontsnames) { # !! save .. restore
- $to_OUT.="{@{[sort keys%fontsnames]}}{\ndup where{pop pop}{cvlit dup def}ifelse}forall\n";
- $to_OUT.="/fshow where{pop}{/fshow{exch findfont exch scalefont setfont show}bind def}ifelse\n";
- }
-}
-
-### open output file or pipe (do this as late as possible)
-my $do_scale3_pnm=0;
-my $scale3_pnm_fn;
-my @pnm2sampled_cmd;
-if ($FileFormat eq 'PDF' or $FileFormat eq 'PDF1') {
- my $ofn=$ll_zero ? $OutputFilename : fix_pipe_out('.pdf');
- my $pipe = "$GS -q -dBATCH -sDEVICE=pdfwrite $GSOPTS -sOutputFile=".fnq($ofn)." -";
- debug "Ghostscript ps2pdf pipe:", $pipe;
- open(OUT, "| $pipe") or error "Cannot open Ghostscript pipe";
-} elsif ($FileFormat eq 'PCL5') {
- my $ofn=$do_fix_tumble ? fix_pipe_out('.pcl5') : $OutputFilename;
- # vvv ljet4 cannot do duplex, ljet4d can
- my $pipe = "$GS -q -dBATCH -sDEVICE=ljet4d $GSOPTS -sOutputFile=".fnq($ofn)." -";
- debug "Ghostscript ps2ljet pipe:", $pipe;
- open(OUT, "| $pipe") or error "Cannot open Ghostscript pipe";
-} elsif ($FileFormat eq 'PBM' or $FileFormat eq 'PGM' or $FileFormat eq 'PPM'
- or is_via_sam2p()) {
- $do_scale3_pnm=($::opt_antialias eq'scale3no' or $::opt_antialias eq 'scale3yes');
- my $device=$FileFormat eq 'PPM' || is_via_sam2p() ? 'ppmraw' :
- $FileFormat eq 'PBM' && $::opt_antialias eq 'no' ? 'pbmraw' : 'pgmraw';
- # Dat: -sDEVICE=pgm is ASCII, pgmraw is binary
- my $pipe ="$GS -q -dBATCH -sDEVICE=$device ";
- # $pipe.="-dTextAlphaBits=4 -dGraphicsAlphaBits=4 " if $::opt_antialias; # Dat: already done
- my $ofn=$OutputFilename;
- if (is_via_sam2p()) {
- # Dat: fortunately the following file format names are commin in sam2p(1)
- # and a2ping.pl: PNG XWD BMP TIFF JPEG GIF XPM
- @pnm2sampled_cmd=('sam2p',"$FileFormat:",'--'); # Imp: use convert(1) if no sam2p(1)
- $ofn=fix_force_out('SS.pnm');
- push @pnm2sampled_cmd, $ofn, $OutputFilename;
- }
- if ($do_scale3_pnm) {
- $scale3_pnm_fn=$ofn;
- $ofn=fix_force_out('S3.pnm') if $do_scale3_pnm;
- # ^^^ Dat: this must be the last call to fix_force_out()
- }
- $pipe.="$GSOPTS -sOutputFile=".fnq($ofn)." -";
- debug "Ghostscript ps2raster pipe:", $pipe;
- open(OUT, "| $pipe") or error "Cannot open Ghostscript pipe";
-} else { open_OUT() }
-
-my $unlink_OutputFilename;
-END { unlink $unlink_OutputFilename if defined $unlink_OutputFilename }
-$unlink_OutputFilename=$OutputFilename;
-
-die unless binmode OUT;
-#die $to_OUT;
-# !! remove setpagedevice from EPS->EPS, but keep EPS->PGM
-# vvv needed by EPS->PGM conversion !!
-if (is_need_showpage() and is_page1_stop()) {
- $to_OUT.="/showpage{showpage quit}bind def\n"; # don't call showpage twice
- $after_code.="showpage\n";
-}
-error "write OUT" if !print OUT $to_OUT;
-$to_OUT="";
-
-### print rest of file
-sub OVERLAP_LENGTH(){4096} # `%%TrailerLength: 1162' by ADOBEPS4.DRV
-my $extra_trailer="%%Trailer\n";
-##undef $unlink_OutputFilename; die;
-{ my $overlap=""; # keeps OVERLAP_LENGTH chars
- my $S;
- # print OUT while length($_=readIN 4096);
- while (length($S=readIN 4096)) { # Dat: 4096>=OVERLAP_LENGTH
- #if (length($S)<OVERLAP_LENGTH) { $S="$overlap$S"; $overlap=""; }
- #die if length($S)<OVERLAP_LENGTH; # happens sometimes
- #print OUT $overlap, substr($S,0,length($S)-OVERLAP_LENGTH());
- #$overlap=substr($S,-OVERLAP_LENGTH(),OVERLAP_LENGTH);
- next if length($overlap.=$S)<OVERLAP_LENGTH;
- print OUT substr($overlap,0,length($overlap)-OVERLAP_LENGTH());
- $overlap=substr($overlap,-OVERLAP_LENGTH());
- }
- if ($overlap=~s@\r?\n%%Trailer\r?\n(.*?)\Z(?!\n)@\n%%Trailer\n@s) {
- my $S=$1;
- $S=~y@\r@@d;
- $S=~s@\n%%TrailerLength:.*$@@m; # ADOBEPS4.DRV
- $overlap.=$S;
- $extra_trailer="";
- }
- $overlap=~s@(?:[\n\r\0\f]+%%EOF)?[\n\r\0\f]*\Z(?!\n)@@;
- # vvv Dat: would move %%Trailer after dvips output `end userdict /end-hook known{end-hook}if'
- # $overlap=~s@(?:[\n\r\0\f]+%%Trailer)?(?:[\n\r\0\f]+%%EOF)?[\n\r\0\f]+\Z(?!\n)@@;
- print OUT $overlap;
-}
-
-### close files
-error "closing IN: $?" unless close IN;
-# ^^^ SUXX: gs always exit(0), if exists
-# vvv Dat: $after_code is pop+end
-print OUT "\n$extra_trailer$after_code",
- ("grestore\n"x$need_grestore),
- ("restore\n"x$is_restored),
- "%%EOF\n";
-error "closing gs filter: $? $!" unless close OUT;
-
-# --- PNM scaling routines for --antialias=scale3*
-
-sub pnm_gettok($) {
- my ($fh,$S,$C)=($_[0],"");
- while (1) {
- die "unexpected EOF" if !defined($C=getc($fh));
- if ($C eq'#') { <$fh> } # ignore rest of line
- elsif ($C=~y@ \n\r\t@@) { last if length($S)!=0 }
- else { $S.=$C }
- }
- $S
-}
-
-my @div9=(0,0,0,0,0,map { $_, $_, $_, $_, $_, $_, $_, $_, $_ } 1..255, 255);
-
-#** @param $_[0] length always divisible by 3
-sub p5_avg_lines($$$$) {
- use integer;
- my $len=length($_[0]);
- my $olen=$len/3;
- while ($len>0) {
- vec($_[3],--$olen,8)=$div9[
- vec($_[0],$len-1,8)+vec($_[0],$len-2,8)+vec($_[0],$len-3,8)+
- vec($_[1],$len-1,8)+vec($_[1],$len-2,8)+vec($_[1],$len-3,8)+
- vec($_[2],$len-1,8)+vec($_[2],$len-2,8)+vec($_[2],$len-3,8)];
- $len-=3;
- }
-}
-
-#** @param $_[0] length always divisible by 9
-sub p6_avg_lines($$$$) {
- # Imp: why is it lighter than: convert -scale '33.3333%' a3.pbm a3r.pgm
- use integer;
- my $len=length($_[0]);
- my $olen=$len/3;
- while ($len>0) {
- vec($_[3],--$olen,8)=$div9[
- vec($_[0],$len-1,8)+vec($_[0],$len-4,8)+vec($_[0],$len-7,8)+
- vec($_[1],$len-1,8)+vec($_[1],$len-4,8)+vec($_[1],$len-7,8)+
- vec($_[2],$len-1,8)+vec($_[2],$len-4,8)+vec($_[2],$len-7,8)];
- $len-=6 if 0==--$len%3;
- }
-}
-
-# ---
-
-if (!$ll_zero and ($FileFormat eq 'PDF' or $FileFormat eq 'PDF1')) { # correct /MediaBox if not (0,0)-based
- ### ****pts**** remove incorrect /MediaBox produced by gs
- my $tfn=temp_prefix()."p.tgs";
- error "temp open $tfn: $!" unless open F, "> $tfn";
- $tmpfiles{$tfn}=1;
- die unless print F "% this is temporary gs command file created by $program".'
- GS_PDF_ProcSet begin
- pdfdict begin
- FN (r) file pdfopen begin
- % vvv keep file offsets, because `pdffindpageref` overrides it with contents
- /OFT Objects 0 get dup length array copy def
- % vvv Dat: the generation number is assumed to be 0
- % vvv Dat: modifies Objects[0]
- 1 pdffindpageref 0 get
- Objects 0 OFT put
- readxrefentry ===
- currentdict pdfclose end end end
- ';
- die unless close F;
-
- my $gs2="$GS -dNODISPLAY -dBATCH -sFN=".fnq(fix_pipe_out(undef))." -q ".fnq($tfn);
- debug "Ghostscript dup pipe: $gs2";
- my $offset=`$gs2`;
- chomp $offset;
- temp_unlink $tfn;
- if ($offset=~/\A\d+\Z(?!\n)/) {
- # Dat: now $offsets is a file position containing our /Page object
- die unless open F, "+< ".fix_pipe_out(undef);
- die unless binmode F;
- die unless seek F, $offset+=0, 0;
- my $pageobj;
- die unless 32<read F, $pageobj, 4096;
- if ($pageobj=~m@\A(.*?/Type\s*/Page\b.*?)(/MediaBox\s*\[0 0 [^\]]*\]).*?/MediaBox\b@s) {
- substr($pageobj, length($1), length($2))=" "x length($2);
- # ^^^ overwrite first buggy /MediaBox definition with spaces
- die unless seek F, $offset, 0;
- die unless print F $pageobj;
- debug "old /MediaBox destroyed.";
- } else {
- debug "warning: double /MediaBox not found at $offset";
- }
- die unless close F;
- } else {
- debug "warning: gs failed to locate double /MediaBox";
- }
-}
-if ($FileFormat eq 'PCL5' and $do_fix_tumble) {
- # stupid Ghostscript ignores /Tumble true with -sDEVICE=ljet4
- # 2 dict dup /Duplex true /Tumble false put setpagedevice % long HP PCL5e "\033&l1S"
- # 2 dict dup /Duplex true /Tumble true put setpagedevice % short HP PCL5e "\033&l2S"
- # 2 dict dup /Duplex false /Tumble false put setpagedevice % simplex HP PCL5e "\033&l0S"
- # HP PCL5e gs header "\033E\033&l2A\033&l1S\033&l0o0l0E\033&l-180u36Z"
- die unless open F, "+< ".fix_pipe_out(undef);
- die unless binmode F;
- my $pageobj;
- die unless 32<read F, $pageobj, 4096;
- if ($pageobj=~s@\033&l1S.*@\033&l2S@s) {
- die unless seek F, 0, 0;
- die unless print F $pageobj;
- debug "fixed /Tumble true (short).";
- } elsif ($pageobj=~m@\033&l0S@) {
- debug "no need to fix to /Tumble.";
- } else {
- debug "warning: /Duplex /Tumble settings not found"
- }
- die unless close F;
-}
-if ($do_scale3_pnm) {
- # Imp: scale down the file in place, ovoid early overwrite
- # Imp: possibly call an external C program that is faster
- debug "Scaling down PNM by 3x3";
- die unless open F, "> $scale3_pnm_fn";
- die unless binmode F;
- die unless open FIN, "< ".fix_pipe_out(undef);
- my $hd;
- die "PNMraw expected\n" if read(FIN,$hd,2)!=2 or $hd!~/\AP[456]/;
- my $wd=pnm_gettok(*FIN); die "width expected\n" if $wd!~/\A(\d+)\Z(?!\n)/;
- my $wd3=$hd eq 'P4' ? ($wd+7)>>3 : $hd eq 'P5' ? $wd : $wd*3; # bw/grayscale/RGB
- my $ht=pnm_gettok(*FIN); die "height expected\n" if $ht!~/\A(\d+)\Z(?!\n)/;
- if ($hd ne 'P4') {
- my $mx=pnm_gettok(*FIN); die "max==255 expected, got: $mx\n" if $mx ne '255';
- }
- $wd+=0; $ht+=0;
- { use integer;
- my $phd=($hd eq 'P5' and $FileFormat eq 'PBM') ? "P4 ".(($wd+2)/3)." ".(($ht+2)/3)."\n"
- : ($hd eq 'P6' ? 'P6' : 'P5')."\n# reduced-3x3\n".
- (($wd+2)/3)." ".(($ht+2)/3)." 255\n";
- die if !print F $phd;
- }
-
- my($l1,$l2,$l3);
- my $ret="";
- if ($hd eq 'P4') {
- while ($ht>0) {
- die "full row expected1\n" if $wd3!=read FIN, $l1, $wd3;
- if (--$ht==0) { $l2=$l1 }
- else {
- die "full row expected2\n" if $wd3!=read FIN, $l2, $wd3;
- if (--$ht==0) { $l3=$l2 } # Imp: adjust 2/3 weight
- else { $ht--;
- die "full row expected3\n" if $wd3!=read FIN, $l3, $wd3;
- }
- }
- $l1=unpack("B$wd",$l1); $l1=~y@10@\000\377@; $l1.=substr($l1,-3+length($l1)%3) if length($l1)%3!=0;
- $l2=unpack("B$wd",$l2); $l2=~y@10@\000\377@; $l2.=substr($l2,-3+length($l2)%3) if length($l2)%3!=0;
- $l3=unpack("B$wd",$l3); $l3=~y@10@\000\377@; $l3.=substr($l3,-3+length($l3)%3) if length($l3)%3!=0;
- p5_avg_lines($l1, $l2, $l3, $ret);
- die if !print F $ret;
- }
- } elsif ($hd eq 'P5') {
- while ($ht>0) {
- die "full row expected1\n" if $wd3!=read FIN, $l1, $wd3;
- $l1.=substr($l1,-3+length($l1)%3) if length($l1)%3!=0;
- if (--$ht==0) { $l2=$l1 }
- else {
- die "full row expected2\n" if $wd3!=read FIN, $l2, $wd3;
- $l2.=substr($l2,-3+length($l2)%3) if length($l2)%3!=0;
- if (--$ht==0) { $l3=$l2 } # Imp: adjust 2/3 weight
- else { $ht--;
- die "full row expected3\n" if $wd3!=read FIN, $l3, $wd3;
- $l3.=substr($l3,-3+length($l3)%3) if length($l3)%3!=0;
- }
- }
- p5_avg_lines($l1, $l2, $l3, $ret);
- if ($FileFormat eq 'PBM') {
- my $I=length($ret);
- while ($I--) { vec($ret,$I,8)=vec($ret,$I,8)<$::opt_threshold } # [\0\1]
- # ^^^ grayscale>=$::opt_threshold will be white
- $ret=pack"B".length($ret),$ret;
- }
- die if !print F $ret;
- }
- } elsif ($hd eq 'P6') {
- while ($ht>0) {
- die "full row expected1\n" if $wd3!=read FIN, $l1, $wd3;
- $l1.=substr($l1,-9+length($l1)%9) if length($l1)%9!=0;
- if (--$ht==0) { $l2=$l1 }
- else {
- die "full row expected2\n" if $wd3!=read FIN, $l2, $wd3;
- $l2.=substr($l2,-9+length($l2)%9) if length($l2)%9!=0;
- if (--$ht==0) { $l3=$l2 } # Imp: adjust 2/3 weight
- else { $ht--;
- die "full row expected3\n" if $wd3!=read FIN, $l3, $wd3;
- $l3.=substr($l3,-9+length($l3)%9) if length($l3)%9!=0;
- }
- }
- p6_avg_lines($l1, $l2, $l3, $ret);
- die if !print F $ret;
- }
- }
- die unless close F;
- temp_unlink $temp_out_fn;
- undef $temp_out_fn;
-}
-if (@pnm2sampled_cmd) { # $scale3_pnm_fn -> $OutputFilename
- do_system @pnm2sampled_cmd; # Dat: uses @extra -- really share that?
- temp_unlink $scale3_pnm_fn;
-}
-fix_close_out();
-undef $unlink_OutputFilename;
-if ($OutputFilename eq '-') {
- debug "Done OK, stdout is $FileFormat"
-} elsif (-f $OutputFilename) {
- debug "Done OK, created $FileFormat file $OutputFilename (".(-s _)." bytes)";
-} else {
- error "missing $OutputFilename"
-}
-just::end __END__
-
-Dat: `=item * foo' is wrong, puts big space between `*' and `foo'
-
-=begin man
-
-.ds pts-dev \*[.T]
-.do if '\*[.T]'ascii' .ds pts-dev tty
-.do if '\*[.T]'ascii8' .ds pts-dev tty
-.do if '\*[.T]'latin1' .ds pts-dev tty
-.do if '\*[.T]'nippon' .ds pts-dev tty
-.do if '\*[.T]'utf8' .ds pts-dev tty
-.do if '\*[.T]'cp1047' .ds pts-dev tty
-.do if '\*[pts-dev]'tty' \{\
-.ll 79
-.pl 33333v
-.nr IN 2n
-.\}
-.ad n
-
-=end
-
-=head1 NAME
-
-a2ping.pl -- convert between PS, EPS and PDF and other page description
-formats
-
-=head1 SYNOPSIS
-
-Z<> B<a2ping.pl> [B<-->]B<help>
- B<a2ping.pl> [B<-->]B<doc>
- B<a2ping.pl> [I<options>] <I<inputfile>> [[I<outformat>:] I<outputfile>]
-
-=head1 DESCRIPTION
-
-B<a2ping> is a UNIX command line utility written in Perl that
-converts many raster image and vector graphics formats to EPS or PDF and
-other page description formats. Accepted input file formats are: PS
-(PostScript), EPS, PDF, PNG, JPEG, TIFF, PNM, BMP, GIF, LBM, XPM, PCX,
-TGA. Accepted output formats are: EPS, PCL5, PDF, PDF1, PBM, PGM, PPM,
-PS, markedEPS, markedPS, PNG, XWD, BMP, TIFF, JPEG, GIF, XPM.
-B<a2ping> delegates the low-level work to
-Ghostscript (GS), B<pdftops> and B<sam2p>. B<a2ping> fixes many glitches
-during the EPS to EPS conversion, so its output is often more compatible
-and better embeddable than its input.
-
-Without the C<--below> option, it is guarenteed to start at the 0,0
-coordinate. C<--below>, C<--hires> and C<-v> are recommended options.
-
-The page size is set exactly corresponding to the BoundingBox.
-This means that when Ghostscript renders it, the result needs no
-cropping, and the PDF MediaBox is correct.
-
-If the bounding box is not right, of course, you have problems. If you
-feed crap in, you get crap. But you can supply the
-B<--bboxfrom=compute-gs> option to make GS recompute the bounding box.
-
-The name of the input file doesn't matter -- B<a2ping> detects the file
-format based on the first few bytes of the file. The name of the output
-file matters if I<outformat> is missing from the command line: then the
-extension of the output file determines the FileFormat (I<outformat>).
-
-=head1 EXTERNAL PROGRAMS
-
-The internal file format of B<a2ping.pl> is PS/EPS. Everything read is
-first converted to PS or EPS, then processed by B<a2ping.pl>, then
-converted to the output format.
-
-To analyse the bounding box and other properties of non-EPS PS files
-(and EPS files with option B<--bboxfrom> other than B<=guess>), GS is
-used. Converting PS to EPS involves this analysis.
-
-To write PDF files, GS is used.
-
-To read PDF files, B<pdftops> from the B<xpdf> package is used.
-
-Sampled input formats are PNG, JPEG, TIFF, PNM, BMP, GIF, LBM, XPM, PCX
-and TGA. To read sampled input formats, B<sam2p> is used. B<sam2p> is
-a raster image converter written in C++ by the author of B<a2ping.pl>.
-
-Extra output formats are PNG, XWD, BMP, TIFF, JPEG, GIF and XPM. To
-write extra output formats, B<sam2p> and GS are used.
-
-PNM output formats are PGM, PGM and PPM. To write PNM output formats, GS
-is used.
-
-
-=head1 TIPS AND TRICKS
-
-=over 2
-
-=item *
-
-Call with the B<-v> option to see progress and debug messages.
-
-=item *
-
-If your EPS contains a wrong bounding box, you can fix it by running
-C<a2ping.pl -v --bboxfrom=compute-gs thefile.eps -->
-
-=item *
-
-You can specify B<-> as I<inputfile> to get stdin and as I<outputfile>
-to get stdout. This works even for PDF files (which must be seekable),
-because B<a2ping> copies them to a temporary file automatically.
-
-=item *
-
-If I<inputfile> and I<outputfile> are the same, B<a2ping> copies the
-I<inputfile> to a temporary location first. However, this usage is
-recommended only if there is a backup of the file to be restored in case
-B<a2ping> doesn't produce the desired result.
-
-=item *
-
-If you specify B<--> as I<outputfile>, it will be the same as I<inputfile>.
-
-=item *
-
-B<a2ping> respects B<--Duplex> for FileFormat PCL5, even though GS doesn't.
-
-=item *
-
-If you have an incompatible PS that GS can read but your printer cannot print,
-just run C<a2ping.pl foo.ps PDF: - | a2ping.pl - PS: foo.ps>
-
-=item *
-
-If you have a PS coming from Win32 (often with extension C<.prn>), run
-it through B<a2ping>. It will remove the resolution changes and the
-progress text printed to the terminal (which confuses gv(1) and makes
-some filters in the print queue emit incorrect output).
-
-=item *
-
-B<a2ping> does antialiasing (B<--antialias=scale3no>) of glyphs and
-curves when emitting a sampled image (FileFormats such as PGM and PPM).
-This improves readability of the glyphs. B<=yes> instructs GS to do
-internal antialiasing, but it usually doesn't improve much. B<=scale3no>
-turns off GS internal antialiasing, but makes it render everything 3x3
-as big, and then scales it back down. B<=scale3no> turns on both 3x3
-scaling and GS internal antialiasing, which results in thicker lines and
-worse quality in general.
-
-=item *
-
-When creating a PBM file, antialiasing usually doesn't improve the
-quality, so it is switched off by default. But if you set
-B<--antialias=scale3no> or B<--antialias=scale3yes>, GS will render a PGM file,
-and the value of B<--threshold> determines the minimum intensity for white in
-the final PBM.
-
-=item *
-
-If you need a bigger sampled output file, specify a larger
-B<--Resolution>. The default is B<--Resolution=72>. If your sampled output file
-is going to be really big, you should specify B<--AntiAlias=yes> instead of
-the default B<--AntiAlias=scale3no> to speed up conversion.
-
-=back
-
-
-=head1 MISC
-
-=over 2
-
-=item *
-
-Doesn't depend on the filename or extension of the input file.
-
-=item *
-
-Conversion from EPS to PDF: fixes glitches etc., calls gs
--sDEVICE=pdfwrite
-
-=item *
-
-Conversion from EPS to EPS: fixes various glitches, moves (llx,lly) to
-(0,0), removes binary junk from the beginning of the EPS etc.
-
-=item *
-
-Conversion from PDF to PDF: keeps the file intact
-
-=item *
-
-Conversion from PDF to EPS: calls pdftops -eps (of the xpdf package)
-
-=item *
-
-Conversion from PS to EPS: keeps 1st page only, removes setpagedevice etc.
-
-=back
-
-=head1 AUTHORS
-
-The author of B<a2ping> is Szabó Péter <F<pts@fazekas.hu>>.
-
-B<a2ping> is inspired by and historically based on the B<epstopdf> Perl
-script modified by Thomas Esser, Sept. 1998, but his modifications have
-been removed from B<a2ping>, and also B<a2ping> and B<epstopdf> do not
-share common code anymore. B<epstopdf> is written by Sebastian Rahtz,
-for Elsevier Science. B<epstopdf> contained extra tricks from Hans Hagen's
-texutil.
-
-=head1 HISTORY
-
-=head2 1999/05/06 v2.5 (Heiko Oberdiek)
-
- * New options: --hires, --exact, --filter, --help.
- * Many cosmetics: title, usage, ...
- * New code for debug, warning, error
- * Detecting of cygwin perl
- * Scanning for %%{Hires,Exact,}BoundingBox.
- * Scanning only the header in order not to get a wrong
- BoundingBox of an included file.
- * (atend) supported.
- * uses strict; (earlier error detecting).
- * changed first comment from '%!PS' to '%!';
- * corrected (atend) pattern: '\s*\(atend\)'
- * using of $bbxpat in all BoundingBox cases,
- correct the first white space to '...Box:\s*$bb...'
- * corrected first line (one line instead of two before 'if 0;';
-
-=head2 2000/11/05 v2.6 (Heiko Oberdiek)
-
- * %%HiresBoundingBox corrected to %%HiResBoundingBox
-
-=head2 2001/03/05 v2.7 (Heiko Oberdiek)
-
- * Newline before grestore for the case that there is no
- whitespace at the end of the eps file.
-
-=head2 2003/02/02 (Szabó Péter)
-
- * option --below
- * removes DOS EPSF binary junk correctly
- * adds all 3 BoundingBox DSC comments
- * reads all 3 BoundingBox DSC comments, and picks the best
- * forces BoundingBox to be an integer
- * adds %%EndComments and proper %!PS-Adobe-?-? EPSF-?.? header
- * adds %%Pages:
- * adds invocation syntax: a2ping <infile.eps> <outfile.eps|pdf>
- * can convert PDF to EPS (by calling pdftops(1)) and PDF to PDF
- * emulates work for PDF input
-
-=head2 2003/04/16 (Szabó Péter)
-
- * added PS and sam2p support, renamed to a2ping
- * sam2p and pdftops if $InputFilename eq '-';
- * remove PJL UEL header from the beginning
- * works for PS non-EPS files for input
- * input support for PNG JPEG TIFF PNM BMP GIF LBM XPM PCX TGA via sam2p
- * removes ^L (form feed) from end of EPS file
- * -x=-c:rle to add sam2p options
-
-=head2 2003/04/26 (Szabó Péter)
-
- * omit the unnecessary setpagedevice calls when creating normal eps
- * --noverbose --nocompress supported differently
- * no more option defaults :-(
- * justlib2
- * multi-page output with PS:, PDF:, PCL5:
- * after `a2ping -pa4', file out.pcl says: `HP PCL printer data - A4 page
- size', instead of `US letter'
- * justlib2-ified doesn't depend on Getopt::Long anymore
- * fully supports filtering (stdin and/or stdout), PDF and PCL5 output to
- pipe (!$$ll_zero)
- * adds DSC ``%%DocumentMedia: plain 612 792 0 () ()''
- * BoundingBox precedence for EPS input: --PageSize, %%*BoundingBox,
- setpagedevice. Precedence for other inputs: --PageSize, setpagedevice,
- %%*BoundingBox
-
-=head2 2003/09/25 (Szabó Péter)
-
- * --bboxfrom=adsc: %%BoundingBox overrides -sDEVICE=bbox
- * improved bbox discovery
- * many bugfixes
- * MetaPost EPS input fixes for prologues:=0;
- * a2ping.pl -v --papersize=50,60 --bboxfrom=compute-gs t.ps t2.ps
- * consistent bbox, --PageSize, /PageSize handling
- * consistent --Resolution and --Duplex handling
-
-=head2 2003/12/02 (Szabó Péter)
-
- * --bboxfrom=compute-gs option to fix PS -> EPS bbox (gs -sDEVICE=bbox), tuzv.eps
-
-=head2 2004/02/10 v2.77 (Szabó Péter)
-
- * the compute-pipe routine is now run unless --bboxfrom=guess with EPS
- * added --gsextra=
- * added --antialias=
- * added FileFormat PBM, PGM, PPM
- * separated FileFormat features to FL_* constants
- * added --doc
- * there is no default FileFormat (PDF) anymore
+../../texmf/scripts/a2ping/a2ping.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/afm2pl b/Master/bin/mips-irix/afm2pl
index bfe173cfee0..c9084e0482e 100755
--- a/Master/bin/mips-irix/afm2pl
+++ b/Master/bin/mips-irix/afm2pl
Binary files differ
diff --git a/Master/bin/mips-irix/afm2tfm b/Master/bin/mips-irix/afm2tfm
index fb2ed25fe6e..6e8bf4f1409 100755
--- a/Master/bin/mips-irix/afm2tfm
+++ b/Master/bin/mips-irix/afm2tfm
Binary files differ
diff --git a/Master/bin/mips-irix/aleph b/Master/bin/mips-irix/aleph
index cd4dd61e140..30daaa7a88e 100755
--- a/Master/bin/mips-irix/aleph
+++ b/Master/bin/mips-irix/aleph
Binary files differ
diff --git a/Master/bin/mips-irix/bbox b/Master/bin/mips-irix/bbox
index b86beaa974f..73bb7a5791b 100755
--- a/Master/bin/mips-irix/bbox
+++ b/Master/bin/mips-irix/bbox
Binary files differ
diff --git a/Master/bin/mips-irix/bg5conv b/Master/bin/mips-irix/bg5conv
index 2c210916e76..9d960006657 100755
--- a/Master/bin/mips-irix/bg5conv
+++ b/Master/bin/mips-irix/bg5conv
Binary files differ
diff --git a/Master/bin/mips-irix/bibtex b/Master/bin/mips-irix/bibtex
index 472c3e98c03..8d382a172ee 100755
--- a/Master/bin/mips-irix/bibtex
+++ b/Master/bin/mips-irix/bibtex
Binary files differ
diff --git a/Master/bin/mips-irix/bibtex8 b/Master/bin/mips-irix/bibtex8
index 5921806b850..07988786cc8 100755
--- a/Master/bin/mips-irix/bibtex8
+++ b/Master/bin/mips-irix/bibtex8
Binary files differ
diff --git a/Master/bin/mips-irix/cef5conv b/Master/bin/mips-irix/cef5conv
index 2318d736873..9b88ef18459 100755
--- a/Master/bin/mips-irix/cef5conv
+++ b/Master/bin/mips-irix/cef5conv
Binary files differ
diff --git a/Master/bin/mips-irix/cefconv b/Master/bin/mips-irix/cefconv
index 708a0e1713d..75200249be0 100755
--- a/Master/bin/mips-irix/cefconv
+++ b/Master/bin/mips-irix/cefconv
Binary files differ
diff --git a/Master/bin/mips-irix/cefsconv b/Master/bin/mips-irix/cefsconv
index 00a56ea3545..15fbc24d9ad 100755
--- a/Master/bin/mips-irix/cefsconv
+++ b/Master/bin/mips-irix/cefsconv
Binary files differ
diff --git a/Master/bin/mips-irix/cfftot1 b/Master/bin/mips-irix/cfftot1
index b17fe3b9c9a..cd239351dbc 100755
--- a/Master/bin/mips-irix/cfftot1
+++ b/Master/bin/mips-irix/cfftot1
Binary files differ
diff --git a/Master/bin/mips-irix/ctangle b/Master/bin/mips-irix/ctangle
index eaae2f8d23e..240496ad8ea 100755
--- a/Master/bin/mips-irix/ctangle
+++ b/Master/bin/mips-irix/ctangle
Binary files differ
diff --git a/Master/bin/mips-irix/ctie b/Master/bin/mips-irix/ctie
index a260ef4a71f..85e0cff8897 100755
--- a/Master/bin/mips-irix/ctie
+++ b/Master/bin/mips-irix/ctie
Binary files differ
diff --git a/Master/bin/mips-irix/ctxtools b/Master/bin/mips-irix/ctxtools
index 84e47bbee3c..66237b28340 100755..120000
--- a/Master/bin/mips-irix/ctxtools
+++ b/Master/bin/mips-irix/ctxtools
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart ctxtools.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/ctxtools \ No newline at end of file
diff --git a/Master/bin/mips-irix/cweave b/Master/bin/mips-irix/cweave
index 285d5853d4f..226044c962d 100755
--- a/Master/bin/mips-irix/cweave
+++ b/Master/bin/mips-irix/cweave
Binary files differ
diff --git a/Master/bin/mips-irix/detex b/Master/bin/mips-irix/detex
index 8e3cc5c1d4a..150e528d09c 100755
--- a/Master/bin/mips-irix/detex
+++ b/Master/bin/mips-irix/detex
Binary files differ
diff --git a/Master/bin/mips-irix/devnag b/Master/bin/mips-irix/devnag
index a14195fce54..28b76481d52 100755
--- a/Master/bin/mips-irix/devnag
+++ b/Master/bin/mips-irix/devnag
Binary files differ
diff --git a/Master/bin/mips-irix/disdvi b/Master/bin/mips-irix/disdvi
index 7010a3655ba..8d2fec77858 100755
--- a/Master/bin/mips-irix/disdvi
+++ b/Master/bin/mips-irix/disdvi
Binary files differ
diff --git a/Master/bin/mips-irix/dmp b/Master/bin/mips-irix/dmp
index a4f5ebeea27..d7fcfc05325 100755
--- a/Master/bin/mips-irix/dmp
+++ b/Master/bin/mips-irix/dmp
Binary files differ
diff --git a/Master/bin/mips-irix/dt2dv b/Master/bin/mips-irix/dt2dv
index 4b861399d76..bf7dd91a395 100755
--- a/Master/bin/mips-irix/dt2dv
+++ b/Master/bin/mips-irix/dt2dv
Binary files differ
diff --git a/Master/bin/mips-irix/dv2dt b/Master/bin/mips-irix/dv2dt
index 2f31e9ad5c5..49eccea8c5a 100755
--- a/Master/bin/mips-irix/dv2dt
+++ b/Master/bin/mips-irix/dv2dt
Binary files differ
diff --git a/Master/bin/mips-irix/dvi2tty b/Master/bin/mips-irix/dvi2tty
index 498bd7f5165..54860182ac0 100755
--- a/Master/bin/mips-irix/dvi2tty
+++ b/Master/bin/mips-irix/dvi2tty
Binary files differ
diff --git a/Master/bin/mips-irix/dviasm b/Master/bin/mips-irix/dviasm
new file mode 120000
index 00000000000..2b15762a267
--- /dev/null
+++ b/Master/bin/mips-irix/dviasm
@@ -0,0 +1 @@
+../../texmf-dist/scripts/dviasm/dviasm.py \ No newline at end of file
diff --git a/Master/bin/mips-irix/dvibook b/Master/bin/mips-irix/dvibook
index 4384969989f..3540b341e45 100755
--- a/Master/bin/mips-irix/dvibook
+++ b/Master/bin/mips-irix/dvibook
Binary files differ
diff --git a/Master/bin/mips-irix/dviconcat b/Master/bin/mips-irix/dviconcat
index d42d2cca1ae..031bc184ccb 100755
--- a/Master/bin/mips-irix/dviconcat
+++ b/Master/bin/mips-irix/dviconcat
Binary files differ
diff --git a/Master/bin/mips-irix/dvicopy b/Master/bin/mips-irix/dvicopy
index 1f6d501e340..46f9387031c 100755
--- a/Master/bin/mips-irix/dvicopy
+++ b/Master/bin/mips-irix/dvicopy
Binary files differ
diff --git a/Master/bin/mips-irix/dvidvi b/Master/bin/mips-irix/dvidvi
index 5e45ca2d57d..62443705c4d 100755
--- a/Master/bin/mips-irix/dvidvi
+++ b/Master/bin/mips-irix/dvidvi
Binary files differ
diff --git a/Master/bin/mips-irix/dvigif b/Master/bin/mips-irix/dvigif
new file mode 120000
index 00000000000..c1eef0afe05
--- /dev/null
+++ b/Master/bin/mips-irix/dvigif
@@ -0,0 +1 @@
+dvipng \ No newline at end of file
diff --git a/Master/bin/mips-irix/dvilj b/Master/bin/mips-irix/dvilj
index ec21b7c84c9..22999bd6fd7 100755
--- a/Master/bin/mips-irix/dvilj
+++ b/Master/bin/mips-irix/dvilj
Binary files differ
diff --git a/Master/bin/mips-irix/dvilj2p b/Master/bin/mips-irix/dvilj2p
index 5fdf3087cf0..fcf9491753e 100755
--- a/Master/bin/mips-irix/dvilj2p
+++ b/Master/bin/mips-irix/dvilj2p
Binary files differ
diff --git a/Master/bin/mips-irix/dvilj4 b/Master/bin/mips-irix/dvilj4
index 836305cc544..1d49aa86a0d 100755
--- a/Master/bin/mips-irix/dvilj4
+++ b/Master/bin/mips-irix/dvilj4
Binary files differ
diff --git a/Master/bin/mips-irix/dvilj4l b/Master/bin/mips-irix/dvilj4l
index 6e6aaac75d7..d61f45da591 100755
--- a/Master/bin/mips-irix/dvilj4l
+++ b/Master/bin/mips-irix/dvilj4l
Binary files differ
diff --git a/Master/bin/mips-irix/dvipdfm b/Master/bin/mips-irix/dvipdfm
index 8795f8aa240..e48dbf71c9d 100755
--- a/Master/bin/mips-irix/dvipdfm
+++ b/Master/bin/mips-irix/dvipdfm
Binary files differ
diff --git a/Master/bin/mips-irix/dvipdfmx b/Master/bin/mips-irix/dvipdfmx
index ae5d7596b9a..159f561dcfd 100755
--- a/Master/bin/mips-irix/dvipdfmx
+++ b/Master/bin/mips-irix/dvipdfmx
Binary files differ
diff --git a/Master/bin/mips-irix/dvipng b/Master/bin/mips-irix/dvipng
index a7413ffa5b0..39be2e3ffa2 100755
--- a/Master/bin/mips-irix/dvipng
+++ b/Master/bin/mips-irix/dvipng
Binary files differ
diff --git a/Master/bin/mips-irix/dvipos b/Master/bin/mips-irix/dvipos
index cc5ff586f71..d43d8425086 100755
--- a/Master/bin/mips-irix/dvipos
+++ b/Master/bin/mips-irix/dvipos
Binary files differ
diff --git a/Master/bin/mips-irix/dvips b/Master/bin/mips-irix/dvips
index 37b47d8de08..3802355bf59 100755
--- a/Master/bin/mips-irix/dvips
+++ b/Master/bin/mips-irix/dvips
Binary files differ
diff --git a/Master/bin/mips-irix/dviselect b/Master/bin/mips-irix/dviselect
index d24ae900650..3daf3a7a6f0 100755
--- a/Master/bin/mips-irix/dviselect
+++ b/Master/bin/mips-irix/dviselect
Binary files differ
diff --git a/Master/bin/mips-irix/dvitodvi b/Master/bin/mips-irix/dvitodvi
index 2bb23d6a077..8badbb32f58 100755
--- a/Master/bin/mips-irix/dvitodvi
+++ b/Master/bin/mips-irix/dvitodvi
Binary files differ
diff --git a/Master/bin/mips-irix/dvitomp b/Master/bin/mips-irix/dvitomp
index f7413007eed..eeb6550ee18 100755
--- a/Master/bin/mips-irix/dvitomp
+++ b/Master/bin/mips-irix/dvitomp
Binary files differ
diff --git a/Master/bin/mips-irix/dvitype b/Master/bin/mips-irix/dvitype
index 60ee0cb62a6..9308659fc71 100755
--- a/Master/bin/mips-irix/dvitype
+++ b/Master/bin/mips-irix/dvitype
Binary files differ
diff --git a/Master/bin/mips-irix/e2pall b/Master/bin/mips-irix/e2pall
index 2997f8b1102..47465883225 100755..120000
--- a/Master/bin/mips-irix/e2pall
+++ b/Master/bin/mips-irix/e2pall
@@ -1,89 +1 @@
-#!/usr/bin/env perl
-
-# Author: Jody Klymak <jklymak@apl.washington.edu>, publisted by a posting
-# to the pdftex mailinglist.
-
-# recursively finds all your eps files. Looks down \input{fname}.
-# CAVEATS:
-# 1) cannot handle \input{fname} split over more than one line.
-# 1.5) cannot handle multiple \input{} or \includegraphics{} on one line.
-# 2) Must be run from same directory as the Latex file.
-# 3) Does not look down $TEXINPUTS or anything fancy like that...
-# 4) Handling of \include is untested (though I guess its trivial)
-# 5) Assumes *all* your graphics inclusions are [e]ps. But don't
-# fret, because if they are not epstopdf dies anyhow....
-# 6) Does not distinguish between percent (\%) and comment (%).
-
-# Changelog:
-# 20030103 -- Lachlan Andrew <lha@users.sourceforge.net>
-# * Only append '.tex' if $fname doesn't exist.
-# * Correctly handle lines with '}' after the \includegraphics{}
-# * Allow multiple extensions for graphics files. .eps -> .ps -> none
-# (Should try them in the same order as \includegraphics does
-# -- given by \DeclareGraphicsExtensions{}?)
-# * Allow \include the same way as \input
-# * Allow \includegraphics{} to be split over multiple lines
-# * Check that commands begin with '\', and allow spaces before arguments
-
-# EDIT these two lines for your system....
-
-$Eps2PdfCom = "epstopdf";
-$ThisFunCom = "e2pall";
-
-$fname=$ARGV[0];
-
-# check for a *.tex at the end...
-if ((-f "$fname")=="" && $fname !~ /.tex$/){
- $fname = "$fname.tex";
-}
-
-open(TEXFILE,$fname) or die "Cannot open file $fname";
-# print "Finding *.eps files in $fname\n";
-
-$seekingArg = 0;
-while($line=<TEXFILE>){
- # truncate $line after % sign....
- $line=~s/%.*//;
- # check for /input....
- if ($line=~/\\input *{([^}]*)}/){
- print `$ThisFunCom $1`;
- }
- # check for /include....
- if ($line=~/\\include *{([^}]*)}/){
- print `$ThisFunCom $1`;
- }
-
- $base = "";
- if ($line=~/\\includegraphics.*{([^}]*)}/){
- $base = $1;
- }
- elsif ($seekingArg==1 && ($line=~/{([^}]*)}/)){
- $base = $1;
- }
- elsif ($line=~/\\includegraphics/){
- $seekingArg = 1;
- }
-
- if ($base ne "") {
- $seekingArg = 0;
- if ((-f "$base.eps")!="") {
- $srcfile = "$base.eps";
- }
- elsif ((-f "$base.ps")!=""){
- $srcfile = "$base.ps";
- }
- else {
- $srcfile = $base;
- }
- # check that the [e]ps version is newer than the pdf version....
- if ((-M "$base.pdf")=="" || (-M "$base.pdf") >= (-M "$srcfile")){
- print "Constructing \t $base.pdf from $srcfile\n";
- print `$Eps2PdfCom $srcfile`;
- }
- else{
- print "$base.pdf \t is up to date with $srcfile\n";
- }
-
- };
-}
-close(TEXFILE);
+../../texmf/scripts/tetex/e2pall.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/ebb b/Master/bin/mips-irix/ebb
index c6ea4650e26..ab4195592f6 100755..120000
--- a/Master/bin/mips-irix/ebb
+++ b/Master/bin/mips-irix/ebb
Binary files differ
diff --git a/Master/bin/mips-irix/ebong b/Master/bin/mips-irix/ebong
index c4162cf0ef6..b0704cb4db1 100755..120000
--- a/Master/bin/mips-irix/ebong
+++ b/Master/bin/mips-irix/ebong
@@ -1,346 +1 @@
-#!/usr/bin/env python
-# look in newbong
-import sre
-A='A'
-B='B'
-S='S'
-s='s'
-F='F'
-X='X'
-
-NCLINE = 0
-global NCWORD,CWORD
-
-AKSAR={
- 'k' :[B,'k'],
- 'kh' :[B,'kh'],
- 'g' :[B,'g'],
- 'gh' :[B,'gh'],
- 'ng' :[B,'NG'],
-
- 'ch' :[B,'c'],
- '^ch' :[B,'ch'],
- 'j' :[B,'j'],
- 'jh' :[B,'jh'],
- '^y' :[B,'NJ'],
- '_n' :[B,'NJ'],
-
- 't' :[B,'T'],
- '^th' :[B,'Th'],
- 'd' :[B,'D'],
- 'dh' :[B,'Dh'],
- '^n' :[B,'N'],
-
- '_t' :[B,'t'],
- 'th' :[B,'th'],
- '_d' :[B,'d'],
- '_dh' :[B,'dh'],
- 'n' :[B,'n'],
-
- 'p' :[B,'p'],
- 'ph' :[B,'ph'],
- 'f' :[B,'ph'],
- 'b' :[B,'b'],
- 'bh' :[B,'bh'],
- 'v' :[B,'bh'],
- 'm' :[B,'m'],
- 'M' :[F,'M'],
-
- '^j' :[B,'J'],
- 'J' :[B,'J'],
- 'r' :[B,'r'],
- 'R' :[F,'R'],
- 'l' :[B,'l'],
- 'L' :[F,'L'],
- 'W' :[F,'W'],
- 'V' :[F,'W'],
- 'h' :[B,'H'],
- 'kk' :[B,'kK'],
- 'kkm' :[B,'kK/N'],
-
- 'sh' :[B,'sh'],
- '^s' :[B,'Sh'],
- '^sh' :[B,'Sh'],
- 's' :[B,'s'],
-
- '^r' :[B,'rh'],
- '^rh' :[B,'rhh'],
- 'y' :[B,'y'],
- 'Y' :[F,'Y'],
- 'JY' :[F,'Y'],
- '__t' :[B,'t//'],
- '^ng' :[B,'NNG'],
- ':h' :[B,'h'],
- '^' :[F,'NN'],
- '_' :[F,':/'],
-
- 'A' :[S,'A'],
- 'AA' :[S,'Aa'],
- 'I' :[S,'I'],
- 'II' :[S,'II'],
- 'U' :[S,'U'],
- 'UU' :[S,'UU'],
- 'RI' :[S,'RR'],
- 'E' :[S,'E'],
- 'OI' :[S,'OI'],
- 'O' :[S,'O'],
- 'OU' :[S,'OU'],
-
- 'a' :[X,'o',1],
- 'aa' :[s,'a',1],
- 'i' :[s,'i',-1],
- 'ii' :[s,'ii',1],
- 'u' :[s,'u',1],
- 'uu' :[s,'uu',1],
- 'RII' :[s,'rR',1],
- 'e' :[s,'e',-1],
- 'oi' :[s,'oi',-2],
- 'oo' :[s,'oo',11],
- 'o' :[X,'o',1],
- 'ou' :[s,'ou',12],
-
- '.' :[F,'.'],
- '..' :[F,'..'],
- '...' :[F,'...'],
- '|' :[F,'|'],
-
- '~' :[F,'~'],
- '`' :[F,'`'],
- '!' :[F,'!'],
- '1' :[F,'1'],
- '2' :[F,'2'],
- 'at' :[F,'@'],
- '#' :[F,'#'],
- '3' :[F,'3'],
- '$' :[F,'$'],
- '4' :[F,'4'],
- '%' :[F,'%'],
- '5' :[F,'5'],
- '6' :[F,'6'],
- '&' :[F,'&'],
- '7' :[F,'7'],
- '*' :[F,'*'],
- '8' :[F,'8'],
- '(' :[F,'('],
- '9' :[F,'9'],
- ')' :[F,')'],
- '0' :[F,'0'],
- 'dash' :[F,'-'],
- '+' :[F,'+'],
- '=' :[F,'='],
- '|' :[F,'|'],
- '{' :[F,'{'],
- '[' :[F,'['],
- '}' :[F,'}'],
- ']' :[F,']'],
- ':' :[F,':'],
- ';' :[F,';'],
- '"' :[F,'"'],
- "'" :[F,"'"],
- '<' :[F,'<'],
- ',' :[F,','],
- '>' :[F,'>'],
- '.' :[F,'.'],
- '?' :[F,'?'],
- '/' :[F,'/']}
-
-CATCODES = {'SS' :[S,'','','',1],
- 'SB' :[B,'','','',1],
- 'BS' :[S,'','','',1],
- 'BB' :[B,'','/','',1],
- 'BF' :[F,'','','',1],
- 'Bs1' :[S,'','','',1],
- 'Bs-1':[S,'\*','','*',1],
- 'Bs-2':[S,'\*','','*{oi}',0],
- 'Bs11':[S,'\*','','*ea',0],
- 'Bs12':[S,'\*','','*eou',0],
- 'Fs1' :[S,'','','',1],
- 'Fs-1':[S,'\*','','*',1],
- 'Fs-2':[S,'\*','','*{oi}',0],
- 'Fs11':[S,'\*','','*ea',0],
- 'Fs12':[S,'\*','','*eou',0],
- 'FF' :[F,'','','',1],
- 'AX' :[F,'','','',1]}
-
-def blocked(line):
- #print '@ blocked', line , '->',
- m = sre.findall('@[^@]+@',line)
- outline = line
- if not m :
- #print outline
- return(outline)
- else:
- for i in range(len(m)):
- s=m[i][:-1].replace(' ','%X%')
- outline = outline.replace(m[i],s,1)
- #print outline
- return(outline)
-
-def unblock(line):
- #print '@unblock', line, '->',
- m = sre.findall('@[^\s]+',line)
- outline = line
- if not m :
- #print outline
- return(outline)
- else:
- for i in range(len(m)):
- s=m[i].replace('@','').replace('%X%',' ')
- outline = outline.replace(m[i],s)
- #print outline
- return(outline)
-
-def printamp(line):
- #print '@unblock', line, '->',
- m = sre.findall('#AT',line)
- outline = line
- if not m :
- #print outline
- return(outline)
- else:
- for i in range(len(m)):
- outline = outline.replace('#AT','@')
- #print outline
- return(outline)
-
-def readsyll(syll):
- syllparts=[]
- start = 0; end = len(syll)
- while syll[start : end]:
- slice = syll[start : end]
- #print slice
- if AKSAR.has_key(slice):
- syllparts.append(AKSAR[slice])
- start = start + len(slice)
- end = len(syll)
- else :
- end = end -1
- return(syllparts)
-
-def fuse(list1,list2):
- global CCATCODE
- #print list1,list2
- Type1 = list1[0]
- Type2 = list2[0]
-
- if Type2 == s:
- Type3 = str(list2[2])
- elif Type2 == X:
- Type1=A
- Type3=''
- else:
- Type3 =''
-
- Type = Type1+Type2+Type3
-
- #print 'Type:', Type
-
- try:
- CATCODE = CATCODES[Type]
- TARGET = CATCODE[0]
- PREFIX = CATCODE[1]
- MIDFIX = CATCODE[2]
- POSTFIX = CATCODE[3]
- FLAG = CATCODE[4]
-
- #print 'TGT:', TARGET, PREFIX,MIDFIX,POSTFIX,FLAG
- #print 'RAWC', AKSAR[list1[1]][1],AKSAR[list2[1]][1]
-
- c1=list1[1]
- c2=list2[1]
-
- if FLAG == 1 :
- c = PREFIX + c1 + MIDFIX + POSTFIX + c2
- else :
- c = PREFIX + c1 + MIDFIX + POSTFIX
-
- fused = [TARGET,c]
- #print CATCODE
- return(fused)
- except KeyError:
- print '\n ERROR AT LINE:', NCLINE, 'WORD:',NCWORD, '(',CWORD,')'
- return(['ERROR','UNKNOWN CATCODE'])
-
-def fuseatoms(syll):
- slist=readsyll(syll);
- #print slist
- lslist=len(slist);
- l0=slist[0];
- for i in range(1,lslist):
- nextitem = slist[i]
- l0=fuse(l0,nextitem)
-
- return(l0[1])
-
-def fuseword(wrd):
- if wrd[0] == '@' :
- return(wrd)
- syllables = wrd.split('-')
- w0=''
- for eachsyll in syllables:
- syll=eachsyll
- thesyll = fuseatoms(syll)
- w0 = w0 + thesyll
- #print 'FUSED WORD',w0
- return(w0)
-
-def fuseline(line):
- global NCWORD,CWORD
- NCWORD = 0
- #line = blocked(line)
- words = line.split()
- l0=''
- for eachword in words:
- NCWORD=NCWORD+1
- word = eachword
- CWORD=word
- theword=fuseword(word)
- #print 'XX',theword
- l0=l0+' '+theword
- #print 'FUSED LINE', l0
- return(l0)
-
-# The main program
-import sys
-OK=1
-finnam = sys.argv[1]
-foutnam = finnam.split('.')[0] + '.' + 'tex'
-
-fin = file(finnam,'rt')
-fout = file(foutnam,'wt')
-
-textin = fin.readlines()
-nlines = len(textin)
-
-textout = []
-
-fin.close()
-
-for eachline in textin:
- NCLINE = NCLINE+1
- if eachline[0] == '#' :
- lineout = eachline[1:]
- elif eachline[0] == '\\' :
- lineout = eachline
- elif eachline == '\n':
- lineout = eachline
- else :
- line1 = eachline.strip()
- line2 = blocked(line1)
- lineout = fuseline(line2) + '\n'
- lineout = lineout[1:]
- #print ':::', lineout
- if lineout.find('UNKNOWN CATCODE') == -1 :
- lineout = unblock(lineout)
- #print ':::', lineout
- textout.append(printamp(lineout))
- else :
- OK = 0
- fout.close()
-
-if OK == 1:
- fout.writelines(textout)
- fout.close()
- print 'done'
-else:
- print 'Unknown CATCODE, Fix The errors and try again'
+../../texmf-dist/scripts/bengali/ebong.py \ No newline at end of file
diff --git a/Master/bin/mips-irix/epsffit b/Master/bin/mips-irix/epsffit
index 1e6d279d136..27c47946da8 100755
--- a/Master/bin/mips-irix/epsffit
+++ b/Master/bin/mips-irix/epsffit
Binary files differ
diff --git a/Master/bin/mips-irix/epstopdf b/Master/bin/mips-irix/epstopdf
index 0fb015d4420..3287ed667d6 100755..120000
--- a/Master/bin/mips-irix/epstopdf
+++ b/Master/bin/mips-irix/epstopdf
@@ -1,422 +1 @@
-eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q'
- if 0;
-use strict;
-
-# Change by Thomas Esser, Sept. 1998: The above lines allows us to find
-# perl along $PATH rather than guessing a fixed location. The above
-# construction should work with most shells.
-
-# A script to transform an EPS file so that:
-# a) it is guarenteed to start at the 0,0 coordinate
-# b) it sets a page size exactly corresponding to the BoundingBox
-# This means that when Ghostscript renders it, the result needs no
-# cropping, and the PDF MediaBox is correct.
-# c) the result is piped to Ghostscript and a PDF version written
-#
-# It needs a Level 2 PS interpreter.
-# If the bounding box is not right, of course, you have problems...
-#
-# The only thing I have not allowed for is the case of
-# "%%BoundingBox: (atend)", which is more complicated.
-#
-# Sebastian Rahtz, for Elsevier Science
-#
-# now with extra tricks from Hans Hagen's texutil.
-#
-# History
-# 1999/05/06 v2.5 (Heiko Oberdiek)
-# * New options: --hires, --exact, --filter, --help.
-# * Many cosmetics: title, usage, ...
-# * New code for debug, warning, error
-# * Detecting of cygwin perl
-# * Scanning for %%{Hires,Exact,}BoundingBox.
-# * Scanning only the header in order not to get a wrong
-# BoundingBox of an included file.
-# * (atend) supported.
-# * uses strict; (earlier error detecting).
-# * changed first comment from '%!PS' to '%!';
-# * corrected (atend) pattern: '\s*\(atend\)'
-# * using of $bbxpat in all BoundingBox cases,
-# correct the first white space to '...Box:\s*$bb...'
-# * corrected first line (one line instead of two before 'if 0;';
-# 2000/11/05 v2.6 (Heiko Oberdiek)
-# * %%HiresBoundingBox corrected to %%HiResBoundingBox
-# 2001/03/05 v2.7 (Heiko Oberdiek)
-# * Newline before grestore for the case that there is no
-# whitespace at the end of the eps file.
-# 2002/02/18 v2.8draft (Gerben Wierda)
-# * Handle different eol styles transparantly
-# * Applied fix from Peder Axensten for Freehand bug
-# 2002/02/21 v2.8draft (Gerben Wierda)
-# * Fixed bug where last line of buffer was not copied out (ugh!)
-# 2003/04/22 v2.9draft (Gerben Wierda)
-# * Fixed bug where with cr-eol files everything up to the first %!
-# * in the first 2048 bytes was gobbled (double ugh!)
-# 2004/03/17 v2.9.1draft (Gerben Wierda)
-# * No autorotate page
-# 2005/09/29 v2.9.2draft (Gerben Wierda)
-# * Quote OutFilename
-# 2005/10/01 v2.9.3draft (Gerben Wierda)
-# * Quote OutFilename
-# 2005/10/06 v2.9.4gw (Gerben Wierda)
-# * This has become the official version for now
-# 2005/10/06 v2.9.5gw (Gerben Wierda)
-# * Fixed a horrendous bug in the (atend) handling code
-#
-
-### program identification
-my $program = "epstopdf";
-my $filedate="2006/01/29";
-my $fileversion="2.9.5gw";
-my $copyright = "Copyright 1998-2006 by Sebastian Rahtz et al.";
-my $title = "\U$program\E $fileversion, $filedate - $copyright\n";
-
-### ghostscript command name
-my $GS = "gs";
-$GS = "gswin32c" if $^O eq 'MSWin32';
-$GS = "gswin32c" if $^O =~ /cygwin/;
-
-### options
-$::opt_help=0;
-$::opt_debug=0;
-$::opt_compress=1;
-$::opt_gs=1;
-$::opt_hires=0;
-$::opt_exact=0;
-$::opt_filter=0;
-$::opt_outfile="";
-
-### usage
-my @bool = ("false", "true");
-my $usage = <<"END_OF_USAGE";
-${title}Syntax: $program [options] <eps file>
-Options:
- --help: print usage
- --outfile=<file>: write result to <file>
- --(no)filter: read standard input (default: $bool[$::opt_filter])
- --(no)gs: run ghostscript (default: $bool[$::opt_gs])
- --(no)compress: use compression (default: $bool[$::opt_compress])
- --(no)hires: scan HiResBoundingBox (default: $bool[$::opt_hires])
- --(no)exact: scan ExactBoundingBox (default: $bool[$::opt_exact])
- --(no)debug: debug informations (default: $bool[$::opt_debug])
-Examples for producing 'test.pdf':
- * $program test.eps
- * produce postscript | $program --filter >test.pdf
- * produce postscript | $program -f -d -o=test.pdf
-Example: look for HiResBoundingBox and produce corrected PostScript:
- * $program -d --nogs -hires test.ps>testcorr.ps
-END_OF_USAGE
-
-### process options
-use Getopt::Long;
-GetOptions (
- "help!",
- "debug!",
- "filter!",
- "compress!",
- "gs!",
- "hires!",
- "exact!",
- "outfile=s",
-) or die $usage;
-
-### help functions
-sub debug {
- print STDERR "* @_\n" if $::opt_debug;
-}
-sub warning {
- print STDERR "==> Warning: @_!\n";
-}
-sub error {
- die "$title!!! Error: @_!\n";
-}
-sub errorUsage {
- die "$usage\n!!! Error: @_!\n";
-}
-
-### option help
-die $usage if $::opt_help;
-
-### get input filename
-my $InputFilename = "";
-if ($::opt_filter) {
- @ARGV == 0 or
- die errorUsage "Input file cannot be used with filter option";
- $InputFilename = "-";
- debug "Input file: standard input";
-}
-else {
- @ARGV > 0 or die errorUsage "Input filename missing";
- @ARGV < 2 or die errorUsage "Unknown option or too many input files";
- $InputFilename = $ARGV[0];
- -f $InputFilename or error "'$InputFilename' does not exist";
- debug "Input filename:", $InputFilename;
-}
-
-### option compress
-my $GSOPTS = "";
-$GSOPTS = "-dUseFlateCompression=false " unless $::opt_compress;
-
-### option BoundingBox types
-my $BBName = "%%BoundingBox:";
-!($::opt_hires and $::opt_exact) or
- error "Options --hires and --exact cannot be used together";
-$BBName = "%%HiResBoundingBox:" if $::opt_hires;
-$BBName = "%%ExactBoundingBox:" if $::opt_exact;
-debug "BoundingBox comment:", $BBName;
-
-### option outfile
-my $OutputFilename = $::opt_outfile;
-if ($OutputFilename eq "") {
- if ($::opt_gs) {
- $OutputFilename = $InputFilename;
- if (!$::opt_filter) {
- $OutputFilename =~ s/\.[^\.]*$//;
- $OutputFilename .= ".pdf";
- }
- }
- else {
- $OutputFilename = "-"; # standard output
- }
-}
-if ($::opt_filter) {
- debug "Output file: standard output";
-}
-else {
- debug "Output filename:", $OutputFilename;
-}
-
-### option gs
-if ($::opt_gs) {
- debug "Ghostscript command:", $GS;
- debug "Compression:", ($::opt_compress) ? "on" : "off";
-}
-
-### open input file
-open(IN,"<$InputFilename") or error "Cannot open",
- ($::opt_filter) ? "standard input" : "'$InputFilename'";
-binmode IN;
-
-### open output file
-if ($::opt_gs) {
- my $pipe = "$GS -q -sDEVICE=pdfwrite $GSOPTS -dAutoRotatePages=/None" .
- " -sOutputFile='$OutputFilename' - -c quit";
- debug "Ghostscript pipe:", $pipe;
- open(OUT,"|$pipe") or error "Cannot open Ghostscript for piped input";
-}
-else {
- open(OUT,">$OutputFilename") or error "Cannot write '$OutputFilename";
-}
-
-# reading a cr-eol file on a lf-eol system makes it impossible to parse
-# the header and besides it will read the intire file into yor line by line
-# scalar. this is also true the other way around.
-
-### scan a block, try to determine eol style
-
-my $buf;
-my $buflen;
-my @bufarray;
-my @parsedbufarray; # for mytell/myseek
-my $bufarraypos;
-
-# We assume 2048 is big enough.
-my $EOLSCANBUFSIZE = 2048;
-
-$buflen = read( IN, $buf, $EOLSCANBUFSIZE);
-if ($buflen > 0) {
- my $crlfpos;
- my $lfpos;
- my $crpos;
-
- # remove binary junk before header
- # if there is no header, we assume the file starts with ascii style and
- # we look for a eol style anyway, to prevent possible loading of the
- # entire file
- if ($buf =~ /%!/) {
- # throw away binary junk before %!
- $buf =~ s/(.*?)%!/%!/o;
- }
- $lfpos = index( $buf, "\n");
- $crpos = index( $buf, "\r");
- $crlfpos = index( $buf, "\r\n");
-
- if ($crpos > 0 and ($lfpos == -1 or $lfpos > $crpos+1)) {
- # The first eol was a cr and it was not immediately followed by a lf
- $/ = "\r";
- debug "The first eol character was a CR ($crpos) and not immediately followed by a LF ($lfpos)";
- }
-
- # Now we have set the correct eol-character. Get one more line and add
- # it to our buffer. This will make the buffer contain an entire line
- # at the end. Then split the buffer in an array. We will draw lines from
- # that array until it is empty, then move again back to <IN>
- $buf .= <IN> unless eof( IN);
- $buflen = length( $buf);
- $bufarraypos = 0;
-
- # Some extra magic is needed here: if we set $/ to \r, Perl's re engine
- # still thinks eol is \n in regular expressions (not very nice) so we
- # cannot split on ^, but have to split on \r and reappend those.
- if ($/ eq "\r") {
- @bufarray = split( /\r/ms, $buf); # split on \r
- grep( $_ .= "\r", @bufarray); # re-append \r to each array item
- }
- else {
- @bufarray = split( /^/ms, $buf);
- }
-}
-
-### getline
-sub getline {
- if ($#bufarray >= 0) {
- $_ = shift( @bufarray);
- unshift( @parsedbufarray, $_); # for myseek and mytell
- $bufarraypos += length( $_);
- # debug "getline from array. bufarraypos = $bufarraypos";
- # debug "*** READ: $_";
- }
- else {
- $_ = <IN>;
- }
- return( defined( $_));
-}
-
-### mytell and myseek, work on <IN> only
-sub mytell {
- if ($#bufarray) {
- # debug "Telling ARRAY position $bufarraypos";
- return $bufarraypos;
- }
- else {
- my $pos = tell( IN);
- # debug "Telling FILE position $pos";
- return $pos;
- }
-}
-
-sub myseek {
- my $pos = shift;
- # debug "Seeking to position $pos in input";
- if ($pos < $buflen) {
- # debug "myseek position $pos < buffer size $buflen";
- # We were still parsing the array, reset to the end of buf and
- # move to the right line in the array.
- # Now, move stuff from the @parsedbufarray back until we are back at $pos
- my $tmpline;
- while ($bufarraypos > $pos) {
- # debug "myseek bufarray position $bufarraypos > position $pos";
- # we test on parsedbufarray to prevent an infinite loop on
- # a programming error (DEVELOP only)
- die "Programming error 1\n" unless $#parsedbufarray;
- $tmpline = shift( @parsedbufarray);
- $bufarraypos -= length( $tmpline);
- unshift( @bufarray, $tmpline);
- debug "*** UNREAD: $tmpline";
- }
- # debug "Returning to ARRAY size position $buflen (bufarraypos = $bufarraypos)";
- return seek( IN, $buflen, 0);
- }
- else {
- # debug "Seeking to FILE position $pos";
- return seek( IN, $pos, 0);
- }
-}
-
-### scan first line
-my $header = 0;
-getline();
-if (/%!/) {
- # throw away binary junk before %!
- s/(.*)%!/%!/o;
-}
-$header = 1 if /^%/;
-debug "Scanning header for BoundingBox";
-print OUT;
-
-### variables and pattern for BoundingBox search
-my $bbxpatt = '[0-9eE\.\-]';
- # protect backslashes: "\\" gets '\'
-my $BBValues = "\\s*($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)";
-my $BBCorrected = 0;
-
-sub CorrectBoundingBox {
- my ($llx, $lly, $urx, $ury) = @_;
- debug "Old BoundingBox:", $llx, $lly, $urx, $ury;
- my ($width, $height) = ($urx - $llx, $ury - $lly);
- my ($xoffset, $yoffset) = (-$llx, -$lly);
- debug "New BoundingBox: 0 0", $width, $height;
- debug "Offset:", $xoffset, $yoffset;
-
- print OUT "%%BoundingBox: 0 0 $width $height\n";
- print OUT "<< /PageSize [$width $height] >> setpagedevice\n";
- print OUT "gsave $xoffset $yoffset translate\n";
-}
-
-### scan header
-if ($header) {
- HEADER: while (getline()) {
- ### Fix for freehand bug ### by Peder Axensten
- next HEADER if(!/\S/);
-
- ### end of header
- if (!/^%/ or /^%%EndComments/) {
- print OUT;
- last;
- }
-
- ### BoundingBox with values
- if (/^$BBName$BBValues/) {
- CorrectBoundingBox $1, $2, $3, $4;
- $BBCorrected = 1;
- last;
- }
-
- ### BoundingBox with (atend)
- if (/^$BBName\s*\(atend\)/) {
- debug $BBName, "(atend)";
- if ($::opt_filter) {
- warning "Cannot look for BoundingBox in the trailer",
- "with option --filter";
- last;
- }
- my $pos = mytell();
- debug "Current file position:", $pos;
-
- # looking for %%BoundingBox
- while (getline()) {
- # skip over included documents
- if (/^%%BeginDocument/) {
- while (getline()) {
- last if /^%%EndDocument/;
- }
- }
- if (/^$BBName$BBValues/) {
- CorrectBoundingBox $1, $2, $3, $4;
- $BBCorrected = 1;
- last;
- }
- }
-
- # go back
- myseek( $pos) or error "Cannot go back to line '$BBName (atend)'";
- last;
- }
-
- # print header line
- print OUT;
- }
-}
-
-### print rest of file
-while (getline()) {
- print OUT;
-}
-
-### close files
-close(IN);
-print OUT "\ngrestore\n" if $BBCorrected;
-close(OUT);
-warning "BoundingBox not found" unless $BBCorrected;
-debug "Ready.";
-;
+../../texmf/scripts/epstopdf/epstopdf.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/exatools b/Master/bin/mips-irix/exatools
index 50ff0f07e46..304ccdc7e15 100755..120000
--- a/Master/bin/mips-irix/exatools
+++ b/Master/bin/mips-irix/exatools
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart exatools.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/exatools \ No newline at end of file
diff --git a/Master/bin/mips-irix/extconv b/Master/bin/mips-irix/extconv
index bd3415c4dd7..f7a3d3d6617 100755
--- a/Master/bin/mips-irix/extconv
+++ b/Master/bin/mips-irix/extconv
Binary files differ
diff --git a/Master/bin/mips-irix/extractbb b/Master/bin/mips-irix/extractbb
new file mode 120000
index 00000000000..ab4195592f6
--- /dev/null
+++ b/Master/bin/mips-irix/extractbb
@@ -0,0 +1 @@
+dvipdfmx \ No newline at end of file
diff --git a/Master/bin/mips-irix/getnonfreefonts b/Master/bin/mips-irix/getnonfreefonts
index 3ab220ee570..26aadc46261 100755..120000
--- a/Master/bin/mips-irix/getnonfreefonts
+++ b/Master/bin/mips-irix/getnonfreefonts
@@ -1,299 +1 @@
-#!/usr/bin/env perl
-
-## getnonfreefonts
-## 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
-# 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
-#
-# The current maintainer is Reinhard Kotucha.
-
-my $TL_version='2007';
-
-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
-;
-}
-
-@ARGS=@ARGV;
-
-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;
-
-print "$TL_version\n" and exit 0 if $opt_version;
-
-if ($opt_help or !@ARGS) {
- print "\nThis is getnonfreefonts";
- print '-sys' if ($sys);
- print ", version $TL_version.\n\n";
- usage;
-}
-
-
-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";
- }
- }
-}
-
-
-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'";
-
-sub check_tmpdir{
-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/;
- }
- }
-}
-
-
-$INSTALLROOTNAME=($sys)? 'TEXMFLOCAL':'TEXMFHOME';
-
-$INSTALLROOT=expand_var "$INSTALLROOTNAME";
-
-($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'";
-
-sub check_installroot {
- die "! ERROR: The variable $INSTALLROOTNAME is not set.\n"
- unless length ("$INSTALLROOT") > 0;
-
- die "! ERROR: The install directory '$INSTALLROOT' doesn't " .
- "exist.\n" .
- " If this is the correct path, please create " .
- "this directory manually.\n"
- unless (-d "$INSTALLROOT");
-
- die "! ERROR: The install directory '$INSTALLROOT' is not writable.\n"
- unless (-w "$INSTALLROOT");
-}
-
-if ($opt_help or !@ARGS) {
- print <<"ENDUSAGE";
- Directories:
- temporary: '$SYSTMP/getfont-<PID>'
- install: '$INSTALLROOT'
-
-ENDUSAGE
-check_tmpdir;
-check_installroot;
-exit 0;
-}
-
-check_tmpdir;
-check_installroot;
-
-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__
+../../texmf/scripts/texlive/getnonfreefonts.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/gftodvi b/Master/bin/mips-irix/gftodvi
index 15859e5e87a..0a345d46e4f 100755
--- a/Master/bin/mips-irix/gftodvi
+++ b/Master/bin/mips-irix/gftodvi
Binary files differ
diff --git a/Master/bin/mips-irix/gftopk b/Master/bin/mips-irix/gftopk
index 9f31ba2be02..8960cf1d2d8 100755
--- a/Master/bin/mips-irix/gftopk
+++ b/Master/bin/mips-irix/gftopk
Binary files differ
diff --git a/Master/bin/mips-irix/gftype b/Master/bin/mips-irix/gftype
index 1409327019b..5faf23ce889 100755
--- a/Master/bin/mips-irix/gftype
+++ b/Master/bin/mips-irix/gftype
Binary files differ
diff --git a/Master/bin/mips-irix/gsftopk b/Master/bin/mips-irix/gsftopk
index ee2632981aa..999a329a191 100755
--- a/Master/bin/mips-irix/gsftopk
+++ b/Master/bin/mips-irix/gsftopk
Binary files differ
diff --git a/Master/bin/mips-irix/hbf2gf b/Master/bin/mips-irix/hbf2gf
index 0546a78d1e7..8c064eb892e 100755
--- a/Master/bin/mips-irix/hbf2gf
+++ b/Master/bin/mips-irix/hbf2gf
Binary files differ
diff --git a/Master/bin/mips-irix/ht b/Master/bin/mips-irix/ht
index 9336545fb4e..ecd829558cd 100755..120000
--- a/Master/bin/mips-irix/ht
+++ b/Master/bin/mips-irix/ht
@@ -1,7 +1 @@
-#!/bin/sh
-$1 $2
-$1 $2
-$1 $2
-tex4ht $2
-t4ht $2 $3 # -d~/WWW/temp/ -m644
-
+../../texmf-dist/scripts/tex4ht/ht.sh \ No newline at end of file
diff --git a/Master/bin/mips-irix/htcontext b/Master/bin/mips-irix/htcontext
index 9e01fa97f66..d2754ae84fc 100755..120000
--- a/Master/bin/mips-irix/htcontext
+++ b/Master/bin/mips-irix/htcontext
@@ -1,7 +1 @@
-#!/bin/sh
- texexec --arg="ht-1=$2" --use=tex4ht --dvi --nobackend $5 $1
- tex4ht \dirchar $1 -i~/tex4ht.dir/texmf/tex4ht/ht-fonts/$3
- t4ht \dirchar $1 $4 ## -d~/WWW/temp/ -m644
-
-
-
+../../texmf-dist/scripts/tex4ht/htcontext.sh \ No newline at end of file
diff --git a/Master/bin/mips-irix/htlatex b/Master/bin/mips-irix/htlatex
index ebab47dbaa6..fe0feaa8185 100755..120000
--- a/Master/bin/mips-irix/htlatex
+++ b/Master/bin/mips-irix/htlatex
@@ -1,9 +1 @@
-#!/bin/sh
- 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
- 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 \dirchar $1 -i~/tex4ht.dir/texmf/tex4ht/ht-fonts/$3
- t4ht \dirchar $1 $4 ## -d~/WWW/temp/ -m644
-
-
-
+../../texmf-dist/scripts/tex4ht/htlatex.sh \ No newline at end of file
diff --git a/Master/bin/mips-irix/htmex b/Master/bin/mips-irix/htmex
index 485a7594468..29032d7b670 100755..120000
--- a/Master/bin/mips-irix/htmex
+++ b/Master/bin/mips-irix/htmex
@@ -1,9 +1 @@
-#!/bin/sh
- 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
- 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 \dirchar $1 -i~/tex4ht.dir/texmf/tex4ht/ht-fonts/$3
- t4ht \dirchar $1 $4 ## -d~/WWW/temp/ -m644
-
-
-
+../../texmf-dist/scripts/tex4ht/htmex.sh \ No newline at end of file
diff --git a/Master/bin/mips-irix/httex b/Master/bin/mips-irix/httex
index 4c184897d13..ece1bd19046 100755..120000
--- a/Master/bin/mips-irix/httex
+++ b/Master/bin/mips-irix/httex
@@ -1,9 +1 @@
-#!/bin/sh
- 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
- 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 \dirchar $1 -i~/tex4ht.dir/texmf/tex4ht/ht-fonts/$3
- t4ht \dirchar $1 $4 ## -d~/WWW/temp/ -m644
-
-
-
+../../texmf-dist/scripts/tex4ht/httex.sh \ No newline at end of file
diff --git a/Master/bin/mips-irix/httexi b/Master/bin/mips-irix/httexi
index 26427698991..aa6cd5c8561 100755..120000
--- a/Master/bin/mips-irix/httexi
+++ b/Master/bin/mips-irix/httexi
@@ -1,10 +1 @@
-#!/bin/sh
- 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
- 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 \dirchar $1 -i~/tex4ht.dir/texmf/tex4ht/ht-fonts/$3
- t4ht \dirchar $1 $4 ## -d~/WWW/temp/ -m644
-# texindex ?
-
-
-
+../../texmf-dist/scripts/tex4ht/httexi.sh \ No newline at end of file
diff --git a/Master/bin/mips-irix/htxelatex b/Master/bin/mips-irix/htxelatex
new file mode 120000
index 00000000000..dcaa0fc882c
--- /dev/null
+++ b/Master/bin/mips-irix/htxelatex
@@ -0,0 +1 @@
+../../texmf-dist/scripts/tex4ht/htxelatex.sh \ No newline at end of file
diff --git a/Master/bin/mips-irix/htxetex b/Master/bin/mips-irix/htxetex
new file mode 120000
index 00000000000..c6cf37bfae9
--- /dev/null
+++ b/Master/bin/mips-irix/htxetex
@@ -0,0 +1 @@
+../../texmf-dist/scripts/tex4ht/htxetex.sh \ No newline at end of file
diff --git a/Master/bin/mips-irix/info b/Master/bin/mips-irix/info
index 33bdf1a9ef0..0dee4e58eff 100755
--- a/Master/bin/mips-irix/info
+++ b/Master/bin/mips-irix/info
Binary files differ
diff --git a/Master/bin/mips-irix/infokey b/Master/bin/mips-irix/infokey
index 1b4b82574f6..3101b9ec636 100755
--- a/Master/bin/mips-irix/infokey
+++ b/Master/bin/mips-irix/infokey
Binary files differ
diff --git a/Master/bin/mips-irix/install-info b/Master/bin/mips-irix/install-info
index 114903173d9..97cb0d3d355 100755
--- a/Master/bin/mips-irix/install-info
+++ b/Master/bin/mips-irix/install-info
Binary files differ
diff --git a/Master/bin/mips-irix/kpseaccess b/Master/bin/mips-irix/kpseaccess
index af4f1d1745e..9cb0c468772 100755
--- a/Master/bin/mips-irix/kpseaccess
+++ b/Master/bin/mips-irix/kpseaccess
Binary files differ
diff --git a/Master/bin/mips-irix/kpsereadlink b/Master/bin/mips-irix/kpsereadlink
index 5a1180cd73c..665563c1df6 100755
--- a/Master/bin/mips-irix/kpsereadlink
+++ b/Master/bin/mips-irix/kpsereadlink
Binary files differ
diff --git a/Master/bin/mips-irix/kpsestat b/Master/bin/mips-irix/kpsestat
index 7887cb510b4..8c9621eb822 100755
--- a/Master/bin/mips-irix/kpsestat
+++ b/Master/bin/mips-irix/kpsestat
Binary files differ
diff --git a/Master/bin/mips-irix/kpsewhich b/Master/bin/mips-irix/kpsewhich
index c617338b24e..572ee7e0ec3 100755
--- a/Master/bin/mips-irix/kpsewhich
+++ b/Master/bin/mips-irix/kpsewhich
Binary files differ
diff --git a/Master/bin/mips-irix/lacheck b/Master/bin/mips-irix/lacheck
index 5e2b72f357e..3bd651d4594 100755
--- a/Master/bin/mips-irix/lacheck
+++ b/Master/bin/mips-irix/lacheck
Binary files differ
diff --git a/Master/bin/mips-irix/lualatex b/Master/bin/mips-irix/lualatex
new file mode 120000
index 00000000000..8d727021583
--- /dev/null
+++ b/Master/bin/mips-irix/lualatex
@@ -0,0 +1 @@
+luatex \ No newline at end of file
diff --git a/Master/bin/mips-irix/luatex b/Master/bin/mips-irix/luatex
new file mode 100755
index 00000000000..87a3194c7d8
--- /dev/null
+++ b/Master/bin/mips-irix/luatex
Binary files differ
diff --git a/Master/bin/mips-irix/luatools b/Master/bin/mips-irix/luatools
index cb3ec1add4a..8fd68d0935a 100755..120000
--- a/Master/bin/mips-irix/luatools
+++ b/Master/bin/mips-irix/luatools
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart luatools.lua "$@"
+../../texmf-dist/scripts/context/stubs/unix/luatools \ No newline at end of file
diff --git a/Master/bin/mips-irix/mag b/Master/bin/mips-irix/mag
index a375985b101..ed55c308f35 100755
--- a/Master/bin/mips-irix/mag
+++ b/Master/bin/mips-irix/mag
Binary files differ
diff --git a/Master/bin/mips-irix/makeglossaries b/Master/bin/mips-irix/makeglossaries
new file mode 120000
index 00000000000..526413aa3ea
--- /dev/null
+++ b/Master/bin/mips-irix/makeglossaries
@@ -0,0 +1 @@
+../../texmf-dist/scripts/glossaries/makeglossaries \ No newline at end of file
diff --git a/Master/bin/mips-irix/makeindex b/Master/bin/mips-irix/makeindex
index 84ea71876a0..441a5ecee15 100755
--- a/Master/bin/mips-irix/makeindex
+++ b/Master/bin/mips-irix/makeindex
Binary files differ
diff --git a/Master/bin/mips-irix/makeinfo b/Master/bin/mips-irix/makeinfo
index fc82f0ce3ca..15da7df9461 100755
--- a/Master/bin/mips-irix/makeinfo
+++ b/Master/bin/mips-irix/makeinfo
Binary files differ
diff --git a/Master/bin/mips-irix/makempx b/Master/bin/mips-irix/makempx
index f5252f1dada..88b44225ace 100755
--- a/Master/bin/mips-irix/makempx
+++ b/Master/bin/mips-irix/makempx
Binary files differ
diff --git a/Master/bin/mips-irix/makempy b/Master/bin/mips-irix/makempy
index 4bf7a1af230..a3df543b304 100755..120000
--- a/Master/bin/mips-irix/makempy
+++ b/Master/bin/mips-irix/makempy
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart makempy.pl "$@"
+../../texmf-dist/scripts/context/stubs/unix/makempy \ No newline at end of file
diff --git a/Master/bin/mips-irix/metafun b/Master/bin/mips-irix/metafun
new file mode 120000
index 00000000000..96672bbb523
--- /dev/null
+++ b/Master/bin/mips-irix/metafun
@@ -0,0 +1 @@
+mpost \ No newline at end of file
diff --git a/Master/bin/mips-irix/mf b/Master/bin/mips-irix/mf
index a2b85fa3bce..f4decf22673 100755
--- a/Master/bin/mips-irix/mf
+++ b/Master/bin/mips-irix/mf
Binary files differ
diff --git a/Master/bin/mips-irix/mf-nowin b/Master/bin/mips-irix/mf-nowin
index 8a84041d021..493582a31c5 100755
--- a/Master/bin/mips-irix/mf-nowin
+++ b/Master/bin/mips-irix/mf-nowin
Binary files differ
diff --git a/Master/bin/mips-irix/mft b/Master/bin/mips-irix/mft
index 22a24c475ee..629710c70ac 100755
--- a/Master/bin/mips-irix/mft
+++ b/Master/bin/mips-irix/mft
Binary files differ
diff --git a/Master/bin/mips-irix/mk4ht b/Master/bin/mips-irix/mk4ht
index 2bd1f7e2038..4b7480809ba 100755..120000
--- a/Master/bin/mips-irix/mk4ht
+++ b/Master/bin/mips-irix/mk4ht
@@ -1,346 +1 @@
-#!/usr/bin/env perl
-#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-# mk4ht 2007-01-04-01:34 %
-# Copyright (C) 2003--2007 Eitan M. Gurari %
-# %
-# %
-# This work may be distributed and/or modified under the %
-# conditions of the LaTeX Project Public License, either %
-# version 1.3 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.3 or later is part of all distributions %
-# of LaTeX version 2003/12/01 or later. %
-# %
-# This work has the LPPL maintenance status "maintained".%
-# %
-# This Current Maintainer of this work %
-# is Eitan M. Gurari. %
-# %
-# gurari@cse.ohio-state.edu %
-# http://www.cse.ohio-state.edu/~gurari %
-#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-use strict;
-$^W=1; # turn warning on
-my @options = (
- "", "ht", "", "", "", "-cvalidatehtml",
- "ht", "htlatex", "latex", "", "", "-cvalidatehtml",
- "ht", "httex", "tex", "", "", "-cvalidatehtml",
- "ht", "httexi", "texi", "", "", "-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","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","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", "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",
- "jm", "jmlatex", "latex", "xhtml,jsmath", " -cmozhtf", "",
- "jm", "jmtex", "tex", "xhtml,jsmath", " -cmozhtf", "",
- "jm", "jmtexi", "texi", "xhtml,jsmath", " -cmozhtf", "",
- "jm", "jmcontext", "context", "xhtml,jsmath", " -cmozhtf", "",
- "tei", "teilatex", "latex", "xhtml,tei", " -cunihtf", "-cvalidate",
- "tei", "teitex", "tex", "xhtml,tei", " -cunihtf", "-cvalidate",
- "tei", "teitexi", "texi", "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","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", "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, 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";
- print " #2: file name\n";
- print " #3: optional arguments for latex/tex/texi/context \n";
- print " #4: optional arguments for tex4ht.c\n";
- print " #5: optional arguments for t4ht.c\n";
- print " \n";
- print " option2: mk4ht ht #2 #3 \"#4\" \"#5\"\n";
- print " \n";
- print " #1: ht\n";
- print " #2: latex, tex\n";
- print " #3: file name\n";
- print " #4: optional arguments for tex4ht.c\n";
- print " #5: optional arguments for t4ht.c\n";
- print " \n";
- print " Within the program, in column three of the options\n";
- 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 (2007-01-04-01:34)\n";
-if( !@ARGV ){
- print "improper command\n";
- showInstrucions(); exit(1);
-}
-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( $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 {
- 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]; }
-
- }
- 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 ){
- 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 ) {
- if( $command[2] eq "" ){
- $command[2] = $param;
- } else {
- $command[2] = $param. "," . $command[2];
- }
- } elsif ( $i== 3 ) {
- $command[3] = $param . $command[3];
- } else {
- $command[4] = $param. " " .$command[4];
- }
- $i++;
-}
-my $commando = $command[0] . " " . $command[1] . " \"".
- $command[2] . "\" \"". $command[3] . "\" \"" .
- $command[4] . "\"";
-print "$commando\n";
-my $rtrn;
-if( $rtrn = system($commando) ){
- print "--- error --- failed to execute command\n";
-} 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 );
-}
-
+../../texmf-dist/scripts/tex4ht/mk4ht.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/mkjobtexmf b/Master/bin/mips-irix/mkjobtexmf
new file mode 120000
index 00000000000..90b7a69f9f5
--- /dev/null
+++ b/Master/bin/mips-irix/mkjobtexmf
@@ -0,0 +1 @@
+../../texmf-dist/scripts/mkjobtexmf/mkjobtexmf.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/mktexlsr b/Master/bin/mips-irix/mktexlsr
index 9f729e4d495..2c4ac96f3dd 100755
--- a/Master/bin/mips-irix/mktexlsr
+++ b/Master/bin/mips-irix/mktexlsr
@@ -5,25 +5,32 @@
# installation won't write this script over yours.)
#
# Suitable for calling from cron, as in:
-# 0 * * * * cd /your/texmf/root && /usr/local/bin/mktexlsr
-# unless the scripts live in a different directory than the 'kpseaccess',
-# 'kpsestat', 'kpsereadlink', and 'kpsewhich' binaries.
+# 0 * * * * cd /your/texmf/root && /usr/local/texlive/bin/mktexlsr
#
# Originally written as `texhash' by Thomas Esser
# <te@dbs.uni-hannover.de>, Okt., 1994.
# Public domain.
-version='$Id: mktexlsr,v 1.46 2005/06/21 14:32:26 olaf Exp $'
+version='$Id: mktexlsr 9164 2008-07-02 17:42:11Z karl $'
progname=`echo $0 | sed 's%.*/%%'`
usage="Usage: $progname [DIR]...
-Only options are --help, --version, and --verbose. If standard input is
-a terminal, --verbose is on by default.
+Rebuild ls-R filename databases. If one or more arguments DIRS are
+given, these are used as the directories in which to build ls-R. Else
+all directories in the search path for ls-R files (\$TEXMFDBS) are used.
-Rebuild all necessary ls-R filename databases completely. If one or
-more arguments DIRS are given, these are used as texmf directories to
-build ls-R for. Else all directories in the search path for ls-R files
-(\$TEXMFDBS) are used."
+Options:
+ --dry-run do not actually update anything
+ --help display this help and exit
+ --quiet cancel --verbose
+ --silent same as --quiet
+ --verbose explain what is being done
+ --version output version information and exit
+
+If standard input is a terminal, --verbose is on by default.
+
+Report bugs to tex-k@tug.org.
+"
# MS-DOS and MS-Windows define $COMSPEC or $ComSpec and use `;' to separate
# directories in path lists whereas Unix uses `:'. Make an exception for
@@ -52,20 +59,37 @@ case $dirname in
esac
if tty -s; then verbose=true; else verbose=false; fi
+dry_run=false
+trees=
# A copy of some stuff from mktex.opt, so we can run in the presence of
# terminally damaged ls-R files.
-if test "x$1" = x--help || test "x$1" = x-help; then
- echo "$usage"
- exit 0
-elif test "x$1" = x--version || test "x$1" = x-version; then
- echo "`basename $0` $version"
- kpsewhich --version
- exit 0
-elif test "x$1" = x--verbose || test "x$1" = x-verbose; then
- verbose=true
+while test $# -gt 0; do
+ if test "x$1" = x--help || test "x$1" = x-help; then
+ echo "$usage"
+ exit 0
+ elif test "x$1" = x--version || test "x$1" = x-version; then
+ echo "`basename $0` $version"
+ kpsewhich --version
+ exit 0
+ elif test "x$1" = x--verbose || test "x$1" = x-verbose; then
+ verbose=true
+ elif test "x$1" = x--dry-run || test "x$1" = x-n; then
+ dry_run=true
+ elif test "x$1" = x--quiet || test "x$1" = x--silent \
+ || test "x$1" = x-quiet || test "x$1" = x-silent ; then
+ verbose=false
+ elif test "x$1" = x--; then
+ :
+ elif echo "x$1" | grep '^x-' >/dev/null; then
+ echo "$progname: unknown option $1, try --help if you need it." >&2
+ exit 1
+ else
+ test -d "$1" || echo "$progname: $1 not a directory." >&2
+ trees="$trees $1" # don't want to update system dirs
+ fi
shift
-fi
+done
# mktexupd and mktexlsr make sure they're coordinated via this. A copy
# is found mktex.opt.
@@ -73,16 +97,21 @@ ls_R_magic='% ls-R -- filename database for kpathsea; do not change this line.'
# The old string, which should continue to work.
old_ls_R_magic='% ls-R -- maintained by MakeTeXls-R; do not change this line.'
-trap 'cd / ; test -z "$db_dir_tmp" || rm -rf "$db_dir_tmp"; exit' 0 1 2 3 7 13 15
+trap 'cd /; test -z "$db_dir_tmp" || rm -rf "$db_dir_tmp"; exit' 0 1 2 3 7 13 15
# Get list of directories from $TEXMFDBS; eliminate duplicates.
-test $# = 0 && {
- OIFS=$IFS
- IFS='
+{
+ if test -n "$trees"; then
+ set x $trees
+ else
+ OIFS=$IFS # want just a newline
+ IFS='
'
- set x `kpsewhich --show-path=ls-R | tr : '
-' | sort | uniq`; shift
- IFS=$OIFS
+ set x `kpsewhich --show-path=ls-R | tr : '
+' | sort | uniq`
+ IFS=$OIFS
+ fi
+ shift
}
for TEXMFLS_R in "$@"; do
@@ -92,8 +121,8 @@ for TEXMFLS_R in "$@"; do
/* | [A-z]:/*) ;;
*) TEXMFLS_R="`pwd`/$TEXMFLS_R"
esac
- # Allow for ls-R and ls-r to exist. But create ls-R if we're working
- # from scratch.
+ # Allow for either ls-R and ls-r to exist. But create ls-R if we're
+ # working from scratch.
if test -f "$TEXMFLS_R/ls-R"; then
db_file="$TEXMFLS_R/ls-R"
elif test -f "$TEXMFLS_R/ls-r"; then
@@ -111,6 +140,8 @@ for TEXMFLS_R in "$@"; do
esac
db_dir=`echo "$db_file" | sed 's%/[^/][^/]*$%%'` # can't rely on dirname
+ # want to be silent if the directory doesn't exist, since the ls-R
+ # path ordinarily contains many nonexistent directories.
test -d "$db_dir" || continue
test -w "$db_dir" || { echo "$progname: $db_dir: directory not writable. Skipping..." >&2; continue; }
@@ -135,21 +166,24 @@ for TEXMFLS_R in "$@"; do
rm -f "$db_file_tmp"
$verbose && echo "$progname: Updating $db_file... " >&2
+ $dry_run && continue
+
echo "$ls_R_magic" >"$db_file_tmp"
# 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 .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.
+ # found via ls-R. Probably irrelevant in practice. The sed command
+ # inserts the leading ./ for directory names, and removes ., .., and
+ # version control entries from the list. Also omit contents of any
+ # the version 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"
+ vc_dirs='\.\(bzr\|git\|hg\|svn\)\|CVS\|RCS\|_darcs'
(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' \
+ | sed -e '/^$/{n;s%^\./%%;s%^%./%;}; /^\.$/d; /^\.\.$/d; /^'$vc_dirs'$/d;' \
+ -e '/^[\.\/]*lsR[0-9]*\.tmp:*$/d' \
+ | sed -e /$vc_dirs'.*:$/,/^$/d' \
>>"$db_file_tmp"
# To be really safe, a loop.
diff --git a/Master/bin/mips-irix/mktexpk b/Master/bin/mips-irix/mktexpk
index d2736ea77dc..baed82a83fa 100755
--- a/Master/bin/mips-irix/mktexpk
+++ b/Master/bin/mips-irix/mktexpk
@@ -4,7 +4,8 @@
# (If you change or delete the word `original' on the previous line,
# installation won't write this script over yours.)
#
-# te@dbs.uni-hannover.de, kb@mail.tug.org, and infovore@xs4all.nl.
+# Originally written by Thomas Esser, Karl Berry, and Olaf Weber.
+# Report bugs to tex-k@tug.org.
# Public domain.
version='$Id: mktexpk,v 1.34 2005/06/21 10:49:10 olaf Exp $'
@@ -119,7 +120,7 @@ if kpsewhich $NAME.mf >/dev/null 2>&1 || mktexmf $NAME >/dev/null 2>&1; then
360) MODE=epstylus;;
400) MODE=nexthi;;
600) MODE=ljfour;;
- 720) MODE=epsczz;;
+ 720) MODE=epscszz;;
1200) MODE=ultre;;
1270) MODE=linoone;;
8000) MODE=dpdfezzz;;
@@ -212,7 +213,7 @@ fi
"$MT_MKTEXDIR" "$PKDESTDIR"
if test ! -d "$PKDESTDIR"; then
- echo "$progname: mktexdir $PKDESTDIR failed." >&2
+ echo "$progname: $MT_MKTEXDIR $PKDESTDIR failed." >&2
exit 1
fi
@@ -250,7 +251,7 @@ fi
# Use cp when mv fails, since DOS will fail mv for deeply-nested directories.
mv $PKNAME "$PKDESTDIR/pk$$.tmp" 2>/dev/null \
|| cp $PKNAME "$PKDESTDIR/pk$$.tmp" || exit 1
-cd $PKDESTDIR || exit 1
+cd "$PKDESTDIR" || exit 1
chmod `kpsestat -xst,go-w .` pk$$.tmp
test -r $PKNAME || mv pk$$.tmp $PKNAME || exit 1
diff --git a/Master/bin/mips-irix/mktextfm b/Master/bin/mips-irix/mktextfm
index a423d0309b0..8884351d7a1 100755
--- a/Master/bin/mips-irix/mktextfm
+++ b/Master/bin/mips-irix/mktextfm
@@ -48,7 +48,7 @@ esac
(
NAME=`basename "$1" .tfm`
-MAG=1
+MAG=0
#DEST="$2"
DPI=$BDPI
diff --git a/Master/bin/mips-irix/mmafm b/Master/bin/mips-irix/mmafm
index 7c14ac4bbfb..4e301925de7 100755
--- a/Master/bin/mips-irix/mmafm
+++ b/Master/bin/mips-irix/mmafm
Binary files differ
diff --git a/Master/bin/mips-irix/mmpfb b/Master/bin/mips-irix/mmpfb
index 233b49323c6..ace29b82db0 100755
--- a/Master/bin/mips-irix/mmpfb
+++ b/Master/bin/mips-irix/mmpfb
Binary files differ
diff --git a/Master/bin/mips-irix/mpost b/Master/bin/mips-irix/mpost
index a8eddea6648..15001932447 100755
--- a/Master/bin/mips-irix/mpost
+++ b/Master/bin/mips-irix/mpost
Binary files differ
diff --git a/Master/bin/mips-irix/mpstools b/Master/bin/mips-irix/mpstools
index b4c8f634548..caf4ae949f7 100755..120000
--- a/Master/bin/mips-irix/mpstools
+++ b/Master/bin/mips-irix/mpstools
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart mpstools.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/mpstools \ No newline at end of file
diff --git a/Master/bin/mips-irix/mpto b/Master/bin/mips-irix/mpto
index 7f1ea90baff..ed8e4e7b3ab 100755
--- a/Master/bin/mips-irix/mpto
+++ b/Master/bin/mips-irix/mpto
Binary files differ
diff --git a/Master/bin/mips-irix/mptopdf b/Master/bin/mips-irix/mptopdf
index 980a3123d1a..83172e791cd 100755..120000
--- a/Master/bin/mips-irix/mptopdf
+++ b/Master/bin/mips-irix/mptopdf
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart mptopdf.pl "$@"
+../../texmf-dist/scripts/context/stubs/unix/mptopdf \ No newline at end of file
diff --git a/Master/bin/mips-irix/mtxtools b/Master/bin/mips-irix/mtxtools
index 2922e0b4674..d99a8081bb9 100755..120000
--- a/Master/bin/mips-irix/mtxtools
+++ b/Master/bin/mips-irix/mtxtools
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart mtxtools.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/mtxtools \ No newline at end of file
diff --git a/Master/bin/mips-irix/musixflx b/Master/bin/mips-irix/musixflx
index dbbe91e7f62..69ea2271446 100755
--- a/Master/bin/mips-irix/musixflx
+++ b/Master/bin/mips-irix/musixflx
Binary files differ
diff --git a/Master/bin/mips-irix/newer b/Master/bin/mips-irix/newer
index f80133e589a..db9edf47090 100755
--- a/Master/bin/mips-irix/newer
+++ b/Master/bin/mips-irix/newer
Binary files differ
diff --git a/Master/bin/mips-irix/odvicopy b/Master/bin/mips-irix/odvicopy
index e58d8510227..9544fb87f6f 100755
--- a/Master/bin/mips-irix/odvicopy
+++ b/Master/bin/mips-irix/odvicopy
Binary files differ
diff --git a/Master/bin/mips-irix/odvitype b/Master/bin/mips-irix/odvitype
index 3652c6bc9a9..5417ec99f74 100755
--- a/Master/bin/mips-irix/odvitype
+++ b/Master/bin/mips-irix/odvitype
Binary files differ
diff --git a/Master/bin/mips-irix/omega b/Master/bin/mips-irix/omega
index 1b048e48c8e..c6b84bab20b 100755
--- a/Master/bin/mips-irix/omega
+++ b/Master/bin/mips-irix/omega
Binary files differ
diff --git a/Master/bin/mips-irix/omfonts b/Master/bin/mips-irix/omfonts
index 877fa7e8a47..d24daada7b0 100755
--- a/Master/bin/mips-irix/omfonts
+++ b/Master/bin/mips-irix/omfonts
Binary files differ
diff --git a/Master/bin/mips-irix/otangle b/Master/bin/mips-irix/otangle
index de2b37bbbee..91522adeff9 100755
--- a/Master/bin/mips-irix/otangle
+++ b/Master/bin/mips-irix/otangle
Binary files differ
diff --git a/Master/bin/mips-irix/otfinfo b/Master/bin/mips-irix/otfinfo
index bb04d202d4b..920afd8646e 100755
--- a/Master/bin/mips-irix/otfinfo
+++ b/Master/bin/mips-irix/otfinfo
Binary files differ
diff --git a/Master/bin/mips-irix/otftotfm b/Master/bin/mips-irix/otftotfm
index 3000cea2b6d..441206b7a1e 100755
--- a/Master/bin/mips-irix/otftotfm
+++ b/Master/bin/mips-irix/otftotfm
Binary files differ
diff --git a/Master/bin/mips-irix/otp2ocp b/Master/bin/mips-irix/otp2ocp
index a34a17cc3ac..56584bb86ec 100755
--- a/Master/bin/mips-irix/otp2ocp
+++ b/Master/bin/mips-irix/otp2ocp
Binary files differ
diff --git a/Master/bin/mips-irix/outocp b/Master/bin/mips-irix/outocp
index 9ed3e77ca96..b2d55903208 100755
--- a/Master/bin/mips-irix/outocp
+++ b/Master/bin/mips-irix/outocp
Binary files differ
diff --git a/Master/bin/mips-irix/patgen b/Master/bin/mips-irix/patgen
index cf786fb5a19..265a50c4702 100755
--- a/Master/bin/mips-irix/patgen
+++ b/Master/bin/mips-irix/patgen
Binary files differ
diff --git a/Master/bin/mips-irix/pdfatfi b/Master/bin/mips-irix/pdfatfi
new file mode 120000
index 00000000000..6cd281194e9
--- /dev/null
+++ b/Master/bin/mips-irix/pdfatfi
@@ -0,0 +1 @@
+../../texmf-dist/scripts/oberdiek/pdfatfi.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/pdfclose b/Master/bin/mips-irix/pdfclose
index dae138aa526..cc74c1fba1c 100755
--- a/Master/bin/mips-irix/pdfclose
+++ b/Master/bin/mips-irix/pdfclose
Binary files differ
diff --git a/Master/bin/mips-irix/pdfcrop b/Master/bin/mips-irix/pdfcrop
index c7d2319af7a..d5235ebbcb7 100755..120000
--- a/Master/bin/mips-irix/pdfcrop
+++ b/Master/bin/mips-irix/pdfcrop
@@ -1,308 +1 @@
-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__
+../../texmf-dist/scripts/pdfcrop/pdfcrop.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/pdflualatex b/Master/bin/mips-irix/pdflualatex
new file mode 120000
index 00000000000..8d727021583
--- /dev/null
+++ b/Master/bin/mips-irix/pdflualatex
@@ -0,0 +1 @@
+luatex \ No newline at end of file
diff --git a/Master/bin/mips-irix/pdfluatex b/Master/bin/mips-irix/pdfluatex
new file mode 120000
index 00000000000..8d727021583
--- /dev/null
+++ b/Master/bin/mips-irix/pdfluatex
@@ -0,0 +1 @@
+luatex \ No newline at end of file
diff --git a/Master/bin/mips-irix/pdfopen b/Master/bin/mips-irix/pdfopen
index 2a63b97f251..6305a923154 100755
--- a/Master/bin/mips-irix/pdfopen
+++ b/Master/bin/mips-irix/pdfopen
Binary files differ
diff --git a/Master/bin/mips-irix/pdftex b/Master/bin/mips-irix/pdftex
index 62021132813..387f4c4b33d 100755
--- a/Master/bin/mips-irix/pdftex
+++ b/Master/bin/mips-irix/pdftex
Binary files differ
diff --git a/Master/bin/mips-irix/pdftexi2dvi b/Master/bin/mips-irix/pdftexi2dvi
new file mode 100755
index 00000000000..17708e76579
--- /dev/null
+++ b/Master/bin/mips-irix/pdftexi2dvi
@@ -0,0 +1,19 @@
+#!/bin/sh
+# $Id: pdftexi2dvi,v 1.3 2007/07/05 15:22:26 karl Exp $
+# Written by Thomas Esser. Public domain.
+# Execute texi2dvi --pdf.
+
+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
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+texi2dvi --pdf ${1+"$@"}
diff --git a/Master/bin/mips-irix/pdfthumb b/Master/bin/mips-irix/pdfthumb
index 98fcf307468..cfb7d400fa8 100755..120000
--- a/Master/bin/mips-irix/pdfthumb
+++ b/Master/bin/mips-irix/pdfthumb
@@ -1,29 +1 @@
-#!/bin/sh
-#
-# pdfthumb shell script file last update: 13 Sep 2002
-#
-# minimal usage:
-# pdfthumb input.pdf output.pdf
-#
-# Note: input.pdf and output.pdf must be different.
-# GhostScript (gs) must me available to create the images.
-# Unfortunately it fails on some input files for unknown reasons.
-#
-# It is assumed that you have at least Java 1.2.x installed
-# and can call it with the command java. Otherwise specify the
-# path for your Java runtime system.
-#
-# Modify this script such that jarfile contains the full path
-# of the pp4p.jar file.
-#
-#jarfile=/common/Java/lib/ppower4/pp4p.jar
-#
-# If you use a web2c distribution, you can place pp4p.jar
-# e.g. into the directory texmf/java/ppower4, run mktexlsr,
-# comment the assignment above and uncomment the assignment below.
-# Thanks to Reinhard Kotucha for contributing this suggestion.
-#
-jarfile=`kpsewhich -progname=java -format='other binary files' pp4p.jar`
-#
-#
-java -cp ${jarfile} de.tu_darmstadt.sp.pdftools.ThumbGen "$@"
+../../texmf-dist/scripts/ppower4/pdfthumb.texlua \ No newline at end of file
diff --git a/Master/bin/mips-irix/pdftools b/Master/bin/mips-irix/pdftools
index 92ee803a868..fa012780ccc 100755..120000
--- a/Master/bin/mips-irix/pdftools
+++ b/Master/bin/mips-irix/pdftools
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart pdftools.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/pdftools \ No newline at end of file
diff --git a/Master/bin/mips-irix/pdftosrc b/Master/bin/mips-irix/pdftosrc
index 8a408043131..cf7e47a8d6b 100755
--- a/Master/bin/mips-irix/pdftosrc
+++ b/Master/bin/mips-irix/pdftosrc
Binary files differ
diff --git a/Master/bin/mips-irix/pdftrimwhite b/Master/bin/mips-irix/pdftrimwhite
new file mode 120000
index 00000000000..46526e8ffcc
--- /dev/null
+++ b/Master/bin/mips-irix/pdftrimwhite
@@ -0,0 +1 @@
+../../texmf-dist/scripts/context/stubs/unix/pdftrimwhite \ No newline at end of file
diff --git a/Master/bin/mips-irix/perltex b/Master/bin/mips-irix/perltex
index 9c85ef94500..d135aa6f8e4 100755..120000
--- a/Master/bin/mips-irix/perltex
+++ b/Master/bin/mips-irix/perltex
@@ -1,476 +1 @@
-#! /usr/bin/env perl
-
-###########################################################
-# Prepare a LaTeX run for two-way communication with Perl #
-# By Scott Pakin <scott+pt@pakin.org> #
-###########################################################
-
-#-------------------------------------------------------------------
-# This is file `perltex.pl',
-# generated with the docstrip utility.
-#
-# The original source files were:
-#
-# perltex.dtx (with options: `perltex')
-#
-# This is a generated file.
-#
-# Copyright (C) 2007 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.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.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;
-use Pod::Usage;
-use File::Basename;
-use Fcntl;
-use POSIX;
-use warnings;
-use strict;
-my $latexprog;
-my $runsafely = 1;
-my @permittedops;
-my $usepipe = 1;
-my $progname = basename $0;
-my $jobname = "texput";
-my $toperl;
-my $fromperl;
-my $toflag;
-my $fromflag;
-my $doneflag;
-my $logfile;
-my $pipe;
-my @latexcmdline;
-my $styfile;
-my @macroexpansions;
-my $sandbox = new Safe;
-my $sandbox_eval;
-my $latexpid;
-my $pipestring = "\%\%\%\%\% Generated by $progname\n\\endinput\n";
-$latexprog = $ENV{"PERLTEX"} || "latex";
-Getopt::Long::Configure("require_order", "pass_through");
-GetOptions("help" => sub {pod2usage(-verbose => 1)},
- "latex=s" => \$latexprog,
- "safe!" => \$runsafely,
- "pipe!" => \$usepipe,
- "synctext=s" => \$pipestring,
- "makesty" => sub {$styfile = "noperltex.sty"},
- "permit=s" => \@permittedops) || pod2usage(2);
-@latexcmdline = @ARGV;
-my $firstcmd = 0;
-for ($firstcmd=0; $firstcmd<=$#latexcmdline; $firstcmd++) {
- my $option = $latexcmdline[$firstcmd];
- next if substr($option, 0, 1) eq "-";
- if (substr ($option, 0, 1) ne "\\") {
- $jobname = basename $option, ".tex" ;
- $latexcmdline[$firstcmd] = "\\input $option";
- }
- last;
-}
-push @latexcmdline, "" if $#latexcmdline==-1;
-my $separator = "";
-foreach (1 .. 20) {
- $separator .= chr(ord("A") + rand(26));
-}
-$toperl = $jobname . ".topl";
-$fromperl = $jobname . ".frpl";
-$toflag = $jobname . ".tfpl";
-$fromflag = $jobname . ".ffpl";
-$doneflag = $jobname . ".dfpl";
-$logfile = $jobname . ".lgpl";
-$pipe = $jobname . ".pipe";
-$latexcmdline[$firstcmd] =
- sprintf '\makeatletter' . '\def%s{%s}' x 7 . '\makeatother%s',
- '\plmac@tag', $separator,
- '\plmac@tofile', $toperl,
- '\plmac@fromfile', $fromperl,
- '\plmac@toflag', $toflag,
- '\plmac@fromflag', $fromflag,
- '\plmac@doneflag', $doneflag,
- '\plmac@pipe', $pipe,
- $latexcmdline[$firstcmd];
-foreach my $file ($toperl, $fromperl, $toflag, $fromflag, $doneflag, $pipe) {
- unlink $file while -e $file;
-}
-open (LOGFILE, ">$logfile") || die "open(\"$logfile\"): $!\n";
-if (defined $styfile) {
- open (STYFILE, ">$styfile") || die "open(\"$styfile\"): $!\n";
-}
-if (!$usepipe || !eval {mkfifo($pipe, 0600)}) {
- sysopen PIPE, $pipe, O_WRONLY|O_CREAT, 0755;
- print PIPE $pipestring;
- close PIPE;
- $usepipe = 0;
-}
-defined ($latexpid = fork) || die "fork: $!\n";
-unshift @latexcmdline, $latexprog;
-if (!$latexpid) {
- exec {$latexcmdline[0]} @latexcmdline;
- die "exec('@latexcmdline'): $!\n";
-}
-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]) {
- sleep 0;
- if (waitpid($latexpid, &WNOHANG)==-1) {
- foreach my $file ($toperl, $fromperl, $toflag,
- $fromflag, $doneflag, $pipe) {
- unlink $file while -e $file;
- }
- undef $latexpid;
- exit 0;
- }
- }
- };
- $awaitexists->($toflag);
- my $entirefile;
- {
- local $/ = undef;
- open (TOPERL, "<$toperl") || die "open($toperl): $!\n";
- $entirefile = <TOPERL>;
- close TOPERL;
- }
- my ($optag, $macroname, @otherstuff) =
- map {chomp; $_} split "$separator\n", $entirefile;
- $macroname =~ s/^[^A-Za-z]+//;
- $macroname =~ s/\W/_/g;
- $macroname = "latex_" . $macroname;
- if ($optag eq "USE") {
- foreach (@otherstuff) {
- s/\\/\\\\/g;
- s/\'/\\\'/g;
- $_ = "'$_'";
- }
- }
- my $perlcode;
- if ($optag eq "DEF") {
- $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 {
- die "${progname}: Internal error -- unexpected operation tag \"$optag\"\n";
- }
- print LOGFILE "#" x 31, " PERL CODE ", "#" x 32, "\n";
- print LOGFILE $perlcode, "\n";
- undef $_;
- my $result;
- {
- my $warningmsg;
- local $SIG{__WARN__} =
- sub {chomp ($warningmsg=$_[0]); return 0};
- $result = $sandbox_eval->($perlcode);
- if (defined $warningmsg) {
- $warningmsg =~ s/at \(eval \d+\) line \d+\W+//;
- print LOGFILE "# ===> $warningmsg\n\n";
- }
- }
- $result = "" if !$result || $optag eq "RUN";
- if ($@) {
- my $msg = $@;
- $msg =~ s/at \(eval \d+\) line \d+\W+//;
- $msg =~ s/\s+/ /;
- $result = "\\PackageError{perltex}{$msg}";
- my @helpstring;
- if ($msg =~ /\btrapped by\b/) {
- @helpstring =
- ("The preceding error message comes from Perl. Apparently,",
- "the Perl code you tried to execute attempted to perform an",
- "`unsafe' operation. If you trust the Perl code (e.g., if",
- "you wrote it) then you can invoke perltex with the --nosafe",
- "option to allow arbitrary Perl code to execute.",
- "Alternatively, you can selectively enable Perl features",
- "using perltex's --permit option. Don't do this if you don't",
- "trust the Perl code, however; malicious Perl code can do a",
- "world of harm to your computer system.");
- }
- else {
- @helpstring =
- ("The preceding error message comes from Perl. Apparently,",
- "there's a bug in your Perl code. You'll need to sort that",
- "out in your document and re-run perltex.");
- }
- my $helpstring = join ("\\MessageBreak\n", @helpstring);
- $helpstring =~ s/\. /.\\space\\space /g;
- $result .= "{$helpstring}";
- }
- push @macroexpansions, $result if defined $styfile && $optag eq "USE";
- print LOGFILE "%" x 30, " LATEX RESULT ", "%" x 30, "\n";
- print LOGFILE $result, "\n\n";
- $result .= '\endinput';
- open (FROMPERL, ">$fromperl") || die "open($fromperl): $!\n";
- syswrite FROMPERL, $result;
- close FROMPERL;
- unlink $toflag while -e $toflag;
- unlink $toperl while -e $toperl;
- unlink $doneflag while -e $doneflag;
- open (FROMFLAG, ">$fromflag") || die "open($fromflag): $!\n";
- close FROMFLAG;
- if (open (PIPE, ">$pipe")) {
- print PIPE $pipestring;
- close PIPE;
- }
- $awaitexists->($toperl);
- unlink $fromflag while -e $fromflag;
- open (DONEFLAG, ">$doneflag") || die "open($doneflag): $!\n";
- close DONEFLAG;
- if (open (PIPE, ">$pipe")) {
- print PIPE $pipestring;
- close PIPE;
- }
-}
-END {
- close LOGFILE;
- if (defined $latexpid) {
- kill (9, $latexpid);
- exit 1;
- }
-
- if (defined $styfile) {
- print STYFILE <<"STYFILEHEADER1";
-\\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-\\ProvidesPackage{noperltex}
- [2007/09/29 v1.4 Perl-free version of PerlTeX specific to $jobname.tex]
-STYFILEHEADER1
- ;
- print STYFILE <<'STYFILEHEADER2';
-\RequirePackage{filecontents}
-
-\let\noperltex@PackageError=\PackageError
-\renewcommand{\PackageError}[3]{}
-\RequirePackage{perltex}
-\let\PackageError=\noperltex@PackageError
-
-\newcount\plmac@macro@invocation@num
-\gdef\plmac@show@placeholder#1#2\@empty{%
- \ifx#1U\relax
- \endgroup
- \advance\plmac@macro@invocation@num by 1\relax
- \global\plmac@macro@invocation@num=\plmac@macro@invocation@num
- \input{noperltex-\the\plmac@macro@invocation@num.tex}%
- \else
- \endgroup
- \fi
-}
-STYFILEHEADER2
- ;
- foreach my $e (0 .. $#macroexpansions) {
- print STYFILE "\n";
- printf STYFILE "%% Invocation #%d\n", 1+$e;
- printf STYFILE "\\begin{filecontents}{noperltex-%d.tex}\n", 1+$e;
- print STYFILE $macroexpansions[$e], "\\endinput\n";
- print STYFILE "\\end{filecontents}\n";
- }
- print STYFILE "\\endinput\n";
- close STYFILE;
- }
-
- exit 0;
-}
-
-__END__
-
-=head1 NAME
-
-perltex - enable LaTeX macros to be defined in terms of Perl code
-
-=head1 SYNOPSIS
-
-perltex
-[B<--help>]
-[B<--latex>=I<program>]
-[B<-->[B<no>]B<safe>]
-[B<--permit>=I<feature>]
-[B<--makesty>]
-[I<latex options>]
-
-=head1 DESCRIPTION
-
-LaTeX -- through the underlying TeX typesetting system -- produces
-beautifully typeset documents but has a macro language that is
-difficult to program. In particular, support for complex string
-manipulation is largely lacking. Perl is a popular general-purpose
-programming language whose forte is string manipulation. However, it
-has no typesetting capabilities whatsoever.
-
-Clearly, Perl's programmability could complement LaTeX's typesetting
-strengths. B<perltex> is the tool that enables a symbiosis between
-the two systems. All a user needs to do is compile a LaTeX document
-using B<perltex> instead of B<latex>. (B<perltex> is actually a
-wrapper for B<latex>, so no B<latex> functionality is lost.) If the
-document includes a C<\usepackage{perltex}> in its preamble, then
-C<\perlnewcommand> and C<\perlrenewcommand> macros will be made
-available. These behave just like LaTeX's C<\newcommand> and
-C<\renewcommand> except that the macro body contains Perl code instead
-of LaTeX code.
-
-=head1 OPTIONS
-
-B<perltex> accepts the following command-line options:
-
-=over 4
-
-=item B<--help>
-
-Display basic usage information.
-
-=item B<--latex>=I<program>
-
-Specify a program to use instead of B<latex>. For example,
-C<--latex=pdflatex> would typeset the given document using
-B<pdflatex> instead of ordinary B<latex>.
-
-=item B<-->[B<no>]B<safe>
-
-Enable or disable sandboxing. With the default of B<--safe>,
-B<perltex> executes the code from a C<\perlnewcommand> or
-C<\perlrenewcommand> macro within a protected environment that
-prohibits ``unsafe'' operations such as accessing files or executing
-external programs. Specifying B<--nosafe> gives the LaTeX document
-I<carte blanche> to execute any arbitrary Perl code, including that
-which can harm the user's files. See L<Safe> for more information.
-
-=item B<--permit>=I<feature>
-
-Permit particular Perl operations to be performed. The B<--permit>
-option, which can be specified more than once on the command line,
-enables finer-grained control over the B<perltex> sandbox. See
-L<Opcode> for more information.
-
-=item B<--makesty>
-
-Generate a LaTeX style file called F<noperltex.sty>. Replacing the
-document's C<\usepackage{perltex}> line with C<\usepackage{noperltex}>
-produces the same output but does not require PerlTeX, making the
-document suitable for distribution to people who do not have PerlTeX
-installed. The disadvantage is that F<noperltex.sty> is specific to
-the document that produced it. Any changes to the document's PerlTeX
-macro definitions or macro invocations necessitates rerunning
-B<perltex> with the B<--makesty> option.
-
-=back
-
-These options are then followed by whatever options are normally
-passed to B<latex> (or whatever program was specified with
-C<--latex>), including, for instance, the name of the F<.tex> file to
-compile.
-
-=head1 EXAMPLES
-
-In its simplest form, B<perltex> is run just like B<latex>:
-
- perltex myfile.tex
-
-To use B<pdflatex> instead of regular B<latex>, use the B<--latex>
-option:
-
- perltex --latex=pdflatex myfile.tex
-
-If LaTeX gives a ``C<trapped by operation mask>'' error and you trust
-the F<.tex> file you're trying to compile not to execute malicious
-Perl code (e.g., because you wrote it yourself), you can disable
-B<perltex>'s safety mechansisms with B<--nosafe>:
-
- perltex --nosafe myfile.tex
-
-The following command gives documents only B<perltex>'s default
-permissions (C<:browse>) plus the ability to open files and invoke the
-C<time> command:
-
- perltex --permit=:browse --permit=:filesys_open
- --permit=time myfile.tex
-
-=head1 ENVIRONMENT
-
-B<perltex> honors the following environment variables:
-
-=over 4
-
-=item PERLTEX
-
-Specify the filename of the LaTeX compiler. The LaTeX compiler
-defaults to ``C<latex>''. The C<PERLTEX> environment variable
-overrides this default, and the B<--latex> command-line option (see
-L</OPTIONS>) overrides that.
-
-=back
-
-=head1 FILES
-
-While compiling F<jobname.tex>, B<perltex> makes use of the following
-files:
-
-=over 4
-
-=item F<jobname.lgpl>
-
-log file written by Perl; helpful for debugging Perl macros
-
-=item F<jobname.topl>
-
-information sent from LaTeX to Perl
-
-=item F<jobname.frpl>
-
-information sent from Perl to LaTeX
-
-=item F<jobname.tfpl>
-
-``flag'' file whose existence indicates that F<jobname.topl> contains
-valid data
-
-=item F<jobname.ffpl>
-
-``flag'' file whose existence indicates that F<jobname.frpl> contains
-valid data
-
-=item F<jobname.dfpl>
-
-``flag'' file whose existence indicates that F<jobname.ffpl> has been
-deleted
-
-=item F<noperltex-#.tex>
-
-file generated by F<noperltex.sty> for each PerlTeX macro invocation
-
-=back
-
-=head1 NOTES
-
-B<perltex>'s sandbox defaults to what L<Opcode> calls ``C<:browse>''.
-
-=head1 SEE ALSO
-
-latex(1), pdflatex(1), perl(1), Safe(3pm), Opcode(3pm)
-
-=head1 AUTHOR
-
-Scott Pakin, I<scott+pt@pakin.org>
+../../texmf-dist/scripts/perltex/perltex.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/pfb2pfa b/Master/bin/mips-irix/pfb2pfa
index 5a7a26dc50a..24233f22e03 100755
--- a/Master/bin/mips-irix/pfb2pfa
+++ b/Master/bin/mips-irix/pfb2pfa
Binary files differ
diff --git a/Master/bin/mips-irix/pk2bm b/Master/bin/mips-irix/pk2bm
index 17c6b5e218e..1b6dc070028 100755
--- a/Master/bin/mips-irix/pk2bm
+++ b/Master/bin/mips-irix/pk2bm
Binary files differ
diff --git a/Master/bin/mips-irix/pkfix b/Master/bin/mips-irix/pkfix
index 1429889b9ec..7d1c767c21f 100755..120000
--- a/Master/bin/mips-irix/pkfix
+++ b/Master/bin/mips-irix/pkfix
@@ -1,860 +1 @@
-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
-#
-# pkfix.pl
-#
-# Copyright (C) 2001, 2005 Heiko Oberdiek.
-#
-# This work may be distributed and/or modified under the
-# conditions of the LaTeX Project Public License, either version 1.3
-# 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.3 or later is part of all distributions of LaTeX
-# version 2003/12/01 or later.
-# This work has the LPPL maintenance status "maintained".
-# This Current Maintainer of this work is Heiko Oberdiek.
-#
-# See file "README" for a list of files that belongs to this project.
-#
-# This file "pkfix.pl" may be renamed to "pkfix"
-# for installation purposes.
-#
-my $file = "pkfix.pl";
-my $program = uc($&) if $file =~ /^\w+/;
-my $project = lc($program);
-my $version = "1.3";
-my $date = "2005/02/25";
-my $author = "Heiko Oberdiek";
-my $copyright = "Copyright (c) 2001, 2005 by $author.";
-#
-# Reqirements: Perl5, dvips
-# History:
-# 2001/04/12 v0.1:
-# * First try.
-# 2001/04/13 v0.2:
-# * TeX/dvips is called for each font for the case of errors.
-# * First release.
-# 2001/04/15 v0.3:
-# * Call of kpsewhich with option --progname.
-# * Extracting of texps.pro from temporary PostScript file,
-# if kpsewhich failed.
-# * Option -G0 for dvips run added.
-# 2001/04/16 v0.4:
-# * Support for merging PostScript fonts added.
-# * \special{!...}/@fedspecial detection added.
-# * Bug fix: I detection.
-# 2001/04/17 v0.5:
-# * Redirection of stderr (dvips run) if possible.
-# 2001/04/20 v0.6:
-# * Bug fix: dvips font names can contain numbers.
-# 2001/04/21 v0.7:
-# * Bug fix: long dvi file name in ps file.
-# 2001/04/23 v0.8:
-# * Bug fix: post string parsing.
-# 2001/04/26 v0.9:
-# * Check of version number of dvips in PostScript file.
-# 2001/06/30 v1.0:
-# * Problem with DOS line endings fixed.
-# 2005/01/28 v1.1:
-# * Bug fix: encoding files are now included also.
-# * The intermediate DVI files are written directly.
-# * LPPL 1.3
-# 2005/01/29 v1.2:
-# * Merging is now based on type 1 names. This solves
-# the problem, if different bitmap fonts maps to the
-# same type 1 font, eg. (ecrm1000, larm1000) -> SFRM1000.
-# * Suppression of PK generation, if environment variable
-# MKTEXPK is supported.
-# * If output file is "-" (standard output) then messages of
-# pkfix are written to standard error output.
-# 2005/02/25 v1.3:
-# * Bug fix: Detection of "@fedspecial end" improved.
-# * Bug fix: Typo corrected (PRT -> $PRT).
-#
-
-### program identification
-my $title = "$program $version, $date - $copyright\n";
-
-### error strings
-my $Error = "!!! Error:"; # error prefix
-my $Warning = "!!! Warning:"; # warning prefix
-
-### variables
-my $envvar = uc($project);
-my $infile = "";
-my $outfile = "";
-my $texpsfile = "texps.pro";
-my $prefix = "_${project}_$$";
-# my $prefix = "_${project}_";
-my $tempfile = "$prefix";
-my $texfile = "$tempfile.tex";
-my $dvifile = "$tempfile.dvi";
-my $logfile = "$tempfile.log";
-my $psfile = "$tempfile.ps";
-my $missfile = "missfont.log";
-my @cleanlist = ($dvifile, $psfile);
-push(@cleanlist, $missfile) unless -f $missfile;
-
-my $err_redirect = " 2>&1";
-$err_redirect = "" if $^O =~ /dos/i ||
- $^O =~ /os2/i ||
- $^O =~ /mswin32/i ||
- $^O =~ /cygwin/i;
-
-my $x_resolution = 0;
-my $y_resolution = 0;
-my $blocks_found = 0;
-my $fonts_converted = 0;
-my $fonts_merged = 0;
-my $fonts_misses = 0;
-my $PRT = \*STDOUT;
-
-### option variables
-my @bool = ("false", "true");
-$::opt_tex = "tex";
-$::opt_dvips = "dvips";
-$::opt_kpsewhich = "kpsewhich --progname $project";
-$::opt_options = "-Ppdf -G0";
-$::opt_usetex = 0;
-$::opt_help = 0;
-$::opt_quiet = 0;
-$::opt_debug = 0;
-$::opt_verbose = 0;
-$::opt_clean = 1;
-
-my $usage = <<"END_OF_USAGE";
-${title}Syntax: \L$program\E [options] <inputfile.ps> <outputfile.ps>
-Function: This program tries to replace pk fonts in <inputfile.ps>
- by the type 1 versions. The result is written in <outputfile.ps>.
-Options: (defaults:)
- --help print usage
- --(no)quiet suppress messages ($bool[$::opt_quiet])
- --(no)verbose verbose printing ($bool[$::opt_verbose])
- --(no)debug debug informations ($bool[$::opt_debug])
- --(no)clean clear temp files ($bool[$::opt_clean])
- --(no)usetex use TeX for generating the DVI file ($bool[$::opt_usetex])
- --tex texcmd tex command name (plain format) ($::opt_tex)
- --dvips dvipscmd dvips command name ($::opt_dvips)
- --options opt dvips options ($::opt_options)
-END_OF_USAGE
-
-### environment variable PKFIX
-if ($ENV{$envvar}) {
- unshift(@ARGV, split(/\s+/, $ENV{$envvar}));
-}
-
-### process options
-my @OrgArgv = @ARGV;
-use Getopt::Long;
-GetOptions(
- "help!",
- "quiet!",
- "debug!",
- "verbose!",
- "clean!",
- "usetex!",
- "tex=s",
- "dvips=s",
- "options=s"
-) or die $usage;
-!$::opt_help or die $usage;
-@ARGV < 3 or die "$usage$Error Too many files!\n";
-@ARGV == 2 or die "$usage$Error Missing file names!\n";
-
-$::opt_quiet = 0 if $::opt_verbose;
-$::opt_clean = 0 if $::opt_debug;
-
-push(@cleanlist, $texfile, $logfile) if $::opt_usetex;
-
-### get file names
-$infile = $ARGV[0];
-$outfile = $ARGV[1];
-
-### suppress PK generation
-$ENV{'MKTEXPK'} = "0";
-
-$PRT = \*STDERR if $outfile eq "-";
-
-print $PRT $title unless $::opt_quiet;
-
-print $PRT "*** input file: `$infile'\n" if $::opt_verbose;
-print $PRT "*** output file: `$outfile'\n" if $::opt_verbose;
-
-if ($::opt_debug) {
- print $PRT <<"END_DEB";
-*** OSNAME: $^O
-*** PERL_VERSION: $]
-*** ARGV: @OrgArgv
-END_DEB
-}
-
-### get texps.pro
-my $texps_data = 0;
-my $texps_string = get_texps_pro();
-
-### Encoding definitions
-my %encoding_files = ();
-my $encoding_string = "";
-
-### open input and output files
-open(IN, $infile) or die "$Error Cannot open `$infile'!\n";
-open(OUT, ">$outfile") or die "$Error Cannot write `$outfile'!\n";
-
-##################################
-# expected format:
-# ...
-# %%DVIPSParameters:... dpi=([\dx]+)...
-# ...
-# TeXDict begin \d+ \d+ \d+ \d+ \d+ \(\S+\)
-# @start ...
-# ...
-# %DVIPSBitmapFont: (\S+) (\S+) ([\d\.]+) (\d+)
-# /(\S+) ...
-# ...
-# %EndDVIPSBitmapFont
-# ...
-# ... end
-# %%EndProlog
-#
-# or if \special{!...} was used, the lines with TeXDict:
-# TeXdict begin @defspecial
-#
-# ...
-#
-# @fedspecial end TeXDict begin
-# \d+ \d+ \d+ \d+ \d+ \(\S+\) @start
-#
-# or
-# @fedspecial end
-# ...
-#
-# bitmap font:
-# start:
-# %%DVIPSBitmapFont: {dvips font} {font name} {at x pt} {chars}
-# /{dvips font} {chars} {max. char number + 1} df
-# character, variant a:
-# <{hex code}>{char number} D
-# character, variant b:\
-# [<{hex code}>{num1} {num2} {num3} {num4} {num5} {char number} D
-# end:
-# E
-# %%EndDVIPSBitmapFont
-#
-# type 1 font:
-# before TeXDict line:
-# %%BeginFont: CMR10
-# ...
-# %%EndFont
-# after @start:
-# /Fa ... /CMR10 rf
-#
-# Font names: /[F-Z][a-zA-Z0-9]
-#
-# Encoding files before texps.pro:
-# %%BeginProcSet: {file name}.enc 0 0
-# ...
-# %%EndProcSet
-###################################
-
-my $x_comment_resolution = 0;
-my $y_comment_resolution = 0;
-my $start_string = "";
-my $post_string = "";
-my $dvips_resolution = "";
-my $texps_found = 0;
-my @font_list = ();
-my %font_txt = ();
-my %font_count = ();
-my %font_entry = ();
-
-sub init {
- $x_comment_resolution = 0;
- $y_comment_resolution = 0;
- $x_resolution = 0;
- $y_resolution = 0;
- $start_string = "";
- $texps_found = 0;
- @font_list = ();
- %font_txt = ();
- %font_count = ();
- %font_entry = ();
-}
-
-init();
-
-while (<IN>) {
-
- if (/^%%Creator: (dvips\S*) (\S+)\s/) {
- print $PRT "*** %%Creator: $1 $2\n" if $::opt_debug;
- my $foundversion = $2;
- if ($foundversion =~ /(\d+\.\d+)/) {
- $foundversion = $1;
- # 5.62 is ok, 5.58 does not produce font comments
- if ($foundversion <= 5.58) {
- print $PRT "$Warning dvips version $1 does not generate " .
- "the required font comments!\n";
- }
- }
- }
-
- if (/^%%BeginProcSet:\s*(.+)\.enc/) {
- $encoding_files{$1} = "";
- }
-
- if (/^%DVIPSParameters:.*dpi=([\dx]+)/) {
- print OUT;
- my $str = $1;
- $x_comment_resolution = 0;
- $y_comment_resolution = 0;
- if ($str =~ /^(\d+)x(\d+)$/) {
- $x_comment_resolution = $1;
- $y_comment_resolution = $2;
- }
- if ($str =~ /^(\d+)$/) {
- $x_comment_resolution = $1;
- $y_comment_resolution = $1;
- }
- print $PRT "*** %DVIPSParameters: dpi=$str " .
- "(x=$x_comment_resolution, y=$y_comment_resolution)\n"
- if $::opt_debug;
- $x_comment_resolution > 0 && $y_comment_resolution > 0 or
- die "$Error Wrong resolution value " .
- "($x_comment_resolution x $y_comment_resolution)!\n";
- next;
- }
-
- if (/^%%BeginProcSet: texps.pro/) {
- $texps_found = 1;
- print $PRT "*** texps.pro found\n" if $::opt_debug;
- }
-
- if (/^TeXDict begin \@defspecial/) {
- my $saved = $_;
- print $PRT "*** \@defspecial found.\n" if $::opt_debug;
- $start_string = $_;
- while (<IN>) {
- $start_string .= $_;
- if (/^\@fedspecial end/) {
- s/^\@fedspecial end\s*(\S)/$1/;
- last;
- }
- }
- }
- elsif (/^TeXDict begin \d+ \d+ \d+ \d+ \d+/) {
- print $PRT "*** TeXDict begin <5 nums> found.\n" if $::opt_debug;
- $start_string = $_;
- }
- if ($start_string ne "") {
- # look for @start
- unless (/\@start/) {
- while (<IN>) {
- $start_string .= $_;
- last if /\@start/;
- }
- }
-
- # divide post part
- $start_string =~ /^([\s\S]*\@start)\s*([\s\S]*)$/ or
- die "$Error Parse error (\@start)!\n";
- $start_string = "$1\n";
- $post_string = $2;
- $post_string =~ s/\s*$//;
- $post_string .= "\n" unless $post_string eq "";
-
- $start_string =~
- /\d+\s+\d+\s+\d+\s+(\d+)\s+(\d+)\s+\((.*)\)\s+\@start/ or
- die "$Error Parse error (\@start parameters)!\n";
-
- $blocks_found++;
- print $PRT "*** dvi file: $3\n" if $::opt_debug;
-
- # get and check resolution values
- $x_resolution = $1;
- $y_resolution = $2;
- print $PRT "*** resolution: $x_resolution x $y_resolution\n"
- if $::opt_debug;
- $x_comment_resolution > 0 or
- die "$Error Missing comment `%DVIPSParameters'!\n";
- $x_resolution == $x_comment_resolution &&
- $y_resolution == $y_comment_resolution or
- die "$Error Resolution values in comment and PostScript " .
- "does not match!\n";
- # setting dvips resolution option(s)
- if ($x_resolution == $y_resolution) {
- $dvips_resolution = "-D $x_resolution";
- }
- else {
- $dvips_resolution = "-X $x_resolution -Y $y_resolution";
- }
-
- while (<IN>) {
- if (/^%%EndProlog/) {
- print OUT $encoding_string;
- $texps_data > 0 or die "$Error File `texps.pro' not found!\n";
- print OUT $texps_string unless $texps_found;
- foreach (@font_list) {
- my $fontname = $_;
- print $PRT "*** Adding font `$fontname'\n"
- if $::opt_debug;
- my ($dummy1, $dummy2, $err);
- if ($font_count{$fontname} > 1) {
- $fonts_merged++;
- print $PRT "*** Merging font `$fontname' ($font_count{$fontname}).\n"
- unless $::opt_quiet;
- ($dummy1, $font_txt{$fontname}, $dummy2, $err) =
- get_font($font_entry{$fontname});
- $err == 0 or die "$Error Cannot merge font `$fontname'!\n";
- }
- print OUT $font_txt{$fontname};
- }
- print OUT $start_string,
- $post_string,
- $_;
- print $PRT "*** %%EndProlog\n" if $::opt_debug;
- init();
- last;
- }
-
- if (/^%DVIPSBitmapFont: (\S+) (\S+) ([\d.]+) (\d+)/) {
- my $bitmap_string = $_;
- my $dvips_fontname = $1;
- my $fontname = $2;
- my $entry = "\\Font\{$1\}\{$2\}\{$3\}\{";
- print $PRT "*** Font $1: $2 at $3pt, $4 chars\n" if $::opt_verbose;
- my $line = "";
- my $num = -1;
- my $chars = $4;
- my $count = 0;
- while (<IN>) {
- $bitmap_string .= $_;
- last if /^%EndDVIPSBitmapFont/;
- s/\r$//; # remove \r of possible DOS line ending
- chomp;
- $line .= " " . $_;
- }
- $line =~ s/<[0-9A-F ]*>/ /g;
-
- print $PRT "*** <Font> $line\n" if $::opt_debug;
-
- while ($line =~ /\s(\d+)\s+D(.*)/) {
- $num = $1;
- $count++;
- $entry .= "$num,";
- $line = $2;
- while ($line =~ /^[\s\d\[]*I(.*)/) {
- $num++;
- $count++;
- $entry .= "$num,";
- $line = $1;
- }
- }
- $chars == $count or
- die "$Error Parse error, $count chars of $chars found " .
- "($fontname)!\n";
-
- $entry =~ s/,$//;
- $entry .= "\}";
-
- print $PRT "*** Font conversion of `$fontname' started.\n"
- if $::opt_verbose;
- my ($newfontname, $font_part, $start_part, $err) = get_font($entry);
- if ($err == 0) {
- print $PRT "*** Font conversion: `$fontname' -> `$newfontname'.\n"
- unless $::opt_quiet;
- if (defined($font_count{$newfontname})) {
- $font_count{$newfontname}++;
- $font_entry{$newfontname} .= "\n$entry";
- }
- else {
- push @font_list, $newfontname;
- $font_txt{$newfontname} = $font_part;
- $font_count{$newfontname} = 1;
- $font_entry{$newfontname} = $entry;
- }
- $start_part =~ s/\/Fa/\/$dvips_fontname/;
- $start_string .= $start_part;
- $fonts_converted++;
- }
- else {
- print $PRT "!!! Failed font conversion of `$fontname'!\n";
- $start_string .= $bitmap_string;
- $fonts_misses++;
- }
-
- next;
- }
-
- $post_string .= $_;
- }
- next;
- }
-
- print OUT;
-}
-
-close(IN);
-close(OUT);
-
-if ($::opt_clean) {
- print $PRT "*** clear temp files\n" if $::opt_verbose;
- foreach (@cleanlist) {
- unlink;
- }
-}
-
-if (!$::opt_quiet) {
- if ($blocks_found > 1) {
- print $PRT "==> $blocks_found blocks.\n";
- }
- if ($fonts_misses) {
- print $PRT "==> $fonts_misses font conversion",
- (($fonts_misses > 1) ? "s" : ""),
- " failed.\n";
- }
- if ($fonts_converted) {
- print $PRT "==> ",
- (($fonts_converted > 0) ? $fonts_converted : "No"),
- " converted font",
- (($fonts_converted > 1) ? "s" : ""),
- ".\n";
- if ($fonts_merged) {
- print $PRT "==> $fonts_merged merged font",
- (($fonts_merged > 1) ? "s" : ""),
- ".\n";
- }
- }
- else {
- print $PRT "==> no fonts converted\n";
- }
-}
-
-
-# get type 1 font
-# param: $entry: font entry as TeX string
-# return: $name: type 1 font name
-# $font: font file as string
-# $start: font definition after @start
-# $err: error indication
-sub get_font {
- my $entry = shift;
- my $name = "";
- my $font = "";
- my $start = "";
- my $err = 0;
- my @err = ("", "", "", 1);
- local *OUT;
- local *IN;
-
- if ($::opt_usetex) {
- ### write temp tex file
- open(OUT, ">$texfile") or die "$Error Cannot write `$texfile'!\n";
- print OUT <<'TEX_HEADER';
-\nonstopmode
-\nopagenumbers
-\def\Font#1#2#3#4{%
- \expandafter\font\csname font@#1\endcsname=#2 at #3pt\relax
- \csname font@#1\endcsname
- \hbox to 0pt{%
- \ScanChar#4,\NIL
- \hss
- }%
-}
-\def\ScanChar#1,#2\NIL{%
- \char#1\relax
- \ifx\\#2\\%
- \else
- \ReturnAfterFi{%
- \ScanChar#2\NIL
- }%
- \fi
-}
-\long\def\ReturnAfterFi#1\fi{\fi#1}
-\noindent
-TEX_HEADER
-
- print OUT "$entry\n\\bye\n";
- close(OUT);
-
- ### run tex
- {
- print $PRT "*** run TeX\n" if $::opt_verbose;
-
- my $cmd = "$::opt_tex $tempfile";
- print $PRT ">>> $cmd\n" if $::opt_verbose;
- my @capture = `$cmd`;
- if (!defined(@capture)) {
- print $PRT "$Warning Cannot execute TeX!\n";
- return @err;
- }
- if ($::opt_verbose) {
- print $PRT @capture;
- }
- else {
- foreach (@capture) {
- print $PRT if /^!\s/;
- }
- }
- if ($?) {
- my $exitvalue = $?;
- if ($exitvalue > 255) {
- $exitvalue >>= 8;
- print $PRT "$Warning Closing TeX (exit status: $exitvalue)!\n";
- return @err;
- }
- print $PRT "$Warning Closing TeX ($exitvalue)!\n";
- return @err;
- }
- }
- }
- else {
- # write dvi directly
-
- # DVI format description: dvitype.web
- my $DVI_pre = 247;
- my $DVI_id_byte = 2;
- my $DVI_num = 25400000;
- my $DVI_den = 473628672; # 7227 * 2^16
- my $DVI_mag = 1000;
- my @t = localtime(time);
- my $DVI_comment = "$program $version output "
- . sprintf("%04d/%02d/%02d %02d:%02d:%02d",
- ($t[5] + 1900), ($t[4] + 1), $t[3], $t[2], $t[1], $t[0]);
- my $DVI_comment_len = length($DVI_comment);
- my $DVI_bop = 139;
- my $DVI_eop = 140;
- my $DVI_fontdef1 = 243;
- my $DVI_fontdef2 = 244;
- my $DVI_fontdef4 = 246;
- my $DVI_design_size = 10; # an arbitrary value
- # A wrong value will trigger a dvips warning
- # (it can be seen in verbose mode):
- # dvips: Design size mismatch in [...].tfm
- # But other consequences could not be noticed.
- # Thus a TFM lookup will be saved.
- my $DVI_checksum = 0; # because of unknown checksum
- my $DVI_fnt_num_0 = 171;
- my $DVI_fnt1 = 235;
- my $DVI_fnt2 = 236;
- my $DVI_fnt4 = 238;
- my $DVI_set1 = 128;
- my $DVI_push = 141;
- my $DVI_pop = 142;
- my $DVI_post = 248;
- my $DVI_u = 67108864; # 1024 pt, an arbitrary value
- my $DVI_l = 67108864; # 1024 pt, an arbitrary value
- my $DVI_post_post = 249;
- my $DVI_trailing = 223;
-
- open(OUT, ">$dvifile") or die "$Error Cannot write `$dvifile'!\n";
- binmode(OUT);
-
- # Preamble (pre)
- print OUT pack("C2N3Ca$DVI_comment_len",
- $DVI_pre, $DVI_id_byte, $DVI_num, $DVI_den, $DVI_mag,
- $DVI_comment_len, $DVI_comment);
- # Begin of page (bop)
- my $pos_bop = tell(OUT);
- print OUT pack("CN1x[N9]l", $DVI_bop, 1, -1);
-
- my $font_defs = "";
- my $font_num = 0;
- foreach(split("\n", $entry)) {
- my $font_def = "";
- /\\Font\{[^}]*\}\{([^}]*)\}\{([^}]*)\}\{([^}]*)\}/ or
- die "!!! Error: Internal parsing error!\n";
- my $font_name = $1;
- my $font_name_len = length($font_name);
- my $font_size = $2;
- my $font_chars = $3;
-
- # define font
- if ($font_num < 256) {
- $font_def = pack("CC", $DVI_fontdef1, $font_num);
- }
- # The other cases are very unlikely, especially there are
- # more than one font in the merging case only.
- elsif ($font_num < 65536) {
- $font_def = pack("Cn", $DVI_fontdef2, $font_num);
- }
- else {
- $font_def = pack("CN", $DVI_fontdef4, $font_num);
- }
- $font_def .= pack("x[N]N2xCa$font_name_len",
- ($font_size * 65536), $DVI_design_size,
- $font_name_len, $font_name);
- print OUT $font_def;
- $font_defs .= $font_def;
-
- # use font
- my $fnt_num;
- if ($font_num < 64) {
- $fnt_num = pack("C", $DVI_fnt_num_0 + $font_num);
- }
- # Other cases are unlikely, see above.
- elsif ($font_num < 256) {
- $fnt_num = pack("CC", $DVI_fnt1, $font_num);
- }
- elsif ($font_num < 65536) {
- $fnt_num = pack("Cn", $DVI_fnt2, $font_num);
- }
- else {
- $fnt_num = pack("CN", $DVI_fnt4, $font_num);
- }
- print OUT $fnt_num;
-
- # print characters
- print OUT pack("C", $DVI_push);
- foreach (split(",", $font_chars)) {
- if ($_ < 128) {
- print OUT pack("C", $_);
- }
- else {
- print OUT pack("CC", $DVI_set1, $_);
- }
- }
- print OUT pack("C", $DVI_pop);
-
- $font_num++;
- }
-
- print OUT pack("C", $DVI_eop);
-
- # Begin of postamble (post)
- my $pos_post = tell(OUT);
- print OUT pack("CN6n2",
- $DVI_post, $pos_bop, $DVI_num, $DVI_den, $DVI_mag,
- $DVI_l, $DVI_u, 1, 1);
- print OUT $font_defs;
- # End of postamble (post_post)
- print OUT pack("CNC5",
- $DVI_post_post, $pos_post, $DVI_id_byte,
- $DVI_trailing, $DVI_trailing, $DVI_trailing, $DVI_trailing);
- my $t_num = (4 - (tell(OUT) % 4)) % 4;
- print OUT pack("C", $DVI_trailing) x $t_num;
- close(OUT);
- }
-
- ### run dvips
- {
- print $PRT "*** run dvips\n" if $::opt_verbose;
-
- my $cmd = "$::opt_dvips $::opt_options $dvips_resolution $tempfile";
- print $PRT ">>> $cmd\n" if $::opt_verbose;
- # dvips writes on stderr :-(
- my @capture = `$cmd$err_redirect`;
- if ($::opt_verbose) {
- print $PRT @capture;
- }
- if ($?) {
- my $exitvalue = $?;
- if ($exitvalue > 255) {
- $exitvalue >>= 8;
- print $PRT "$Warning Closing dvips (exit status: $exitvalue)!\n";
- return @err;
- }
- print $PRT "$Warning Closing dvips ($exitvalue)!\n";
- return @err;
- }
- }
-
- ### get font and start part
- open(IN, $psfile) or die "$Error Cannot open `$psfile'!\n";
-
- while (<IN>) {
- ### get possible encoding files
- if (/^%%BeginProcSet:\s*(.+)\.enc/) {
- my $encoding_file = $1;
- print $PRT "*** encoding file `$encoding_file.enc' found.\n"
- if $::opt_debug;
- next if defined($encoding_files{$encoding_file});
- $encoding_files{$encoding_file} = "";
- $encoding_string .= $_;
- while (<IN>) {
- $encoding_string .= $_;
- last if /^%%EndProcSet/;
- }
- next;
- }
-
- ### get texps.pro if get_texps_pro() has failed
- if ($texps_data == 0 && /^%%BeginProcSet: texps.pro/) {
- $texps_string = $_;
- while (<IN>) {
- $texps_string .= $_;
- last if /^%%EndProcSet/;
- }
- $texps_data = 1;
- print $PRT "*** texps.pro extracted.\n" if $::opt_debug;
- next;
- }
-
- if (/^%%BeginFont:\s*(\S+)/) {
- $name = $1;
- $font .= $_;
- while (<IN>) {
- $font .= $_;
- last if /^%%EndFont/;
- }
- next;
- }
- if (/^\@start/) {
- s/^\@start\s*//;
- $start .= $_;
- while (<IN>) {
- last if /^%%EndProlog/;
- $start .= $_;
- }
- if (($start =~ s/\s*end\s*$/\n/) != 1) {
- $err = 1;
- print $PRT "$Warning Parse error, `end' not found!\n";
- }
- print $PRT "*** start: $start" if $::opt_debug;
- last;
- }
- }
- close(IN);
-
- if ($font eq "") {
- print $PRT "$Warning `%%BeginFont' not found!\n";
- return @err;
- }
- return ($name, $font, $start, $err);
-}
-
-
-# get_texps_pro
-# return: string with content of texps.pro
-sub get_texps_pro {
- $texps_data = 0;
- # get file name
- my $backupWarn = $^W;
- $^W = 0;
- my $file = `$::opt_kpsewhich $texpsfile`;
- $^W = $backupWarn;
- if (!defined($file) or $file eq "") {
- print $PRT "$Warning: Cannot find `$texpsfile' with kpsewhich!\n"
- if $::opt_debug;
- return "";
- }
- chomp $file;
- print $PRT "*** texps.pro: $file\n" if $::opt_debug;
-
- # read file
- local *IN;
- open(IN, $file) or die "$Error: Cannot open `$file'!\n";
- my @lines = <IN>;
- @lines > 0 or die "$Error: Empty file `$file'!\n";
- chomp $lines[@lines-1];
- my $str = "%%BeginProcSet: texps.pro\n";
- $"="";
- $str .= "@lines\n";
- $"=" ";
- $str .= "%%EndProcSet\n";
- $texps_data = 1;
- return $str;
-}
-
-__END__
+../../texmf/scripts/pkfix/pkfix.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/pktogf b/Master/bin/mips-irix/pktogf
index 87ff4fa36b3..23b5263c03a 100755
--- a/Master/bin/mips-irix/pktogf
+++ b/Master/bin/mips-irix/pktogf
Binary files differ
diff --git a/Master/bin/mips-irix/pktype b/Master/bin/mips-irix/pktype
index 48c445dcb19..f95e867c49e 100755
--- a/Master/bin/mips-irix/pktype
+++ b/Master/bin/mips-irix/pktype
Binary files differ
diff --git a/Master/bin/mips-irix/pltotf b/Master/bin/mips-irix/pltotf
index d2cf9b1d1ce..b0b3b35733a 100755
--- a/Master/bin/mips-irix/pltotf
+++ b/Master/bin/mips-irix/pltotf
Binary files differ
diff --git a/Master/bin/mips-irix/pooltype b/Master/bin/mips-irix/pooltype
index 0b6c21af952..b91f7acb08d 100755
--- a/Master/bin/mips-irix/pooltype
+++ b/Master/bin/mips-irix/pooltype
Binary files differ
diff --git a/Master/bin/mips-irix/ps2eps b/Master/bin/mips-irix/ps2eps
index aeb0e9a8e43..81d5f53cfde 100755..120000
--- a/Master/bin/mips-irix/ps2eps
+++ b/Master/bin/mips-irix/ps2eps
@@ -1,929 +1 @@
-#!/usr/bin/env perl
-# The expression in the previous line replaces the unix specific line
-# {#!/usr/bin/perl}.
-# ps2eps - convert PostScript to EPS (Encapsulated PostScript) files
-# -------------------------------------------------------------------
-# $Id: ps2eps,v 1.61 2006/12/28 16:34:06 bless Exp $
-# -------------------------------------------------------
-# (C)opyright 1999-2006 Roland Bless
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# Author: Roland Bless
-# Send bug reports to roland <at> bless.de
-# -------------------------------------------------------------------
-# Additional filtering is performed when Windows generated PostScript files
-# are processed. Some instructions will otherwise lead to bad output
-# if EPS-file gets embedded into other PostScript files.
-#
-# Requirements:
-# + perl
-# + gs (ghostscript supporting pbm output)
-# + bbox (a little C program [ANSI-C - should work on every platform]
-# for calculation of the actual BoundingBox)
-
-use POSIX;
-
-#use warnings;
-
-#use Getopt package
-use Getopt::Long;
-Getopt::Long::Configure("no_ignore_case");
-
-$prgname= "ps2eps";
-
-if (! -d "/usr/bin")
-{ # we assume that we are running under native windows
- $ghostscriptname = "gswin32c";
- $NULLDEV = "nul";
-}
-else
-{ # Unix or cygwin
- $ghostscriptname = "gs";
- $NULLDEV = "/dev/null 2>&1";
-}
-
-$bboxver=`bbox >$NULLDEV -V`;
-$bboxname= ($?== -1) ? "" : "bbox";
-$version= '$Id: ps2eps,v 1.61 2006/12/28 16:34:06 bless Exp $'; #'
-$insertPScode= 1; # Insert surrounding Postscript code
-$infhandle = STDIN; # Standard input is the default input file
-$outfhandle = STDOUT; # Standard output is default output if STDIN is input
-$infname= '-';
-$outfname= '-';
-$forceoverwrite=0; # do not overwrite existing files
-$ignoreBB= 0; # ignore existing Bounding Box comment
-$removeDSC= 1; # remove Adobe document structure comments
-$removeADO= 1; # remove Adobe printer Driver console Output [Page: ...]
-$ignoreEOFDSC= 0; # ignore %%EOF DSC hint
-$removePreview= 0; # remove preview
-$quiet= 0; # write progress to stdout
-$resolution= 144; # resolution for bounding box calculation is 2x72 dpi
-$trytofixps= 1; # try to fix postscript code
-$forcefixps= 0; # fix postscript code unconditionally if eq 1
-$filterorientation= 1;# filter Orientation line
-$looseBB=''; # default: tight bounding box
-$clip=0; # do not clip
-$warnings=0; # do not print warnings concerning postscript sanity
-$debuggs=0; # no debugging of ghostscript call, turn this on if you want to see the gs call
-$inch=2.54; # one inch is 2.54cm
-$fullcolors= 1; # use ppm format (24-bit full color)
-$trailerseen= 0; # Trailer comment seen?
-$PSversion="2.0"; # default Postscript Version
-$PSDSCversion="2.0"; # default Postscript DSC Version
-$translate_x= 0; # translate by x postscript points
-$translate_y= 0; # translate by y postscript points
-
-$defaultext = '(ps|prn)'; # default extension
-$defaultoutext = '.eps'; # default output extension
-$envname_size = 'PS2EPS_SIZE';
-$envname_gsbbox = 'PS2EPS_GSBBOX';
-
-$gpar="";
-$known_papersizes="11x17|ledger|legal|letter(small)?|arch[A-E]|a([0-9]|10)|isob[0-6]|b[0-5]|c[0-6]|jisb[0-6]|fls(a|e)|halfletter";
-$papersize_help="11x17,ledger,legal,letter,lettersmall,archA,archB,archC,archD,archE\
-a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,isob0,isob1,isob2,isob3,isob4,isob5,isob6,\
-b0,b1,b2,b3,b4,b5,c0,c1,c2,c3,c4,c5,c6,\
-jisb0,jisb1,jisb2,jisb3,jisb4,jisb5,jisb6,flsa,flse,halfletter\n";
-$trigger= 0;
-$notsane= 0;
-$dummy="";
-
-@ver= split(/ /,$version);
-
-# filename for temporary files
-if ($^O =~ /MSWin32/i or $^O =~ /cygwin/i)
-{
- # it is less trouble to use the current directory if working on
- # cygwin and nevertheless using gswin32c.
- $tmpfname= "$prgname.$$";
- $win=1;
-}
-elsif (defined($ENV{'TMP'}))
-{
- $tmpdir= $ENV{'TMP'};
- $filesep= ($tmpdir =~ /^?\:\\/) ? '\\' : '/';
- if ($tmpdir =~ /$filesep$/)
- { $tmpfname= $tmpdir . "$prgname.$$"; }
- else
- { $tmpfname= $tmpdir . "$filesep$prgname.$$"; }
- $win=1;
-}
-else #assume we're on a UNIXBOX
-{
- $tmpfname= "/tmp/" . "$prgname.$$";
- $win=0;
-}
-
-
-$licensetxt= "\
- This program is free software; you can redistribute it and/or modify\
- it under the terms of the GNU General Public License as published by\
- the Free Software Foundation; either version 2 of the License, or\
- (at your option) any later version.\
-\
- This program is distributed in the hope that it will be useful,\
- but WITHOUT ANY WARRANTY; without even the implied warranty of\
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\
- GNU General Public License for more details.\
-\
- You should have received a copy of the GNU General Public License\
- along with this program; if not, write to the Free Software\
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n";
-
-@prgidtxt= ( "$prgname - convert PostScript to EPS (Encapsulated PostScript) files\n",
- "(C)opyright 1998-2006 Roland Bless\n\n" );
-
-@helptxt= ("Version: $ver[2]\n",
- "Operation:\n",
- " Without any argument, $prgname reads from standard input\n",
- " and writes to standard output.\n",
- " If filenames are given as arguments they are processed\n",
- " one by one and output files are written to filenames\n",
- " with extension '$defaultoutext'. If input filenames have the extension\n",
- " '.ps' or '.prn', this extension is replaced with '$defaultoutext'.\n",
- " In all other cases '$defaultoutext' is appended to the input filename.\n",
- " Please note that PostScript files for input should contain\n",
- " only one single page.\n\n",
- " If BoundingBox in output seems to be wrong, please try options --size or --ignoreBB.\n\n" );
-
-@usagetxt= ("Syntax:\n",
- " $prgname [-f] [-q] [-N] [-O] [-n] [-P] [-c] [-C] [-m] [-B] [-E] [-s <pagedim>] [-R +|-|^] [-t <x,y>] [-l] [-g] [-d] [-H] [-h|--help] [-g] [-W] [-L] [-V|--version] [--] [psfile1] [psfile2] [...]\n",
- "Options:\n",
- " -f, --force force overwriting existing files\n",
- " -q, --quiet quiet operation (no output while processing files)\n",
- " -N, --noinsert do not insert any postscript code\n",
- " -O, --preserveorientation do not filter Orientation: header comment\n",
- " -n, --nofix do not try to fix postscript code\n",
- " -P, --removepreview remove preview image (smaller file, but no preview)\n",
- " -F, --fixps fix postscript code unconditionally\n",
- " -c, --comments preserve document structure comments\n",
- " -C, --clip insert postscript code for clipping\n",
- " -m, --mono use black/white bitmap as base for calculation\n",
- " -s, --size=<pagedim> page size (a0-a10,letter,...) or in format XxY[cm|in] (default:cm), where X and Y are numbers\n",
- " use --size=list to list pre-defined page sizes\n",
- " -R, --rotate=<direction> rotate resulting EPS. <direction>: +=+90 (clockw.),-=-90 (counter-clockw.) ^=180 degrees\n",
- " -t, --translate specify x,y offset (may be negative) in postscript points (1/72 dpi)\n",
- " -r, --resolution specify dpi resolution to render with ghostscript (default 144)",
- " -l, --loose expand the original bounding box by one point in each direction\n",
- " -B, --ignoreBB do not use existing bounding box as page size for rendering\n",
- " -E, --ignoreEOF do not use %%EOF as hint for end of file\n",
- " -g, --gsbbox use internal bbox device of ghostscript\n",
- " -H, --no-hires do not use a HiResBoundingBox\n",
- " -h, --help help information\n",
- " -L, --license show licensing information\n",
- " -V, --version show version information\n",
- " -d, --debuggs show ghostscript call\n",
- " -W, --warnings show warnings about sanity of generated eps file\n",
- " -- all following arguments are treated as files\n",
- " (allows filenames starting with -)\n",
- "\n",
- "Arguments:\n",
- " One or more names of PostScript files for input\n");
-
-## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-## -- argument checking --
-## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-#environment variable for papersize
-if (defined($ENV{"$envname_size"}))
-{
- $opt_s= $ENV{"$envname_size"};
-}
-else
-{
- $opt_s = ''; # for s-option
-}
-
-if (defined($ENV{"$envname_gsbbox"}))
-{
- $bboxname="";
-}
-
-$opt_t = ''; # for t-option
-$opt_R = ''; # for R-option
-$opt_r = ''; # for r-option
-$stopnow = 0;
-die "Wrong option(s), please check usage with $prgname --help\n" unless
-GetOptions('f|force' => \$forceoverwrite,
- 'q|quiet' => \$quiet,
- 'm|mono' => sub { $fullcolors = 0 },
- 'n|nofix' => sub { $trytofixps = 0 },
- 'F|fixps' => \$forcefixps,
- 'N|noinsert' => sub { $insertPScode = 0 },
- 'O|preserveorientation' => sub { $filterorientation= 0 },
- 'P|removepreview' => \$removePreview,
- 'c|comments' => sub { $removeDSC = 0 },
- 'C|clip' => \$clip,
- 'l|loose' => sub { $looseBB = '-l' },
- 'B|ignoreBB' => \$ignoreBB,
- 'E|ignoreEOF'=> \$ignoreEOFDSC,
- 's|size=s' => \$opt_s,
- 't|translate=s' => \$opt_t,
- 'r|resolution=s' => \$opt_r,
- 'R|rotate=s' => \$opt_R,
- 'g|gsbbox' => sub { $bboxname=""; },
- 'H|nohires' => \$nohires,
- 'h|help' => sub { $stopnow = 1; print @prgidtxt,@helptxt,@usagetxt,"\nAuthor: Roland Bless (roland\@bless.de)\n\n"; },
- 'L|license' => sub { $stopnow = 1; print @prgidtxt,$licensetxt,"\nAuthor: Roland Bless (roland\@bless.de)\n\n"; },
- 'd|debuggs' => \$debuggs,
- 'W|warnings' => \$warnings,
- 'V|version' => sub { $stopnow = 1; print @prgidtxt,"Version: $ver[2]\n"; });exit if ($stopnow);
-
-## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-## -- wildcard processing --
-## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-## internal wildcard processing for current directory,
-## only used for non UNIX-based OSs (which may lack shell wildcard expansion)
-@filenames = ();
-foreach $object (@ARGV) {
- if ($win && $object =~ m/\*/o) # asterisk is present in filename
- {
- $wildcard = $object;
- $wildcard =~ s/\./\\\./g; # replace . in pattern with \.
- $wildcard =~ s/\*/\(\.\*\)/g; # replace * in pattern with (.*)
- opendir(DIR,'.') || die 'Unable to open current directory, stopped'; # open current directory
- print STDERR $wildcard;
- @fid = grep { /$wildcard(\.$defaultext)?/i } readdir(DIR);
- foreach (@fid) { push @filenames, $_; }
- closedir DIR;
- }
- else { push @filenames, $object; }
-} # end foreach
-$filenames[0]= '-' if (scalar(@filenames) == 0); # no file arguments, use STDIN as input
-
-print STDERR "Input files: @filenames\n" if (!$quiet);
-
-if ($opt_r ne '')
-{
- $resolution=$opt_r;
-}
-
-# papersize stuff
-if ($opt_s ne '')
-{
- # if explicit size is given, ignore existing BoundingBox always
- $ignoreBB = 1;
- $pagedimension = $opt_s;
- if ($opt_s eq "list")
- {
- print STDERR "Available paper sizes: $papersize_help";
- exit 0;
- }
-
- #explicit format XxY[cm|in]
- if ($pagedimension =~ /(\d*\.?\d+)x(\d*\.?\d+)/)
- {
- ($x_dim, $dummy, $y_dim, $unit)= split(/(x|cm|in)/,$pagedimension);
- if ( $x_dim !~ /^\d*\.?\d+$/ )
- { die "$x_dim in $arg is not a valid number, stopped"; }
- if ( $y_dim !~ /^\d*\.?\d+$/ )
- { die "$y_dim in $arg is not a valid number, stopped"; }
-
- #print STDERR "xdim: $x_dim ydim: $y_dim unit:$unit\n" ;
- if (!defined($unit) )
- {
- $unit='cm';
- $opt_s=$opt_s . $unit;
- }
- if ( $unit ne 'in' ) # assume centimeters
- { # calculate dimension in pixels (remember: resolution is in dpi)
- $xpixels= int(($x_dim * $resolution) / $inch)+1;
- $ypixels= int(($y_dim * $resolution) / $inch)+1;
- $gpar= "-g${xpixels}x${ypixels}";
- }
- else
- {
- $xpixels= int($x_dim * $resolution)+1;
- $ypixels= int($y_dim * $resolution)+1;
- $gpar= "-g${xpixels}x${ypixels}";
- }
- } #endif XxY in opt_s
- else
- {
- if ($opt_s =~ /$known_papersizes/)
- {
- $gpar="-sPAPERSIZE=$opt_s";
- }
- else
- {
- print STDERR "Error: Unknown paper size: $opt_s\n Acceptable papersizes are:$papersize_help\n";
- exit 1;
- }
- }
-}
-
-#translate option
-if ($opt_t ne '')
-{
- ($translate_x,$translate_y)= split(/\,/,$opt_t);
-}
-
-#rotate
-$rotright='-90 rotate';
-$rotleft='90 rotate';
-$rotupsidedown='180 rotate';
-$rotate='';
-if ($opt_R ne '')
-{
- if ($opt_R eq '+') { $rotate=$rotright; }
- elsif ($opt_R eq '-') { $rotate=$rotleft; }
- elsif ($opt_R eq '^') { $rotate=$rotupsidedown; }
- else { die "Wrong parameter for option -R: Valid are only +,-,^\n"; };
-}
-
-$device= $fullcolors ? "ppmraw" : "pbmraw";
-
-## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-## -- iterate over different input files --
-## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-PROCESSFILE:
-while ($infname= (shift @filenames))
-{
- # reset filter definitions for each file
- undef $linefilter;
- undef $rangefilter_begin;
- undef $rangefilter_end;
- $fixthisps= $trytofixps;
- $fixmsgprinted= 0;
-
- if (!$quiet) { print STDERR "Processing: $infname\n"; }
- unless (open($infhandle,"<$infname"))
- { # skip over this file
- print STDERR "$prgname: Can't open $infname: $!\n";
- next PROCESSFILE;
- }
-
- # buffer input from stdin into temporary file, because it has to be read twice
- # one time for ghostscript processing, the second time for generating output
- if ($infname eq '-') # input is stdin
- {
- $tmpfhandle='';
- open($tmpfhandle,">$tmpfname") or
- die "Cannot open temporary file $tmpfname for writing: $!\n";
- }
- else # input is not stdin
- {
- undef $tmpfhandle;
- #if filename ends with $defaultext usually .ps or .prn, replace the extension with $defaultoutext
- if ($infname =~ /\.$defaultext$/i)
- {
- $outfname= $infname; $outfname =~ s/\.$defaultext$/$defaultoutext/i;
- }
- else # otherwise simply append the extension $defaultoutext
- {
- $outfname= $infname . "$defaultoutext";
- }
- if (!$forceoverwrite and -s "$outfname")
- {
- die "$prgname: Sorry, file named $outfname already exists,",
- " will not overwrite it.\n",
- " You will have to use the -f option, delete it or rename it",
- " before running $prgname again.\n";
- }
- else
- {
- open($outfhandle,">$outfname") or die "Can't open file $outfname for writing: $!\n";
- }
- } #end else input is not stdin
-
- ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- ## -- process input file --
- ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- $linefilter= '^$'; #'# filter empty lines by default
- while (<$infhandle>)
- {
- # get postscript and DSC version
- if (/%!PS-Adobe-(\S+).*EPSF-(\S+)/)
- {
- $PSversion=$1;
- $PSDSCversion=$2;
- if (! ($PSversion =~ /\d+\.\d+/))
- {
- $PSDSCversion="2.0";
- }
- if (! ($PSDSCversion =~ /\d+\.\d+/))
- {
- $PSDSCversion="2.0";
- }
- }
-
- # check for existing BoundingBox parameters
- if ( /^%%\s*BoundingBox:\s*(.*)/ && !defined($eBBllx) )
- {
- $BBarg= $1;
- # accept even negative and fractional BBs
- if ( $BBarg =~ /(\-?\d+\.?\d*\s+){3,}\d+/ ) # ignore %% BoundingBox: (atend) comments
- {
- ($eBBllx,$eBBlly,$eBBurx,$eBBury,$dummy)= split /\s/,$BBarg;
- #print STDERR "Existing BB: $eBBllx,$eBBlly,$eBBurx,$eBBury\n";
- if (int($eBBllx) < 0) { $translate_x= - int($eBBllx-0.5); }
- if (int($eBBlly) < 0) { $translate_y= - int($eBBlly-0.5); }
-
- $xpixels= int((($eBBurx-$eBBllx) * $resolution)/72)+1;
- $ypixels= int((($eBBury-$eBBlly) * $resolution)/72)+1;
- if (!$ignoreBB)
- {
- $gpar= "-g${xpixels}x${ypixels}";
- # check for meaningful values
- if (($xpixels <= 1) || ($ypixels <= 1))
- {
- $gpar=""; undef $eBBllx; undef $eBBlly;
- }
- else
- {
- if (!$quiet)
- {
- print STDERR "Rendering with existing $_";
- if (int($eBBllx) < 0 || int($eBBlly) < 0)
- {
- print STDERR "WARNING: existing Bounding Box shows negative values - shifting\n";
- }
- }
- }
- } #endif !$ignoreBB
- } #endif $BBarg =~
- }
-
-
- if ($fixthisps) # try to fix bad postscript code
- {
- # check for Windows 3.x output
- if ( /^Win.*Dict/ )
- {
- if (!$quiet && !$fixmsgprinted)
- { print STDERR "Windows 3.5 generated Postscript file detected, fixing\n"; }
- $linefilter= '^(EJ|RS)';
- $rangefilter_begin= '^statusdict';
- $rangefilter_end= 'cvx\ settransfer$'; #'
- $fixmsgprinted= 1; # stop printing message
- }
- else
- {
- if ( /^%%Creator:\s*Wind.U\s*Xprinter/ )
- {
- if (!$quiet && !$fixmsgprinted)
- { print STDERR "Star/OpenOffice generated Postscript file detected, fixing\n"; }
- $linefilter= '^rs';
- $fixmsgprinted= 1; # stop printing message
- }
- else
- {
- if ( $forcefixps ||
- /^\/NTPS/ ||
- /Creator:\s*(AdobePS|Pscript|.*Windows)/i ) #check for NT generated output
- {
- if (!$quiet && !$fixmsgprinted)
- {
- if ($forcefixps)
- {
- print STDERR "Postscript filtering requested, fixing\n";
- }
- else
- {
- print STDERR "Windows generated Postscript file detected, fixing\n";
- }
- }
- $rangefilter_begin= '^((\[\{)|(featurebegin\{))$'; #'
- $rangefilter_end= '^(\} stopped cleartomark|\}featurecleanup)';
- $exclude_rangefilter_begin= '^(?i)%%BeginNonPPDFeature'; #'
- $exclude_rangefilter_end= '^(?i)%%EndNonPPDFeature';
- #$triggered_rangefilter_begin= ''; #'
- #$triggered_rangefilter_end= ''; #'
- $fixsearchpat='(^|\s)(initmatrix|initclip|initgraphics)(\s|$)';
- $fixreplacepat=' ';
- $fixmsgprinted= 1; # stop printing message
- } # end if NTPS
- } #end else
- }
- } #end if trytofixps
-
- if (defined($tmpfhandle))
- {
- print $tmpfhandle $_ or die "$prgname: Failure during writing to temporary file $tmpfname";
- }
-
- if (/^%%EOF\s*$/)
- {
- $totalEOFDSC++
- }
- } #end while <$infhandle>
-
- if (defined($tmpfhandle))
- {
- close($tmpfhandle);
- }
- else
- {
- $tmpfhandle= $infhandle;
- $tmpfname= $infname;
- }
-
- ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- ## -- calculate the bounding box --
- ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- if ($translate_x!=0 || $translate_y!=0)
- {
- $translation="$translate_x $translate_y translate";
- $translatecmd="-c $translation";
- }
- else
- {
- $translation="";
- $translatecmd="";
- }
-
- if (!$quiet)
- {
- print STDERR "Calculating Bounding Box...";
- if ($opt_s)
- {
- print STDERR "using page size $opt_s...";
- }
- }
-
- $rotatecmd='';
- if ($rotate ne '')
- {
- $rotatecmd="-c \"$rotate\""
- }
- if ($bboxname ne '')
- {
- $cmdline="$ghostscriptname -dSAFER -dNOPAUSE -q $gpar -r$resolution -sDEVICE=$device -sOutputFile=- $translatecmd -f $tmpfname -c showpage -c quit | $bboxname -r $resolution";
- }
- else
- {
- if (!$quiet) {
- print STDERR "...using bbox device of $ghostscriptname...";
- }
- $cmdline = "$ghostscriptname -dSAFER -dBATCH -dNOPAUSE -q $gpar -r$resolution -sDEVICE=bbox -sOutputFile=- -c \"/setpagedevice {pop} def\" $translatecmd -f $tmpfname -c quit 2>&1";
- }
-
- if ($debuggs) { print STDERR "\nCalling: $cmdline\n"; }
-
- # actual ghostscript call
- $boundingbox=`$cmdline`;
- if ($debuggs) { print STDERR "Call result: $boundingbox"; }
-
- # check result of gs call
- if ($boundingbox !~ /^%%BoundingBox/m)
- {
- print STDERR "Error: Could not determine bounding box!\n",
- "I suppose $ghostscriptname had some trouble interpreting the postscript-file\n";
- }
-
- $boundingbox =~ /^%%HiResBoundingBox:\s*(.*)/m;
- if (defined($1)) # HiResBoundingBox given
- {
- ($hcBBllx,$hcBBlly,$hcBBurx,$hcBBury,$dummy)= split(/\s/,$1);
- $hiresboundingbox="%%HiResBoundingBox: $hcBBllx $hcBBlly $hcBBurx $hcBBury\n";
- $cBBllx = floor($hcBBllx);
- $cBBlly = floor($hcBBlly);
- $cBBurx = ceil($hcBBurx);
- $cBBury = ceil($hcBBury);
- }
- else
- { #use normal BoundingBox
- $boundingbox =~ /^%%.*BoundingBox:\s*(.*)/;
- ($cBBllx,$cBBlly,$cBBurx,$cBBury,$dummy)= split(/\s/,$1);
- }
- # if loose BB should be performed by ps2eps
- # apply changes to resulting bounding box if needed
- if ($looseBB ne '')
- {
- if ($cBBllx > 0) { $cBBllx--; }
- if ($cBBlly > 0) { $cBBlly--; }
- $cBBurx++; $cBBury++;
- }
- # extend clipping box by 1 point
- if ($clip)
- {
- if ($cBBllx > 0) { $cBBllx--; }
- if ($cBBlly > 0) { $cBBlly--; }
- $cBBurx++; $cBBury++;
- }
- if ($cBBllx < 0 || $cBBlly < 0)
- {
- if (!$quiet)
- {
- print STDERR "WARNING! Your drawing had a negative Bounding Box which is deprecated and may cause problems!. I'll shift it.\n";
- }
- $translate_x= -int($cBBllx);
- $translate_y= -int($cBBlly);
- $cBBllx=0;
- $cBBurx= $cBBurx + $translate_x;
- $cBBlly=0;
- $cBBury= $cBBury + $translate_y;
-
- $hcBBurx= $hcBBurx + $hcBBllx;
- $hcBBury= $hcBBury + $hcBBlly;
- $hcBBllx= 0;
- $hcBBlly= 0;
-
- $hiresboundingbox="%%HiResBoundingBox: $hcBBllx $hcBBlly $hcBBurx $hcBBury\n";
-
- $translation="$translate_x $translate_y translate";
- $translatecmd="-c \'$translation\'";
- }
- $boundingbox = "%%BoundingBox: $cBBllx $cBBlly $cBBurx $cBBury\n";
-
- if (!$quiet) { print STDERR "ready. $boundingbox" };
-
- $before_startps= 1;
- $inserted_prolog= 0;
- $prolog_passed= 0;
-
- ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- ## -- Create output file --
- ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- if (!$quiet) { print STDERR "Creating output file $outfname..."; }
-
- open($tmpfhandle,"<$tmpfname") or die "Cannot open file $tmpfname for reading";
- CREATEOUTPUT:
- while (<$tmpfhandle>)
- {
- # check whether we are in a binary section
-
- $binarysection=(/^(%%BeginBinary)|(beginimage)\r?\n?$/ ... /^(%%EndBinary)|^(endimage)/) ||
- (/^(doNimage)|(doclutimage)\r?\n?$/ ... /(^|~> )Z\r?\n?$/) || # Pscript_Win_Dib_L2 5.0 0
- (/^beginjpeg / ... /~> endjpeg\r?\n?$/) || # Pscript_Win_Dib_L2 5.0 0
- (/^pdfIm/ ... /^%-EOD-/);
-
- if ( !$binarysection )
- {
- s/\r?\n?$//; # remove CR and/or LF at end of line if not in binary section
- }
-
- # check where magic Postscript header starts - skip leading binary stuff, e.g., HP PCL/PJL code
- if ($before_startps)
- {
- if ( /%!/ ) # This is usually the smallest magic sequence
- { # Note: Adobe Photoshop generated a binary heading, so ^ is not applicable
- if (! /%!PS-Adobe.*/i) # some strange programs use other magics
- {
- print STDERR "** Warning **: Weird heading line -- ",$_," -- ";
- }
- $before_startps= 0;
- }
- next CREATEOUTPUT;
- }
- else # we are hopefully in regular postscript code now
- {
- # count %%EOFs as we want to know when we got the last EOF
- if ( /^%%EOF\s*$/ )
- {
- $seenEOF++;
- }
-
- # We should insert our own prologue including the newly calculated BoundingBox
- if (! $inserted_prolog)
- {
- print $outfhandle "%!PS-Adobe-$PSversion EPSF-$PSDSCversion\n";
- # check if we need to rotate
- $transrotcmd='';
- if ($rotatecmd)
- {
- if ($rotate eq $rotright)
- {
- $transrotcmd="-$cBBlly $cBBurx translate";
- $boundingbox='%%BoundingBox: 0 0 ' . ($cBBury-$cBBlly) . ' ' . ($cBBurx-$cBBllx) . "\n";
- if ($hiresboundingbox ne "")
- {
- $hiresboundingbox='%%HiResBoundingBox: 0 0 ' . ($hcBBury-$hcBBlly) . ' ' . ($hcBBurx-$hcBBllx) . "\n";
- }
-
- }
- elsif ($rotate eq $rotleft)
- {
- $transrotcmd="$cBBury -$cBBllx translate";
- $boundingbox='%%BoundingBox: 0 0 ' . ($cBBury-$cBBlly) . ' ' . ($cBBurx-$cBBllx) . "\n";
- if ($hiresboundingbox ne "")
- {
- $hiresboundingbox= '%%HiResBoundingBox: 0 0 ' . ($hcBBury-$hcBBlly) . ' ' . ($hcBBurx-$hcBBllx) . "\n";
- }
- }
- elsif ($rotate eq $rotupsidedown)
- {
- $transrotcmd="$cBBurx $cBBury translate";
- $boundingbox='%%BoundingBox: 0 0 ' . ($cBBurx-$cBBllx) . ' ' . ($cBBury-$cBBlly) . "\n";
- if ($hiresboundingbox ne "")
- {
- $hiresboundingbox='%%HiResBoundingBox: 0 0 ' . ($hcBBurx-$hcBBllx) . ' ' . ($hcBBury-$hcBBlly) . "\n";
- }
- }
- }
- print $outfhandle $boundingbox;
- if (!defined($hiresboundingbox))
- {
- $nohires=1;
- }
- if (defined($hiresboundingbox) && !defined($nohires)) { print $outfhandle $hiresboundingbox; }
- $inserted_prolog= 1;
- redo CREATEOUTPUT;
- }
- else # already inserted_prolog
- {
- if (! $prolog_passed)
- {
- #ignore the following lines in the prologue
- if ( /^%%(HiRes)?BoundingBox/ ||
- /^%%Pages/ ||
- /^%%BeginProlog/ ||
- /^%%EndProlog/ ||
- ($filterorientation && /^%%Orientation/) ||
- ($removeDSC && /^%%.*: \(atend\)/) ||
- ($removePreview && (/^%%BeginPreview/ ... /^%%EndPreview/)) )
- {
- next CREATEOUTPUT;
- }
- else
- {
- if ( /^[^%].*/ ||
- /^%%EndComments/ ) # line is not a comment
- {
- #output postscript code for proper EPS file
- if ($insertPScode)
- {
- print $outfhandle "%%EndComments\n",
- "% EPSF created by ps2eps $ver[2]\n",
- "%%BeginProlog\n";
- }
- # Insert own postscript code for clipping
- if ($clip)
- {
- if (!defined($nohires))
- {
- printf $outfhandle "newpath %f %f moveto %f %f lineto %f %f lineto %f %f lineto closepath clip\n",$hcBBllx-0.1,$hcBBlly-0.1,$hcBBurx+0.1,$hcBBlly-0.1,$hcBBurx+0.1,$hcBBury+0.1,$hcBBllx-0.1,$hcBBury+0.1;
- }
- else
- {
- printf $outfhandle "newpath %d %d moveto %d %d lineto %d %d lineto %d %d lineto closepath clip\n",$cBBllx,$cBBlly,$cBBurx,$cBBlly,$cBBurx,$cBBury,$cBBllx,$cBBury;
- }
- } #endif clip
-
- if ($rotate ne '')
- {
- print $outfhandle "$transrotcmd\n";
- print $outfhandle "$rotate\n";
- }
- if ($translation ne '')
- {
- print $outfhandle "$translation\n";
- }
-
- #insert surrounding postscript code
- if ($insertPScode)
- {
- print $outfhandle "save\n",
- "countdictstack\n",
- "mark\n",
- "newpath\n",
- "/showpage {} def\n",
- "/setpagedevice {pop} def\n",
- "%%EndProlog\n",
- "%%Page 1 1\n";
- }
- $prolog_passed= 1;
- if (/^%%EndComments/) { next CREATEOUTPUT; }
- } #endif line is not a comment
- } #end else
- } #endif (we are in the prologue section)
- else #we are in the main part of postscript file
- {
- #end of postscript file reached?
- #Usually the DSC %%EOF signifies the end
- if ( eof($tmpfhandle) ||
- ($ignoreEOFDSC == 0 && /^%%EOF\s*$/ && $seenEOF == $totalEOFDSC)
- || ( $trailerseen && /^II\*\000.*/ )
- )
- {
- #do not forget to print last line if not terminated by LF
- if ( eof($tmpfhandle) && !/^$/ && !/^%%EOF\s*$/ ) # do not insert %%EOF twice
- {
- print $outfhandle $_,"\n";
- }
- #add appropriate trailer
- if ($insertPScode)
- {
- print $outfhandle "%%Trailer\n",
- "cleartomark\n",
- "countdictstack\n",
- "exch sub { end } repeat\n",
- "restore\n",
- "%%EOF\n";
- }
- last CREATEOUTPUT;
- } # stop output
-
- # Trailer comment seen?
- if ( /^%%Trailer\s*$/ )
- {
- $trailerseen=1;
- }
- else
- {
- if (!/^\s*$/) #non empty lines follow
- {
- $trailerseen=0;
- }
- }
-
- # check for trigger
- if (defined($triggerstring) && /^$triggerstring$/)
- {
- $trigger= 1;
- };
-
- # remove complete lines if one of the expression matches
- if ( !$binarysection # only when not in binary section
- &&
- (
- ($removePreview && (/^%%BeginPreview/ ... /^%%EndPreview/))
- || # no preview
- (defined($rangefilter_begin) &&
- (/$rangefilter_begin/ ... /$rangefilter_end/) &&
- (!(/$exclude_rangefilter_begin/ ... /$exclude_rangefilter_end/))
- )
- ||
- (defined($triggered_rangefilter_begin) && defined($triggered_rangefilter_end) &&
- $trigger &&
- (/$triggered_rangefilter_begin/ ... /$triggered_rangefilter_end/)
- )
- ||
- /$linefilter/ # lines by linefilter
- ||
- ($removeDSC && (/^%( |!)(\w )+/ || /^%%/)) # any type of structured comment
- ||
- ($removeADO &&
- (/^statusdict begin.*ProductName.*print product print.*flush end\r?\n?$/ ||
- /^\(%%\[\s*(Page:.*|LastPage)\s*\]%%\)\s*=\s*\w*\s*\r?\n?/ ))
- ||
- /^$/ # empty lines
- )
- )
- {
- next CREATEOUTPUT;
- }
-
- # replacement
- if ( defined($fixsearchpat) )
- {
- #if (/$fixsearchpat/) { print STDERR "**filter** before:",$_,"\n"; }
- #if (s/$fixsearchpat/$fixreplacepat/) { print STDERR "**filter** after:",$_,"\n";}
- s/$fixsearchpat/$fixreplacepat/;
- }
-
- # sanity check for potential dangerous commands
- if ( /(^|\s)(clear|erasepage|initmatrix|initclip|initgraphics|startjob|cleardictstack|setmatrix|setpagedevice|copypage|grestoreall|exitserver|quit)(\s|$)/ )
- {
- $notsane= 1;
- #print STDERR "Warning: dangerous command in line: ",$_,"\n";
- }
- } # end else (this is main part)
-
- # Output the postscript line to result file
- print $outfhandle $_;
-
- if (!$binarysection)
- {
- print $outfhandle "\n"; # terminate line with LF
- }
- } # end else prolog_passed
- } # end else inserted_prolog
- } # end while CREATEOUTPUT
-
- close($tmpfhandle);
-
- if ($tmpfname ne $infname) { unlink "$tmpfname"; } #remove temporary file
-
- close ($outfhandle);
-
- # print warning if magic sequence not found
- if ( $before_startps )
- {
- print STDERR "\n ** Error!! **: could not identify begin of postscript code in file $infname, please check header line!\n First line should start with %!. No output generated.\n";
- }
-
- if (!$quiet) { print STDERR "ready.\n"; }
- if ($warnings and $notsane and !$quiet)
- {
- print STDERR "** Warning **: EPS-output for $infname is not sane, at least one\n",
- "of the following commands was still present:\n",
- "clear erasepage initmatrix initclip initgraphics startjob\n",
- "cleardictstack setmatrix setpagedevice copypage grestoreall\n",
- "exitserver quit\n";
- }
-} #end while PROCESSFILE
-
-# ---- end of perl-script -------
+../../texmf/scripts/ps2eps/ps2eps.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/ps2pk b/Master/bin/mips-irix/ps2pk
index ed2d021b4c6..87714eec676 100755
--- a/Master/bin/mips-irix/ps2pk
+++ b/Master/bin/mips-irix/ps2pk
Binary files differ
diff --git a/Master/bin/mips-irix/ps4pdf b/Master/bin/mips-irix/ps4pdf
index cbdcb022926..7e99e0b8d18 100755..120000
--- a/Master/bin/mips-irix/ps4pdf
+++ b/Master/bin/mips-irix/ps4pdf
@@ -1,133 +1 @@
-#!/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" \
- && { 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
-
-# hack around a bug in zsh:
-test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
-
-###############################################################################
-# cleanup()
-# clean up the temp area and exit with proper exit status
-###############################################################################
-cleanup()
-{
- rc=$?
- $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
- && { rm -f "$tmpdir"/*; cd /; rmdir "$tmpdir"; }
-
- # set exit code in a portable way; see the autoconf manual for details:
- (exit $rc); exit $rc
-}
-
-###############################################################################
-# setupTmpDir()
-# set up a temp directory and a trap to remove it
-###############################################################################
-setupTmpDir()
-{
- $needsCleanup && return
-
- trap 'cleanup' 1 2 3 7 13 15
- needsCleanup=true
- (umask 077; mkdir "$tmpdir") \
- || abort "could not create directory \`$tmpdir'"
-}
-###############################################################################
-# myexec(args)
-# execute the command given as "args"; abort on error; redirect messages to
-# log in "silent" mode; redirect stdin (</dev/null) in silent mode
-###############################################################################
-myexec()
-{
- if $silent; then
- echo "$0: running $@"
- "$@" >$log 2>&1 </dev/null
- rc=$?
- else
- "$@"
- rc=$?
- fi
- if test $rc != 0; then
- echo "$0: command $@ returned with code $rc"
- cat <$log
- (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"
-
-# look for optional things first
-while
- case $1 in
- --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";;
- *) break;;
- esac
-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 \
- "\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
-
+../../texmf-dist/scripts/pst-pdf/ps4pdf \ No newline at end of file
diff --git a/Master/bin/mips-irix/psbook b/Master/bin/mips-irix/psbook
index a9541a5a79a..ec0b3b08b17 100755
--- a/Master/bin/mips-irix/psbook
+++ b/Master/bin/mips-irix/psbook
Binary files differ
diff --git a/Master/bin/mips-irix/psnup b/Master/bin/mips-irix/psnup
index db96136cff9..efcdd4667bc 100755
--- a/Master/bin/mips-irix/psnup
+++ b/Master/bin/mips-irix/psnup
Binary files differ
diff --git a/Master/bin/mips-irix/psresize b/Master/bin/mips-irix/psresize
index f270549cd33..bcd33038053 100755
--- a/Master/bin/mips-irix/psresize
+++ b/Master/bin/mips-irix/psresize
Binary files differ
diff --git a/Master/bin/mips-irix/psselect b/Master/bin/mips-irix/psselect
index 2f662f8a5e9..1b8662172b9 100755
--- a/Master/bin/mips-irix/psselect
+++ b/Master/bin/mips-irix/psselect
Binary files differ
diff --git a/Master/bin/mips-irix/pst2pdf b/Master/bin/mips-irix/pst2pdf
new file mode 120000
index 00000000000..60a28335578
--- /dev/null
+++ b/Master/bin/mips-irix/pst2pdf
@@ -0,0 +1 @@
+../../texmf-dist/scripts/pst2pdf/pst2pdf.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/pstopdf b/Master/bin/mips-irix/pstopdf
index 5b38ed426cb..44478ee1dd4 100755..120000
--- a/Master/bin/mips-irix/pstopdf
+++ b/Master/bin/mips-irix/pstopdf
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart pstopdf.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/pstopdf \ No newline at end of file
diff --git a/Master/bin/mips-irix/pstops b/Master/bin/mips-irix/pstops
index 263aa4a97cd..64f38a8738a 100755
--- a/Master/bin/mips-irix/pstops
+++ b/Master/bin/mips-irix/pstops
Binary files differ
diff --git a/Master/bin/mips-irix/rlxtools b/Master/bin/mips-irix/rlxtools
index 41cea40fc09..a5078af4f10 100755..120000
--- a/Master/bin/mips-irix/rlxtools
+++ b/Master/bin/mips-irix/rlxtools
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart rlxtools.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/rlxtools \ No newline at end of file
diff --git a/Master/bin/mips-irix/rungs b/Master/bin/mips-irix/rungs
new file mode 120000
index 00000000000..3efeab3b3d4
--- /dev/null
+++ b/Master/bin/mips-irix/rungs
@@ -0,0 +1 @@
+../../texmf/scripts/texlive/rungs.tlu \ No newline at end of file
diff --git a/Master/bin/mips-irix/runtools b/Master/bin/mips-irix/runtools
index ff9a333791b..127f29a36df 100755..120000
--- a/Master/bin/mips-irix/runtools
+++ b/Master/bin/mips-irix/runtools
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart runtools.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/runtools \ No newline at end of file
diff --git a/Master/bin/mips-irix/simpdftex b/Master/bin/mips-irix/simpdftex
index 86f8ec0e623..8b9c2132185 100755..120000
--- a/Master/bin/mips-irix/simpdftex
+++ b/Master/bin/mips-irix/simpdftex
@@ -1,570 +1 @@
-#!/bin/sh
-
-# Created by Gerben Wierda, May 2001
-# Rewritten by Gerben Wierda, January 2002
-
-# Modified by Joachim Kock, May 2003
-
-# COPYRIGHT Gerben Wierda 2001--2004
-# This file is free software. You are free to use this file in any way you like
-# However, if you change it you should note in this file that you did and who
-# you are, you also need to change the version string if you do. That way
-# I will not get support questions for software that is not entirely mine.
-
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-# EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# $Id: altpdftex,v 2.18 2004/11/15 20:36:11 gerben Exp $
-
-# This script assumes that there is a config.pdf somewhere that sets
-# the bitmap mode to something large but realistic (real mode) so that
-# unavailable pfb fonts will be included as bitmaps.
-
-# Version 1.0: added the string above for identification purposes
-# Version 1.0a: Cosmetic change: do not display dir of argv[0] all the time
-# Added calledas variable to hold command basename
-# Version 1.1: Use calledas instead of $0 which means the sed command
-# for determining format below also works when there is no dir
-# (run from dir where altpdftex resides, not very likely...)
-# Version 1.2: Force the use of tex binaries from the same directory as
-# this script
-# Version 1.3: Added --echo-version option, placed argument check after
-# switch, inside while to prevent subscript out of range error
-# Added --tex-path to override directory where this script
-# resides. Added --gs-path to override a new default gs
-# directory /usr/local/bin. Also, force gs directory at the
-# start of the path to repair for broken installations of
-# TeX, gs and such
-# Version 1.4: Moved path changes to just before calling gs so that only
-# ps2pdf is affected
-# Version 1.5: Removed some path-related redundancy from GS calling
-# Version 1.5a: Missing ${extradviopts} from echo
-# Added version to --help output
-# Added wolfram.map
-# Version 1.6: Fixed bug: --dviopts did not work because it did set
-# the wrong variable
-# Changed dviopts to dvipsopts (better name)
-# Version 1.7: Added --distiller and --distiller-filter option
-# Changed --gs-path to --distiller-path
-# Changed distiller semantics
-# Fixed bug --tex-path flag needed trailing '/'
-# Some extra quoting to be more robust for whitespace
-# in names, also internally
-# Version 1.8: Added pstill and u-psbuild info to help
-# Version 1.9: Removed textrace bbold font (textrace is broken)
-# Version 1.10: Added amstex support
-# Simplified different format support
-# Version 1.11: Do not source ~/.{t}cshrc, use the environment 'as is'
-# Version 1.11 says it is version 1.10!
-# Version 1.12: Added textrace bold font (textrace 0.48 is ok)
-# Version 1.13: Changed success message at the end
-# Echo version on by default
-# Debug option
-# Version 1.13b:Date report on version was very out of date, removed
-
-# Version 2.0: Rewritten in /bin/sh because (t)csh does not handle signals
-# very well...
-# This version works, but you need to send the SIGTERM to
-# the process group (the negative PID) to get it to work
-# Version 2.1: Small bug fixes
-# Version 2.2: Fixed bug where argument without extension was interpreted
-# as dvi file.
-# Removed dependencies on smart sh versions
-# Version 2.3: Removed map file knowledge (needs to be outside this script)
-# beyond the standard map files
-# Version 2.4: Added support for omega and lambda (use odvips)
-# Version 2.5: Changed maxpk and maxpfb implementation to recent updmap
-# Version 2.6: Use ps2pdf13 as the default distiller
-# Version 2.7: Changed help
-# Version 2.8: Checked into CVS.
-# Added handling of outdir for TeX
-# Version 2.9: Added auto-outdir flag
-# Version 2.10: Changed --outdir behaviour to mimick TEXMFOUTPUT,
-# removed --auto-outdir
-# Version 2.11: Fixed typo
-# Version 2.12: RCS changes, from now on, the version number is the RCS number
-# These notes here will become a ChangeLog.
-# 2003/05/20 Joachim's modification: write first to a pdf file in tmp,
-# and only upon completion copy the file to its final
-# destination. This is done in order to minimise the time where
-# the pdf file in current directory is in an unstable state,
-# because a PDF viewer might be tracking the file, and
-# if it finds the pdf file in an intermediate state it will
-# display a blank page until the new version is ready.
-# 2003/05/21 Joachim's modification used /bin/cp. Gerben made it truly
-# atomic by using /bin/cp in combination with /bin/mv
-# 2003/11/23 Added supportfor passing flasg to tex at the request of
-# Dick Koch.
-# 2004/09/05 Bugfix: make it work better with directories with whitespace
-# in their name
-# 2004/11/15 New calling mode: simpdftex format foo.tex
-# e.g.:
-# simpdftex latex foo.tex
-# In the future, the old modes (altpdflatex and friends) through
-# symlinks will disappear from my distribution, though they will
-# still work.
-
-# FEATURE: it seems -u +foo.map -u -foo.map does not work. So --extradvipsopts
-# cannot be used to remove a map from the standard list
-
-# BUG: Handling of file name extensions is not completely equialent to TeX
-# i.e. foo.bar.bla gets you foo.bar.pdf not foo.bar.bla.pdf
-# Give all extensions
-
-version='$Revision: 2.18 $'
-calledas=`basename "$0"`
-if [ "${calledas}" = "simpdftex" ]
-then
- argwithoutlead=`echo -n "$1"|sed 's/^--//'`
- if [ "$1" != "" -a "$1" = "${argwithoutlead}" ]
- then
- formatname="$1"
- shift
- calledas="altpdf${formatname}"
- fi
-fi
-argvbackup="$*"
-
-# maxpkdvipsopts: use only pfb's for real PS fonts, bitmaps are default for the others
-maxpkdvipsopts="-Ppk"
-# maxpfbdvipsopts: use as many pfb's as possible
-maxpfbdvipsopts="-Poutline"
-opt_dvipsopts=""
-
-# Defaults:
-# altpdftex --default is the default setting, it also works
-# when there is no config.pdf file
-extradvipsoptions=""
-dvipsoptions="$maxpfbdvipsopts"
-outputpostfix=".maxpfb"
-simplename="yes"
-keeppsfile="no"
-echoversion="yes"
-texpath=`dirname "$0"`
-# Default distiller is ps2pdf from /usr/local/bin in no filter mode
-# as the direct call to a filtering gs does not work yet for some reason
-#distillerpath=""
-#distillerprog="/usr/local/bin/gs -dCompatibility=1.3 -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=- -c save pop"
-#distillerfilter="yes"
-distillerpath="/usr/local/bin"
-distillerprog="ps2pdf13"
-distillerfilter="no"
-unset outdir
-debug="no"
-
-usage()
-{
- cat <<_eof_help
-This is simpdftex, $version
-
-Usage: simpdftex formatname
- [--dvipsopts dvipsoptstring] [--extradvipsopts dvipsoptstring] [--pdf]
- [--default] [--maxpk] [--maxpfb] [--extendedname] [--no-echo-version]
- [--tex-path dir] [--keep-psfile] [--distiller-path dir] [--debug]
- [--distiller prog] [--distiller-filter prog] [--help]
- [--outdir dir] [--extratexopts texoptsstring] tex-or-dvi-file
-
-simpdftex is a way to do pdf{e}{la}tex without having pdf{e}{la}tex. It needs a
-working TeX environment and ghostscript. Since pdf{e}{la}tex cannot handle
-insertion of .eps graphics, simpdftex gives an alternative. The output for both
-systems is comparable.
-
-simpdftex compiles the file with {LA}TeX, processes the DVI file with dvips into
-PostScript and uses gs to produce pdf (with ps2pdf). There is finegrained
-control over the resulting filename and the options with which dvips produces
-the PostScript intermediary file.
-
-Dvips will call Metafont to produce bitmaps or include PostScript .pfb files
-depending on the flags. See below.
-
-Default settings is normal name, maximal use of pfb's, just like pdf{la}tex,
-in other words, "pdftex file.tex" and "altpdftex file.tex" both produce an
-output file file.pdf. For pdftex, output options are controlled by pdftex.cfg,
-for altpdftext by config.ps (unless --pdf is given).
-
-Arguments:
- tex-or-dvi-file
- If a .dvi file is given, skip the TeX process. Otherwise, TeX
- the input file, dvips the resulting dvi file and ps2pdf the
- resulting ps file
- --help
- Display this message and exit
- --no-echo-version
- Do not echo location and version of this script. Does not exit
- so can be used tochange info to the output of a real run
- --debug
- Add some debug output
- --extendedname
- Depending on the mode, adds intermediary extensions to the
- output filename. If the mode is --pdf, .pdfmode is added. If
- the mode is --maxpk, ,maxpk is added and if the mode is
- --maxpfb, .maxpfb is added. Example:
- tex-or-dvi-file-basename.maxpfb.pdf
- --maxpk
- Use Metafont bitmaps (pk files) when possible. Only real
- PostScript fonts (like Times Roman) are included as
- PostScript fonts. All other fonts are included as bitmaps
- for the default printer resolution. This options produces
- optimal results for the chosen printer.
- For file contents (not name) equivalent to:
- --dvipsopts "-Ppk"
- --maxpfb
- Use PostScript pfb files whenever possible. This produces
- optimal results for the screen.
- For file contents (not name) equivalent to:
- --dvipsopts "-Poutline"
- If any font is included as TeX pk bitmap, it is rendered
- at the default resolution.
- --pdf
- Select .pdfmode extension for the output file name if
- --extendedname has been set. Use printer definition
- config.pdf. For file contents (not name) equivalent to
- --dvipsopts "-Ppdf"
- Note that the default config.pdf assumes resolution 8000
- for bitmaps and bitmap generation fails at this resolution
- because there exists no known mode for that resolution.
- --default
- Select no extension for the output file name, even if
- --extendedfilename has been set. Use standard printer
- definition config.ps. For file contents (not name) equivalent
- to:
- --dvipsopts "" --noextendedname
- --dvipsopts
- Give arbitrary arguments to dvips, e.g.
- --dvipsopts "-M"
- Sets extension for --extendedfilename to .custom. --dvipsopts
- overrides other flags that set dvipsopts.
- --extratexopts
- Give extra arbitrary arguments to tex, e.g.
- --extratexopts "--interaction=nonstopmode"
- Sets extra options for the tex command that is used.
- --extradvipsopts
- Give extra arbitrary arguments to dvips, e.g.
- --extradvipsopts "-M"
- Sets extra options for dvips and does not set extension
- or override other options. Options will be added to the end
- of the options for dvips
- --keep-psfile
- After running dvips, copy the ps file over to the directory
- where the tex file is, possibly overwriting a ps file
- that is there. Use with caution, a ps file could be input
- as well.
- --tex-path
- Give path of TeX binaries, use directory of this script
- otherwise
- --distiller prog
- Use a distiller different from ps2pdf which is the default.
- Argument must be an executable or executable script that
- gets called iwth two arguments: input file (PS) and output
- file (PDF). E.g.:
- --distiller=/usr/local/alternate/bin/ps2pdf
- --distiller=pstill
- Using this flag sets the distiller filter mode to off
- --distiller-filter prog
- Use a distiller executable or executable script which is
- called with the PS input as standard input and which writes
- the PDF output to standard output. E.g.:
- --distiller-filter=u-psbuild
- --distiller-path
- Give path needed by the distiller binary. This path is added
- to the begin of you PATH environment before the distiller is
- run. The reason is that for instance ps2pdf uses the path to
- find gs and sets the path to something with /sw/bin at the
- beginning. Thus, installing gs from fink would make
- /usr/local/bin/ps2pdf find another gs than intended. By giving
- an empty path, the path is not changed before the distiller
- program is run. The default is empty.
- --outdir dir
- Write files here *if* our current directory is unwritable. This
- mimicks the TEXMFOUTPUT environment variable of TeX, but
- differently. The current dir becomes the value of --outdir and
- the directory where the old current dir is added to TEXINPUTS.
- This is more robust for reading and locating files.
- You can also set TEXMFOUTPUT instead, but with a disadvantage:
- you will be running TeXin the current dir. And you will not be
- able to read files in the outdir unless you also adapt
- TEXINPUTS.
-
- The defaults for the distiller are
- Path addition: "${distillerpath}"
- Filter mode: "${distillerfilter}"
- Program: "${distillerprog}"
-
- Later flags override settings of earlier flags.
-_eof_help
-}
-
-while test $# -gt 0
-do
- case $1 in
- --help)
- usage
- exit 0;;
- --dvipsopts)
- shift
- outputpostfix=".custom"
- dvipsoptions="$1"
- ;;
- --extradvipsopts)
- shift
- extradvipsoptions="$1"
- ;;
- --extratexopts)
- shift
- extratexoptions="$1"
- ;;
- --tex-path)
- shift
- texpath="$1"
- ;;
- --pdf)
- outputpostfix=".pdfmode"
- dvipsoptions="-P pdf"
- ;;
- --default)
- outputpostfix=""
- dvipsoptions=""
- # Use the default print option in config.ps
- ;;
- --maxpk)
- outputpostfix=".maxpk"
- dvipsoptions="$maxpkdvipsopts"
- ;;
- --maxpfb)
- outputpostfix=".maxpbfb"
- dvipsoptions="$maxpfbdvipsopts"
- ;;
- --extendedname)
- simplename="no"
- ;;
- --keep-psfile)
- keeppsfile="yes"
- ;;
- --debug)
- debug="yes"
- ;;
- --distiller-path)
- shift
- distillerpath="$1"
- ;;
- --distiller)
- shift
- distillerprog="$1"
- distillerfilter="no"
- ;;
- --outdir)
- shift
- export TEXINPUTS=`pwd`:`kpsewhich --expand-var '$TEXINPUTS'`
- export TEXMFOUTPUT="$1"
- outdir="$1/"
- outdirset="yes"
- cd "$1"
- ;;
- --distiller-filter)
- shift
- distillerprog="$1"
- distillerfilter="yes"
- ;;
- --no-echo-version)
- echoversion="no"
- ;;
- --*)
- echo "Unknown option $1"
- exit 1;;
- "")
- ;;
- *)
- break;;
- esac
- shift
-done
-
-if [ "${echoversion}" = "yes" -a "${debug}" = "no" ]
-then
- echo "### This is $0, Version ${version}"
-fi
-
-if [ "${debug}" = "yes" ]
-then
- echo "##### This is $0, Version ${version}"
- echo "##### Arguments: ${argvbackup}"
-fi
-
-cleanup()
-{
- if [ "${tmpdir}" != "" -a "${debug}" = "no" ]
- then
- rm -rf "${tmpdir}"
- fi
-}
-
-terminated()
-{
- cleanup
- exit 1;
-}
-
-trap 'terminated' 15
-
-main()
-{
- if [ "${file}" = "" ]
- then
- echo "simpdftex Empty argument: tex-or-dvi-file-name"
- exit 1
- fi
-
- # Argument handling
-
- if [ "${simplename}" = "yes" ]
- then
- outputpostfix=""
- fi
-
- startwithdvi="no"
- basename=`basename "${file}"`
- nosuffixbasename=`echo -n ${basename}|sed 's/\.[^.]*$//'`
- nodvisuffixbasename=`echo -n ${basename}|sed 's/\.[dD][vV][iI]$//'`
- if [ "${nodvisuffixbasename}" = "${nosuffixbasename}" -a \
- "${basename}" != "${nosuffixbasename}" ]
- then
- startwithdvi="yes"
- fi
-
- kpsefilename=`kpsewhich "${file}"`
- slashdirname=`dirname "${kpsefilename}"`/
-
- if [ ! -w "." ]
- then
- if [ "${TEXMFOUTPUT}" != "" ]
- then
- outdir="${TEXMFOUTPUT}/"
- outdirset="yes"
- if [ "${autoinput}" = "yes" ]
- then
- export TEXINPUTS=${TEXMFOUTPUT}:`kpsewhich --expand-var '$TEXINPUTS'`
-
- fi
- else
- echo "### Cannot write in current directory and no redirect found. Bailing out..."
- exit 1
- fi
- fi
-
- # Assume the command is called altpdf* where the rest is the actual tex
- # program to be run
- texprogram=`echo ${calledas}|sed 's/altpdf//'`
- if [ "${texprogram}" = "omega" -o "${texprogram}" = "lambda" ]
- then
- dvips="odvips"
- else
- dvips="dvips"
- fi
-
- # Handle temp dir (cleanup is called on signal)
- tmpext=$$-`/bin/date +"%s"`
- tmpdir="/tmp/altpdf${texprogram}.${tmpext}"
- # Force removal of possible existing tmpdir
- cleanup
- # Make new version
- mkdir "${tmpdir}"
-
- if [ "${startwithdvi}" = "yes" ]
- then
- dvifile="${file}"
- else
- texfile="${file}"
- dvifile="${outdir}${nosuffixbasename}.dvi"
- fi
-
- psfile="${tmpdir}/${nosuffixbasename}${outputpostfix}.ps"
- savedpsfile="${outdir}${nosuffixbasename}.ps"
- pdffile="${tmpdir}/${nosuffixbasename}${outputpostfix}.pdf"
- savedpdffile="${outdir}${nosuffixbasename}${outputpostfix}.pdf"
-
- if [ "${debug}" = "yes" ]
- then
- echo "##### TeX file: $texfile"
- echo "##### DVI file: $dvifile"
- echo "##### PS file: $psfile"
- echo "##### Saved PS file: $savedpsfile"
- echo "##### Created PDF file: $pdffile"
- echo "##### Final PDF file: $savedpdffile"
- echo "##### Environment:"
- env | sed 's/^/##### /g'
- fi
-
- if [ "${startwithdvi}" = "yes" ]; then
- echo "### Skipping ${texprogram} ${texfile} [dvi->pdf only]"
- else
- echo "### ${texpath}/${texprogram} ${texfile}"
- "${texpath}/${texprogram}" ${extratexoptions} "${texfile}" || \
- echo "### WARNING: TeX returned non zero exit status ${status}"
- fi
-
- echo "### ${texpath}/${dvips} -R ${dvipsoptions} ${extradvipsoptions} -o ${psfile} ${dvifile}"
- "${texpath}/${dvips}" -R ${dvipsoptions} ${extradvipsoptions} -o "${psfile}" "${dvifile}" || \
- { echo "### FAILED to generate ${psfile} (${status})"; \
- exit 1; }
-
- if [ "${keeppsfile}" = "yes" ]; then
- echo "### Saving intermediary ps file ${psfile} as ${savedpsfile}"
- /bin/cp "${psfile}" "${savedpsfile}" || \
- echo "### FAILED to save ${psfile} (${status})"
- fi
-
- if [ "${distillerpath}" != "" ]; then
- PATH="${distillerpath}:${PATH}";export PATH
- if [ "${debug}" = "yes" ]; then
- echo "##### PATH set to ${PATH}"
- fi
- fi
-
- if [ "${distillerfilter}" = "yes" ]; then
- echo "### ${distillerprog} <${psfile} >${pdffile}"
- "${distillerprog}" <"${psfile}" >"${pdffile}" || \
- { echo "### FAILED to generate ${pdffile} (${status})"
- exit 1; }
- else
- echo "### ${distillerprog} ${psfile} ${pdffile}"
- "${distillerprog}" "${psfile}" "${pdffile}" || \
- { echo "### FAILED to generate ${pdffile} (${status})"
- exit 1; }
- fi
-
- echo "### Copying/moving pdf file ${pdffile} to ${savedpdffile}"
- /bin/cp "${pdffile}" "${savedpdffile}.${tmpext}" || \
- echo "### FAILED to copy ${pdffile} (${status})"
- /bin/rm -f "${savedpdffile}"
- /bin/mv "${savedpdffile}.${tmpext}" "${savedpdffile}" || \
- echo "### FAILED to rename ${savedpdffile}.${tmpext} (${status})"
-
- if [ "${startwithdvi}" = "yes" ]; then
- if [ "${keeppsfile}" = "yes" ]; then
- echo "### Succesfully generated ${savedpdffile} and ${savedpsfile}"
- else
- echo "### Succesfully generated ${savedpdffile}"
- fi
- else
- if [ "${keeppsfile}" = "yes" ]; then
- echo "### Succesfully generated ${dvifile}, ${savedpdffile} and ${savedpsfile}"
- else
- echo "### Succesfully generated ${dvifile} and ${savedpdffile}"
- fi
- fi
-
- cleanup
-}
-
-for file in "$@"
-do
- main
-done
+../../texmf/scripts/simpdftex/simpdftex \ No newline at end of file
diff --git a/Master/bin/mips-irix/sjisconv b/Master/bin/mips-irix/sjisconv
index 0a7dc449aaa..b5a85a384d2 100755
--- a/Master/bin/mips-irix/sjisconv
+++ b/Master/bin/mips-irix/sjisconv
Binary files differ
diff --git a/Master/bin/mips-irix/synctex b/Master/bin/mips-irix/synctex
new file mode 100755
index 00000000000..1874e677478
--- /dev/null
+++ b/Master/bin/mips-irix/synctex
Binary files differ
diff --git a/Master/bin/mips-irix/t1ascii b/Master/bin/mips-irix/t1ascii
index d57dd932f6e..c14f4f4e232 100755
--- a/Master/bin/mips-irix/t1ascii
+++ b/Master/bin/mips-irix/t1ascii
Binary files differ
diff --git a/Master/bin/mips-irix/t1asm b/Master/bin/mips-irix/t1asm
index 84a7a46c94c..a2291dc7ea9 100755
--- a/Master/bin/mips-irix/t1asm
+++ b/Master/bin/mips-irix/t1asm
Binary files differ
diff --git a/Master/bin/mips-irix/t1binary b/Master/bin/mips-irix/t1binary
index 91cfc5d9f02..b6b32ad995f 100755
--- a/Master/bin/mips-irix/t1binary
+++ b/Master/bin/mips-irix/t1binary
Binary files differ
diff --git a/Master/bin/mips-irix/t1disasm b/Master/bin/mips-irix/t1disasm
index ce93be035d6..fbd7926d670 100755
--- a/Master/bin/mips-irix/t1disasm
+++ b/Master/bin/mips-irix/t1disasm
Binary files differ
diff --git a/Master/bin/mips-irix/t1dotlessj b/Master/bin/mips-irix/t1dotlessj
index 96bb2f6df77..a8ea513b1a0 100755
--- a/Master/bin/mips-irix/t1dotlessj
+++ b/Master/bin/mips-irix/t1dotlessj
Binary files differ
diff --git a/Master/bin/mips-irix/t1lint b/Master/bin/mips-irix/t1lint
index 8ee0f3e766a..ba55a062222 100755
--- a/Master/bin/mips-irix/t1lint
+++ b/Master/bin/mips-irix/t1lint
Binary files differ
diff --git a/Master/bin/mips-irix/t1mac b/Master/bin/mips-irix/t1mac
index 08079512b3e..32818751665 100755
--- a/Master/bin/mips-irix/t1mac
+++ b/Master/bin/mips-irix/t1mac
Binary files differ
diff --git a/Master/bin/mips-irix/t1reencode b/Master/bin/mips-irix/t1reencode
index 91ae5ca2ae8..cc683dd8257 100755
--- a/Master/bin/mips-irix/t1reencode
+++ b/Master/bin/mips-irix/t1reencode
Binary files differ
diff --git a/Master/bin/mips-irix/t1testpage b/Master/bin/mips-irix/t1testpage
index 4d338335a31..a533f542008 100755
--- a/Master/bin/mips-irix/t1testpage
+++ b/Master/bin/mips-irix/t1testpage
Binary files differ
diff --git a/Master/bin/mips-irix/t1unmac b/Master/bin/mips-irix/t1unmac
index 0316aecc45e..c97b938ee9c 100755
--- a/Master/bin/mips-irix/t1unmac
+++ b/Master/bin/mips-irix/t1unmac
Binary files differ
diff --git a/Master/bin/mips-irix/t4ht b/Master/bin/mips-irix/t4ht
index 0bfc748ed05..644a9f752d2 100755
--- a/Master/bin/mips-irix/t4ht
+++ b/Master/bin/mips-irix/t4ht
Binary files differ
diff --git a/Master/bin/mips-irix/tangle b/Master/bin/mips-irix/tangle
index a61c0b2b060..973f20bf33d 100755
--- a/Master/bin/mips-irix/tangle
+++ b/Master/bin/mips-irix/tangle
Binary files differ
diff --git a/Master/bin/mips-irix/tcdialog b/Master/bin/mips-irix/tcdialog
index 1c919037004..7560cce923e 100755
--- a/Master/bin/mips-irix/tcdialog
+++ b/Master/bin/mips-irix/tcdialog
Binary files differ
diff --git a/Master/bin/mips-irix/tex b/Master/bin/mips-irix/tex
index 6f52b5b0e47..9f5ef0fb6f3 100755
--- a/Master/bin/mips-irix/tex
+++ b/Master/bin/mips-irix/tex
Binary files differ
diff --git a/Master/bin/mips-irix/tex4ht b/Master/bin/mips-irix/tex4ht
index f9e35bb9ff5..48f6323ae7b 100755
--- a/Master/bin/mips-irix/tex4ht
+++ b/Master/bin/mips-irix/tex4ht
Binary files differ
diff --git a/Master/bin/mips-irix/texconfig-dialog b/Master/bin/mips-irix/texconfig-dialog
index 76e1f51eea6..8ccda930dd7 100755
--- a/Master/bin/mips-irix/texconfig-dialog
+++ b/Master/bin/mips-irix/texconfig-dialog
@@ -21,7 +21,7 @@ export PATH
test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
# the version string
-version=1112981053 # seconds since `00:00:00 1970-01-01 UTC'
+version=1184605103 # seconds since `00:00:00 1970-01-01 UTC'
# date '+%s' (with GNU date)
: ${PAGER=more}
@@ -103,14 +103,14 @@ runDialog()
###############################################################################
findDialog()
{
- { u=`uname -s`; } 2>/dev/null
- case "$u" in
- FreeBSD|Linux|cygwin*|CYGWIN*)
- test -f /usr/bin/whiptail && DIALOG_PROG=/usr/bin/whiptail
- test -f /usr/bin/dialog && DIALOG_PROG=/usr/bin/dialog
- test -f /bin/dialog && DIALOG_PROG=/bin/dialog
- ;;
- esac
+ for bin in whiptail dialog
+ do
+ binLoc=`texconfig findprog $bin`
+ case $binLoc in
+ "") DIALOG_PROG="";;
+ *) DIALOG_PROG=$binLoc; break;;
+ esac
+ done
case $DIALOG_PROG in
"")
: ${DIALOG_TERMINFO=$TEXMFMAIN/texconfig}
diff --git a/Master/bin/mips-irix/texconfig-sys b/Master/bin/mips-irix/texconfig-sys
index 9d193722416..8a88750098c 100755
--- a/Master/bin/mips-irix/texconfig-sys
+++ b/Master/bin/mips-irix/texconfig-sys
@@ -1,4 +1,5 @@
#!/bin/sh
+# $Id: texconfig-sys 5067 2007-09-30 18:06:26Z karl $
# texconfig-sys: Thomas Esser, public domain.
@@ -25,6 +26,7 @@ c=`kpsewhich -var-value TEXMFSYSCONFIG`
TEXMFVAR="$v"
TEXMFCONFIG="$c"
+texconfig_sys=1
export TEXMFVAR TEXMFCONFIG
exec texconfig ${1+"$@"}
diff --git a/Master/bin/mips-irix/texcount b/Master/bin/mips-irix/texcount
new file mode 120000
index 00000000000..dedfa7d2c3e
--- /dev/null
+++ b/Master/bin/mips-irix/texcount
@@ -0,0 +1 @@
+../../texmf-dist/scripts/texcount/TeXcount.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/texdoc b/Master/bin/mips-irix/texdoc
index f66b3c855de..821fdbaa30e 100755..120000
--- a/Master/bin/mips-irix/texdoc
+++ b/Master/bin/mips-irix/texdoc
@@ -1,206 +1 @@
-#!/bin/sh
-#
-# Thomas Esser, David Aspinall, Simon Wilkinson.
-# Public domain.
-#
-# Simple script to attempt to find documentation for tex files.
-# Uses kpsewhich to find a .dvi, .pdf or .ps file along the
-# 'TeX system documentation' ($TEXDOCS, default: $TEXMF/doc) search path.
-#
-# Original version by David Aspinall <da@dcs.ed.ac.uk>
-#
-# This version rewritten for use with bash 2 and teTeX under Linux by
-# Simon Wilkinson <sxw@dcs.ed.ac.uk>
-#
-# Changes for web2c-7.2 resp. teTeX-0.9 and portability fixes by
-# Thomas Esser <te@dbs.uni-hannover.de>, Jun 14 1998
-#
-# Support for compressed documentation implemented by adopting changes
-# made by debian. Thomas Esser, Dec. 2004.
-
-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
-
-needsCleanup=false
-progname=texdoc
-tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/$progname.$$
-
-###############################################################################
-# setupTmpDir()
-# set up a temp directory and a trap to remove it
-###############################################################################
-setupTmpDir()
-{
- $needsCleanup && return
-
- trap 'cleanup --force' 1 2 3 7 13 15
- needsCleanup=true
- mkdir "$tmpdir" || abort "could not create directory \`$tmpdir'"
-}
-
-###############################################################################
-# abort(errmsg)
-# print `errmsg' to stderr and exit with error code 1
-###############################################################################
-abort()
-{
- warn "$progname: $1."
- cleanup
- (exit 1)
- exit 1
-}
-
-###############################################################################
-# cleanup()
-# clean up the temp area
-###############################################################################
-cleanup()
-{
- case $1 in
- --force)
- $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
- && { rm -f "$tmpdir"/*; cd /; rmdir "$tmpdir"; }
- ;;
- *) # directory might not be empty if some other viewer is still
- # running, so be quiet about it
- rmdir $tmpdir >/dev/null 2>&1;;
- esac
-}
-
-
-# Viewing programs, according to filename extension. (You can
-# override or add to them by setting environment variables).
-# MacOS X: does not have X11 by default, so give dvi a low priority
-case `(uname -s) 2>/dev/null` in
- Darwin)
- : ${TEXDOCVIEW_dvi='(open %s >/dev/console 2>&1 || xdvi %s &) || echo "Method for opening %s did not work"'}
- : ${TEXDOCVIEW_ps='open %s'}
- : ${TEXDOCVIEW_pdf='open %s'}
- : ${TEXDOCVIEW_html='open %s'}
- : ${TEXDOCVIEW_txt="open -a TextEdit.app %s"}
- : ${TEXDOCVIEW_="open -a TextEdit.app %s"} # no extension, default to pager
- extlist='.pdf .ps .txt .dvi .html'
- ;;
- *)
- : ${TEXDOCVIEW_dvi='(xdvi %s) &'}
- : ${TEXDOCVIEW_pdf='(acroread %s) &'}
- : ${TEXDOCVIEW_ps='(gv %s) &'}
- : ${TEXDOCVIEW_html='mozilla -remote openURL'"'(%s)'"' 2>/dev/null || mozilla %s &'}
- : ${TEXDOCVIEW_txt="${PAGER-more} %s"}
- : ${TEXDOCVIEW_="${PAGER-more} %s"} # no extension, default to pager
- extlist='.dvi .dvi.gz .dvi.bz2 .pdf .pdf.gz .pdf.bz2 .ps .ps.gz .ps.bz2 .txt .txt.gz .txt.bz2 .html'
-
- # Commands run to uncompress files, according to filename extension.
- : ${TEXDOCUNZIP_gz='gzip -d -c'}
- : ${TEXDOCUNZIP_bz2='bzip2 -d -c'}
- ;;
-esac
-
-mode=viewer
-help='Usage: texdoc [OPTION]... [NAME]...
- Search for NAME in the TeX documentation and start a viewer.
-
- --help show this help
- -v verbose mode: show viewer command
- -l just list all matching files. Do not start a viewer.
- -s search the disk. remaining arguments will be passed
- as egrep patterns to filter the find output.'
-
-verbosemode=false
-while
- case $1 in
- -s) mode=search; shift; break;;
- -l) mode=list;;
- -v) verbosemode=true;;
- *-help)
- echo "$help" >&2
- exit 1;;
- -*) echo "texdoc: option $1 not recognized" 1>&2;;
- *) break;;
- esac
-do shift; done
-
-case $# in
- 0)
- echo "$help" >&2
- exit 1
- ;;
-esac
-
-for name
-do
- case $mode in
- search)
- find `kpsewhich --expand-path='$TEXMF/doc' | tr : ' '` -type f -print |
- egrep $name
- continue
- ;;
- esac
-
- case $name in
- texdoc)
- man texdoc; continue;;
- esac
-
- found=false
- for ext in "" $extlist; do
-
- filename=`kpsewhich -format='TeX system documentation' $name$ext 2>/dev/null`
- test -z "$filename" && continue
- found=true
-
- if test $mode = list; then
- echo $filename
- else
- dir=`echo $filename | sed 's%/[^/]*$%%'`
- ext=`echo $filename | sed -n 's%.*\.\([^/]*\)$%\1%p'`
-
- eval uncompress="\$TEXDOCUNZIP_$ext"
- if test -n "$uncompress"
- then
- ext=`echo $filename | sed -e "s|\\.$ext\$||" | sed 's%.*\.%%'`
- fi
- viewer=\$"TEXDOCVIEW_$ext"
- if test -n "$uncompress"; then
- src=`echo "$filename" | sed -e 's%.*/%%' -e 's%\.[^.]*$%%'`
-
- # only one viewer per file, if the same file is given more
- # than once
- test -f "$tmpdir/$src" && break
-
- setupTmpDir
- eval "$uncompress $filename > $tmpdir/$src"
- filename=$tmpdir/$src
- viewer=`eval echo $viewer | sed -e "s|%s|$filename; rm -f $filename; cleanup|"`
- else
- viewer=`eval echo $viewer | sed -e "s|%s|$filename|g"`
- fi
-
- if test -z "$viewer"
- then
- echo "Don't know how to view file type $ext" 1>&2
- echo "(matching file was $filename)" 1>&2
- else
- $verbosemode && echo $viewer
- test -n "$dir" && test -d "$dir" && cd "$dir"
- eval $viewer
- break # just stop after the first usable extension
- fi
- fi
-
- done
- $found || echo "Can't find documentation for \`$name'" 1>&2
-done
-
-cleanup
-(exit 0)
-exit 0
+../../texmf/scripts/texlive/texdoc.tlu \ No newline at end of file
diff --git a/Master/bin/mips-irix/texdoctk b/Master/bin/mips-irix/texdoctk
index c8f60e28bf6..56729104154 100755..120000
--- a/Master/bin/mips-irix/texdoctk
+++ b/Master/bin/mips-irix/texdoctk
@@ -1,1794 +1 @@
-#!/usr/bin/env perl
-# We started with a hack provided by Thomas Esser. This expression replaces
-# the unix specific line \type {#!/usr/local/bin/perl -w}.
-###############################################################################
-# texdoctk v.0.6.0 (Nov 5, 2004) - GUI for TeX documentation access
-# Copyright (C) 2000-2004 Thomas Ruedas
-# This program is provided under the GNU Public License; see the file
-# README.texdoctk for details about requirements, installation, configuration,
-# and the full disclaimer.
-###############################################################################
-use strict;
-use Tk;
-use Getopt::Long;
-Getopt::Long::config('bundling');
-use File::Basename;
-
-my $IsWin32 = ($^O =~ /MSWin32/i);
-
-#if ($IsWin32) {
-# use Win32::Registry;
-# use Win32::API;
-#}
-
-# initialization of some internal variables
-$|=1;
-my $quiet=1;
-my $autoview;
-my $xfmt_viewer=1,
-my @tdcolors;
-my %butcol;
-my $srchentry;
-my $srchflag=0;
-my $tmpfno;
-# system variables
-my ($texmfmain,$texmfdist,$texmfdoc,$texmflocal,$texmfhome,
- $texdocpath,$distdocpath,$docdocpath,$localdocpath,$homedocpath,
- $datadir,
- $dvi_viewer,$dvips_conv,$ps_viewer,$pdf_viewer,
- $pdfps_conv,$html_viewer,$htmlps_conv,$htmlps_redir,
- $txt_viewer,$txtps_conv,$txtps_redir,$print_cmd);
-
-# defaults: unix values
-my $qq="'";
-my $HomeEnv=$ENV{HOME};
-my $TeXDocRcDefaults="texdocrc.defaults";
-my $TempDir; $TempDir=$ENV{TMPDIR} or $TempDir="/tmp";
-my $CmdConsole="xterm -e ";
-
-if ($IsWin32) {
- $qq = "\"";
- $HomeEnv = &GetHomeDir;
- chomp $HomeEnv;
- $TeXDocRcDefaults = "texdocrc-win32.defaults";
- $TempDir = &GetTempPath;
- $CmdConsole = "command /c ";
-}
-
-my $myrc="${HomeEnv}/.texdocrc"; # optional personal settings file
-
-my ($line,@dummy);
-my @tmpfiles;
-# read system-wide defaults from texdocrc.defaults
-my $sysrc=`kpsewhich --progname=texdoctk --format=${qq}other text files${qq} ${TeXDocRcDefaults}`;
-my $database=`kpsewhich --progname=texdoctk --format=${qq}other text files${qq} texdoctk.dat`;
-my $locdatabase=`kpsewhich --progname=texdoctk --format=${qq}other text files${qq} texdoctk-local.dat`;
-my $homedatabase=`kpsewhich --progname=texdoctk --format=${qq}other text files${qq} texdoctk-pers.dat`;
-chomp $locdatabase;
-chomp $homedatabase;
-chomp $sysrc;
-&readrc($sysrc,1);
-@dummy=split("/",$sysrc);
-pop @dummy;
-$datadir=join('/',@dummy);
-# possibly use personal settings instead of defaults
-if (-e $myrc) { &readrc($myrc,2); }
-# command line options
-GetOptions('v'=>\$quiet,'a'=>\$autoview);
-my $special=0;
-my @button;
-$button[17]="Miscellaneous";
-my (@packname,@topic,@doc,@keywords,@maxind,%stydoc);
-# read database file
-my $i=-1;
-my $j;
-open(DATABASE,"$database") || &fatalmsg("Couldn't open database $database.\n");
-while ($line = <DATABASE>) {
- LINETYPE: {
- ($line =~ /^\@/) && do { # category
- ++$i;
- if ($i == $#button) {
- pop @button;
- push @button,(substr($line,1,-1));
- $special=1;
- } else {
- $button[$i]=substr($line,1,-1);
- }
- $j=0;
- last LINETYPE;
- };
- ($line =~ /^(#|$)/) && do { # comment or empty line
- last LINETYPE;
- };
-# list item
- @dummy=split(";",$line);
- $packname[$i][$j]=$dummy[0];
- $topic[$i][$j]=$dummy[1];
- $doc[$i][$j]=$dummy[2];
- $keywords[$i][$j]=$dummy[3];
- if ($doc[$i][$j] =~ /sty$/ && $keywords[$i][$j]) {
- $stydoc{"$doc[$i][$j]"}=substr($keywords[$i][$j],1,1);
- unless ($stydoc{"$doc[$i][$j]"} =~ /^\d$/) {
- $stydoc{"$doc[$i][$j]"}=0;
- }
- }
- $maxind[$i]=$j;
- ++$j;
- };
-}
-close(DATABASE);
-# Read site-local and user's database(s) if it/they exist(s)
-foreach my $dbfile ($locdatabase,$homedatabase) {
- if (-e "$dbfile") {
- open(DATABASE,"$dbfile") ||
- print "Couldn't open additional database $dbfile.\n";
- $i=17; # local/user: if no category is specified in database, add to "Misc"
- while ($line = <DATABASE>) {
- LINETYPE: {
- ($line =~ /^\@/) && do { # category
- $i=&arrindex(@button,substr($line,1,-1));
- if ($i >= $#button) {
- $i=$#button;
- pop @button;
- push @button,(substr($line,1,-1));
- $special=1;
- }
- last LINETYPE;
- };
- ($line =~ /^(#|$)/) && do { # comment or empty line
- last LINETYPE;
- };
-# list item
- @dummy=split(";",$line);
- $j=&arrindex(@{$packname[$i]},$dummy[0]);
- if ($j > $#{$packname[$i]}) {
- $packname[$i][$j]=$dummy[0];
- $topic[$i][$j]=$dummy[1];
- $doc[$i][$j]=$dummy[2];
- $keywords[$i][$j]=$dummy[3];
- if ($doc[$i][$j] =~ /sty$/ && $keywords[$i][$j]) {
- $stydoc{"$doc[$i][$j]"}=substr($keywords[$i][$j],1,1);
- unless ($stydoc{"$doc[$i][$j]"} =~ /^\d$/) {
- $stydoc{"$doc[$i][$j]"}=0;
- }
- }
- $maxind[$i]=$j;
- ++$j;
- }
- };
- }
- close(DATABASE);
- $special=1 if ($i == 17 && $j > 0);
- }
-}
-
-# Tk
-# hash table for toplevel windows; used to avoid multiple calls of same window
-my %tlwins;
-my %buttonlist;
-# create frames for main window: commands on top, frame for buttons below
-my $main=new MainWindow;
-$tlwins{'mainwindow'}{'addr'}=$main;
-$main->resizable(0,0);
-$main->title("TeX Documentation Browser");
-$main->bind('all','<Control-q>'=>\&clean_exit);
-$main->bind('all','<Control-m>'=>sub { $main->raise(); });
-$main->bind('all','<Control-h>'=>\&helptext);
-$main->bind('all','<Control-s>'=>sub { $main->raise(); &mksrch; });
-$main->bind('all','<Control-t>'=>\&settings);
-my $cmdframe=$main->Frame(-background=>"#ffcc99");
-my $buttonframe=$main->Frame;
-$cmdframe->pack(-side=>'top',-fill=>'x');
-$buttonframe->pack(-side=>'bottom');
-# normal cursor
-my $defcursor=$main->cget(-cursor);
-# make buttons for command frame
-my $Qbut=$cmdframe->Button(-text=>'Quit',%butcol,
- -command=>\&clean_exit)->pack(-side=>'left');
-$tlwins{'mainwindow'}{'buttons'}[0]=$Qbut;
-# define common default font for labels and text explicitly
-my $deffont=$Qbut->cget(-font);
-# ensure readability on high-res screens (suggested by R.Kotucha)
-$deffont='Helvetica -16 bold' if &x_resolution > 1200;
-$Qbut->configure(-font=>$deffont);
-$tlwins{'mainwindow'}{'buttons'}[1]=$cmdframe->Button(-text=>'Search',
- -font=>$deffont,%butcol,
- -command=>\&mksrch
- )->pack(-side=>'left');
-$tlwins{'mainwindow'}{'buttons'}[2]=$cmdframe->Button(-text=>'Help/About',
- -font=>$deffont,%butcol,
- -command=>\&helptext
- )->pack(-side=>'right');
-$tlwins{'mainwindow'}{'buttons'}[3]=$cmdframe->Button(-text=>'Settings',
- -font=>$deffont,%butcol,
- -command=>\&settings
- )->pack(-side=>'right');
-# make buttons for category button frame
-my $lbut=0;
-my $l;
-foreach (@button) { $l=length $_; $lbut=$l if ( $l > $lbut) }
-my @catg;
-my ($i2,$i3);
-my $nbutt=scalar @button;
-my $ncols=$nbutt/3-1;
-foreach (0..$ncols) {
- $i=$_;
- $i2=$i+$nbutt/3;
- $i3=$i+2*$nbutt/3;
- $catg[$i]=$buttonframe->Button(-text=>$button[$i],
- -font=>$deffont,%butcol,
- -width=>$lbut,
- -command=>[\&tpslct,$i,\@dummy])->grid
- ($catg[$i2]=$buttonframe->Button(-text=>$button[$i2],
- -font=>$deffont,%butcol,
- -width=>$lbut,
- -command=>[\&tpslct,$i2,\@dummy]),
- $catg[$i3]=$buttonframe->Button(-text=>$button[$i3],
- -font=>$deffont,%butcol,
- -width=>$lbut,
- -command=>[\&tpslct,$i3,\@dummy]));
-}
-# disable last button (lower right) if no local specials are found in list
-my $ncat;
-if ($special == 0) {
- $catg[$#button]->configure(-state=>'disabled');
- $ncat=$nbutt-1;
-} else {
- $ncat=$nbutt;
-}
-for ($i=0,$j=4; $i<@catg; ++$i,++$j) {
- $tlwins{'mainwindow'}{'buttons'}[$j]=$catg[$i];
-}
-MainLoop;
-
-########## SUBROUTINES ########################################################
-# toplevel for selecting a topic of a category for viewing or printing
-sub tpslct {
- my($opt,@srchitems)=@_;
- my (@lbitems,@lbdocs,$dspselect,$docselect,$wtitle);
- if ($opt >= 0) {
-# main window buttons
-# see if toplevel window is already there
- if (Exists($tlwins{$opt}{'addr'})) {
- $tlwins{$opt}{'addr'}->deiconify();
- $tlwins{$opt}{'addr'}->raise();
- return;
- }
- for ($j=0; $j <= $maxind[$opt]; ++$j) {
- push @lbitems,$topic[$opt][$j];
- push @lbdocs,$doc[$opt][$j];
- }
- $wtitle=$button[$opt];
- } else {
-# search results
- my $spec_wtitle=shift @srchitems;
- for ($j=0; $j < $#srchitems; $j+=2) {
- my $k=$j+1;
- push @lbitems,$topic[$srchitems[$j]][$srchitems[$k]];
- push @lbdocs,$doc[$srchitems[$j]][$srchitems[$k]];
- }
- $wtitle="Search results for $spec_wtitle";
- }
-# toplevel window of category $opt with two frames
- my $tpwin=$main->Toplevel(-title=>$wtitle);
- $tlwins{$opt}{'addr'}=$tpwin;
- my $tpdsp=$tpwin->Frame(-relief=>'groove')->pack(-side=>'top');
- my $tpslc=$tpwin->Frame()->pack(-side=>'top');
-# selection frame with listbox and buttons
-# label for listbox
- my $tplabel=$tpslc->Label(-text=>'Topics',
- -font=>$deffont)->pack(-anchor=>'w',
- -side=>'top');
-# listbox with optional scrollbar
- my $tplist=$tpslc->Scrolled("Listbox",
- -font=>$deffont,
- -scrollbars=>'osoe',
-# -height=>0,
- -width=>0,
- -selectmode=>'single',
- -exportselection=>0,
- -cursor=>'hand2')->pack(-side=>'left',
- -fill=>'y',
- -expand=>1);
- $tplist->insert('end',@lbitems); # fill topics into listbox
-# buttons frame
- my $tpbframe=$tpslc->Frame(-borderwidth=>8);
- $tpbframe->pack(-side=>'right');
-# make buttons for command frame
- my $n_buttons = 0;
- $tlwins{$opt}{'buttons'}[$n_buttons++]=
- $tpbframe->Button(-text=>'View',
- -font=>$deffont,%butcol,
- -command=>sub{ &viewslc($docselect,$tpbframe);},
- -width=>6)->pack(-side=>'top');
- if (! $IsWin32) {
- $tlwins{$opt}{'buttons'}[$n_buttons++]=
- $tpbframe->Button(-text=>'Print',
- -font=>$deffont,%butcol,
- -command=>sub{ &prtslc($docselect,$tpbframe);},
- -width=>6)->pack(-side=>'top');
- }
- $tlwins{$opt}{'buttons'}[$n_buttons++]=
- $tpbframe->Button(-text=>'Cancel',
- -font=>$deffont,%butcol,
- -command=>sub{ destroy $tpwin; undef $tlwins{$opt};},
- -width=>6)->pack(-side=>'bottom');
-# if only 1 item is in the list (most likely in search results), select it
- if (scalar @lbitems == 1) {
- $tplist->selectionSet(0);
- $dspselect=$lbitems[0];
- $docselect=$lbdocs[0];
- &viewslc($docselect,$tpbframe)
- if ($autoview && $wtitle =~ /^Search results/);
- }
-# display frame
- my $dsplabel=$tpdsp->Label(-text=>'Selection:',
- -font=>$deffont)->pack(-anchor=>'w',,
- -fill=>'x',
- -side=>'left');
- my $dspslc=$tpdsp->Label(-textvariable=>\$dspselect,
- -font=>$deffont,
- -borderwidth=>2)->pack(-anchor=>'w',
- -fill=>'x',
- -side=>'right');
-# handle selection; only one selection possible
- $tplist->bind('<Button-1>'=>sub{my ($slctind)=$tplist->curselection();
- $dspselect=$lbitems[$slctind];
- $docselect=$lbdocs[$slctind];});
-# key bindings
- $tplist->bind('<Double-Button-1>'=>sub{
- &viewslc($docselect,$tpbframe);});
- $tpwin->bind('<Control-v>'=>sub{
- &viewslc($docselect,$tpbframe);});
- $tpwin->bind('<Control-p>'=>sub{
- &prtslc($docselect,$tpbframe);});
- $tpwin->bind('<Control-c>'=>sub{destroy $tpwin; undef $tlwins{$opt};});
- $tplist->bind('<Button-3>'=>sub{
- if ($docselect) {
- &showpath($docselect,$tpbframe);
- } else {
- &popmsg(2,"No selection;\nuse left mouse button.",$tpbframe);
- }});
-}
-
-# view document selected in listbox
-sub viewslc {
- my($slc,$parframe)=@_;
- my $viewer;
- my $itype=-1;
- my $browser=0;
- my $styflag=0;
- unless (defined $slc) {
- &popmsg(2,"No selection was made.",$parframe);
- return;
- }
- $parframe->configure(-cursor=>'watch');
- chomp $slc;
- my @dummy=split('\.',$slc);
- DOC_FORMAT: { # determine document type
- ($dummy[-1] =~ /dvi/) && do { $viewer=$dvi_viewer; last DOC_FORMAT; };
- ($dummy[-1] =~ /ps/) && do { $viewer=$ps_viewer; last DOC_FORMAT; };
- ($dummy[-1] =~ /pdf/) && do { $viewer=$pdf_viewer; last DOC_FORMAT; };
- ($dummy[-1] =~ /txt/ || $dummy[-1] =~ /faq$/) && do {
- $viewer=($txt_viewer eq "TDK_OWN" ||
- $txt_viewer =~ /xterm/) ?
- $txt_viewer : "${CmdConsole} $txt_viewer";
- last DOC_FORMAT;
- };
- ($dummy[-1] =~ /README/i || $dummy[-2] =~ /\/README$/i) && do {
- $viewer=($txt_viewer eq "TDK_OWN" ||
- $txt_viewer =~ /xterm/) ?
- $txt_viewer : "${CmdConsole} $txt_viewer";
- last DOC_FORMAT;
- };
- ($dummy[-1] =~ /htm/) && do {
- $viewer=$html_viewer;
- if ($html_viewer =~ /netscape/i) { # check if Netscape is open
- my $lockfile="${HomeEnv}/.netscape/lock";
- $browser=1 if (-e $lockfile || -l $lockfile);
- } elsif ($html_viewer =~ /mozilla/i) { # check if Mozilla is open
- my $mozcheck=
- `mozilla -remote 'openFile($texmfmain/doc/index.html)'`;
- $browser=1 unless ($?);
- }
- last DOC_FORMAT;
- };
-# some packages have no normal documentation but useful info in the .sty
- ($dummy[-1] =~ /sty$/) && do {
- $viewer=($txt_viewer eq "TDK_OWN" ||
- $txt_viewer =~ /xterm/) ?
- $txt_viewer : "${CmdConsole} $txt_viewer";
- $slc="../tex/$slc"; # .sty files are in ${tex,local}docpath/../tex/
- $styflag=1;
- last DOC_FORMAT;
- };
- $parframe->configure(-cursor=>$defcursor);
- if ($xfmt_viewer != 1) {
- &popmsg(2,"$dummy[-1]: not a known document format",$parframe);
- return;
- }
- };
- if ($viewer eq "") {
- if ($xfmt_viewer == 1) {
- &popmsg(-1,'Unknown format; assuming plain text.',$parframe);
- $viewer=($txt_viewer eq "TDK_OWN" ||
- $txt_viewer =~ /xterm/) ?
- $txt_viewer : "${CmdConsole} $txt_viewer";
- } else {
- &popmsg(2,"$dummy[-1]: no viewer available/specified for this format",
- $parframe);
- $parframe->configure(-cursor=>$defcursor);
- return;
- }
- }
-# build complete path and start viewer if file exists
- my $slcdoc;
- $slcdoc=&finddoc($slcdoc,$slc,$parframe);
- if ($slcdoc ne "") {
-# change to doc directory in case there are pictures
- my $docpath=substr($slcdoc,0,(rindex($slcdoc,'/',(length $slcdoc))));
- chomp $slcdoc;
- chdir ($docpath);
-# try to get doc out of .sty file
- if ($styflag) {
- &popmsg(-1,'Trying to extract documentation out of .sty file;
-might be cluttered with program comments.',
- $parframe);
- $slcdoc=&stripsty($slcdoc,substr($slc,7));
- }
-# for text files use built-in text viewer if set
- if ($IsWin32) {
- if ($viewer eq "TDK_OWN") {
- &ShellExecute('open', $slcdoc);
- $parframe->configure(-cursor=>$defcursor);
- return;
- }
- else {
- system("$viewer $slcdoc");
- }
- }
- else {
- if ($viewer eq "TDK_OWN") {
- &textview($slcdoc);
- $parframe->configure(-cursor=>$defcursor);
- return;
- }
- if ($quiet == 0) { # show messages
- if ($browser == 0) { # normal viewers or new Netscape/Mozilla
- system("$viewer $slcdoc &");
- } else { # open doc in existing Netscape/Mozilla window
- system("$viewer -remote 'openFile($slcdoc)' &");
- &popmsg(-1,"Opening document in existing $viewer window.",
- $parframe);
- }
- } else { # viewer messages written to /dev/null instead of terminal
- if ($browser == 0) { # normal viewers or new Netscape/Mozilla
- system("perl -we 'use strict; \
-my \$dump=\"\"; \
-open(NULL,\">/dev/null\"); \
-open (VIEWQ,\"$viewer $slcdoc |\"); \
-while (\$dump=<VIEWQ>) { print NULL \$dump; } \
-close(VIEWQ); \
-close(NULL);' &");
- } else { # open doc in existing window (Netscape or Mozilla)
- # not quiet; I didn't get an inline perl call like in
- # the other branch working
- system("$viewer -remote 'openFile($slcdoc)' &");
- &popmsg(-1,"Opening document in existing $viewer window.",
- $parframe);
- }
- }
- }
- }
- $parframe->configure(-cursor=>$defcursor);
-}
-
-# Tk widget for text document
-sub textview {
- my($txtfile)=@_;
-# see if toplevel window with this file is already there
- if (Exists($tlwins{$txtfile}{'addr'})) {
- $tlwins{$txtfile}{'addr'}->deiconify();
- $tlwins{$txtfile}{'addr'}->raise();
- return;
- }
- my $tfv_tk=$main->Toplevel(-title=>"Text file viewer");
- $tfv_tk->resizable(0,1);
- $tlwins{$txtfile}{'addr'}=$tfv_tk;
- $tfv_tk->Label(-text=>"File: $txtfile",
- -font=>$deffont,
- -relief=>'ridge',
- -borderwidth=>3)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>10,
- -anchor=>'s');
- my $txtbody=$tfv_tk->Scrolled("Text",
- -relief=>'flat',
- -font=>$deffont,
- -height=>20,
- -width=>80,
- -scrollbars=>"e")->pack(-side=>'top',
- -fill=>'y',
- -expand=>1);
- open(TXTFILE,"$txtfile");
- while (<TXTFILE>) { $txtbody->insert('end',$_); }
- close(TXTFILE);
- $txtbody->configure(-state=>'disabled');
- $tlwins{$txtfile}{'buttons'}[0]=
- $tfv_tk->Button(-text=>'Close',
- -font=>$deffont,%butcol,
- -command=>sub{ destroy $tfv_tk;
- undef $tlwins{$txtfile};
- })->pack(-side=>'bottom',
- -fill=>'x');
- $tfv_tk->bind('<Control-c>'=>sub{destroy $tfv_tk;
- undef $tlwins{$txtfile};
- });
-}
-
-# print document selected in listbox
-sub prtslc {
- my($slc,$parframe)=@_;
- $tmpfno=&randname;
- my $pstmpfile="${TempDir}/texdoc_$tmpfno.ps";
- push @tmpfiles,$pstmpfile;
- my $status;
- chomp $slc;
- unless (defined $slc) {
- &popmsg(2,"No selection was made.",$parframe);
- return;
- }
- if ($print_cmd eq "") {
- &popmsg(2,"No printer specified.",$parframe);
- return;
- }
-# build complete path and check existence of file
- my @dummy=split('\.',$slc);
- if ($dummy[-1] =~ /sty$/) {
- $slc="../tex/$slc"; # .sty files are in ${tex,local,home}docpath/../tex
- }
- my $slcdoc;
- $slcdoc=&finddoc($slcdoc,$slc,$parframe);
- return if ($slcdoc eq "");
-# change to doc directory in case there are pictures
- my $docpath=substr($slcdoc,0,(rindex($slcdoc,'/',(length $slcdoc))));
- chdir ($docpath);
- DOC_FORMAT: { # determine document type
-# convert dvi files to ps before printing
- ($dummy[-1] =~ /dvi/) && do {
- if ($dvips_conv eq "") {
- &popmsg(2,"No converter available for dvi->ps conversion.",
- $parframe);
- return;
- }
- &popmsg(-1,"Converting dvi to ps for printing and sending file to print...",$parframe);
- $status=system("$dvips_conv $slcdoc -o $pstmpfile");
- if ($status != 0) {
- &popmsg(2,"Error: Conversion dvi->ps failed!",$parframe);
- }
- last DOC_FORMAT;
- };
-# PostScript is printed directly
- ($dummy[-1] =~ /ps/) && do {
- &popmsg(-1,"Sending file to $print_cmd...",$parframe);
- $pstmpfile=$slcdoc;
- last DOC_FORMAT;
- };
-# convert pdf files to ps before printing
- ($dummy[-1] =~ /pdf/) && do {
- if ($pdfps_conv eq "") {
- &popmsg(2,"No converter available for pdf->ps conversion.",
- $parframe);
- return;
- }
- &popmsg(-1,"Converting pdf to ps for printing and sending file to print...",$parframe);
- system("$pdfps_conv $slcdoc $pstmpfile");
- last DOC_FORMAT;
- };
-# convert html files to ps before printing
- ($dummy[-1] =~ /htm/) && do {
- if ($htmlps_conv eq "") {
- &popmsg(2,"No converter available for html->ps conversion.",
- $parframe);
- return;
- }
- &popmsg(-1,"Converting html to ps for printing and sending file to print...",$parframe);
- my $htmlps_redir_sign=($htmlps_redir == 1) ? ">" :"";
- system("$htmlps_conv $slcdoc $htmlps_redir_sign $pstmpfile");
- last DOC_FORMAT;
- };
-# convert txt files to ps before printing
- ($dummy[-1] =~ /txt/ || $dummy[-1] =~ /faq$/
- || $dummy[-1] =~ /README/i) && do {
- if ($txtps_conv eq "") {
- &popmsg(2,"No converter available for txt->ps conversion.",
- $parframe);
- return;
- }
- &popmsg(-1,"Converting txt to ps for printing and sending file to print...",$parframe);
- my $txtps_redir_sign=($txtps_redir == 1) ? ">" :"";
- system("$txtps_conv $slcdoc $txtps_redir_sign $pstmpfile");
- last DOC_FORMAT;
- };
-# convert extracted comments from sty files to ps before printing
- ($dummy[-1] =~ /sty$/) && do {
- if ($txtps_conv eq "") {
- &popmsg(2,"No converter available for sty(txt)->ps conversion.",
- $parframe);
- return;
- }
- &popmsg(-1,"Converting sty(txt) to ps for printing and sending file to print...",$parframe);
-# try to get doc out of .sty file
- &popmsg(-1,'Trying to extract documentation out of .sty file;
-might be cluttered with program comments.',
- $parframe);
- $slcdoc=&stripsty($slcdoc,substr($slc,7));
- my $txtps_redir_sign=($txtps_redir == 1) ? ">" :"";
- system("$txtps_conv $slcdoc $txtps_redir_sign $pstmpfile");
- last DOC_FORMAT;
- };
- &popmsg(2,"$dummy[-1]: cannot print document format",$parframe);
- return;
- };
- system("$print_cmd $pstmpfile");
-}
-
-# test existence and search a documentation which is not in specified place
-sub finddoc {
- my($slcdoc,$slc,$parframe)=@_;
- my ($dummy,$status);
- SLCDOCFIND: foreach ($texdocpath,$distdocpath,$docdocpath) {
- $slcdoc="$_/$slc";
- if (-e $slcdoc) {
-# found where it should be
- return $slcdoc;
- } else {
-# see if the documentation file is in the local doc tree...
- my @srchslcdoc=($slcdoc);
- if ($localdocpath) {
- push @srchslcdoc,"$localdocpath/$slc";
- return $srchslcdoc[-1] if (-e $srchslcdoc[-1]);
- }
-# ... or the user's doc tree...
- if ($homedocpath) {
- push @srchslcdoc,"$homedocpath/$slc";
- return $srchslcdoc[-1] if (-e $srchslcdoc[-1]);
- }
-# ... otherwise proceed with searching
- $status=-1;
-# see if the documentation file is compressed
- CMPREND: foreach my $cmprtype ("gz","bz2","zip") {
- foreach (@srchslcdoc) {
- $dummy="$_.$cmprtype";
- if (-e $dummy) { # yes, it is compressed
- $tmpfno=&randname;
- my $rawname=basename($slc,"");
- $slcdoc="${TempDir}/texdoc_$tmpfno$rawname";
- push @tmpfiles,$slcdoc;
- my ($dcmp,$dcmp_opt);
- COMPRESS: { # determine compression type
- ($cmprtype eq "gz") && do {
- $dcmp="gzip";
- $dcmp_opt="-cd";
- last COMPRESS;
- };
- ($cmprtype eq "bz2") && do {
- $dcmp="bzip2";
- $dcmp_opt="-cd";
- last COMPRESS;
- };
- ($cmprtype eq "zip") && do {
- $dcmp="zip";
- $dcmp_opt="-p";
- last COMPRESS;
- };
- };
-# try to decompress
- $status=system("$dcmp $dcmp_opt $dummy > $slcdoc");
- if ($status != 0) { # failure
- &popmsg(2,
- "$dcmp: Couldn't decompress file, cancelling.",
- $parframe);
- $slcdoc="";
- return $slcdoc;
- }
-# last CMPREND; does not work, what we need is:
- return $slcdoc;
- }
- }
- }
- }
- }
- if ($status != 0) {
- $parframe->configure(-cursor=>'watch');
-# try to find it elsewhere with kpsewhich
- my $rawname=basename($slc,"");
- $slcdoc=($slcdoc =~ /\.sty$/) ?
- `kpsewhich $rawname` :
- `kpsewhich --format=${qq}TeX system documentation${qq} $rawname`;
- if ($slcdoc eq "") { # nothing found; cancel
- &popmsg(2,"$rawname not found, cancelling.",$parframe);
- $slcdoc="";
- }
- $parframe->configure(-cursor=>$defcursor);
- }
- return $slcdoc;
-}
-
-# determine existence and show paths of files (Button-3)
-sub showpath {
- my ($docselect,$tpbframe)=@_;
- my $found=0;
- if ($docselect =~ /\.sty$/) {
- STYPATH: foreach my $fullpath ("$texmfmain/tex/$docselect",
- "$texmfdist/tex/$docselect",
- "$texmflocal/tex/$docselect",
- "$texmfhome/tex/$docselect") {
- if (-e $fullpath) {
- &popmsg(0,"Selected file:\n$fullpath",$tpbframe);
- $found=1;
- last STYPATH;
- }
- }
- if (!$found) {
- &popmsg(2,"Selected file:\n$docselect\ndoes not exist.",$tpbframe) }
- } else {
- DOCPATH: foreach my $fullpath ("$texdocpath/$docselect",
- "$distdocpath/$docselect",
- "$docdocpath/$docselect",
- "$localdocpath/$docselect",
- "$homedocpath/$docselect") {
- foreach ('','.gz','.bz2','.zip') {
- my $fullpathext="$fullpath$_";
- if (-e $fullpathext) {
- &popmsg(0,"Selected file:\n$fullpathext",$tpbframe);
- $found=1;
- last DOCPATH;
- }
- }
- }
- if (!$found) {
- &popmsg(2,"Selected file:\n$docselect\ndoes not exist (neither in normal form nor compressed).",$tpbframe) }
- }
-}
-
-# make or destroy search entry widget
-sub mksrch {
- if ($srchflag == 1) {
- destroy $srchentry;
- $srchflag=0;
- } else {
-# get the search string
- $srchentry=$cmdframe->Entry(-cursor=>'xterm',
- -font=>$deffont,
- -width=>20,
- -takefocus=>1)->pack(-side=>'left');
- $srchentry->focus();
- $srchentry->bind('<Return>'=>[\&srchstr, $srchentry]);
- $srchflag=1;
-# key binding
- $srchentry->bind('<Control-c>'=>sub{destroy $srchentry; $srchflag=0;});
- }
-}
-
-# search a string in @packname, @topic and @keywords
-sub srchstr {
- my ($i,$j,$string);
- my (@results,@reslist);
- $main->configure(-cursor=>'watch');
- $string=$srchentry->get();
-# search
- if ($string) {
- for ($i=0; $i<$ncat; ++$i) {
- for ($j=0; $j<$maxind[$i]+1; ++$j) {
- SRCH: {
- ($topic[$i][$j] =~ /$string/i) && do {
- push @results,($i,$j);
- last SRCH;
- };
- (defined $keywords[$i][$j]) && do {
- if ($keywords[$i][$j] =~ /$string/i) {
- push @results,($i,$j);
- last SRCH;
- }
- };
- ($packname[$i][$j] =~ /$string/i) && do {
- push @results,($i,$j);
- last SRCH;
- };
- };
- }
- }
- } else { # return full database
- $string='all database entries';
- for ($i=0; $i<$ncat; ++$i) {
- for ($j=0; $j<$maxind[$i]+1; ++$j) { push @results,($i,$j); }
- }
- }
-# destroy entry widget and show results
- destroy $srchentry;
- $srchflag=0;
- if (scalar @results == 0) {
- &popmsg(0,"Search for $string: no matches found.",$cmdframe);
- } else {
-# cancel multiple entries
- my ($omit,$pack1,$pack2);
- @reslist=($results[0],$results[1]);
- for ($i=0; $i<$#results; $i+=2) {
- $omit=0;
- $pack1=$packname[$results[$i]][$results[$i+1]];
- for ($j=0; $j<$#reslist; $j+=2) {
- $pack2=$packname[$reslist[$j]][$reslist[$j+1]];
- if ($pack1 eq $pack2) { $omit=1; last; }
- }
- if ($omit == 0) { push @reslist,($results[$i],$results[$i+1]); }
- }
- unshift @reslist,$string;
- &tpslct(-1,@reslist);
- }
- $main->configure(-cursor=>$defcursor);
-}
-
-# extract documentation of .sty files; a flag in the @keywords array shows
-# where the doc is located:
-# -0-: no specific place; -1-: at end, behind \endinput; -2-: at beginning,
-# terminated by %%%%%%; -3-: at beginning, terminated with blank line
-sub stripsty {
- my ($slcdoc,$slc)=@_;
- my @stydoc;
- $tmpfno=&randname;
- my $tmpslcdoc="${TempDir}/texdoc_$tmpfno.txt";
- push @tmpfiles,$tmpslcdoc;
- open (STY,"$slcdoc");
- LOC: {
- ($stydoc{$slc} == 0) && do { # no specific place, suck in everything :-(
- while ($line = <STY>) { push @stydoc,$line if ($line =~ /^%/); }
- last LOC;
- };
- ($stydoc{$slc} == 1) && do { # at end, behind \endinput
- while ($line = <STY>) {
- last if ($line =~ /^\s*\\endinput/ && !($line =~ /^%/));
- }
- while ($line = <STY>) { push @stydoc,$line; }
- last LOC;
- };
- ($stydoc{$slc} == 2) && do { # up to a certain %%%%%%%, hopefully the 1st
- for (my $i=0; $i<9; ++$i) { $stydoc[$i]=<STY>; } # after the 8th line
- while ($line = <STY>) {
- last if ($line =~ /^%{4,}/);
- push @stydoc,$line;
- }
- last LOC;
- };
- ($stydoc{$slc} == 3) && do { # up to 1st blank/apparently empty line
- while ($line = <STY>) {
- last if ($line =~ /^\s*$/);
- push @stydoc,$line;
- }
- last LOC;
- };
- };
- close(STY);
- open(TMPSTY,">$tmpslcdoc");
- foreach (@stydoc) { print TMPSTY $_; }
- close(TMPSTY);
- return $tmpslcdoc;
-}
-
-# pop up a note or an error or warning message toplevel window
-sub popmsg {
- my($level,$msg,$parframe)=@_;
- my $degree;
- LEVEL: {
- ($level == -1) && do { $degree="Info"; last LEVEL; };
- ($level == 0) && do { $degree="Note"; last LEVEL; };
- ($level == 1) && do {
- return if ($quiet == 1);
- $degree="Warning";
- last LEVEL
- };
- ($level == 2) && do { $degree="Error"; last LEVEL; };
- };
- my $msgwin=$parframe->Toplevel(-title=>$degree);
- my $lbl=$msgwin->Label(-text=>uc($degree),
- -font=>$deffont)->pack(-side=>'top', -fill=>'x');
-# get size of message text
- my @dummy=split("\n",$msg);
- my $nline=scalar @dummy;
- my $msgwidth=0;
- my $lline;
- foreach (@dummy) {
- $lline=length $_;
- if ($lline > $msgwidth) { $msgwidth=$lline; }
- }
- my $message=$msgwin->Text(-relief=>'flat',
- -font=>$deffont,
- -height=>$nline,
- -width=>$msgwidth)->pack(-side=>'top');
- $message->insert('end',$msg);
- $message->configure(-state=>'disabled');
- if ($level < 0) { # transient message window
- $msgwin->after(3000,sub{destroy $msgwin});
- } else { # persistent message window
- $msgwin->Button(-text=>'Close',
- -font=>$deffont,%butcol,
- -command=>sub{destroy $msgwin})->pack(-side=>'bottom',
- -fill=>'x');
- $msgwin->bind('<Control-c>'=>sub{destroy $msgwin});
- }
-}
-
-# show/change settings (don't show this to an expert :-/ )
-sub settings {
- my ($homedocpath_tmp,$quiet_tmp,$autoview_tmp,$xfmt_viewer_tmp,
- $dvi_viewer_tmp,$dvips_conv_tmp,
- $ps_viewer_tmp,$pdf_viewer_tmp,$pdfps_conv_tmp,
- $html_viewer_tmp,$htmlps_conv_tmp,$htmlps_redir_tmp,
- $txt_viewer_tmp,$txtps_conv_tmp,$txtps_redir_tmp,$print_cmd_tmp)=
- ($homedocpath,$quiet,$autoview,$xfmt_viewer,
- $dvi_viewer,$dvips_conv,$ps_viewer,
- $pdf_viewer,$pdfps_conv,$html_viewer,
- $htmlps_conv,$htmlps_redir,$txt_viewer,
- $txtps_conv,$txtps_redir,$print_cmd);
- my @tdcolors_tmp=@tdcolors;
-# see if toplevel window is already there
- if (Exists($tlwins{"setmenu"}{'addr'})) {
- $tlwins{"setmenu"}{'addr'}->deiconify();
- $tlwins{"setmenu"}{'addr'}->raise();
- return;
- }
- my $setmenu=$main->Toplevel(-title=>'Settings');
- $setmenu->resizable(0,0);
- $tlwins{"setmenu"}{'addr'}=$setmenu;
-# documentation path
- my $datlabel;
- $datlabel="Database file(s) used: teTeX";
- $datlabel.=", local database" if (-e $locdatabase);
- $datlabel.=", user database" if (-e $homedatabase);
- my $docframe=$setmenu->Frame(-relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -expand=>1);
- my $docframestring="\nDistribution documentation root path(s):\n$texdocpath";
- $docframestring.=", $distdocpath" if (-e $distdocpath);
- $docframestring.=", $docdocpath" if (length $docdocpath);
- if ($localdocpath && $localdocpath ne $texdocpath) {
- $docframestring.="\nLocal documentation root path: $localdocpath\n";
- }
- $docframe->Label(-text=>"$docframestring",
- -font=>$deffont)->pack(-side=>'top',
- -anchor=>'w',
- -fill=>'x',
- -expand=>1);
- if (defined $texmfhome && -d $texmfhome) {
- $homedocpath_tmp=basename($homedocpath_tmp,"");
- my $usrdocframe=$docframe->Frame(-relief=>'flat')->pack(-side=>'top',
- -fill=>'x');
- my $usrdoclabel=$usrdocframe->Label(-text=>"User's documentation root path: $texmfhome/",
- -font=>$deffont)->pack(-side=>'left');
- my $usrdocentry=$usrdocframe->Entry(-textvariable=>\$homedocpath_tmp,
- -font=>$deffont)->pack(-side=>'left');
- }
- $docframe->Label(-text=>"$datlabel.",
- -font=>$deffont)->pack(-side=>'top',
- -anchor=>'w',
- -ipady=>2,
- -fill=>'x',
- -expand=>1);
-# General viewer behaviour
- my $genvframe=$setmenu->Frame(-label=>'General viewer behaviour',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>6,
- -expand=>1);
- my $genvframe1=$genvframe->Frame()->pack(-side=>'left');
- my $genvsub1=$genvframe1->Frame()->pack(-side=>'top',
- -anchor=>'w',
- -ipady=>3);
- my $genvecbut=$genvsub1->
- Checkbutton(-variable=>\$quiet_tmp)->pack(-side=>'left',
- -anchor=>'sw');
- my $genvelabel=$genvsub1->Label(-text=>'Suppress error messages',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $genvsub2=$genvframe1->Frame()->pack(-side=>'top',
- -anchor=>'w');
- my $genvscbut=$genvsub2->
- Checkbutton(-variable=>\$autoview_tmp)->pack(-side=>'left',
- -anchor=>'sw');
- my $genvslabel=$genvsub2->Label(-text=>'Autostart viewer for one-item listboxes',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $genvsub3=$genvframe1->Frame()->pack(-side=>'top',
- -anchor=>'w');
- my $genvxcbut=$genvsub3->
- Checkbutton(-variable=>\$xfmt_viewer_tmp)->pack(-side=>'left',
- -anchor=>'sw');
- my $genvxlabel=$genvsub3->Label(-text=>'Use text viewer for unknown file format',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
-# colours of GUI
- my @tdcolors_d=@tdcolors_tmp;
- $tlwins{'setmenu'}{'buttons'}[0]=
- $genvframe->Button(-text=>'Change viewer colours',
- -command=>sub {
- @tdcolors_tmp=&popcolor($setmenu,@tdcolors_tmp);
- @tdcolors_d=@tdcolors_tmp;
- },
- -font=>$deffont,%butcol)->pack(-side=>'right');
-# DVI
- my $dviframe=$setmenu->Frame(-label=>'DVI',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>6,
- -expand=>1);
- my $dvisub1=$dviframe->Frame()->pack(-side=>'top',
- -anchor=>'w');
- my $dvisub2=$dviframe->Frame()->pack(-side=>'top',
- -anchor=>'w',
- -ipady=>6);
- my $dvivlabel=$dvisub1->Label(-text=>'Viewer command',
- -anchor=>'w',
- -font=>$deffont)->pack(-side=>'left');
- my $dviventry=$dvisub1->Entry(-textvariable=>\$dvi_viewer_tmp,
- -font=>$deffont)->pack(-side=>'left');
- my $dviclabel=$dvisub2->Label(-text=>'DVI->PS converter command',
- -anchor=>'w',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $dvilbwidth=length 'DVI->PS converter command';
- $dvivlabel->configure(-width=>1.1*$dvilbwidth);
- $dviclabel->configure(-width=>1.1*$dvilbwidth);
- my $dvicentry=$dvisub2->Entry(-textvariable=>\$dvips_conv_tmp,
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
-# PostScript
- my $psframe=$setmenu->Frame(-label=>'PostScript',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>10,
- -expand=>1);
- my $psvlabel=$psframe->Label(-text=>'Viewer command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'w');
- my $psventry=$psframe->Entry(-textvariable=>\$ps_viewer_tmp,
- -font=>$deffont)->pack(-side=>'left');
-# PDF
- my $pdfframe=$setmenu->Frame(-label=>'PDF',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>6,
- -expand=>1);
- my $pdfsub1=$pdfframe->Frame()->pack(-side=>'top',
- -anchor=>'w');
- my $pdfsub2=$pdfframe->Frame()->pack(-side=>'top',
- -anchor=>'w',
- -ipady=>6);
- my $pdfvlabel=$pdfsub1->Label(-text=>'Viewer command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'w');
- my $pdfventry=$pdfsub1->Entry(-textvariable=>\$pdf_viewer_tmp,
- -font=>$deffont)->pack(-side=>'left');
- my $pdfclabel=$pdfsub2->Label(-text=>'PDF->PS converter command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $pdfcentry=$pdfsub2->Entry(-textvariable=>\$pdfps_conv_tmp,
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
-# HTML
- my $htmlframe=$setmenu->Frame(-label=>'HTML',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>6,
- -expand=>1);
- my $htmlsub1=$htmlframe->Frame()->pack(-side=>'top',
- -anchor=>'w');
- my $htmlsub2=$htmlframe->Frame()->pack(-side=>'top',
- -anchor=>'w',
- -ipady=>6);
- my $htmlvlabel=$htmlsub1->Label(-text=>'Viewer command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'w');
- my $htmlventry=$htmlsub1->Entry(-textvariable=>\$html_viewer_tmp,
- -font=>$deffont)->pack(-side=>'left');
- my $htmlclabel=$htmlsub2->Label(-text=>'HTML->PS converter command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $htmlcentry=$htmlsub2->Entry(-textvariable=>\$htmlps_conv_tmp,
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $htmlrlabel=$htmlsub2->Label(-text=>'Output redirect needed',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $htmlrcbut=$htmlsub2->
- Checkbutton(-variable=>\$htmlps_redir_tmp)->pack(-side=>'left',
- -anchor=>'sw');
-# plain text
- my $txtframe=$setmenu->Frame(-label=>'Plain text',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>6,
- -expand=>1);
- my $txtsub1=$txtframe->Frame()->pack(-side=>'top',
- -anchor=>'w');
- my $txtsub2=$txtframe->Frame()->pack(-side=>'top',
- -anchor=>'w',
- -ipady=>6);
- my $txtvlabel=$txtsub1->Label(-text=>'Viewer command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'w');
- my $txtventry=$txtsub1->Entry(-textvariable=>\$txt_viewer_tmp,
- -font=>$deffont)->pack(-side=>'left');
- my $txt_view_flag;
- if ($txt_viewer_tmp eq "TDK_OWN") {
- $txt_view_flag=1;
- $txtventry->configure(-state=>'disabled');
- } else {
- $txt_view_flag=0;
- $txtventry->configure(-state=>'normal');
- }
- my $txtvilabel=$txtsub1->Label(-text=>"\tUse texdoctk\'s own viewer",
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $txtvcbut=$txtsub1->
- Checkbutton(-variable=>\$txt_view_flag,
- -command=>sub {
- if ($txt_view_flag == 1) {
- $txt_viewer_tmp="TDK_OWN";
- $txtventry->configure(-state=>'disabled');
- } else {
- $txt_viewer_tmp=$txt_viewer;
- $txtventry->configure(-state=>'normal');
- $txtventry->focus();
- }
- })->pack(-side=>'left',
- -anchor=>'sw');
- my $txtclabel=$txtsub2->Label(-text=>'Text->PS converter command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $txtcentry=$txtsub2->Entry(-textvariable=>\$txtps_conv_tmp,
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $txtrlabel=$txtsub2->Label(-text=>'Output redirect needed',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $txtrcbut=$txtsub2->
- Checkbutton(-variable=>\$txtps_redir_tmp)->pack(-side=>'left',
- -anchor=>'sw');
-# printer
- my $prtframe=$setmenu->Frame(-label=>'Printer',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>10,
- -expand=>1);
- my $prtclabel=$prtframe->Label(-text=>'Command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'w');
- my $prtcentry=$prtframe->Entry(-textvariable=>\$print_cmd_tmp,
- -font=>$deffont)->pack(-side=>'left');
-# buttons and key bindings
- my $setbfr=$setmenu->Frame()->pack(-side=>'bottom');
- $tlwins{'setmenu'}{'buttons'}[1]=
- $setbfr->Button(-text=>'OK',
- -font=>$deffont,%butcol,
- -command=>sub{
- $homedocpath="$texmfhome/$homedocpath_tmp";
- ($quiet,$autoview,$xfmt_viewer,
- $dvi_viewer,$dvips_conv,
- $ps_viewer,$pdf_viewer,
- $pdfps_conv,$html_viewer,
- $htmlps_conv,$htmlps_redir,
- $txt_viewer,$txtps_conv,$txtps_redir,$print_cmd)=
- ($quiet_tmp,$autoview_tmp,$xfmt_viewer_tmp,
- $dvi_viewer_tmp,$dvips_conv_tmp,
- $ps_viewer_tmp,
- $pdf_viewer_tmp,$pdfps_conv_tmp,
- $html_viewer_tmp,
- $htmlps_conv_tmp,$htmlps_redir_tmp,
- $txt_viewer_tmp,$txtps_conv_tmp,
- $txtps_redir_tmp,$print_cmd_tmp);
- @tdcolors=@tdcolors_tmp;
- %butcol=('-background'=>$tdcolors[0],
- '-foreground'=>$tdcolors[1],
- '-activebackground'=>$tdcolors[2],
- '-activeforeground'=>$tdcolors[3]);
- foreach my $tlkey (keys %tlwins) {
- foreach (@{$tlwins{$tlkey}{'buttons'}}) {
- $_->configure(%butcol);
- }
- }
- if ($txt_viewer eq "" &&
- defined $ENV{PAGER}) {
- $txt_viewer=$ENV{PAGER};
- }
- destroy $setmenu},
- -width=>6)->pack(-side=>'left',
- -padx=>10,
- -pady=>10);
- $tlwins{'setmenu'}{'buttons'}[2]=
- $setbfr->Button(-text=>'Save',
- -font=>$deffont,%butcol,
- -command=>sub{
- $setmenu->configure(-cursor=>'watch');
- &popmsg(-1,"Writing settings to $myrc",$setmenu);
- my $tdcolors_tmp=join(' ',@tdcolors_tmp);
- &writerc($homedocpath_tmp,
- $quiet_tmp,$autoview_tmp,$xfmt_viewer_tmp,
- $tdcolors_tmp,
- $dvi_viewer_tmp,$dvips_conv_tmp,
- $ps_viewer_tmp,
- $pdf_viewer_tmp,$pdfps_conv_tmp,
- $html_viewer_tmp,
- $htmlps_conv_tmp,$htmlps_redir_tmp,
- $txt_viewer_tmp,$txtps_conv_tmp,
- $txtps_redir_tmp,$print_cmd_tmp,$setmenu);
- $setmenu->configure(-cursor=>$defcursor);
- })->pack(-side=>'left',
- -padx=>10);
- $tlwins{'setmenu'}{'buttons'}[3]=
- $setbfr->Button(-text=>'Cancel',
- -font=>$deffont,%butcol,
- -command=>sub{destroy $setmenu;
- undef $tlwins{"setmenu"};
- })->pack(-side=>'left',
- -padx=>10);
- $setmenu->bind('<Control-c>'=>sub{destroy $setmenu;
- undef $tlwins{"setmenu"};});
-}
-
-# dialog toplevel for color settings
-sub popcolor {
- my ($parframe,@entryvar)=@_;
-# see if toplevel window is already there
- if (Exists($tlwins{'chngcol'}{'addr'})) {
- $tlwins{'chngcol'}{'addr'}->deiconify();
- $tlwins{'chngcol'}{'addr'}->raise();
- return;
- }
- my $dlgwin=$parframe->Toplevel(-title=>'Change colours');
- $dlgwin->resizable(0,0);
- $tlwins{'chngcol'}{'addr'}=$dlgwin;
-# entry widgets for default/active back/foreground
- $dlgwin->Label(-text=>'Enter colours as names or RGB #xxxxxx values',
- -font=>$deffont)->pack(-side=>'top');
- my $dlgdef=$dlgwin->Frame()->pack(-side=>'top');
- my $dlgact=$dlgwin->Frame()->pack(-side=>'top');
- my $dlgdef1=$dlgdef->Frame()->pack(-side=>'left');
- my $dlgtfr0=$dlgdef1->Frame()->pack(-side=>'top');
- my $dlgtfr1=$dlgdef1->Frame()->pack(-side=>'top');
- my $dlgact1=$dlgact->Frame()->pack(-side=>'left');
- my $dlgtfr2=$dlgact1->Frame()->pack(-side=>'top');
- my $dlgtfr3=$dlgact1->Frame()->pack(-side=>'top');
- $dlgtfr0->Label(-text=>"Default background",
- -anchor=>'w',
- -width=>18,
- -font=>$deffont)->pack(-side=>'left');
- $dlgtfr0->Entry(-textvariable=>\$entryvar[0],
- -font=>$deffont)->pack(-side=>'left');
- $dlgtfr1->Label(-text=>"Default foreground",
- -anchor=>'w',
- -width=>18,
- -font=>$deffont)->pack(-side=>'left');
- $dlgtfr1->Entry(-textvariable=>\$entryvar[1],
- -font=>$deffont)->pack(-side=>'left');
- my $deflabel=$dlgdef->Label(-text=>'Default',
- -relief=>'ridge',
- -width=>10,
- -height=>2)->pack(-side=>'right',
- -padx=>7);
- $dlgtfr2->Label(-text=>"Active background",
- -anchor=>'w',
- -width=>18,
- -font=>$deffont)->pack(-side=>'left');
- $dlgtfr2->Entry(-textvariable=>\$entryvar[2],
- -font=>$deffont)->pack(-side=>'left');
- $dlgtfr3->Label(-text=>"Active foreground",
- -anchor=>'w',
- -width=>18,
- -font=>$deffont)->pack(-side=>'left');
- $dlgtfr3->Entry(-textvariable=>\$entryvar[3],
- -font=>$deffont)->pack(-side=>'left');
- my $actlabel=$dlgact->Label(-text=>'Active',
- -background=>$entryvar[2],
- -foreground=>$entryvar[3],
- -relief=>'ridge',
- -width=>10,
- -height=>2)->pack(-side=>'right',
- -padx=>7);
-# buttons
- my $setbfr=$dlgwin->Frame()->pack(-side=>'bottom');
- my $chngflag=0;
- $tlwins{'chngcol'}{'buttons'}[0]=
- $setbfr->Button(-text=>'OK',
- -font=>$deffont,%butcol,
- -command=>sub {
- foreach (@entryvar) { # RGB form with leading #
- $_="#$_" if (/^[A-Fa-f0-9]{6}$/);
- }
- $chngflag=1 if (&colcheck($dlgwin,@entryvar));
- },
- -width=>6)->pack(-side=>'left',
- -padx=>5,
- -pady=>10);
- $tlwins{'chngcol'}{'buttons'}[1]=
- $setbfr->Button(-text=>'Preview',
- -font=>$deffont,%butcol,
- -command=>sub {
- foreach (@entryvar) { # RGB form with leading #
- $_="#$_" if (/^[A-Fa-f0-9]{6}$/);
- }
- if (&colcheck($dlgwin,@entryvar)) {
- $deflabel->
- configure(-background=>$entryvar[0],
- -foreground=>$entryvar[1]);
- $actlabel->
- configure(-background=>$entryvar[2],
- -foreground=>$entryvar[3]);
- }
- },
- -width=>6)->pack(-side=>'left',
- -padx=>5,
- -pady=>10);
- $tlwins{'chngcol'}{'buttons'}[2]=
- $setbfr->Button(-text=>'Cancel',
- -font=>$deffont,%butcol,
- -command=>sub{destroy $dlgwin;
- undef $tlwins{'chngcol'};
- })->pack(-side=>'right',
- -padx=>5,
- -pady=>10);
- $dlgwin->bind('<Control-c>'=>sub{destroy $dlgwin;
- undef $tlwins{'chngcol'}; });
- $dlgwin->waitVariable(\$chngflag);
- destroy $dlgwin;
- undef $tlwins{'chngcol'};
- return @entryvar;
-}
-
-# check colours set in popcolor; relies on the existence of X11's showrgb
-sub colcheck {
- my ($dlgwin,@entryvar)=@_;
- my $ecnt=0;
- foreach (@entryvar) { # all colours defined?
- last unless ($_);
- ++$ecnt;
- }
- &popmsg(2,'Some colours undefined.',$dlgwin) if ($ecnt != 4);
- my $defcol=0;
- if (`which showrgb`) { # test for proper name
- my @rgb=`showrgb`;
- my @norgb;
- foreach my $colour (@entryvar) {
- if ($colour =~ /^#[A-Fa-f0-9]{6}$/ || grep /\b$colour\b/i,@rgb) {
- ++$defcol;
- } else {
- push @norgb,$colour;
- }
- }
- if ($defcol != 4) {
- my $norgb=join("\n",@norgb);
- &popmsg(2,"Some colours invalid:\n$norgb",$dlgwin);
- }
- } else { $defcol=4; }
- return ($ecnt == 4 && $defcol == 4) ? 1 : 0;
-}
-
-# write user's ~/.texdocrc
-sub writerc {
- use File::Copy qw/cp mv/;
- my ($homedocpath_tmp,$quiet_tmp,$autoview_tmp,$xfmt_viewer_tmp,
- $tdcolors_tmp,
- $dvi_viewer_tmp,$dvips_conv_tmp,
- $ps_viewer_tmp,
- $pdf_viewer_tmp,$pdfps_conv_tmp,
- $html_viewer_tmp,
- $htmlps_conv_tmp,$htmlps_redir_tmp,
- $txt_viewer_tmp,$txtps_conv_tmp,
- $txtps_redir_tmp,$print_cmd_tmp,$parframe)=@_;
- my $err=0;
- mv $myrc,"$myrc.save" if (-e $myrc);
- open(MYRC,">$myrc");
- print MYRC "# user's .texdocrc, generated by program\n
-# root of user's doc directory (from \$HOMETEXMF)
-# can be left empty if \$TEXMFHOME is undefined
-HOMEDOCPATH=$homedocpath_tmp
-# general viewer behaviour (y or yes to make active)
-QUIET=$quiet_tmp
-AUTOVIEW=$autoview_tmp
-XFMT_VIEWER=$xfmt_viewer_tmp
-# button colours: default and active back-/foreground
-# names and RGB values are both allowed; use the form #xxxxxx for RGB
-TDCOLORS=$tdcolors_tmp
-# the following variables contain whole commands, i.e. options can be given
-# DVI settings
-DVI_VIEWER=$dvi_viewer_tmp
-DVIPS_CONV=$dvips_conv_tmp
-# PostScript handling
-PS_VIEWER=$ps_viewer_tmp
-# PDF handling
-PDF_VIEWER=$pdf_viewer_tmp
-PDFPS_CONV=$pdfps_conv_tmp
-# HTML handling
-HTML_VIEWER=$html_viewer_tmp
-HTMLPS_CONV=$htmlps_conv_tmp
-# HTMLPS_REDIR must be on, if the html->ps converter normally writes its output
-# to stdout instead of a file (e.g. as html2ps) (y or yes to make active)
-HTMLPS_REDIR=$htmlps_redir_tmp
-# Plain text handling
-# TDK_OWN is texdoctk's own text file viewer
-TXT_VIEWER=$txt_viewer_tmp
-TXTPS_CONV=$txtps_conv_tmp
-# TXTPS_REDIR must be on, if the txt->ps converter normally writes its output
-# to stdout instead of a file (e.g. as a2ps) (y or yes to make active)
-TXTPS_REDIR=$txtps_redir_tmp
-# printer
-PRINT_CMD=$print_cmd_tmp
-\n# end of config\n";
- close(MYRC);
-}
-
-# help window (toplevel)
-sub helptext {
-# see if toplevel window is already there
- if (Exists($tlwins{"helptext"}{'addr'})) {
- $tlwins{"helptext"}{'addr'}->deiconify();
- $tlwins{"helptext"}{'addr'}->raise();
- return;
- }
- my $help=$main->Toplevel(-title=>'Help/About');
- $help->resizable(0,1);
- $tlwins{'helptext'}{'addr'}=$help;
- $help->Label(-text=>"texdoctk
-TeX documentation browser
- v.0.6.0a (Nov 5, 2004)",
- -font=>$deffont)->pack(-side=>'top',
- -ipady=>10,
- -anchor=>'s');
- my $helpbody=$help->Scrolled("Text",
- -relief=>'flat',
- -font=>$deffont,
- -height=>20,
- -width=>60,
- -scrollbars=>"e")->pack(-side=>'top',
- -fill=>'y',
- -expand=>1);
- my $pos=tell DATA;
- while (<DATA>) {
- $_ =~ s/\$sysrc/$sysrc/;
- last if (/^#/);
- $helpbody->insert('end',$_);
- }
- seek(DATA,$pos,0);
- $helpbody->configure(-state=>'disabled');
- $tlwins{'helptext'}{'buttons'}[0]=
- $help->Button(-text=>'Close',
- -font=>$deffont,%butcol,
- -command=>sub{destroy $help;
- undef $tlwins{"helptext"};
- })->pack(-side=>'bottom',
- -fill=>'x');
- $help->bind('<Control-c>'=>sub{destroy $help; undef $tlwins{"helptext"};});
-}
-
-# read config file; personal settings override the default settings
-sub readrc {
- my($rcfile,$icall)=@_;
- my ($var,$val);
- my $pathflag=0;
- my $pathflagl=0;
- my $pathflagh=0;
- my $tdcolors='';
-# for backward compatibility of converter/printer options
- my ($dvips_opts,$pdfps_opts,$print_opts);
-# read defaults resp. local/personal settings
- CALL: {
- ($icall == 1) && do {
- open (RC,"$rcfile") ||
- &fatalmsg("Couldn't open system-wide default config file ${TeXDocRcDefaults}.\n");
- last CALL;
- };
- ($icall == 2) && do {
- open (RC,"$rcfile") ||
- &fatalmsg("Couldn't open personal config file ~/.texdocrc.\n");
- last CALL;
- };
- };
- while ($line = <RC>) {
- next if ($line =~ /^($|#)/);
- chomp $line;
- ($var,$val)=split("=",$line,2);
- RCVARS: {
- ($var =~ /texdocpath/i) && do { # TEXDOCPATH
- if (length $val > 0) {
- $pathflag=1;
- eval(join("",("\$",lc($var),"=\$val")));
- }
- last RCVARS;
- };
- ($var =~ /localdocpath/i) && do { # LOCALDOCPATH
- if (length $val > 0) {
- $pathflagl=1;
- eval(join("",("\$",lc($var),"=\$val")));
- }
- last RCVARS;
- };
- ($var =~ /homedocpath/i) && do { # HOMEDOCPATH
- if ($icall == 2 && length $val > 0) { # set only in ~/.texdocrc
- $pathflagh=1;
- eval(join("",("\$",lc($var),"=\$val")));
- }
- last RCVARS;
- };
- # other variables
- eval(join("",("\$",lc($var),"=\$val")));
- };
- }
- close(RC);
-# find texmf/doc, and possibly other distribution texmf trees
- if ($rcfile eq $sysrc || $pathflag == 1) {
- $texmfmain=`kpsewhich --expand-path=${qq}\$TEXMFMAIN${qq}`;
- chomp $texmfmain;
- $texdocpath="$texmfmain/$texdocpath";
- $texmfdist=`kpsewhich --expand-path=${qq}\$TEXMFDIST${qq}`;
- chomp $texmfdist;
- $distdocpath=join('/',"$texmfdist",basename($texdocpath,""))
- if (length $texmfdist);
- # TeXLive has this texmf-doc
- $texmfdoc=join('/',"$texmfmain-doc",basename($texdocpath,""));
- if (-e $texmfdoc) {
- chomp $texmfdoc;
- $docdocpath="$texmfdoc/$docdocpath";
- }
- }
-# find texmf-local/doc, if there is one
- if ($rcfile eq $sysrc || $pathflagl == 1) {
- $texmflocal=`kpsewhich --expand-path=${qq}\$TEXMFLOCAL${qq}`;
- chomp $texmflocal;
- if (length $texmflocal) {
- # if LOCALDOCPATH is not explicitly defined, it equals TEXDOCPATH
- unless (defined $localdocpath) {
- $localdocpath=basename($texdocpath,"");
- }
- $localdocpath="$texmflocal/$localdocpath";
- }
- }
-# find user's $HOMETEXMF/doc, if there is one
- if ($icall == 2 || $pathflagh == 1) {
- $texmfhome=`kpsewhich --expand-path=${qq}\$HOMETEXMF${qq}`;
- chomp $texmfhome;
- if (length $texmfhome) {
- # if HOMEDOCPATH is not explicitly defined, it equals TEXDOCPATH
- unless (defined $homedocpath) {
- $homedocpath=basename($texdocpath,"");
- }
- $homedocpath="$texmfhome/$homedocpath";
- }
- }
-# colours: create array
- @tdcolors=split(' ',$tdcolors);
- if (scalar @tdcolors != 4) { # if old texdocrc file is used
- if (!(-e $myrc) || (-e $myrc && $icall == 2)) {
- print "NOTE: Button colours not set in $rcfile; using defaults.\n";
- @tdcolors=('#d9d9d9','Black','#ececec','red');
- }
- }
- %butcol=('-background'=>$tdcolors[0],
- '-foreground'=>$tdcolors[1],
- '-activebackground'=>$tdcolors[2],
- '-activeforeground'=>$tdcolors[3]);
-# viewer: suppress viewer warnings/use $PAGER if no $txt_viewer is defined
- $quiet=($quiet =~ /y/i || $quiet eq "1") ? 1 : 0;
- if (!(defined $txt_viewer) && defined $ENV{PAGER}) {
- $txt_viewer=$ENV{PAGER};
- }
-# viewer: autostart viewer if listbox of search results contains only 1 item
- $autoview=($autoview =~ /y/i || $autoview eq "1") ? 1 : 0;
-# viewer: use text viewer to open files with unrecognized format
- $xfmt_viewer=($xfmt_viewer =~ /y/i || $xfmt_viewer eq "1") ? 1 : 0;
-# converter: output redirection flags for HTML/Text->PS converters
- $htmlps_redir=($htmlps_redir =~ /(y|1)/i) ? 1 : 0;
- $txtps_redir=($txtps_redir =~ /(y|1)/i) ? 1 : 0;
-# for backward compatibility of converter/printer options
- $dvips_conv.=" $dvips_opts" if ($dvips_opts);
- $pdfps_conv.=" $pdfps_opts" if ($pdfps_opts);
- $print_cmd.=" $print_opts" if ($print_opts);
-}
-
-# determine resolution if xwininfo is available
-# slightly modified from a patch contributed by Reinhard Kotucha
-sub x_resolution {
- my $x_res;
- if ($IsWin32) {
- $x_res = &GetScreenWidth;
- }
- else {
- open(XINF,"xwininfo -root|") or return 1200;
- while (<XINF>) {
- chop;
- if (/Width:/) { ($x_res=$_)=/Width:\s+(\d+)/; last; }
- }
- close(XINF);
- }
- return $x_res;
-}
-
-# generate a random name for temporary files
-sub randname {
- my $namestr;
- my @chars=("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
- my $time=time;
- my $maxcnt=3+substr($time,-1);
- for (my $i=0; $i<=$maxcnt; $i++) { $namestr.=$chars[rand(51)] }
- my @tmp=split(/./,$time/$$);
- $namestr.=$tmp[1];
- until (length($namestr) > 16) { $namestr.=int(rand(1000000)) }
- return $namestr;
-}
-
-# find index of an array entry
-sub arrindex {
- my @array=@_;
- my $item=pop @array;
- my $i=0;
- foreach (@array) {
- last if ($_ eq $item);
- ++$i;
- }
- return $i;
-}
-
-# clean up and exit
-sub clean_exit {
- foreach (@tmpfiles) { if (-e $_) { unlink $_; } }
- exit;
-}
-
-# alternative main window, launched for fatal error messages on startup
-sub fatalmsg {
- my($msg)=@_;
- print STDERR $msg; # also print to stderr
-# create frame for main window
- my $main=new MainWindow;
- $main->resizable(0,0);
- $main->title("TeX Documentation Browser");
- $main->bind('<Control-q>'=>sub { exit });
- $main->bind('<Control-k>'=>sub { exit });
- my $msgframe=$main->Frame(-background=>"#ffcc99");
- my $cmdframe=$main->Frame;
- $msgframe->pack(-side=>'top');
- $cmdframe->pack(-side=>'bottom',-fill=>'x');
-# make buttons for command frame
- my $Qbut=$cmdframe->Button(-text=>'Kill',%butcol,
- -command=>sub { exit })->pack(-fill=>'x');
-# define common default font for labels and text explicitly
- my @deffont=$Qbut->configure(-font);
-# ensure readability on high-res screens (suggested by R.Kotucha)
- $deffont='Helvetica -16 bold' if &x_resolution > 1200;
- $Qbut->configure(-font=>$deffont);
- $msgframe->Label(-text=>'FATAL ERROR',
- -font=>$deffont)->pack(-side=>'top', -fill=>'x');
-# get size of message text
- my @dummy=split("\n",$msg);
- my $nline=scalar @dummy;
- my $msgwidth=0;
- my $lline;
- foreach (@dummy) {
- $lline=length $_;
- if ($lline > $msgwidth) { $msgwidth=$lline; }
- }
- my $message=$msgframe->Text(-relief=>'flat',
- -font=>$deffont,
- -height=>$nline,
- -width=>$msgwidth)->pack(-side=>'top');
- $message->insert('end',$msg);
- $message->configure(-state=>'disabled');
- MainLoop;
-}
-
-if ($IsWin32) {
- sub GetScreenWidth {
- my $GetDeviceCaps = new Win32::API('gdi32', 'GetDeviceCaps', 'NN', 'N');
- my $HORZRES = 8; # from WinGDI.h
- if(not defined $GetDeviceCaps) {
- die "Can't import API GetDeviceCaps: $!\n";
- }
- return $GetDeviceCaps->Call(0, $HORZRES);
- }
-
- sub GetTempPath {
- my $GetTempPath = new Win32::API('kernel32', 'GetTempPath', 'NP', 'N');
- if(not defined $GetTempPath) {
- die "Can't import API GetTempPath: $!\n";
- }
- my $lpBuffer = " " x 260;
-
- $GetTempPath->Call(80, $lpBuffer);
- }
-
- sub ShellExecute {
- my ($command, $file) = @_;
- my $ShellExecute = new Win32::API('shell32', 'ShellExecute', 'NPPPPN', 'N');
- if(not defined $ShellExecute) {
- die "Can't import API ShellExecute: $!\n";
- }
- $ShellExecute->Call(0, $command, $file, '', '', 0);
- }
-
- sub GetHomeDir {
- my $home = $ENV{'HOME'};
- # Should check for CSIDL_...
- return $home;
- }
-}
-__END__
-Many TeX programmers provide more or less detailed manuals for
-their programs or packages. They are usually available as .dvi,
-.ps, .pdf, .html or plain text files (sometimes included in the
-.sty files instead of a separate documentation file) and can be
-accessed with this browser, which is simply an interface to find a
-documentation more easily. It starts the respective viewer for
-reading the selected documentation making use of a database file
-which contains the path entries according to the current teTeX
-texmf/doc structure; additional usage of a system-wide local and
-of individual user texmf trees with corresponding databases is also
-possible.
-The documentations are grouped in several categories shown in the
-main window; pressing one of its buttons lists all documentations
-belonging to this topic.
-The topic window lets you select one documentation file, view or
-send it to the default printer. By right-clicking on the selected
-item you get the complete path of the file.
-The search button of the main window allows you to search the
-database for a string; it does not search file names. Enter the
-string and hit <Return> to start the search or <Control-c> to
-cancel. Just hitting <Return> without typing something in will
-show the full list of files in the database.
-Defaults for the documentation root directory, the viewers, the
-converters, certain options and the printer are set in the global
-configuration file $sysrc.
-However, each user can put a copy of it as .texdocrc into his home
-directory to modify them according to his needs; modification or
-generation of ~/.texdocrc can also be done with the Settings menu.
-Additionally, the settings can be changed temporarily with this
-menu.
-
-The following key shortcuts are defined for use with the browser:
- <Ctrl-q> Quit browser
- <Ctrl-m> Raise the Main window to the foreground
- <Ctrl-s> Search a keyword in database (case insensitive)
- <Ctrl-c> Cancel/close subwindow or search entry widget
- <Ctrl-v> View selected document (topic windows)
- <Ctrl-p> Print selected document (topic windows)
- <Ctrl-t> Open settings menu
- <Ctrl-k> Kill fatal error message window (same as
- <Ctrl-q>)
- <Ctrl-h> Open this help
- <Return> Equivalent to button press;
- OK in selection menu and search
- <Tab> Next/previous widget
-
-There are the following command line options:
- -a autostart viewer if a listbox of search results
- contains only one item; can also be set in a
- configuration file
- -v disable suppression of viewer messages sent to
- stderr and of certain permanent message popup
- windows, in case this was not set in a
- configuration file; default: off
-
-Some more information is available in the manpage of texdoctk.
-
-Comments and suggestions to:
-Thomas Ruedas
-tr@geol.ku.dk
-# Local Variables:
-# mode: perl
-# auto-fill-hook: do-auto-fill
-# End:
+../../texmf/scripts/tetex/texdoctk.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/texexec b/Master/bin/mips-irix/texexec
index 2158172906a..36d22caefe7 100755..120000
--- a/Master/bin/mips-irix/texexec
+++ b/Master/bin/mips-irix/texexec
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart texexec.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/texexec \ No newline at end of file
diff --git a/Master/bin/mips-irix/texfind b/Master/bin/mips-irix/texfind
new file mode 120000
index 00000000000..e450f1060a3
--- /dev/null
+++ b/Master/bin/mips-irix/texfind
@@ -0,0 +1 @@
+../../texmf-dist/scripts/context/stubs/unix/texfind \ No newline at end of file
diff --git a/Master/bin/mips-irix/texfont b/Master/bin/mips-irix/texfont
index a91f786e3f8..a3756e037ce 100755..120000
--- a/Master/bin/mips-irix/texfont
+++ b/Master/bin/mips-irix/texfont
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart texfont.pl "$@"
+../../texmf-dist/scripts/context/stubs/unix/texfont \ No newline at end of file
diff --git a/Master/bin/mips-irix/texi2dvi b/Master/bin/mips-irix/texi2dvi
index 18f6f59322b..4607be1949e 100755
--- a/Master/bin/mips-irix/texi2dvi
+++ b/Master/bin/mips-irix/texi2dvi
@@ -1,14 +1,14 @@
#! /bin/sh
-# texi2dvi --- produce DVI (or PDF) files from Texinfo (or LaTeX) sources.
-# $Id: texi2dvi,v 1.42 2005/02/11 13:35:14 karl Exp $
+# texi2dvi --- produce DVI (or PDF) files from Texinfo (or (La)TeX) sources.
+# $Id: texi2dvi,v 1.122 2008/04/17 18:45:49 karl Exp $
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001,
-# 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
+# the Free Software Foundation; either version 3 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
@@ -16,9 +16,7 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program; if not, you can either send email to this
-# program's maintainer or write to: The Free Software Foundation,
-# Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA.
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Original author: Noah Friedman.
#
@@ -31,48 +29,106 @@ test -f /bin/ksh && test -z "$RUNNING_KSH" \
&& { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
unset RUNNING_KSH
+# No failure shall remain unpunished.
+set -e
+
# This string is expanded by rcs automatically when this file is checked out.
-rcs_revision='$Revision: 1.42 $'
+rcs_revision='$Revision: 1.122 $'
rcs_version=`set - $rcs_revision; echo $2`
program=`echo $0 | sed -e 's!.*/!!'`
-version="texi2dvi (GNU Texinfo 4.8) $rcs_version
+version="texi2dvi (GNU Texinfo 4.12) $rcs_version
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+"
-Copyright (C) 2005 Free Software Foundation, Inc.
-There is NO warranty. You may redistribute this software
-under the terms of the GNU General Public License.
-For more information about these matters, see the files named COPYING."
+build_mode=${TEXI2DVI_BUILD_MODE:-local}
+build_dir=${TEXI2DVI_BUILD_DIRECTORY:-.}
usage="Usage: $program [OPTION]... FILE...
-Run each Texinfo or LaTeX FILE through TeX in turn until all
+Run each Texinfo or (La)TeX FILE through TeX in turn until all
cross-references are resolved, building all indices. The directory
containing each FILE is searched for included files. The suffix of FILE
-is used to determine its language (LaTeX or Texinfo).
+is used to determine its language ((La)TeX or Texinfo). To process
+(e)plain TeX files, set the environment variable LATEX=tex.
+
+In order to make texi2dvi a drop-in replacement of TeX/LaTeX in AUC-TeX,
+the FILE may also be composed of the following simple TeX commands.
+ \`\\input{FILE}' the actual file to compile
+ \`\\nonstopmode' same as --batch
Makeinfo is used to perform Texinfo macro expansion before running TeX
when needed.
-Operation modes:
+General options:
-b, --batch no interaction
- -c, --clean remove all auxiliary files
-D, --debug turn on shell debugging (set -x)
-h, --help display this help and exit successfully
-o, --output=OFILE leave output in OFILE (implies --clean);
- Only one input FILE may be specified in this case
+ only one input FILE may be specified in this case
-q, --quiet no output unless errors (implies --batch)
-s, --silent same as --quiet
-v, --version display version information and exit successfully
-V, --verbose report on what is done
TeX tuning:
- -@ use @input instead of \input; for preloaded Texinfo
- -e, -E, --expand force macro expansion using makeinfo
- -I DIR search DIR for Texinfo files
- -l, --language=LANG specify the LANG of FILE (LaTeX or Texinfo)
- -p, --pdf use pdftex or pdflatex for processing
- -r, --recode call recode before TeX to translate input characters
- -t, --command=CMD insert CMD in copy of input file
- or --texinfo=CMD multiple values accumulate
+ -@ use @input instead of \input for preloaded Texinfo
+ --dvi output a DVI file [default]
+ -e, -E, --expand force macro expansion using makeinfo
+ -I DIR search DIR for Texinfo files
+ -l, --language=LANG specify the LANG of FILE (LaTeX or Texinfo)
+ --no-line-error do not pass --file-line-error to TeX
+ -p, --pdf use pdftex or pdflatex for processing
+ -r, --recode call recode before TeX to translate input
+ --recode-from=ENC recode from ENC to the @documentencoding
+ --src-specials pass --src-specials to TeX
+ -t, --command=CMD insert CMD in copy of input file
+ or --texinfo=CMD multiple values accumulate
+ --translate-file=FILE use given charset translation file for TeX
+
+Build modes:
+ --build=MODE specify the treatment of auxiliary files [$build_mode]
+ --tidy same as --build=tidy
+ -c, --clean same as --build=clean
+ --build-dir=DIR specify where the tidy compilation is performed;
+ implies --tidy;
+ defaults to TEXI2DVI_BUILD_DIRECTORY [$build_dir]
+ --mostly-clean remove the auxiliary files and directories
+ but not the output
+
+The MODE specifies where the TeX compilation takes place, and, as a
+consequence, how auxiliary files are treated. The build mode
+can also be set using the environment variable TEXI2DVI_BUILD_MODE.
+
+Valid MODEs are:
+ \`local' compile in the current directory, leaving all the auxiliary
+ files around. This is the traditional TeX use.
+ \`tidy' compile in a local *.t2d directory, where the auxiliary files
+ are left. Output files are copied back to the original file.
+ \`clean' same as \`tidy', but remove the auxiliary directory afterwards.
+ Every compilation therefore requires the full cycle.
+
+Using the \`tidy' mode brings several advantages:
+ - the current directory is not cluttered with plethora of temporary files.
+ - clutter can be even reduced using --build-dir=dir: all the *.t2d
+ directories are stored there.
+ - clutter can be reduced to zero using, e.g., --build-dir=/tmp/\$USER.t2d
+ or --build-dir=\$HOME/.t2d.
+ - the output file is updated after every succesful TeX run, for
+ sake of concurrent visualization of the output. In a \`local' build
+ the viewer stops during the whole TeX run.
+ - if the compilation fails, the previous state of the output file
+ is preserved.
+ - PDF and DVI compilation are kept in separate subdirectories
+ preventing any possibility of auxiliary file incompatibility.
+
+On the other hand, because \`tidy' compilation takes place in another
+directory, occasionally TeX won't be able to find some files (e.g., when
+using \\graphicspath): in that case use -I to specify the additional
+directories to consider.
The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO,
TEX (or PDFTEX), TEXINDEX, and THUMBPDF environment variables are used
@@ -86,30 +142,48 @@ Texinfo home page: http://www.gnu.org/software/texinfo/"
# Initialize variables for option overriding and otherwise.
# Don't use `unset' since old bourne shells don't have this command.
# Instead, assign them an empty value.
-batch=false # eval for batch mode
-clean=
-debug=
-escape='\'
+action=compile
+batch=false # true for batch mode
+debug=false
+escape="\\"
expand= # t for expansion via makeinfo
-miincludes= # makeinfo include path
-oformat=dvi
+includes=
+line_error=true # Pass --file-line-error to TeX.
+no_line_error=false # absolutely do not pass --file-line-error to TeX
oname= # --output
-quiet= # by default let the tools' message be displayed
+out_lang=dvi
+quiet=false # by default let the tools' message be displayed
recode=false
set_language=
+src_specials=
textra= # Extra TeX commands to insert in the input file.
-textra_cmd= # sed command to insert TEXTRA where appropriate
-tmpdir=${TMPDIR:-/tmp}/t2d$$ # avoid collisions on 8.3 filesystems.
-txincludes= # TEXINPUTS extensions, with trailing colon
txiprereq=19990129 # minimum texinfo.tex version with macro expansion
-verb=false # echo for verbose mode
+verb=false # true for verbose mode
+translate_file= # name of charset translation file
+recode_from= # if not empty, recode from this encoding to @documentencoding
orig_pwd=`pwd`
+# We have to initialize IFS to space tab newline since we save and
+# restore IFS and apparently POSIX allows stupid/broken behavior with
+# empty-but-set IFS.
+# http://lists.gnu.org/archive/html/automake-patches/2006-05/msg00008.html
+# We need space, tab and new line, in precisely that order. And don't leave
+# trailing blanks.
+space=' '
+tab=' '
+newline='
+'
+IFS="$space$tab$newline"
+
+# In case someone pedantic insists on using grep -E.
+: ${EGREP=egrep}
+
# Systems which define $COMSPEC or $ComSpec use semicolons to separate
-# directories in TEXINPUTS -- except for Cygwin, where COMSPEC might be
-# inherited, but : is used.
-if test -n "$COMSPEC$ComSpec" && uname | grep -iv cygwin >/dev/null; then
+# directories in TEXINPUTS -- except for Cygwin et al., where COMSPEC
+# might be inherited, but : is used.
+if test -n "$COMSPEC$ComSpec" \
+ && uname | $EGREP -iv 'cygwin|mingw|djgpp' >/dev/null; then
path_sep=";"
else
path_sep=":"
@@ -118,37 +192,129 @@ fi
# Pacify verbose cds.
CDPATH=${ZSH_VERSION+.}$path_sep
-# In case someone crazy insists on using grep -E.
-: ${EGREP=egrep}
+# If $TEX is set to a directory, don't use it.
+test -n "$TEX" && test -d "$TEX" && unset TEX
-# return true if program $1 is somewhere in PATH, else false.
+#
+## --------------------- ##
+## Auxiliary functions. ##
+## --------------------- ##
+
+# In case `local' is not supported by the shell, provide a function
+# that simulates it by simply performing the assignments. This means
+# that we must not expect `local' to work, i.e., we must not (i) rely
+# on it during recursion, and (ii) have two local declarations of the
+# same variable. (ii) is easy to check statically, and our test suite
+# does make sure there is never twice a static local declaration of a
+# variable. (i) cannot be checked easily, so just be careful.
#
-findprog ()
+# Note that since we might use a function simulating `local', we can
+# no longer rely on the fact that no IFS-splitting is performed. So,
+# while
+#
+# foo=$bar
+#
+# is fine (no IFS-splitting), never write
+#
+# local foo=$bar
+#
+# but rather
+#
+# local foo="$bar"
+(
+ foo=bar
+ test_local () {
+ local foo=foo
+ }
+ test_local
+ test $foo = bar
+) || local () {
+ case $1 in
+ *=*) eval "$1";;
+ esac
+}
+
+
+# cd_orig
+# -------
+# Return to the original directory.
+cd_orig ()
{
- foundprog=false
+ # In case $orig_pwd is on a different drive (for DOS).
+ cd /
- saveIFS=$IFS
+ # Return to the original directory so that
+ # - the next file is processed in correct conditions
+ # - the temporary file can be removed
+ cd "$orig_pwd" || exit 1
+}
+
+# func_dirname FILE
+# -----------------
+# Return the directory part of FILE.
+func_dirname ()
+{
+ dirname "$1" 2>/dev/null \
+ || { echo "$1" | sed 's!/[^/]*$!!;s!^$!.!'; }
+}
+
+
+# absolute NAME -> ABS-NAME
+# -------------------------
+# Return an absolute path to NAME.
+absolute ()
+{
+ case $1 in
+ [\\/]* | ?:[\\/]*)
+ # Absolute paths don't need to be expanded.
+ echo "$1"
+ ;;
+ *) local slashes
+ slashes=`echo "$1" | sed -n 's,.*[^/]\(/*\)$,\1,p'`
+ local rel
+ rel=$orig_pwd/`func_dirname "$1"`
+ if test -d "$rel"; then
+ (cd "$rel" 2>/dev/null &&
+ local n
+ n=`pwd`/`basename "$1"`"$slashes"
+ echo "$n")
+ else
+ error 1 "not a directory: $rel"
+ fi
+ ;;
+ esac
+}
+
+
+# findprog PROG
+# -------------
+# Return true if PROG is somewhere in PATH, else false.
+findprog ()
+{
+ local saveIFS="$IFS"
IFS=$path_sep # break path components at the path separator
for dir in $PATH; do
- # use test -x rather than test -f for DJGPP, where test -x checks
- # for .exe. But test -x will also return true for directories, so
- # explicitly ignore those.
- if test -x "$dir/$1" && test ! -d "$dir/$1"; then
- foundprog=true
- break
-
- # But on cygwin, test -x foo will not find foo.exe. So also check
- # for that.
- elif test -x "$dir/$1.exe"; then
- foundprog=true
- break
+ IFS=$saveIFS
+ # The basic test for an executable is `test -f $f && test -x $f'.
+ # (`test -x' is not enough, because it can also be true for directories.)
+ # We have to try this both for $1 and $1.exe.
+ #
+ # Note: On Cygwin and DJGPP, `test -x' also looks for .exe. On Cygwin,
+ # also `test -f' has this enhancement, bot not on DJGPP. (Both are
+ # design decisions, so there is little chance to make them consistent.)
+ # Thusly, it seems to be difficult to make use of these enhancements.
+ #
+ if { test -f "$dir/$1" && test -x "$dir/$1"; } ||
+ { test -f "$dir/$1.exe" && test -x "$dir/$1.exe"; }; then
+ return 0
fi
done
- IFS=$saveIFS
- $foundprog
+ return 1
}
-# Report some information.
+# report LINE1 LINE2...
+# ---------------------
+# Report some information on stderr.
report ()
{
for i in "$@"
@@ -157,30 +323,1083 @@ report ()
done
}
+# verbose WORD1 WORD2
+# -------------------
# Report some verbose information.
verbose ()
{
- $verb >&2 "$0: $@"
+ if $verb; then
+ echo >&2 "$0: $@"
+ fi
}
-# Report an error and exit with failure.
-fatal ()
+# run COMMAND-LINE
+# ----------------
+# Run the COMMAND-LINE verbosely, and catching errors as failures.
+run ()
{
- s=$1
+ verbose "Running $@"
+ "$@" 2>&5 1>&2 ||
+ error 1 "$1 failed"
+}
+
+
+# error EXIT_STATUS LINE1 LINE2...
+# --------------------------------
+# Report an error and exit with failure if EXIT_STATUS is non null.
+error ()
+{
+ local s="$1"
shift
report "$@"
- exit $s
+ if test "$s" != 0; then
+ exit $s
+ fi
+}
+
+# ensure_dir DIR1 DIR2...
+# -----------------------
+# Make sure the directories exist.
+ensure_dir ()
+{
+ for dir
+ do
+ test -d "$dir" \
+ || mkdir "$dir" \
+ || error 1 "cannot create directory: $dir"
+ done
+}
+
+
+## ---------------- ##
+## Handling lists. ##
+## ---------------- ##
+
+
+# list_append LIST-NAME ELEM
+# --------------------------
+# Set LIST-NAME to its former contents, with ELEM appended.
+list_append ()
+{
+ local la_l="$1"
+ shift
+ eval set X \$$la_l "$@"
+ shift
+ eval $la_l=\""$@"\"
+}
+
+# list_prefix LIST-NAME SEP -> STRING
+# -----------------------------------
+# Return a string that is composed of the LIST-NAME with each item
+# preceded by SEP.
+list_prefix ()
+{
+ local lp_p="$2"
+ eval set X \$$1
+ shift
+ local lp_res
+ for i
+ do
+ lp_res="$lp_res \"$lp_p\" \"$i\""
+ done
+ echo "$lp_res"
}
+# list_infix LIST-NAME SEP -> STRING
+# ----------------------------------
+# Same as list_prefix, but a separator.
+list_infix ()
+{
+ eval set X \$$1
+ shift
+ local la_IFS="$IFS"
+ IFS=$path_sep
+ echo "$*"
+ IFS=$la_IFS
+}
+
+# list_dir_to_abs LIST-NAME
+# -------------------------
+# Convert the list to using only absolute dir names.
+# Currently unused, but should replace absolute_filenames some day.
+list_dir_to_abs ()
+{
+ local ld_l="$1"
+ eval set X \$$ld_l
+ shift
+ local ld_res
+ for dir
+ do
+ dir=`absolute "$dir"`
+ test -d "$dir" || continue
+ ld_res="$ld_res \"$dir\""
+ done
+ set X $ld_res; shift
+ eval $ld_l=\"$@\"
+}
+
+
+## ------------------------------ ##
+## Language auxiliary functions. ##
+## ------------------------------ ##
+
+# out_lang_tex
+# ------------
+# Return the tex output language (DVI or PDF) for $OUT_LANG.
+out_lang_tex ()
+{
+ case $out_lang in
+ dvi | ps | dvipdf ) echo dvi;;
+ pdf ) echo $out_lang;;
+ html | info | text ) echo $out_lang;;
+ *) error 1 "$0: invalid out_lang: $1";;
+ esac
+}
+
+
+# out_lang_ext
+# ------------
+# Return the extension for $OUT_LANG.
+out_lang_ext ()
+{
+ case $out_lang in
+ dvipdf ) echo pdf;;
+ dvi | html | info | pdf | ps | text ) echo $out_lang;;
+ *) error 1 "$0: invalid out_lang: $1";;
+ esac
+}
+
+
+## ------------------------- ##
+## TeX auxiliary functions. ##
+## ------------------------- ##
+
# Save TEXINPUTS so we can construct a new TEXINPUTS path for each file.
# Likewise for bibtex and makeindex.
-tex_envvars="BIBINPUTS BSTINPUTS INDEXSTYLE TEXINPUTS"
+tex_envvars="BIBINPUTS BSTINPUTS DVIPSHEADERS INDEXSTYLE MFINPUTS MPINPUTS \
+TEXINPUTS TFMFONTS"
for var in $tex_envvars; do
eval ${var}_orig=\$$var
export $var
done
+# absolute_filenames TEX-PATH -> TEX-PATH
+# ---------------------------------------
+# Convert relative paths to absolute paths, so we can run in another
+# directory (e.g., in tidy build mode, or during the macro-support
+# detection).
+#
+# Empty path components are meaningful to tex. We rewrite them
+# as `EMPTY' so they don't get lost when we split on $path_sep.
+# Hopefully no one will have an actual directory named EMPTY.
+absolute_filenames ()
+{
+ local replace_empty="-e 's/^$path_sep/EMPTY$path_sep/g' \
+ -e 's/$path_sep\$/${path_sep}EMPTY/g' \
+ -e 's/$path_sep$path_sep/${path_sep}EMPTY:/g'"
+ local res
+ res=`echo "$1" | eval sed $replace_empty`
+ save_IFS=$IFS
+ IFS=$path_sep
+ set x $res; shift
+ res=.
+ for dir
+ do
+ case $dir in
+ EMPTY)
+ res=$res$path_sep
+ ;;
+ *)
+ if test -d $dir; then
+ res=$res$path_sep`absolute "$dir"`
+ fi
+ ;;
+ esac
+ done
+ echo "$res"
+}
+
+
+# output_base_name FILE
+# ---------------------
+# The name of FILE, possibly renamed to satisfy --output.
+output_base_name ()
+{
+ case $oname in
+ '') echo "$1";;
+ *) local out_noext
+ out_noext=`echo "$oname" | sed 's/\.[^.]*$//'`
+ local file_ext
+ file_ext=`echo "$1" | sed 's/^.*\.//'`
+ echo "$out_noext.$file_ext"
+ ;;
+ esac
+}
+
+
+# move_to_dest FILE...
+# --------------------
+# Move FILE to the place where the user expects it. Truly move it, that
+# is, it must not remain in its build location unless that is also the
+# output location. (Otherwise it might appear as an extra file in make
+# distcheck.)
+#
+# FILE can be the principal output (in which case -o directly applies), or
+# an auxiliary file with the same base name.
+move_to_dest ()
+{
+ local dest
+ local destfile
+ local destdir
+ local destbase
+ local sourcedir
+ local sourcebase
+
+ for file
+ do
+ case $tidy:$oname in
+ true:) dest=$orig_pwd;;
+ false:) dest=;;
+ *:*) dest=`output_base_name "$file"`;;
+ esac
+ if test ! -f "$file"; then
+ error 1 "no such file or directory: $file"
+ fi
+ if test -n "$dest"; then
+ # We need to know whether $dest is a directory.
+ if test -d "$dest"; then
+ destdir=$dest
+ destfile=$dest/$file
+ else
+ destdir="`dirname $dest`"
+ destfile=$dest
+ fi
+ # We want to compare the source location and the output location,
+ # and if they are different, do the move. But if they are the
+ # same, we must preserve the source. Since we can't assume
+ # stat(1) or test -ef is available, resort to comparing the
+ # directory names, canonicalized with pwd. We can't use cmp -s
+ # since the output file might not actually change from run to run;
+ # e.g., TeX DVI output is timestamped to only the nearest minute.
+ destdir=`cd $destdir && pwd`
+ destbase=`basename $destfile`
+ #
+ sourcedir=`dirname $file`
+ sourcedir=`cd $sourcedir && pwd`
+ sourcebase=`basename $file`
+ #
+ if test "$sourcedir/$sourcebase" != "$destdir/$destbase"; then
+ verbose "Moving $file to $destfile"
+ rm -f "$destfile"
+ mv "$file" "$destfile"
+ fi
+ fi
+ done
+}
+
+
+## --------------------- ##
+## Managing xref files. ##
+## --------------------- ##
+
+# aux_file_p FILE
+# ---------------
+# Return with success with FILE is an aux file.
+aux_file_p ()
+{
+ test -f "$1" || return 1
+ case $1 in
+ *.aux) return 0;;
+ *) return 1;;
+ esac
+}
+
+# bibaux_file_p FILE
+# ------------------
+# Return with success with FILE is an aux file containing citation
+# requests.
+bibaux_file_p ()
+{
+ test -s "$1" || return 1
+ if (grep '^\\bibstyle[{]' "$1" \
+ && grep '^\\bibdata[{]' "$1" \
+ ## The following line is suspicious: fails when there
+ ## are citations in sub aux files. We need to be
+ ## smarter in this case.
+ ## && grep '^\\citation[{]' "$f"
+ ) >&6 2>&1;
+ then
+ return 0
+ fi
+ return 1
+}
+
+# index_file_p FILE
+# -----------------
+# Return with success with FILE is an index file.
+# When index.sty is used, there is a space before the brace.
+index_file_p ()
+{
+ test -f "$1" || return 1
+ case `sed '1q' "$1"` in
+ "\\entry{"*|"\\indexentry{"*|"\\indexentry {"*) return 0;;
+ *) return 1;;
+ esac
+}
+
+# xref_file_p FILE
+# ----------------
+# Return with success if FILE is an xref file (indexes, tables and lists).
+xref_file_p ()
+{
+ test -f "$1" || return 1
+ # If the file is not suitable to be an index or xref file, don't
+ # process it. It's suitable if the first character is a
+ # backslash or right quote or at, as long as the first line isn't
+ # \input texinfo.
+ case `sed '1q' "$1"` in
+ "\\input texinfo"*) return 1;;
+ [\\''@]*) return 0;;
+ *) return 1;;
+ esac
+}
+
+
+# generated_files_get FILENAME-NOEXT [PREDICATE-FILTER]
+# -----------------------------------------------------
+# Return the list of files generated by the TeX compilation of FILENAME-NOEXT.
+generated_files_get ()
+{
+ local filter=true
+ if test -n "$2"; then
+ filter=$2
+ fi
+
+ # Gather the files created by TeX.
+ (
+ if test -f "$1.log"; then
+ sed -n -e "s,^\\\\openout.* = \`\\(.*\\)'\\.,\\1,p" "$1.log"
+ fi
+ echo "$1.log"
+ ) |
+ # Depending on these files, infer outputs from other tools.
+ while read file; do
+ echo $file
+ case $in_lang in
+ texinfo)
+ # texindex: texinfo.cp -> texinfo.cps
+ if index_file_p $file; then
+ echo ${file}s
+ fi
+ ;;
+ latex)
+ # bibtex: *.aux -> *.bbl and *.blg.
+ if aux_file_p $file; then
+ echo $file | sed 's/^\(.*\)\.aux$/\1.bbl/'
+ echo $file | sed 's/^\(.*\)\.aux$/\1.blg/'
+ fi
+ ;;
+ esac
+ done |
+ # Filter existing files matching the criterion.
+ #
+ # With an input file name containing a space, this produces a
+ # "command not found" message (and filtering is ineffective).
+ # The situation with a newline is presumably even worse.
+ while read file; do
+ if $filter "$file"; then
+ echo $file
+ fi
+ done |
+ sort |
+ # Some files are opened several times, e.g., listings.sty's *.vrb.
+ uniq
+}
+
+
+# xref_files_save
+# ---------------
+# Save the xref files.
+xref_files_save ()
+{
+ # Save copies of auxiliary files for later comparison.
+ xref_files_orig=`generated_files_get "$in_noext" xref_file_p`
+ if test -n "$xref_files_orig"; then
+ verbose "Backing up xref files: $xref_files_orig"
+ # The following line improves `cp $xref_files_orig "$work_bak"'
+ # by preserving the directory parts. Think of
+ # cp chap1/main.aux chap2/main.aux $work_bak.
+ tar cf - $xref_files_orig | (cd "$work_bak" && tar xf -)
+ fi
+}
+
+
+# xref_files_changed
+# ------------------
+# Whether the xref files were changed since the previous run.
+xref_files_changed ()
+{
+ # LaTeX (and the package changebar) report in the LOG file if it
+ # should be rerun. This is needed for files included from
+ # subdirs, since texi2dvi does not try to compare xref files in
+ # subdirs. Performing xref files test is still good since LaTeX
+ # does not report changes in xref files.
+ if grep "Rerun to get" "$in_noext.log" >&6 2>&1; then
+ return 0
+ fi
+
+ # If old and new lists don't at least have the same file list,
+ # then one file or another has definitely changed.
+ xref_files_new=`generated_files_get "$in_noext" xref_file_p`
+ verbose "Original xref files = $xref_files_orig"
+ verbose "New xref files = $xref_files_new"
+ if test "x$xref_files_orig" != "x$xref_files_new"; then
+ return 0
+ fi
+
+ # Compare each file until we find a difference.
+ for this_file in $xref_files_new; do
+ verbose "Comparing xref file `echo $this_file | sed 's|\./||g'` ..."
+ # cmp -s returns nonzero exit status if files differ.
+ if cmp -s "$this_file" "$work_bak/$this_file"; then :; else
+ verbose "xref file `echo $this_file | sed 's|\./||g'` differed ..."
+ if $debug; then
+ diff -u "$work_bak/$this_file" "$this_file"
+ fi
+ return 0
+ fi
+ done
+
+ # No change.
+ return 1
+}
+
+
+
+## ----------------------- ##
+## Running the TeX suite. ##
+## ----------------------- ##
+
+
+
+# run_tex ()
+# ----------
+# Run TeX as "$tex $in_input", taking care of errors and logs.
+run_tex ()
+{
+ case $in_lang:`out_lang_tex` in
+ latex:dvi) tex=${LATEX:-latex};;
+ latex:pdf) tex=${PDFLATEX:-pdflatex};;
+ texinfo:dvi)
+ # MetaPost also uses the TEX environment variable. If the user
+ # has set TEX=latex for that reason, don't bomb out.
+ case $TEX in
+ *latex) tex=tex;; # don't bother trying to find etex
+ *) tex=$TEX
+ esac;;
+ texinfo:pdf) tex=$PDFTEX;;
+
+ *) error 1 "$0: $out_lang not supported for $in_lang";;
+ esac
+
+ # Beware of aux files in subdirectories that require the
+ # subdirectory to exist.
+ case $in_lang:$tidy in
+ latex:true)
+ sed -n 's|^[ ]*\\include{\(.*\)/.*}.*|\1|p' "$in_input" |
+ sort -u |
+ while read d
+ do
+ ensure_dir "$work_build/$d"
+ done
+ ;;
+ esac
+
+ # Note that this will be used via an eval: quote properly.
+ local cmd="$tex"
+
+ # If possible, make TeX report error locations in GNU format.
+ if test "${tex_help:+set}" != set; then
+ # Go to a temporary directory to try --help, since old versions that
+ # don't accept --help will generate a texput.log.
+ tex_help_dir=$t2ddir/tex_help
+ ensure_dir "$tex_help_dir"
+ tex_help=`cd "$tex_help_dir" >&6 && $tex --help </dev/null 2>&1`
+ fi
+ if $no_line_error; then :; else
+ # The mk program and perhaps others want to parse TeX's
+ # original error messages.
+ case $line_error:$tex_help in
+ true:*file-line-error*) cmd="$cmd --file-line-error";;
+ esac
+ fi
+
+ # Tell TeX about TCX file, if specified.
+ test -n "$translate_file" && cmd="$cmd --translate-file=$translate_file"
+
+ # Tell TeX to make source specials (for backtracking from output to
+ # source, given a sufficiently smart editor), if specifed.
+ test -n "$src_specials" && cmd="$cmd $src_specials"
+
+ # Tell TeX to be batch if requested.
+ if $batch; then
+ # \batchmode does not show terminal output at all, so we don't
+ # want that. And even in batch mode, TeX insists on having input
+ # from the user. Close its stdin to make it impossible.
+ cmd="$cmd </dev/null '${escape}nonstopmode' '${escape}input'"
+ fi
+
+ # we'd like to handle arbitrary input file names, such as a~b.tex.
+ # This isn't a general way to do it :), though it does work, kind of.
+ # cmd="$cmd '${escape}catcode126=12 \input '"
+
+ # TeX's \input does not (easily or reliably) support whitespace
+ # characters or other special characters in file names. Our intensive
+ # use of absolute file names makes this worse: the enclosing directory
+ # names may include white spaces. Improve the situation using a
+ # symbolic link to the filename in the current directory, in tidy mode
+ # only. Do not alter in_input.
+ #
+ # The filename is almost always tokenized using plain TeX conventions
+ # (the exception would be if the user made a texinfo.fmt file). Not
+ # all the plain TeX special characters cause trouble, but there's no
+ # harm in making the link.
+ #
+ case $tidy:`func_dirname "$in_input"` in
+ true:*["$space$tab$newline\"#\$%\\^_{}"]*)
+ _run_tex_file_name=`basename "$in_input"`
+ if test ! -f "$_run_tex_file_name"; then
+ verbose ln -s "$in_input"
+ rm -f "$_run_tex_file_name"
+ ln -s "$_run_tex_file_name"
+ fi
+ cmd="$cmd '$_run_tex_file_name'"
+ ;;
+
+ *)
+ cmd="$cmd '$in_input'"
+ ;;
+ esac
+
+ verbose "$0: Running $cmd ..."
+ if eval "$cmd" >&5; then
+ case $out_lang in
+ dvi | pdf ) move_to_dest "$in_noext.$out_lang";;
+ esac
+ else
+ error 1 "$tex exited with bad status, quitting."
+ fi
+}
+
+# run_bibtex ()
+# -------------
+# Run bibtex on current file.
+# - If its input (AUX) exists.
+# - If some citations are missing (LOG contains `Citation').
+# or the LOG complains of a missing .bbl
+#
+# Don't try to be too smart:
+#
+# 1. Running bibtex only if the bbl file exists and is older than
+# the LaTeX file is wrong, since the document might include files
+# that have changed.
+#
+# 3. Because there can be several AUX (if there are \include's),
+# but a single LOG, looking for missing citations in LOG is
+# easier, though we take the risk to match false messages.
+run_bibtex ()
+{
+ case $in_lang in
+ latex) bibtex=${BIBTEX:-bibtex};;
+ texinfo) return;;
+ esac
+
+ # "Citation undefined" is for LaTeX, "Undefined citation" for btxmac.tex.
+ # The no .aux && \bibdata test is also for btxmac, in case it was the
+ # first run of a bibtex-using document. Otherwise, it's possible that
+ # bibtex would never be run.
+ if test -r "$in_noext.aux" \
+ && test -r "$in_noext.log" \
+ && (grep 'Warning:.*Citation.*undefined' "$in_noext.log" \
+ || grep '.*Undefined citation' "$in_noext.log" \
+ || grep 'No file .*\.bbl\.' "$in_noext.log") \
+ || (grep 'No \.aux file' "$in_noext.log" \
+ && grep '^\\bibdata' "$in_noext.aux") \
+ >&6 2>&1; \
+ then
+ for f in `generated_files_get "$in_noext" bibaux_file_p`
+ do
+ run $bibtex "$f"
+ done
+ fi
+}
+
+# run_index ()
+# ------------
+# Run texindex (or makeindex) on current index files. If they already
+# exist, and after running TeX a first time the index files don't
+# change, then there's no reason to run TeX again. But we won't know
+# that if the index files are out of date or nonexistent.
+run_index ()
+{
+ case $in_lang in
+ latex) texindex=${MAKEINDEX:-makeindex};;
+ texinfo) texindex=${TEXINDEX:-texindex};;
+ esac
+ index_files=`generated_files_get $in_noext index_file_p`
+ if test -n "$texindex" && test -n "$index_files"; then
+ run $texindex $index_files
+ fi
+}
+
+
+# run_thumbpdf ()
+# ---------------
+run_thumbpdf ()
+{
+ if test `out_lang_tex` = pdf \
+ && test -r "$in_noext.log" \
+ && grep 'thumbpdf\.sty' "$in_noext.log" >&6 2>&1; \
+ then
+ thumbpdf=${THUMBPDF:-thumbpdf}
+ verbose "Running $thumbpdf $in_noext ..."
+ if $thumbpdf "$in_noext" >&5; then
+ run_tex
+ else
+ report "$thumbpdf exited with bad status." \
+ "Ignoring its output."
+ fi
+ fi
+}
+
+
+# run_dvipdf FILE.dvi
+# -------------------
+# Convert FILE.dvi to FILE.pdf.
+run_dvipdf ()
+{
+ # Find which dvi->pdf program is available.
+ if test -z "$dvipdf"; then
+ for i in "$DVIPDF" dvipdfmx dvipdfm dvipdf dvi2pdf dvitopdf;
+ do
+ if findprog $i; then
+ dvipdf=$i
+ fi
+ done
+ fi
+ # These tools have varying interfaces, some 'input output', others
+ # 'input -o output'. They all seem to accept 'input' only,
+ # outputting using the expected file name.
+ run $dvipdf "$1"
+ if test ! -f `echo "$1" | sed -e 's/\.dvi$/.pdf/'`; then
+ error 1 "$0: cannot find output file"
+ fi
+}
+
+# run_tex_suite ()
+# ----------------
+# Run the TeX tools until a fix point is reached.
+run_tex_suite ()
+{
+ # Move to the working directory.
+ if $tidy; then
+ verbose "cd $work_build"
+ cd "$work_build" || exit 1
+ fi
+
+ # Count the number of cycles.
+ local cycle=0
+
+ while :; do
+ cycle=`expr $cycle + 1`
+ verbose "Cycle $cycle for $command_line_filename"
+
+ xref_files_save
+
+ # We run bibtex first, because I can see reasons for the indexes
+ # to change after bibtex is run, but I see no reason for the
+ # converse.
+ run_bibtex
+ run_index
+ run_core_conversion
+
+ xref_files_changed || break
+ done
+
+ # If we were using thumbpdf and producing PDF, then run thumbpdf
+ # and TeX one last time.
+ run_thumbpdf
+
+ # Install the result if we didn't already (i.e., if the output is
+ # dvipdf or ps).
+ case $out_lang in
+ dvipdf)
+ run_dvipdf "$in_noext.`out_lang_tex`"
+ move_to_dest "$in_noext.`out_lang_ext`"
+ ;;
+ ps)
+ dvips -o "$in_noext.`out_lang_ext`" "$in_noext.`out_lang_tex`"
+ move_to_dest "$in_noext.`out_lang_ext`"
+ ;;
+ esac
+
+ cd_orig
+}
+
+## -------------------------------- ##
+## TeX processing auxiliary tools. ##
+## -------------------------------- ##
+
+
+# A sed script that preprocesses Texinfo sources in order to keep the
+# iftex sections only. We want to remove non TeX sections, and comment
+# (with `@c texi2dvi') TeX sections so that makeinfo does not try to
+# parse them. Nevertheless, while commenting TeX sections, don't
+# comment @macro/@end macro so that makeinfo does propagate them.
+# Unfortunately makeinfo --iftex --no-ifinfo doesn't work well enough
+# (yet), makeinfo can't parse the TeX commands, so work around with sed.
+#
+comment_iftex=\
+'/^@tex/,/^@end tex/{
+ s/^/@c texi2dvi/
+}
+/^@iftex/,/^@end iftex/{
+ s/^/@c texi2dvi/
+ /^@c texi2dvi@macro/,/^@c texi2dvi@end macro/{
+ s/^@c texi2dvi//
+ }
+}
+/^@ifnottex/,/^@end ifnottex/{
+ s/^/@c (texi2dvi)/
+}
+/^@ifinfo/,/^@end ifinfo/{
+ /^@node/p
+ /^@menu/,/^@end menu/p
+ t
+ s/^/@c (texi2dvi)/
+}
+s/^@ifnotinfo/@c texi2dvi@ifnotinfo/
+s/^@end ifnotinfo/@c texi2dvi@end ifnotinfo/'
+
+# Uncommenting is simple: Remove any leading `@c texi2dvi'.
+uncomment_iftex='s/^@c texi2dvi//'
+
+
+# run_makeinfo ()
+# ---------------
+# Expand macro commands in the original source file using Makeinfo.
+# Always use `end' footnote style, since the `separate' style
+# generates different output (arguably this is a bug in -E). Discard
+# main info output, the user asked to run TeX, not makeinfo.
+run_makeinfo ()
+{
+ test $in_lang == texinfo ||
+ return 0
+
+ # Unless required by the user, makeinfo expansion is wanted only
+ # if texinfo.tex is too old.
+ if test "$expand" = t; then
+ makeinfo=${MAKEINFO:-makeinfo}
+ else
+ # Check if texinfo.tex performs macro expansion by looking for
+ # its version. The version is a date of the form YEAR-MO-DA.
+ # We don't need to use [0-9] to match the digits since anyway
+ # the comparison with $txiprereq, a number, will fail with non
+ # digits.
+ # Run in a temporary directory to avoid leaving files.
+ version_test_dir=$t2ddir/version_test
+ ensure_dir "$version_test_dir"
+ (
+ cd "$version_test_dir"
+ echo '\input texinfo.tex @bye' >txiversion.tex
+ # Be sure that if tex wants to fail, it is not interactive:
+ # close stdin.
+ $TEX txiversion.tex </dev/null >txiversion.out 2>txiversion.err
+ )
+ if test $? != 0; then
+ cat "$version_test_dir/txiversion.out"
+ cat "$version_test_dir/txiversion.err" >&2
+ error 1 "texinfo.tex appears to be broken, quitting."
+ fi
+ eval `sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p' "$version_test_dir/txiversion.out"`
+ verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..."
+ if test "$txiprereq" -le "$txiversion" >&6 2>&1; then
+ makeinfo=
+ else
+ makeinfo=${MAKEINFO:-makeinfo}
+ fi
+ # As long as we had to run TeX, offer the user this convenience:
+ if test "$txiformat" = Texinfo; then
+ escape=@
+ fi
+ fi
+
+ if test -n "$makeinfo"; then
+ # in_src: the file with macros expanded.
+ # Use the same basename to generate the same aux file names.
+ work_src=$workdir/src
+ ensure_dir "$work_src"
+ in_src=$work_src/$in_base
+ local miincludes
+ miincludes=`list_prefix includes -I`
+ verbose "Macro-expanding $command_line_filename to $in_src ..."
+ # eval $makeinfo because it might be defined as something complex
+ # (running missing) and then we end up with things like '"-I"',
+ # and "-I" (including the quotes) is not an option name. This
+ # happens with gettext 0.14.5, at least.
+ sed "$comment_iftex" "$command_line_filename" \
+ | eval $makeinfo --footnote-style=end -I "$in_dir" $miincludes \
+ -o /dev/null --macro-expand=- \
+ | sed "$uncomment_iftex" >"$in_src"
+ # Continue only if everything succeeded.
+ if test $? -ne 0 \
+ || test ! -r "$in_src"; then
+ verbose "Expansion failed, ignored...";
+ else
+ in_input=$in_src
+ fi
+ fi
+}
+
+# insert_commands ()
+# ------------------
+# Used most commonly for @finalout, @smallbook, etc.
+insert_commands ()
+{
+ local textra_cmd
+ case $in_lang in
+ latex) textra_cmd=1i;;
+ texinfo) textra_cmd='/^@setfilename/a';;
+ *) error 1 "internal error, unknown language: $in_lang";;
+ esac
+
+ if test -n "$textra"; then
+ # _xtr. The file with the user's extra commands.
+ work_xtr=$workdir/xtr
+ in_xtr=$work_xtr/$in_base
+ ensure_dir "$work_xtr"
+ verbose "Inserting extra commands: $textra"
+ sed "$textra_cmd\\
+$textra" "$in_input" >"$in_xtr"
+ in_input=$in_xtr
+ fi
+}
+
+# run_recode ()
+# -------------
+# If this is a Texinfo file with a specified input encoding, and
+# recode is available, then recode to plain 7 bit Texinfo.
+run_recode ()
+{
+ local from
+ local to
+
+ if test $in_lang = texinfo; then
+ pgm='s/^ *@documentencoding *\([^ ][^ ]*\) *$/\1/
+ t found
+ d
+ :found
+ q'
+ encoding=`sed -e "$pgm" "$in_input"`
+ if $recode && test -n "$encoding" && findprog recode; then
+ if test -n "$recode_from"; then
+ from=$recode_from
+ to=$encoding
+ else
+ from=$encoding
+ to=$texinfo
+ fi
+ verbose "Recoding from $from to $to."
+ # _rcd. The Texinfo file recoded in 7bit.
+ work_rcd=$workdir/recode
+ in_rcd=$work_rcd/$in_base
+ ensure_dir "$work_rcd"
+ if recode "$encoding..$to" <"$in_input" >"$in_rcd" \
+ && test -s "$in_rcd"; then
+ in_input=$in_rcd
+ else
+ verbose "Recoding failed, using original input."
+ fi
+ fi
+ fi
+}
+
+# compute_language FILENAME
+# -------------------------
+# Return the short string describing the language in which FILENAME
+# is written: `texinfo' or `latex'.
+compute_language ()
+{
+ # If the user explicitly specified the language, use that.
+ # Otherwise, if the first line is \input texinfo, assume it's texinfo.
+ # Otherwise, guess from the file extension.
+ if test -n "$set_language"; then
+ echo $set_language
+ elif sed 1q "$1" | grep 'input texinfo' >&6; then
+ echo texinfo
+ else
+ # Get the type of the file (latex or texinfo) from the given language
+ # we just guessed, or from the file extension if not set yet.
+ case $1 in
+ *.ltx | *.tex | *.drv | *.dtx) echo latex;;
+ *) echo texinfo;;
+ esac
+ fi
+}
+
+
+# run_hevea (MODE)
+# ----------------
+# Convert to HTML/INFO/TEXT.
+#
+# Don't pass `-noiso' to hevea: it's useless in HTML since anyway the
+# charset is set to latin1, and troublesome in other modes since
+# accented characters loose their accents.
+#
+# Don't pass `-o DEST' to hevea because in that case it leaves all its
+# auxiliary files there too... Too bad, because it means we will need
+# to handle images some day.
+run_hevea ()
+{
+ local hevea="${HEVEA:-hevea}"
+ local run_hevea="$hevea"
+
+ case $1 in
+ html) ;;
+ text|info) run_hevea="$run_hevea -$1";;
+ *) error 1 "run_hevea: invalid argument: $1";;
+ esac
+
+ # Compiling to the tmp directory enables to preserve a previous
+ # successful compilation.
+ run_hevea="$run_hevea -fix -O -o '$out_base'"
+ run_hevea="$run_hevea `list_prefix includes -I` -I '$orig_pwd' "
+ run_hevea="$run_hevea '$in_input'"
+
+ if $debug; then
+ run_hevea="$run_hevea -v -v"
+ fi
+
+ verbose "running $run_hevea"
+ if eval "$run_hevea" >&5; then
+ # hevea leaves trailing white spaces, this is annoying.
+ case $1 in text|info)
+ perl -pi -e 's/[ \t]+$//g' "$out_base"*;;
+ esac
+ case $1 in
+ html|text) move_to_dest "$out_base";;
+ info) # There can be foo.info-1, foo.info-2 etc.
+ move_to_dest "$out_base"*;;
+ esac
+ else
+ error 1 "$hevea exited with bad status, quitting."
+ fi
+}
+
+
+# run_core_conversion ()
+# ----------------------
+# Run the TeX (or HeVeA).
+run_core_conversion ()
+{
+ case $in_lang:`out_lang_tex` in
+ *:dvi|*:pdf)
+ run_tex;;
+ latex:html|latex:text|latex:info)
+ run_hevea $out_lang;;
+ *)
+ error 1 "invalid input/output combination: $in_lang/$out_lang";;
+ esac
+}
+
+
+# compile ()
+# ----------
+# Run the full compilation chain, from pre-processing to installation
+# of the output at its expected location.
+compile ()
+{
+ # Source file might include additional sources.
+ # We want `.:$orig_pwd' before anything else. (We'll add `.:' later
+ # after all other directories have been turned into absolute paths.)
+ # `.' goes first to ensure that any old .aux, .cps,
+ # etc. files in ${directory} don't get used in preference to fresher
+ # files in `.'. Include orig_pwd in case we are in clean build mode, where
+ # we've cd'd to a temp directory.
+ txincludes=`list_infix includes $path_sep`
+ common="$orig_pwd$path_sep$in_dir$path_sep$txincludes$path_sep"
+ for var in $tex_envvars; do
+ eval val="\$common\$${var}_orig"
+ # Convert relative paths to absolute paths, so we can run in another
+ # directory (e.g., in clean build mode, or during the macro-support
+ # detection).
+ val=`absolute_filenames "$val"`
+ eval $var="\"$val\""
+ export $var
+ eval verbose \"$var=\'\$${var}\'\"
+ done
+
+ # --expand
+ run_makeinfo
+
+ # --command, --texinfo
+ insert_commands
+
+ # --recode
+ run_recode
+
+ # Run until a fix point is reached.
+ run_tex_suite
+}
+
+
+# remove FILES
+# ------------
+remove ()
+{
+ verbose "Removing" "$@"
+ rm -rf "$@"
+}
+
+
+# mostly_clean
+# ------------
+# Remove auxiliary files and directories. Changes the current directory.
+mostly_clean ()
+{
+ cd_orig
+ set X "$t2ddir"
+ shift
+ $tidy || {
+ local log="$work_build/$in_noext.log"
+ set X ${1+"$@"} "$log" `generated_files_get "$work_build/$in_noext"`
+ shift
+ }
+ remove ${1+"$@"}
+}
+
+
+# cleanup ()
+# ----------
+# Remove what should be removed according to options.
+# Called at the end of each compilation cycle, and at the end of
+# the script. Changes the current directory.
+cleanup ()
+{
+ case $build_mode in
+ local) cd_orig; remove "$t2ddir";;
+ clean) mostly_clean;;
+ tidy) ;;
+ esac
+}
+
+
+
+## ---------------------- ##
+## Command line parsing. ##
+## ---------------------- ##
+
# Push a token among the arguments that will be used to notice when we
# ended options/arguments parsing.
# Use "set dummy ...; shift" rather than 'set - ..." because on
@@ -209,41 +1428,53 @@ while test x"$1" != x"$arg_sep"; do
case "$1" in
-@ ) escape=@;;
# Silently and without documentation accept -b and --b[atch] as synonyms.
- -b | --b*) batch=true;;
- -c | --c*) clean=t;;
- -D | --d*) debug=t;;
- -e | -E | --e*) expand=t;;
- -h | --h*) echo "$usage"; exit 0;;
+ -b | --batch) batch=true;;
+ --build) shift; build_mode=$1;;
+ --build-dir) shift; build_dir=$1; build_mode=tidy;;
+ -c | --clean) build_mode=clean;;
+ -D | --debug) debug=true;;
+ --dvi) out_lang=dvi;;
+ --dvipdf) out_lang=dvipdf;;
+ -e | -E | --expand) expand=t;;
+ -h | --help) echo "$usage"; exit 0;;
+ --html) out_lang=html;;
-I | --I*)
shift
- miincludes="$miincludes -I $1"
- txincludes="$txincludes$1$path_sep"
+ # Use absolute dir names in the includes.
+ val=`absolute "$1"`
+ list_append includes "$val"
;;
- -l | --l*) shift; set_language=$1;;
- -o | --o*)
+ --info) out_lang=info;;
+ -l | --lang | --language) shift; set_language=$1;;
+ --mostly-clean) action=mostly-clean;;
+ --no-line-error) no_line_error=true;;
+ -o | --out | --output)
shift
- clean=t
- case "$1" in
- /* | ?:/*) oname=$1;;
- *) oname="$orig_pwd/$1";;
- esac;;
- -p | --p*) oformat=pdf;;
- -q | -s | --q* | --s*) quiet=t; batch=true;;
- -r | --r*) recode=true;;
- -t | --tex* | --com* ) shift; textra="$textra\\
+ # Make it absolute, just in case we also have --clean, or whatever.
+ oname=`absolute "$1"`;;
+ -p | --pdf) out_lang=pdf;;
+ --ps) out_lang=ps;;
+ -q | -s | --quiet | --silent) quiet=true; batch=true;;
+ -r | --recode) recode=true;;
+ --recode-from) shift; recode=true; recode_from="$1";;
+ --src-specials) src_specials=--src-specials;;
+ -t | --texinfo | --command ) shift; textra="$textra\\
"`echo "$1" | sed 's/\\\\/\\\\\\\\/g'`;;
+ --text) out_lang=text;;
+ --translate-file ) shift; translate_file="$1";;
+ --tidy) build_mode=tidy;;
-v | --vers*) echo "$version"; exit 0;;
- -V | --verb*) verb=echo;;
+ -V | --verb*) verb=true;;
--) # What remains are not options.
shift
while test x"$1" != x"$arg_sep"; do
- set dummy ${1+"$@"} "$1"; shift
- shift
+ set dummy ${1+"$@"} "$1"; shift
+ shift
done
break;;
-*)
- fatal 1 "Unknown or ambiguous option \`$1'." \
- "Try \`--help' for more information."
+ error 1 "Unknown or ambiguous option \`$1'." \
+ "Try \`--help' for more information."
;;
*) set dummy ${1+"$@"} "$1"; shift;;
esac
@@ -252,15 +1483,24 @@ done
# Pop the token
shift
+# $tidy: compile in a t2d directory.
+# $clean: remove all the aux files.
+case $build_mode in
+ local) clean=false; tidy=false;;
+ tidy) clean=false; tidy=true;;
+ clean) clean=true; tidy=true;;
+ *) error 1 "invalid build mode: $build_mode";;
+esac
+
# Interpret remaining command line args as filenames.
case $# in
0)
- fatal 2 "Missing file arguments." "Try \`--help' for more information."
+ error 2 "Missing file arguments." "Try \`--help' for more information."
;;
1) ;;
*)
if test -n "$oname"; then
- fatal 2 "Can't use option \`--output' with more than one argument."
+ error 2 "Can't use option \`--output' with more than one argument."
fi
;;
esac
@@ -298,151 +1538,6 @@ if test -z "$PDFTEX"; then
fi
-# Prepare the temporary directory. Remove it at exit, unless debugging.
-if test -z "$debug"; then
- trap "cd / && rm -rf $tmpdir" 0 1 2 15
-fi
-
-# Create the temporary directory with strict rights
-(umask 077 && mkdir $tmpdir) || exit 1
-
-# Prepare the tools we might need. This may be extra work in some
-# cases, but improves the readability of the script.
-utildir=$tmpdir/utils
-mkdir $utildir || exit 1
-
-# A sed script that preprocesses Texinfo sources in order to keep the
-# iftex sections only. We want to remove non TeX sections, and comment
-# (with `@c texi2dvi') TeX sections so that makeinfo does not try to
-# parse them. Nevertheless, while commenting TeX sections, don't
-# comment @macro/@end macro so that makeinfo does propagate them.
-# Unfortunately makeinfo --iftex --no-ifinfo doesn't work well enough
-# (yet), makeinfo can't parse the TeX commands, so work around with sed.
-#
-comment_iftex_sed=$utildir/comment.sed
-cat <<EOF >$comment_iftex_sed
-/^@tex/,/^@end tex/{
- s/^/@c texi2dvi/
-}
-/^@iftex/,/^@end iftex/{
- s/^/@c texi2dvi/
- /^@c texi2dvi@macro/,/^@c texi2dvi@end macro/{
- s/^@c texi2dvi//
- }
-}
-/^@ifnottex/,/^@end ifnottex/{
- s/^/@c (texi2dvi)/
-}
-/^@ifinfo/,/^@end ifinfo/{
- /^@node/p
- /^@menu/,/^@end menu/p
- t
- s/^/@c (texi2dvi)/
-}
-s/^@ifnotinfo/@c texi2dvi@ifnotinfo/
-s/^@end ifnotinfo/@c texi2dvi@end ifnotinfo/
-EOF
-# Uncommenting is simple: Remove any leading `@c texi2dvi'.
-uncomment_iftex_sed=$utildir/uncomment.sed
-cat <<EOF >$uncomment_iftex_sed
-s/^@c texi2dvi//
-EOF
-
-# Compute the list of xref files.
-# Takes the filename (without extension) of which we look for xref
-# files as argument. The index files must be reported last.
-get_xref_files ()
-{
- # Get list of xref files (indexes, tables and lists).
- # Find all files having root filename with a two-letter extension,
- # saves the ones that are really Texinfo-related files. .?o? catches
- # many files: .toc, .log, LaTeX tables and lists, FiXme's .lox, maybe more.
- for this_file in "$1".?o? "$1".aux "$1".?? "$1".idx; do
- # If file is empty, skip it.
- test -s "$this_file" || continue
- # If the file is not suitable to be an index or xref file, don't
- # process it. It's suitable if the first character is a
- # backslash or right quote or at, as long as the first line isn't
- # \input texinfo.
- first_character=`sed -n '1s/^\(.\).*$/\1/p;q' $this_file`
- if (test "x$first_character" = "x\\" \
- && sed 1q $this_file | grep -v '^\\input *texinfo' >/dev/null) \
- || test "x$first_character" = "x'" \
- || test "x$first_character" = "x@"; then
- xref_files="$xref_files ./$this_file"
- fi
- done
- echo "$xref_files"
-}
-
-# Convert relative paths to absolute paths, so we can run in another
-# directory (e.g., in --clean mode, or during the macro-support detection.)
-#
-# Empty path components are meaningful to tex. We rewrite them
-# as `EMPTY' so they don't get lost when we split on $path_sep.
-# Hopefully no one will have an actual directory named EMPTY.
-absolute_filenames ()
-{
- replace_empty="-e 's/^$path_sep/EMPTY$path_sep/g' \
- -e 's/$path_sep\$/${path_sep}EMPTY/g' \
- -e 's/$path_sep$path_sep/${path_sep}EMPTY:/g'"
- _res=`echo "$1" | eval sed $replace_empty`
- save_IFS=$IFS
- IFS=$path_sep
- set x $_res; shift
- _res=.
- for dir
- do
- case $dir in
- EMPTY)
- _res=$_res$path_sep
- ;;
- [\\/]* | ?:[\\/]*) # Absolute paths don't need to be expanded.
- _res=$_res$path_sep$dir
- ;;
- *)
- abs=`cd "$dir" && pwd` && _res=$_res$path_sep$abs
- ;;
- esac
- done
- echo "$_res"
-}
-
-
-# run_tex ()
-# ----------
-# Run TeX as "$tex $tex_args $filename_input", taking care of errors
-# and logs.
-run_tex ()
-{
- # Note that this will be used via an eval: quote properly.
- cmd=$tex
-
- # If possible, make TeX report error locations in GNU format.
- tex_args=
- case $tex_help in
- *file-line-error*) cmd="$cmd --file-line-error";;
- esac
-
- # Tell TeX to be batch if requested.
- if $batch; then
- # \batchmode does not show terminal output at all, so we don't
- # want that. And even in batch mode, TeX insists on having input
- # from the user. Close its stdin to make it impossible.
- cmd="$cmd </dev/null '${escape}nonstopmode' '${escape}input'"
- fi
-
- cmd="$cmd '$filename_input'"
-
- verbose "Running $cmd ..."
- if eval "$cmd" >&5; then :; else
- test "$clean" = t \
- && cp "$filename_noext.log" "$orig_pwd"
- fatal 1 "$tex exited with bad status, quitting." \
- "see $filename_noext.log for errors."
- fi
-}
-
# File descriptor usage:
# 0 standard input
# 1 standard output (--verbose messages)
@@ -452,15 +1547,24 @@ run_tex ()
# 5 tools output (turned off by --quiet)
# 6 tracing/debugging (set -x output, etc.)
-# Tools' output. If quiet, discard, else redirect to the message flow.
-if test "$quiet" = t; then
+
+# Main tools' output (TeX, etc.) that TeX users are used to seeing.
+#
+# If quiet, discard, else redirect to the message flow.
+if $quiet; then
exec 5>/dev/null
else
exec 5>&1
fi
-# Enable tracing
-if test "$debug" = t; then
+
+# Enable tracing, and auxiliary tools output.
+#
+# Should be used where you'd typically use /dev/null to throw output
+# away. But sometimes it is convenient to see that output (e.g., from
+# a grep) to aid debugging. Especially debugging at distance, via the
+# user.
+if $debug; then
exec 6>&1
set -x
else
@@ -468,10 +1572,38 @@ else
fi
#
-# TeXify files.
-for command_line_filename in ${1+"$@"}; do
- verbose "Processing $command_line_filename ..."
+# input_file_name_decode
+# ----------------------
+# Decode COMMAND_LINE_FILENAME, and compute:
+# - COMMAND_LINE_FILENAME clean of TeX commands
+# - IN_DIR
+# The directory to the input file, possibly absolute if needed.
+# - IN_DIR_ABS
+# The absolute directory of the input file.
+# - IN_BASE
+# The input file base name (no directory part).
+# - IN_NOEXT
+# The input file name without extensions (nor directory part).
+# - IN_INPUT
+# Defaults to COMMAND_LINE_FILENAME, but might change if the
+# input is preprocessed (recode etc.). With directory, possibly absolute.
+input_file_name_decode ()
+{
+ # See if we are run from within AUC-Tex, in which case we are
+ # passed `\input{FOO.tex}' or even `\nonstopmode\input{FOO.tex}'.
+ case $command_line_filename in
+ *\\nonstopmode*)
+ batch=true;;
+ esac
+ case $command_line_filename in
+ *\\input{*}*)
+ # Let AUC-TeX error parser deal with line numbers.
+ line_error=false
+ command_line_filename=`\
+ expr X"$command_line_filename" : X'.*input{\([^}]*\)}'`
+ ;;
+ esac
# If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex),
# prepend `./' in order to avoid that the tools take it as an option.
@@ -482,354 +1614,102 @@ for command_line_filename in ${1+"$@"}; do
# though the user may be able to reenter a valid filename at the tex
# prompt (assuming they're attending the terminal), this script won't
# be able to find the right xref files and so forth.
- if test ! -r "$command_line_filename"; then
- report "Could not read $command_line_filename, skipping."
- continue
+ test -r "$command_line_filename" ||
+ error 1 "cannot read $command_line_filename, skipping."
+
+ # Get the name of the current directory.
+ in_dir=`func_dirname "$command_line_filename"`
+ in_dir_abs=`absolute "$in_dir"`
+ # In a clean build, we `cd', so get an absolute file name.
+ if $tidy; then
+ in_dir=$in_dir_abs
fi
- # Get the name of the current directory. We want the full path
- # because in clean mode we are in tmp, in which case a relative
- # path has no meaning.
- filename_dir=`echo $command_line_filename | sed 's!/[^/]*$!!;s!^$!.!'`
- filename_dir=`cd "$filename_dir" >/dev/null && pwd`
-
# Strip directory part but leave extension.
- filename_ext=`basename "$command_line_filename"`
+ in_base=`basename "$command_line_filename"`
# Strip extension.
- filename_noext=`echo "$filename_ext" | sed 's/\.[^.]*$//'`
- ext=`echo "$filename_ext" | sed 's/^.*\.//'`
-
- # _src. Use same basename since we want to generate aux files with
- # the same basename as the manual. If --expand, then output the
- # macro-expanded file to here, else copy the original file.
- tmpdir_src=$tmpdir/src
- filename_src=$tmpdir_src/$filename_noext.$ext
-
- # _xtr. The file with the user's extra commands.
- tmpdir_xtr=$tmpdir/xtr
- filename_xtr=$tmpdir_xtr/$filename_noext.$ext
-
- # _rcd. The Texinfo file recoded in 7bit.
- tmpdir_rcd=$tmpdir/rcd
- filename_rcd=$tmpdir_rcd/$filename_noext.$ext
-
- # _bak. Copies of the previous xref files (another round is run if
- # they differ from the new one).
- tmpdir_bak=$tmpdir/bak
-
- # Make all those directories and give up if we can't succeed.
- mkdir $tmpdir_src $tmpdir_xtr $tmpdir_rcd $tmpdir_bak || exit 1
+ in_noext=`echo "$in_base" | sed 's/\.[^.]*$//'`
- # Source file might include additional sources.
- # We want `.:$orig_pwd' before anything else. (We'll add `.:' later
- # after all other directories have been turned into absolute paths.)
- # `.' goes first to ensure that any old .aux, .cps,
- # etc. files in ${directory} don't get used in preference to fresher
- # files in `.'. Include orig_pwd in case we are in clean mode, where
- # we've cd'd to a temp directory.
- common="$orig_pwd$path_sep$filename_dir$path_sep$txincludes"
- for var in $tex_envvars; do
- eval ${var}="\$common\$${var}_orig"
- export $var
- done
+ # The normalized file name to compile. Must always point to the
+ # file to actually compile (in case of recoding, macro-expansion etc.).
+ in_input=$in_dir/$in_base
- # Convert relative paths to absolute paths, so we can run in another
- # directory (e.g., in --clean mode, or during the macro-support detection.)
- TEXINPUTS=`absolute_filenames "$TEXINPUTS"`
- verbose "TEXINPUTS: $TEXINPUTS"
- BIBINPUTS=`absolute_filenames "$BIBINPUTS"`
- verbose "BIBINPUTS: $BIBINPUTS"
- BSTINPUTS=`absolute_filenames "$BSTINPUTS"`
- verbose "BSTINPUTS: $BSTINPUTS"
- INDEXSTYLE=`absolute_filenames "$INDEXSTYLE"`
- verbose "INDEXSTYLE: $INDEXSTYLE"
- # If the user explicitly specified the language, use that.
- # Otherwise, if the first line is \input texinfo, assume it's texinfo.
- # Otherwise, guess from the file extension.
- if test -n "$set_language"; then
- language=$set_language
- elif sed 1q "$command_line_filename" | grep 'input texinfo' >&6; then
- language=texinfo
+ # Compute the output file name.
+ if test x"$oname" != x; then
+ out_name=$oname
else
- language=
- fi
-
- # Get the type of the file (latex or texinfo) from the given language
- # we just guessed, or from the file extension if not set yet.
- case ${language:-$filename_ext} in
- [lL]a[tT]e[xX] | *.ltx | *.tex)
- # Assume a LaTeX file. LaTeX needs bibtex and uses latex for
- # compilation. No makeinfo.
- language=latex
- bibtex=${BIBTEX:-bibtex}
- makeinfo= # no point in running makeinfo on latex source.
- texindex=${MAKEINDEX:-makeindex}
- textra_cmd=1i
- if test $oformat = dvi; then
- tex=${LATEX:-latex}
- else
- tex=${PDFLATEX:-pdflatex}
- fi
- thumbpdf=${THUMBPDF:-thumbpdf}
- ;;
-
- *)
- # Assume a Texinfo file. Texinfo files need makeinfo, texindex and tex.
- language=texinfo
- bibtex=
- texindex=${TEXINDEX:-texindex}
- textra_cmd='/^@setfilename/a'
- if test $oformat = dvi; then
- # MetaPost also uses the TEX environment variable. If the user
- # has set TEX=latex for that reason, don't bomb out.
- if echo $TEX | grep 'latex$' >/dev/null; then
- tex=tex # don't bother trying to find etex
- else
- tex=$TEX
- fi
- else
- tex=$PDFTEX
- fi
- # Unless required by the user, makeinfo expansion is wanted only
- # if texinfo.tex is too old.
- if test "$expand" = t; then
- makeinfo=${MAKEINFO:-makeinfo}
- else
- # Check if texinfo.tex performs macro expansion by looking for
- # its version. The version is a date of the form YEAR-MO-DA.
- # We don't need to use [0-9] to match the digits since anyway
- # the comparison with $txiprereq, a number, will fail with non
- # digits.
- # Run in the tmpdir to avoid leaving files.
- (
- cd $tmpdir
- echo '\input texinfo.tex @bye' >txiversion.tex
- # Be sure that if tex wants to fail, it is not interactive:
- # close stdin.
- $tex txiversion.tex </dev/null
- ) >$tmpdir/txiversion.out 2>$tmpdir/txiversion.err
- if test $? != 0; then
- cat $tmpdir/txiversion.out
- cat $tmpdir/txiversion.err >&2
- fatal 1 "texinfo.tex appears to be broken, quitting."
- fi
- eval `sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p' $tmpdir/txiversion.out`
- verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..."
- if test "$txiprereq" -le "$txiversion" >/dev/null 2>&1; then
- makeinfo=
- else
- makeinfo=${MAKEINFO:-makeinfo}
- fi
- # As long as we had to run TeX, offer the user this convenience:
- test "$txiformat" = Texinfo && escape=@
- fi
- thumbpdf=${THUMBPDF:-thumbpdf}
- ;;
- esac
-
- # Go to $tmpdir to try --help, since old versions that don't accept
- # --help will generate a texput.log.
- tex_help=`cd $tmpdir >/dev/null && $tex --help </dev/null 2>&1`
-
- # Expand macro commands in the original source file using Makeinfo.
- # Always use `end' footnote style, since the `separate' style
- # generates different output (arguably this is a bug in -E).
- # Discard main info output, the user asked to run TeX, not makeinfo.
- if test -n "$makeinfo"; then
- verbose "Macro-expanding $command_line_filename to $filename_src ..."
- sed -f $comment_iftex_sed "$command_line_filename" \
- | $makeinfo --footnote-style=end -I "$filename_dir" $miincludes \
- -o /dev/null --macro-expand=- \
- | sed -f $uncomment_iftex_sed >"$filename_src"
- filename_input=$filename_src
+ out_name=$in_noext.`out_lang_ext`
fi
+ out_dir=`func_dirname "$out_name"`
+ out_dir_abs=`absolute "$out_dir"`
+ out_base=`basename "$out_name"`
+ out_noext=`echo "$out_base" | sed 's/\.[^.]*$//'`
+}
- # If makeinfo failed (or was not even run), use the original file as input.
- if test $? -ne 0 \
- || test ! -r "$filename_src"; then
- verbose "Reverting to $command_line_filename ..."
- filename_input=$filename_dir/$filename_ext
- fi
- # Used most commonly for @finalout, @smallbook, etc.
- if test -n "$textra"; then
- verbose "Inserting extra commands: $textra"
- sed "$textra_cmd\\
-$textra" "$filename_input" >"$filename_xtr"
- filename_input=$filename_xtr
- fi
+## -------------- ##
+## TeXify files. ##
+## -------------- ##
- # If this is a Texinfo file with a specified input encoding, and
- # recode is available, then recode to plain 7 bit Texinfo.
- if test $language = texinfo; then
- pgm='s/^ *@documentencoding *\([^ ][^ ]*\) *$/\1/
- t found
- d
- :found
- q'
- encoding=`sed -e "$pgm" "$filename_input"`
- if $recode && test -n "$encoding" && findprog recode; then
- verbose "Recoding from $encoding to Texinfo."
- if recode "$encoding"..texinfo <"$filename_input" >"$filename_rcd" \
- && test -s "$filename_rcd"; then
- filename_input=$filename_rcd
- else
- verbose "Recoding failed, using original input."
- fi
- fi
- fi
+for command_line_filename
+do
+ verbose "Processing $command_line_filename ..."
- # If clean mode was specified, then move to the temporary directory.
- if test "$clean" = t; then
- verbose "cd $tmpdir_src"
- cd "$tmpdir_src" || exit 1
+ input_file_name_decode
+
+ # `texinfo' or `latex'?
+ in_lang=`compute_language "$command_line_filename"`
+
+ # An auxiliary directory used for all the auxiliary tasks involved
+ # in compiling this document.
+ case $build_dir in
+ '' | . ) t2ddir=$out_noext.t2d ;;
+ *) # Avoid collisions between multiple occurrences of the same
+ # file. The sed expression is fragile if the cwd has
+ # active characters.
+ t2ddir=$build_dir/`echo "$out_dir_abs/$out_noext.t2d" |
+ sed "s,^$orig_pwd/,," |
+ sed 's,/,!,g'`
+ esac
+ # Remove it at exit if clean mode.
+ trap "cleanup" 0 1 2 15
+
+ ensure_dir "$build_dir" "$t2ddir"
+
+ # We will change directory, better work with an absolute path...
+ t2ddir=`absolute "$t2ddir"`
+ # Sometimes there are incompatibilities between auxiliary files for
+ # DVI and PDF. The contents can also change whether we work on PDF
+ # and/or DVI. So keep separate spaces for each.
+ workdir=$t2ddir/`out_lang_tex`
+ ensure_dir "$workdir"
+
+ # _build. In a tidy build, where the auxiliary files are output.
+ if $tidy; then
+ work_build=$workdir/build
+ else
+ work_build=.
fi
- while :; do # will break out of loop below
- orig_xref_files=`get_xref_files "$filename_noext"`
-
- # Save copies of originals for later comparison.
- if test -n "$orig_xref_files"; then
- verbose "Backing up xref files: `echo $orig_xref_files | sed 's|\./||g'`"
- cp $orig_xref_files $tmpdir_bak
- fi
-
- # Run bibtex on current file.
- # - If its input (AUX) exists.
- # - If AUX contains both `\bibdata' and `\bibstyle'.
- # - If some citations are missing (LOG contains `Citation').
- # or the LOG complains of a missing .bbl
- #
- # We run bibtex first, because I can see reasons for the indexes
- # to change after bibtex is run, but I see no reason for the
- # converse.
- #
- # Don't try to be too smart. Running bibtex only if the bbl file
- # exists and is older than the LaTeX file is wrong, since the
- # document might include files that have changed. Because there
- # can be several AUX (if there are \include's), but a single LOG,
- # looking for missing citations in LOG is easier, though we take
- # the risk to match false messages.
- if test -n "$bibtex" \
- && test -r "$filename_noext.aux" \
- && test -r "$filename_noext.log" \
- && (grep '^\\bibdata[{]' "$filename_noext.aux" \
- && grep '^\\bibstyle[{]' "$filename_noext.aux" \
- && (grep 'Warning:.*Citation.*undefined' "$filename_noext.log" \
- || grep 'No file .*\.bbl\.' "$filename_noext.log")) \
- >&6 2>&1; \
- then
- verbose "Running $bibtex $filename_noext ..."
- $bibtex "$filename_noext" >&5 ||
- fatal 1 "$bibtex exited with bad status, quitting."
- fi
-
- # What we'll run texindex on -- exclude non-index files.
- # Since we know index files are last, it is correct to remove everything
- # before .aux and .?o?. But don't really do <anything>o<anything>
- # -- don't match whitespace as <anything>.
- # Otherwise, if orig_xref_files contains something like
- # foo.xo foo.whatever
- # the space after the o will get matched.
- index_files=`echo "$orig_xref_files" \
- | sed "s!.*\.aux!!g;
- s!./$filename_noext\.[^ ]o[^ ]!!g;
- s/^[ ]*//;s/[ ]*$//"`
- # Run texindex (or makeindex) on current index files. If they
- # already exist, and after running TeX a first time the index
- # files don't change, then there's no reason to run TeX again.
- # But we won't know that if the index files are out of date or
- # nonexistent.
- if test -n "$texindex" && test -n "$index_files"; then
- verbose "Running $texindex $index_files ..."
- $texindex $index_files 2>&5 1>&2 ||
- fatal 1 "$texindex exited with bad status, quitting."
- fi
-
- # Finally, run TeX.
- run_tex
-
- # Decide if looping again is needed.
- finished=t
-
- # LaTeX (and the package changebar) report in the LOG file if it
- # should be rerun. This is needed for files included from
- # subdirs, since texi2dvi does not try to compare xref files in
- # subdirs. Performing xref files test is still good since LaTeX
- # does not report changes in xref files.
- if grep "Rerun to get" "$filename_noext.log" >&6 2>&1; then
- finished=
- fi
-
- # Check if xref files changed.
- new_xref_files=`get_xref_files "$filename_noext"`
- verbose "Original xref files = `echo $orig_xref_files | sed 's|\./||g'`"
- verbose "New xref files = `echo $new_xref_files | sed 's|\./||g'`"
-
- # If old and new lists don't at least have the same file list,
- # then one file or another has definitely changed.
- test "x$orig_xref_files" != "x$new_xref_files" && finished=
-
- # File list is the same. We must compare each file until we find
- # a difference.
- if test -n "$finished"; then
- for this_file in $new_xref_files; do
- verbose "Comparing xref file `echo $this_file | sed 's|\./||g'` ..."
- # cmp -s returns nonzero exit status if files differ.
- if cmp -s "$this_file" "$tmpdir_bak/$this_file"; then :; else
- # We only need to keep comparing until we find one that
- # differs, because we'll have to run texindex & tex again no
- # matter how many more there might be.
- finished=
- verbose "xref file `echo $this_file | sed 's|\./||g'` differed ..."
- test "$debug" = t && diff -c "$tmpdir_bak/$this_file" "$this_file"
- break
- fi
- done
- fi
-
- # If finished, exit the loop, else rerun the loop.
- test -n "$finished" && break
- done # while :;
-
- # If we were using thumbpdf and producing PDF, then run thumbpdf
- # and TeX one last time.
- if test $oformat = pdf \
- && test -r "$filename_noext.log" \
- && grep 'thumbpdf\.sty' "$filename_noext.log" >&6 2>&1; \
- then
- verbose "Running $thumbpdf $filename_noext ..."
- $thumbpdf "$filename_noext" >&5 ||
- fatal 1 "$thumbpdf exited with bad status, quitting."
- run_tex
- fi
+ # _bak. Copies of the previous auxiliary files (another round is
+ # run if they differ from the new ones).
+ work_bak=$workdir/bak
+ # Make those directories.
+ ensure_dir "$work_build" "$work_bak"
- # If we were in clean mode, compilation was in a tmp directory.
- # Copy the DVI (or PDF) file into the directory where the compilation
- # has been done. (The temp dir is about to get removed anyway.)
- # We also return to the original directory so that
- # - the next file is processed in correct conditions
- # - the temporary file can be removed
- if test -n "$clean"; then
- if test -n "$oname"; then
- dest=$oname
- else
- dest=$orig_pwd
- fi
- verbose "Copying $oformat file from `pwd` to $dest"
- cp -p "./$filename_noext.$oformat" "$dest"
- cd / # in case $orig_pwd is on a different drive (for DOS)
- cd $orig_pwd || exit 1
- fi
+ case $action in
+ compile)
+ # Compile the document.
+ compile
+ cleanup
+ ;;
- # Remove temporary files.
- if test "x$debug" = "x"; then
- verbose "Removing $tmpdir_src $tmpdir_xtr $tmpdir_bak ..."
- cd /
- rm -rf $tmpdir_src $tmpdir_xtr $tmpdir_bak
- fi
+ mostly-clean)
+ mostly_clean
+ ;;
+ esac
done
verbose "done."
diff --git a/Master/bin/mips-irix/texi2pdf b/Master/bin/mips-irix/texi2pdf
index 492128325db..a030a74ed9f 100755
--- a/Master/bin/mips-irix/texi2pdf
+++ b/Master/bin/mips-irix/texi2pdf
@@ -1,12 +1,12 @@
#!/bin/sh
-# $Id: texi2pdf,v 1.1 2004/07/11 01:02:35 karl Exp $
+# $Id: texi2pdf,v 1.2 2005/01/28 01:52:04 karl Exp $
# Written by Thomas Esser. Public domain.
# Execute texi2dvi --pdf.
-test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+test -f /bin/ksh && test -z "$RUNNING_KSH" \
&& { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
- && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
-unset RUNNING_SH5
+ && { 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 \
diff --git a/Master/bin/mips-irix/texindex b/Master/bin/mips-irix/texindex
index a11c84561c9..ae79e5069b5 100755
--- a/Master/bin/mips-irix/texindex
+++ b/Master/bin/mips-irix/texindex
Binary files differ
diff --git a/Master/bin/mips-irix/texlinks b/Master/bin/mips-irix/texlinks
index f84f55a95bd..d8e51550924 100755
--- a/Master/bin/mips-irix/texlinks
+++ b/Master/bin/mips-irix/texlinks
@@ -6,11 +6,15 @@
# the lines given in fmtutil.cnf.
# History:
+# (Further changes in ChangeLog.)
+# Tue Oct 9 14:23:01 BST 2007
+# Added unlink option (-u) to aid OpenBSD package uninstall
+# Edd Barrett <vext01@gmail.com>
# Sun Aug 28 21:41:06 CEST 2005
# remove special cases for csplain,cslatex,pdfcslatex,pdfcsplain
# Fr Apr 8 19:15:05 CEST 2005
# cleanup now has an argument for the return code
-# So Mär 27 18:52:06 CEST 2005
+# So Mar 27 18:52:06 CEST 2005
# honor $TMPDIR, $TEMP and $TMP, not just $TMP
# Mon May 10 20:52:48 CEST 2004
# kpseaccess instead of access
@@ -35,33 +39,30 @@ export PATH
test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
cnf=fmtutil.cnf # name of the config file
-version=1169050907 # seconds since `00:00:00 1970-01-01 UTC'
- # date '+%s' (with GNU date)
+version=20080528.1847 # utc timestamp
progname=texlinks
-usage='texlinks [options] [directories]
+usage='Usage: texlinks [OPTION]... [DIRECTORY]...
Create symbolic links format -> engine according to fmtutil setup.
-Valid options:
- --help
- -h show this help text
- --version show version string
- --cnffile file
- -f file use file as config file (default: fmtutil.cnf)
- --verbose
- -v set verbose mode on (default: off)
- --multiplatform
- -m operate in all platform specific directories
+Mandatory arguments to long options are mandatory for short options too.
+ -h, --help show this help text
+ --version show version string
+ -f, --cnffile FILE use FILE as config file (default: fmtutil.cnf)
+ -v, --verbose enable verbose messages (default: off)
+ -m, --multiplatform operate in all platform specific directories
(default: operate only in directory for this platform)
- --silent
- -s silently skip over existing scripts / binaries
- instead of creating a warning
+ -s, --silent silently skip existing scripts / binaries
+ (default: issue warning)
+ -u, --unlink remove symlinks created by texlinks
-directories is an optional list of directories in which to operate.
-If no directories are specified the list of directories depends on the
---multiplatform option.
-'
+The DIRECTORY arguments are an optional list of directories in which to
+operate. If no directories are specified and --multiplatform is
+likewise not specified, the directory of this script itself is used.
+With --multiplatform, all child dirs of an upper-level bin/ dir are used.
+
+Report bugs to tex-k@tug.org.'
###############################################################################
# abort(errmsg)
@@ -140,7 +141,7 @@ install_link()
fi
if test -f $selfautoloc/mf && test -f $selfautoloc/mf-nowin; then
# have both mf and mf-nowin binaries. no link.
- verbose_echo "metafont symlink $src -> $dest skipped (special case)"
+ verbose_echo "skipped metafont symlink $src -> $dest (special case)"
return
fi
fi
@@ -148,8 +149,9 @@ install_link()
esac
case $src in
- */cont-??|*/metafun|*/mptopdf)
- verbose_echo "symlink $src -> $dest skipped (special case)"
+ */cont-??|*/mptopdf)
+ # context includes wrapper scripts that create/run these.
+ verbose_echo "skipped ConTeXtish symlink $src -> $dest (special case)"
;;
*)
test "x$src" != "x`(ls -ld $src | awk '{print $NF}') 2>/dev/null`" &&
@@ -205,6 +207,24 @@ upd_symlinkdir()
}
###############################################################################
+# rm_link()
+# Delete a previously installed link
+###############################################################################
+rm_link()
+{
+ link=$1;
+ if test -e $link; then
+ if test -h $link; then
+ verbose_do rm -Rf $link
+ else
+ verbose_echo "kept $link, since not a symlink"
+ fi
+ else
+ verbose_echo "skipped $link, non-existent"
+ fi
+}
+
+###############################################################################
# main()
# parse commandline arguments, initialize variables,
# switch into temp. direcrory, execute desired command
@@ -217,6 +237,7 @@ main()
multiplatform=false
verbose=false
+ unlink=false
silent=false
thisdir=`pwd`
: ${KPSE_DOT=$thisdir}; export KPSE_DOT
@@ -232,6 +253,7 @@ main()
--v*|-v) verbose=true;;
--s*|-s) silent=true;;
--m*|-m) multiplatform=true;;
+ --u*|-u) unlink=true;;
-*) errmsg "fmtutil: unknown option \`$1' ignored.";;
*) break;;
esac
@@ -278,9 +300,14 @@ main()
test "x$fmt" = "x$engine" && continue
if test -f "$d/$engine"; then
- install_link "$engine" "$d/$fmt"
+ case $unlink in
+ true)
+ rm_link "$d/$fmt";;
+ *)
+ install_link "$engine" "$d/$fmt";;
+ esac
else
- verbose_echo "$d/$engine: engine does not exist. Skipping..."
+ verbose_echo "skipped $d/$engine, engine does not exist"
fi
# restore positional arguments:
diff --git a/Master/bin/mips-irix/texlua b/Master/bin/mips-irix/texlua
new file mode 120000
index 00000000000..8d727021583
--- /dev/null
+++ b/Master/bin/mips-irix/texlua
@@ -0,0 +1 @@
+luatex \ No newline at end of file
diff --git a/Master/bin/mips-irix/texluac b/Master/bin/mips-irix/texluac
new file mode 120000
index 00000000000..8d727021583
--- /dev/null
+++ b/Master/bin/mips-irix/texluac
@@ -0,0 +1 @@
+luatex \ No newline at end of file
diff --git a/Master/bin/mips-irix/texmfstart b/Master/bin/mips-irix/texmfstart
index e43929213f5..db6dee0a29c 100755..120000
--- a/Master/bin/mips-irix/texmfstart
+++ b/Master/bin/mips-irix/texmfstart
@@ -1,2501 +1 @@
-#!/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"
-
-# funny, selfmergs was suddenly broken to case problems
-
-# 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: 't:/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 = 'pdftex'
- @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', 'pdftex', '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: 't:/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: 't:/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: 't:/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: 't:/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_stop
-
-
-
-$mswindows = Config::CONFIG['host_os'] =~ /mswin/
-$separator = File::PATH_SEPARATOR
-$version = "2.0.3"
-$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
-$runners = 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',
- 'pdftrimwhite',
- 'texfind',
- 'texshow'
- #
- # no 'luatools',
- # no '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['ruby'] = $applications['rb'] = 'ruby'
- $applications['lua'] = $applications['lua'] = 'lua'
- $applications['perl'] = $applications['pl'] = 'perl'
- $applications['python'] = $applications['py'] = 'python'
- $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']
-
- $runners['lua'] = "texlua"
-
-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
- # if s =~ / / then
- # hsh['arguments'] += " \"#{s}\"" # maybe split on =
- # else
- # hsh['arguments'] += " #{s}"
- # end
- # 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 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
- if s =~ /\s/ then
- kvl = s.split('=')
- if kvl[1] and kvl[1] !~ /^[\"\']/ then
- hsh['arguments'] += ' ' + kvl[0] + "=" + '"' + kvl[1] + '"'
- elsif s =~ /\s/ then
- hsh['arguments'] += ' "' + s + '"'
- else
- hsh['arguments'] += ' ' + s
- end
- else
- hsh['arguments'] += ' ' + s
- end
- 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 quoted(str)
- if str =~ /^\"/ then
- return str
- elsif str =~ / / then
- return "\"#{str}\""
- else
- return str
- end
-end
-
-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
- quoted(resolved)
- else
- report("environment variable #{original} cannot be resolved") unless $report
- quoted(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
- quoted(original)
- else
- quoted(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
- quoted(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
- quoted(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
- quoted(resolved)
- end
- end
- end
-end
-
-def changeddir?(path)
- if path.empty? then
- return true
- else
- oldpath = File.expand_path(path)
- begin
- Dir.chdir(path) if not path.empty?
- rescue
- report("unable to change to directory: #{path}")
- else
- report("changed to directory: #{path}")
- end
- newpath = File.expand_path(Dir.getwd)
- return oldpath == newpath
- 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 join_command(args)
- args[0] = $runners[args[0]] || args[0]
- [args].join(' ')
-end
-
-def runoneof(application,fullname,browserpermitted)
- if browserpermitted && launch(fullname) then
- return true
- else
- fullname = quoted(fullname) # added because MM ran into problems
- 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(join_command([fullname,expanded($arguments)]))
- return true
- else
- applications.each do |a|
- return true if runcommand(join_command([a,fullname,expanded($arguments)]))
- end
- end
- elsif applications.empty? then
- if $report then
- output(join_command([fullname,expanded($arguments)]))
- return true
- else
- return runcommand(join_command([fullname,expanded($arguments)]))
- end
- else
- if $report then
- output(join_command([applications,fullname,expanded($arguments)]))
- return true
- else
- return runcommand(join_command([applications,fullname,expanded($arguments)]))
- 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)
-# the . is also not accepted by unix as seperator
-
-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
- pathlist = [ ]
- progpath = $applications[suffixlist[0]]
- threadok = registered("THREAD") !~ /unknown/
- pathlist << ['.','current']
- pathlist << [$ownpath,'caller'] if $ownpath != '.'
- pathlist << ["#{$ownpath}/../#{progpath}",'caller'] if progpath
- pathlist << [registered("THREAD"),'thread'] if threadok
- pathlist << ["#{registered("THREAD")}/../#{progpath}",'thread'] if progpath && threadok
- pathlist.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) # br global
-
- 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
- return true
- elsif $selfcleanup then
- output("ruby libraries are cleaned up") if SelfMerge::cleanup
- return true
- elsif $serve then
- if ENV['KPSEMETHOD'] && ENV['KPSEPORT'] then
- # # kpse_merge_done: require 'base/kpseremote'
- begin
- KpseRemote::start_server
- rescue
- return false
- else
- return true
- end
- else
- usage
- puts("")
- puts("message : set 'KPSEMETHOD' and 'KPSEPORT' variables")
- return false
- end
- elsif $help || ! $filename || $filename.empty? then
- usage
- loadtree($tree)
- loadenvironment($environment)
- show_environment()
- return true
- elsif $batch && $filename && ! $filename.empty? then
- # todo, take commands from file and avoid multiple starts and checks
- return false
- 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
- return true # guess
- elsif $browser && $filename =~ /^http\:\/\// then
- return launch($filename)
- else
- begin
- process do
- if $direct || $filename =~ /^bin\:/ then
- return direct($filename)
- elsif $edit && ! $editor.empty? then
- return edit($filename)
- else # script: or no prefix
- command = find(shortpathname($filename),$program)
- if command then
- register("THREAD",File.dirname(File.expand_path(command)))
- return run(command)
- else
- report('unable to locate program')
- return false
- end
- end
- end
- rescue
- report('fatal error in starting process')
- return false
- end
- end
- end
-
-end
-
-if execute(ARGV) then
- report("\nexecution was successful") if $verbose
- exit(0)
-else
- report("\nexecution failed") if $verbose
- exit(1)
-end
+../../texmf-dist/scripts/context/ruby/texmfstart.rb \ No newline at end of file
diff --git a/Master/bin/mips-irix/texshow b/Master/bin/mips-irix/texshow
new file mode 120000
index 00000000000..52a03692b74
--- /dev/null
+++ b/Master/bin/mips-irix/texshow
@@ -0,0 +1 @@
+../../texmf-dist/scripts/context/stubs/unix/texshow \ No newline at end of file
diff --git a/Master/bin/mips-irix/textools b/Master/bin/mips-irix/textools
index 7445eac371c..d1a20375405 100755..120000
--- a/Master/bin/mips-irix/textools
+++ b/Master/bin/mips-irix/textools
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart textools.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/textools \ No newline at end of file
diff --git a/Master/bin/mips-irix/texutil b/Master/bin/mips-irix/texutil
index 607154af059..78f249c7f02 100755..120000
--- a/Master/bin/mips-irix/texutil
+++ b/Master/bin/mips-irix/texutil
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart texutil.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/texutil \ No newline at end of file
diff --git a/Master/bin/mips-irix/tftopl b/Master/bin/mips-irix/tftopl
index f39430fadb6..8d7f9645ccd 100755
--- a/Master/bin/mips-irix/tftopl
+++ b/Master/bin/mips-irix/tftopl
Binary files differ
diff --git a/Master/bin/mips-irix/thumbpdf b/Master/bin/mips-irix/thumbpdf
index 832e4e76717..98a72428616 100755..120000
--- a/Master/bin/mips-irix/thumbpdf
+++ b/Master/bin/mips-irix/thumbpdf
@@ -1,1562 +1 @@
-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
-#
-# thumbpdf.pl
-#
-# Copyright (C) 1999-2005 Heiko Oberdiek.
-#
-# This work may be distributed and/or modified under the
-# conditions of the LaTeX Project Public License, either version 1.3
-# 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.3 or later is part of all distributions of LaTeX
-# version 2003/12/01 or later.
-#
-# This work has the LPPL maintenance status "maintained".
-#
-# This Current Maintainer of this work is Heiko Oberdiek.
-#
-# See file "readme.txt" for a list of files that belong to this project.
-#
-# This file "thumbpdf.pl" may be renamed to "thumbpdf"
-# for installation purposes.
-#
-my $file = "thumbpdf.pl";
-my $program = uc($&) if $file =~ /^\w+/;
-my $version = "3.8";
-my $date = "2005/07/06";
-my $author = "Heiko Oberdiek";
-my $copyright = "Copyright (c) 1999-2005 by $author.";
-#
-# Reqirements: Perl5, Ghostscript
-# History:
-# 1999/02/14 v1.0: First release.
-# 1999/02/23 v1.1:
-# * Looking for the media box to calculate the resolution
-# for Ghostscript
-# * new option --resolution
-# 1999/03/01 v1.2:
-# * optimization: indirect objects for length values removed.
-# * "first line" from epstopdf
-# 1999/03/12 v1.3:
-# * Copyright: LPPL
-# 1999/05/05 v1.4:
-# * Detecting of cygwin32 environment.
-# * Minor corrections of output of error messages.
-# * Sharing RGB objects.
-# 1999/06/13 v1.5:
-# * gs detection extended.
-# 1999/07/27 v1.6
-# 1999/08/08 v1.7:
-# * \immediate before \pdfobj (pdfTeX 0.14a)
-# 1999/09/09 v1.8
-# 1999/09/06 v1.9:
-# * Check for direct /Length values (for jpg images)
-# 2000/01/11 v1.10:
-# * Bug fix: /Length (direct) as last entry.
-# * Direct /Length in RGB objects supported.
-# 2000/01/19 v1.11:
-# * "for (my $j=0;...;...)" replaced by "my $j; for($j=0;...;...)",
-# because there exist perl versions that have problems with.
-# 2000/02/11 v1.12:
-# * Option `clean' added.
-# * The name of thumbnail data file: jobname.tnd,
-# if thumbpdf is called: thumbpdf jobname[.pdf] [options]
-# 2000/02/22 v2.0:
-# * pdfmark support for dvips/ps2pdf route added.
-# * <jobname>.tpt replaces thumbdta.tex (for pdfTeX)
-# <jobname>.tpm (for pdfmark)
-# <jobname>.top replaces thumbopt.tex
-# * Options `useps', `modes' added,
-# `makedef' renamed to `makedata'.
-# 2000/02/28 v2.1:
-# * Environment variable `THUMBPDF' supported.
-# 2000/03/07 v2.2:
-# * Support for Distiller 3 and 4, the streams are uncompressed.
-# * Call of gs is changed in order to show the currently processed
-# page number of the pdf file.
-# * Option --printgscmd creates the command line file `thumbpdf.gs'
-# for the Ghostscript call.
-# 2000/03/22 v2.3:
-# * Bug fix: --useps now works.
-# 2000/04/10 v2.4:
-# * Fix for ActiveState Perl 5.6.0: uc line changed, fork removed.
-# (Thanks to Andreas Buehmann <andreas.buehmann@gmx.de>.)
-# * Version test for thumbpdf.tex added for users that
-# mix versions, sigh.
-# 2000/07/29 v2.5:
-# * `save' trick in call of ghostscript.
-# * Undocumented option --gspages added.
-# 2000/09/27 v2.6
-# 2000/10/27 v2.7:
-# * -dFIXEDMEDIA=0 added in gs call
-# 2001/01/12 v2.8:
-# * Bug fix in dvips mode and active option `level2':
-# pack parameter corrected for little-endian machines.
-# * /Rotate in pdf pages:
-# ghostscript versions around 6.01 have added a hack
-# in /pdfshowpage_setpage, that ignores the /Rotate entry.
-# A patch is added to disable the hack.
-# * Ghostscript uses the MediaBox for calculating the
-# page size. For version 6.50 a patch is added to use
-# the /CropBox instead.
-# 2001/03/29 v2.9:
-# * Option --password added.
-# 2001/04/02 v2.10
-# 2001/04/26 v2.11
-# * Option --antialias added (suggestion of Juergen Bausa).
-# 2002/01/11 v3.0
-# * Syntax of option --antialias changed (see readme.txt).
-# * Support for VTeX's PS mode added.
-# * Greek mode added (see readme.txt).
-# * Signal handlers added for cleanup.
-# 2002/05/26 v3.1
-# * SIG_HUP unkown in Windows.
-# * Bug fix: The signal function for __DIE__ "cleanup" aborts
-# before the error message of "die" is printed.
-# Replaced by "clean" that does not contain "exit 1".
-# * Small bug fix in mode detection and mode "vtex"
-# removed from list. "vtexpdfmark" was detected,
-# "vtex" did not work and perhaps it will be used
-# later for VTeX in PDF mode.
-# 2002/05/26 v3.2
-# * Fix: "MacOS/X: darwin" is now not interpreted as
-# Windows.
-# 2003/03/19 v3.3
-# * Fix for gs 8.00 in mode dvips:
-# THB_DistillerPatch also applied to ghostscript >= 8.00.
-# 2003/06/06 v3.4
-# * Bug fix, two forgotten "pop"s added for Distiller case.
-# 2004/10/24 v3.5
-# * Revert Cygwin detection: is unix (request by Jan Nieuwenhuizen).
-# * LPPL 1.3.
-# 2004/11/19 v3.6
-# * Bug fix for dvips mode and gs < 8.00 (/stackunderflow in pop).
-# 2004/11/19 v3.7:
-# * For easier debugging, the special thumbpdf objects of
-# thumbpdf.pdf are now valid PDF objects (dictionaries).
-# * Remove of extra '\n' before "endstream" that is added
-# by pdfTeX 1.20a.
-# 2005/07/06 v3.8:
-# * Fix because of pdfTeX 1.30.
-#
-
-### 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;
-
-# Windows detection (no SIGHUP)
-my $Win = 0;
-$Win = 1 if $^O =~ /mswin32/i;
-
-my $gspages = 1;
-$gspages = 0 if $^O =~ /dos/i;
-
-### variables
-my $jobname = "";
-my $jobfile = "";
-my $pdftexfile = "";
-my $pdfmarkfile = "";
-my $psext = ".ps";
-my $pdfext = ".pdf";
-my $pdftexext = ".tpt";
-my $pdfmarkext = ".tpm";
-my $thumbprefix = "thb";
-my $envvar = "THUMBPDF";
-my $pdffile = "thumbpdf.pdf";
-my $logfile = "thumbpdf.log";
-my $texfile = "thumbpdf";
-my $package = "thumbpdf.sty";
-my $readme = "readme.txt";
-my $gscnffile = "thumbpdf.gs";
-my $gssection = "section I. `Known Problems'";
-my @cleanlist = ();
-my $resolution = 9;
-my $mode_pdftex = 0;
-my $mode_pdfmark = 0;
-my $antialias_default = "4";
-my @arglist = @ARGV;
-my $gskidrunning = 0;
-
-### option variables
-my @bool = ("false", "true");
-$::opt_device = "png16m";
-$::opt_compress = "10";
-$::opt_resolution = "";
-$::opt_modes = "pdftex";
-$::opt_gscmd = "";
-$::opt_level2 = 0;
-$::opt_help = 0;
-$::opt_quiet = 0;
-$::opt_debug = 0;
-$::opt_verbose = 0;
-$::opt_useps = 0;
-$::opt_printgscmd = 0;
-$::opt_gspages = $gspages; # undocumented
-$::opt_makepng = 1;
-$::opt_makepdf = 1;
-$::opt_makedata = 1;
-$::opt_clean = 1;
-$::opt_password = "";
-$::opt_antialias = $antialias_default;
-$::opt_greek = 0;
-
-my $usage = <<"END_OF_USAGE";
-${title}Syntax: \L$program\E [options] <jobname[.pdf|.ps]>
-Function: Support of thumbnails for pdfTeX or dvips/ps2pdf (pdfmark).
- Thumbnails are generated by Ghostscript and the result is
- written to data files for package `$package':
- `<jobname>$pdftexext' (pdfTeX), `<jobname>$pdfmarkext' (pdfmark)
-Options: (defaults:)
- --help print usage
- --(no)quiet suppress messages ($bool[$::opt_quiet])
- --(no)verbose verbose printing ($bool[$::opt_verbose])
- --(no)debug debug informations ($bool[$::opt_debug])
- --(no)makepng make thumbnails `$thumbprefix*.png' ($bool[$::opt_makepng])
- --(no)makepdf make `$pdffile' with thumbnails as images ($bool[$::opt_makepdf])
- --(no)makedata make data file(s) for package `$package' ($bool[$::opt_makedata])
- --(no)clean clear temp files ($bool[$::opt_clean])
- --(no)useps `makepng' uses `.ps' instead of `.pdf' file ($bool[$::opt_useps])
- --(no)level2 `<jobname>.tpm' with ps level 2 features ($bool[$::opt_level2])
- --(no)greek text in greek style (experimental) ($bool[$::opt_greek])
- --antialias <num1>[num2] anti-aliasing, 0 = disable, 4 = max ($::opt_antialias)
- --device|png [png]<dev> Ghostscript device for thumbnails,
- dev = mono, gray, 16, 256, 16m ($::opt_device)
- --resolution <res> thumbnail resolution for makepng ($resolution)
- --compress <n> thumbnail compress level, n = 0..10 ($::opt_compress)
- --modes <mode>[,mode] mode=pdftex|pdfmark|dvips|ps2pdf|
- vtexpdfmark|all ($::opt_modes)
- --password apassword for an encrypted pdf file ($::opt_password)
-END_OF_USAGE
-
-### environment variable THUMBPDF
-if ($ENV{$envvar}) {
- unshift(@ARGV, split(/\s+/, $ENV{$envvar}));
-}
-
-### process options
-my @OrgArgv = @ARGV;
-use Getopt::Long;
-GetOptions(
- "help!",
- "quiet!",
- "debug!",
- "verbose!",
- "device|png=s",
- "gscmd=s",
- "level2!",
- "compress=i",
- "resolution=f",
- "modes=s",
- "useps!",
- "printgscmd!",
- "gspages!",
- "makepng!",
- "makepdf!",
- "makedata!",
- "clean!",
- "password=s",
- "antialias=s",
- "greek!"
-) or die $usage;
-!$::opt_help or die $usage;
-@ARGV < 2 or die "$usage$Error Too many files!\n";
-@ARGV == 1 or die "$usage$Error Missing jobname!\n";
-
-$::opt_device = "png$::opt_device" unless $::opt_device =~ /^png/;
-$::opt_quiet = 0 if $::opt_verbose;
-$::opt_clean = 0 if $::opt_debug or !$::opt_makepdf or !$::opt_makedata;
-
-$::opt_compress = 0 if $::opt_compress < 0;
-$::opt_compress = 10 if $::opt_compress > 10;
-my $J = "^^J";
-$J = "" if $::opt_compress == 10;
-
-$::opt_antialias = $antialias_default if $::opt_antialias eq "";
-$::opt_antialias =~ /^[0124][0124]?$/ or
- die "$usage$Error Wrong value for option --antialias!\n";
-$::opt_antialias .= $::opt_antialias if length($::opt_antialias) < 2;
-my $AntiAliasText = substr($::opt_antialias, 0, 1);
-my $AntiAliasGraphics = substr($::opt_antialias, 1, 1);
-$AntiAliasText = "1" if $AntiAliasText eq "0";
-$AntiAliasGraphics = "1" if $AntiAliasGraphics eq "0";
-
-$GS = $::opt_gscmd if $::opt_gscmd;
-$gspages = $::opt_gspages;
-
-### get modes
-$::opt_modes = "\L$::opt_modes\E";
-$::opt_modes =~ s/dvips/pdfmark/g;
-$::opt_modes =~ s/ps2pdf/pdfmark/g;
-$::opt_modes =~ s/vtexpdfmark/pdfmark/g;
-$::opt_modes =~ s/vtexpdfmark/pdfmark/g;
-if ($::opt_modes =~ /pdftex/)
-{
- $mode_pdftex = 1;
- $::opt_modes =~ s/pdftex//g;
-}
-if ($::opt_modes =~ /pdfmark/)
-{
- $mode_pdfmark = 1;
- $::opt_modes =~ s/pdfmark//g;
-}
-if ($::opt_modes =~ /all/)
-{
- $mode_pdftex = 1;
- $mode_pdfmark = 1;
- $::opt_modes =~ s/all//g;
-}
-$::opt_modes =~ s/\s+//g;
-$::opt_modes =~ s/,+/,/g;
-$::opt_modes =~ s/^,//;
-$::opt_modes =~ s/,$//;
-if ($::opt_modes ne "")
-{
- die "$usage$Error Unknown mode(s): `$::opt_modes'\n";
-}
-if ($::opt_makedata)
-{
- $mode_pdftex or $mode_pdfmark or
- die "$usage$Error Missing mode!\n";
-}
-
-### get jobname
-$jobname = $ARGV[0];
-if ($::opt_useps)
-{
- $jobname =~ s/\.ps$//i;
- $jobname =~ s/\\/\//g;
- $jobfile = $jobname . $psext;
-}
-else
-{
- $jobname =~ s/\.pdf$//i;
- $jobname =~ s/\\/\//g;
- $jobfile = $jobname . $pdfext;
-}
-$pdftexfile = $jobname . $pdftexext;
-$pdfmarkfile = $jobname . $pdfmarkext;
-
-print $title unless $::opt_quiet;
-
-print "* jobname: `$jobname'\n" if $::opt_verbose;
-
-if ($::opt_debug) {
- print <<"END_DEB";
-* OSNAME: $^O
-* PERL_VERSION: $]
-* ARGV: @OrgArgv
-END_DEB
-}
-
-### set signals
-$SIG{__DIE__} = \&clean;
-setsignals(\&cleanup);
-
-my $MaxThumb = 0;
-
-###
-### make thumbnails
-###
-if ($::opt_makepng)
-{
- print "*** make png files / run Ghostscript ***\n"
- unless $::opt_quiet or $::opt_printgscmd;
- if ($::opt_useps)
- {
- print "* ps file: $jobfile\n" if $::opt_verbose;
- }
- else
- {
- print "* pdf file: $jobfile\n" if $::opt_verbose;
- }
- print "* Ghostscript command: `$GS'\n" .
- "* Ghostscript png device: `$::opt_device'\n" if $::opt_verbose;
-
- if ($::opt_resolution)
- {
- $resolution = $::opt_resolution
- }
- else
- {
- # looking for MediaBox
-
- my $max_x = 0;
- my $max_y = 0;
- {
- my $MB = $jobfile;
- open(MB, $MB) or die "$Error Cannot open `$MB'!\n";
- binmode(MB);
- my $xy_patt = '[\-\.\d]';
- while (<MB>)
- {
- if (/\/MediaBox\s*\[\s*($xy_patt+)\s+($xy_patt+)\s+($xy_patt+)\s+($xy_patt+)\s*\]/)
- {
- my $x = $3 - $1;
- my $y = $4 - $2;
- $max_x = $x if $x > $max_x;
- $max_y = $y if $y > $max_y;
- }
- }
- close(MB);
- }
- if ($max_x <= 0 || $max_y <= 0)
- {
- print "!!! Warning: MediaBox not found, " .
- "using default resolution: $resolution DPI\n";
- }
- else
- {
- print "* Max. Size of MediaBox: $max_x x $max_y\n" if $::opt_verbose;
-
- my $rx = 106 * 72 / $max_x;
- my $ry = 106 * 72 / $max_y;
- $resolution = $rx;
- $resolution = $ry if $ry < $rx;
- print "* Resolution: $resolution DPI\n" if $::opt_verbose;
- }
- }
-
-# Ghostscript's pdfshowpage_setpage is patched for solving
-# some problems:
-# * gs6.0* includes a hack that ignores the /Rotate entry
-# in the PDF page, if OutputFile is set.
-# gs6.50 does not need a fix and it is not applied,
-# because pdfshowpage_setpage does not contain /OutputFile.
-# * If /CropBox is set, then it should be used instead
-# of the /MediaBox entry. Because the CropBox area should
-# be part of the MediaBox, the MediaBox is overwritten
-# with the CropBox values for generating the thumbnails.
-# The fixes are only applied for versions >= 6.0, because
-# gs5.50 gets a /PageSize problem with this fix.
-#
- my $SetPageHack = <<'SET_PAGE_HACK';
-currentglobal true setglobal
-false
-/product where {
- pop
- product (Ghostscript) search {
- pop pop pop
- revision 600 ge {
- pop true
- } if
- }{pop} ifelse
-} if
-{ /pdfdict where {
- pop
- pdfdict begin
- /pdfshowpage_setpage
- [ pdfdict /pdfshowpage_setpage get
- { dup type /nametype eq
- { dup /OutputFile eq
- { pop /AntiRotationHack
- }{
- dup /MediaBox eq revision 650 ge and
- { /THB.CropHack {
- 1 index /CropBox pget
- { 2 index exch /MediaBox exch put
- } if
- } def
- /THB.CropHack cvx
- } if
- } ifelse
- } if
- } forall
- ] cvx def
- end
- } if
-} if
-setglobal
-SET_PAGE_HACK
-
- my $Greek = "";
- $Greek = <<'END_GREEK' if $::opt_greek;
-currentglobal true setglobal
-userdict begin
- % * Patch for `show'
- /THB_ORG_show {show} bind def
- /THB_greekstring
- /.charboxpath where
- {
- pop
- {
- currentpoint newpath moveto
- true .charboxpath closepath fill
- } bind def
- }{
- {
- {
- 1 string dup 0 4 -1 roll put
- dup stringwidth pop exch
- true charpath flattenpath pathbbox
- 2 index sub exch 3 index sub exch rectfill
- 0 rmoveto
- } forall
- } bind def
- } ifelse
- /show {
- currentfont /FontType get 1 eq
- {
- dup
- gsave
- % assuming white background
- [ currentrgbcolor ]
- { 1 add 2 div } forall
- setrgbcolor
- THB_greekstring
- grestore
- stringwidth pop 0 rmoveto
- }{
- THB_ORG_show
- } ifelse
- } bind def
-
- % * Patch for the PDF case
- userdict /GS_PDF_ProcSet known
- {
- % GS_PDF_ProcSet is readonly, so it will be copied first
- GS_PDF_ProcSet length 10 add dict dup
- GS_PDF_ProcSet {
- put dup
- } forall
- /GS_PDF_ProcSet exch def
- dup
- begin
- % `setshowstate' contains the use of `show', so it has to
- % be overwritten, because it was defined with `bind'.
- % The definition is taken from `pdf_ops.ps'.
- revision 710 lt
- { % 5.50, 6.51, 7.00, 7.02
-
-/setshowstate
- { WordSpacing 0 eq TextSpacing 0 eq and
- { TextRenderingMode 0 eq
- { { setfillstate show } }
- { { false charpath textrenderingprocs TextRenderingMode get exec } }
- ifelse
- }
- { TextRenderingMode 0 eq
- { WordSpacing 0 eq
- { { setfillstate TextSpacing exch 0 exch ashow } }
- { TextSpacing 0 eq
- { { setfillstate WordSpacing exch 0 exch 32 exch widthshow } }
- { { setfillstate WordSpacing exch TextSpacing exch 0 32 4 2 roll 0 exch awidthshow } }
- ifelse
- }
- ifelse
- }
- { { WordSpacing TextSpacing
- % Implement the combination of t3 and false charpath.
- % Note that we must use cshow for this, because we
- % can't parse multi-byte strings any other way.
- % Stack: string xword xchar
- { pop pop (x) dup 0 3 index put false charpath
- % Stack: xword xchar ccode
- 3 copy 32 eq { add } { exch pop } ifelse 0 rmoveto pop
- }
- 4 -1 roll cshow pop pop
- textrenderingprocs TextRenderingMode get exec
- }
- }
- ifelse
- }
- ifelse /Show gput
- } bdef
-
- }{ % 7.10
-
-/setshowstate
- { WordSpacing 0 eq TextSpacing 0 eq and
- { TextRenderingMode 0 eq
- { { setfillstate show } }
- { { false charpath textrenderingprocs TextRenderingMode get exec } }
- ifelse
- }
- { TextRenderingMode 0 eq
- { WordSpacing 0 eq
- { { setfillstate TextSpacing 0 Vexch 3 -1 roll ashow } }
- { TextSpacing 0 eq
- { { setfillstate WordSpacing 0 Vexch 32 4 -1 roll widthshow } }
- { { setfillstate WordSpacing 0 Vexch 32
- TextSpacing 0 Vexch 6 -1 roll awidthshow } }
- ifelse
- }
- ifelse
- }
- { { WordSpacing TextSpacing
- % Implement the combination of t3 and false charpath.
- % Note that we must use cshow for this, because we
- % can't parse multi-byte strings any other way.
- % Stack: string xword xchar
- { pop pop (x) dup 0 3 index put false charpath
- % Stack: xword xchar ccode
- 3 copy 32 eq { add } { exch pop } ifelse 0 Vexch rmoveto pop
- }
- 4 -1 roll cshow pop pop
- textrenderingprocs TextRenderingMode get exec
- }
- }
- ifelse
- }
- ifelse /Show gput
- } bdef
-
- } ifelse
- end
- readonly pop
- } if
-end
-setglobal
-END_GREEK
-
- my $SetPassword = "";
- $SetPassword = "/PDFPassword($::opt_password)def" if $::opt_password;
-
- my $PSHeader = "save pop $SetPassword $SetPageHack $Greek";
- $PSHeader =~ s/%\s.*\n/ /g;
- $PSHeader =~ s/\s+/ /g;
- $PSHeader =~ s/\s+([\(\/\[\]\{\}])/$1/g;
- $PSHeader =~ s/([\)\[\]\{\}])\s+/$1/g;
- $PSHeader =~ s/\s+$//;
-
- my $AntiAlias = "";
- $AntiAlias = "\n-dTextAlphaBits=$AntiAliasText\n" .
- "-dGraphicsAlphaBits=$AntiAliasGraphics"
- if $::opt_antialias;
-
- my $gs_cmd = <<"GS_CMD_END";
-$GS$AntiAlias
--dNOPAUSE
--dBATCH
--sDEVICE=$::opt_device
--r$resolution
--sOutputFile=$thumbprefix%d.png
--c "$PSHeader"
--f $jobfile
-GS_CMD_END
- # The trick with `save' comes from `ps2pdf':
- # Doing an initial `save' helps keep fonts from being flushed
- # between pages.
-
- if ($::opt_printgscmd)
- {
- open(GSCNF, ">$gscnffile") or die "$Error Cannot open `$gscnffile'!\n";
- $gs_cmd =~ s/^[^\r\n]+[\r\n]+//;
- print GSCNF $gs_cmd;
- close(GSCNF);
- my $options = "@arglist";
- $options =~ s/\s*--?pr[intgscmd]*\s*/ /i;
- $options =~ s/^\s+//;
- $options =~ s/\s+$//;
- print <<"END_PERL" if $::opt_verbose;
-* Perl interpreter: $^X
-* Perl script: $0
-END_PERL
- print <<"END_GS";
-1. Run `Ghostscript' manually:
- ==> $GS \@$gscnffile
-2. Call `thumbpdf' again with the additional option `--nomakepng':
- ==> thumbpdf --nomakepng $options
-END_GS
- exit(0);
- }
-
- chomp($gs_cmd);
- $gs_cmd =~ s/\n/ /mg;
- print "> $gs_cmd\n" if $::opt_verbose;
-
- if ($::opt_debug)
- {
- if ($gspages)
- {
- print "* Ghostscript with page numbers\n";
- }
- else
- {
- print "* Ghostscript without page numbers\n";
- }
- }
-
- setsignals(\&gscleanup);
- my $capture = "";
- if ($gspages)
- {
- my $newline = 0;
- open(KID, "$gs_cmd|") or die "$Error Cannot open Ghostscript ($!)!\n";
- *::GSKID = *KID;
- $gskidrunning = 1;
- my $orgbar = $|;
- $|=1;
- while (<KID>)
- {
- $capture .= $_;
- if ($::opt_verbose)
- {
- print;
- }
- else
- {
- if (!$::opt_quiet)
- {
- print if /^Processing pages/;
- if (/^Page\s+(\d+)/)
- {
- print " " if $newline;
- $newline = 1;
- print "[$1]";
- }
- }
- }
- }
- $gskidrunning =0;
- if (!close(KID))
- {
- if ($!)
- {
- die "$Error Closing Ghostscript ($!)!\n";
- }
- else
- {
- my $exitvalue = $? >> 8;
- die "$Error Closing Ghostscript (exit status: $exitvalue)!\n";
- }
- }
- print "\n" if $newline;
- $| = $orgbar;
- }
- else # without pages
- {
- $capture = `$gs_cmd`;
- if (!defined($capture))
- {
- die "$Error Cannot execute Ghostscript!\n";
- }
- print $capture if $::opt_verbose;
- }
-
- if ($capture =~ /Error:\s*(.*)\n/)
- {
- die <<"END_DIE";
-$Error `$1' (Ghostscript)!
-See `$readme', $gssection, for further information.
-END_DIE
- }
- if ($capture =~ /Unknown device:\s*(.*)\n/)
- {
- die "$Error Unknown device `$1' (Ghostscript)!\n";
- }
- if ($?)
- {
- my $exitvalue = $?;
- if ($exitvalue > 255)
- {
- $exitvalue >>= 8;
- die "$Error Closing Ghostscript (exit status: $exitvalue)!\n";
- }
- die "$Error Closing Ghostscript ($exitvalue)!\n";
- }
- if ($capture =~ /Processing pages \d+ through (\d+)./)
- {
- $MaxThumb = $1;
- }
- print "* max. page: $MaxThumb\n" if $::opt_debug;
- setsignals(\&cleanup);
-}
-
-###
-### make thumbpdf.pdf file
-###
-if ($::opt_makepdf)
-{
- print "*** make `$pdffile' / run pdfTeX ***\n" unless $::opt_quiet;
-
- if ($MaxThumb > 0)
- {
- my $i;
- for ($i=1; $i<=$MaxThumb; $i++)
- {
- push(@cleanlist, "$thumbprefix$i.png");
- }
- }
- else
- {
- # get max thumb number to speed up the pdfTeX run
- $MaxThumb = 0;
- foreach (glob("$thumbprefix*.png"))
- {
- next unless /$thumbprefix(\d+).png/;
- $MaxThumb = $1 if $1 > $MaxThumb;
- push(@cleanlist, $_);
- }
- }
-
- push(@cleanlist, $logfile);
- push(@cleanlist, $pdffile);
-
- my $compress = $::opt_compress;
- $compress = 9 if $::opt_compress == 10;
- my $cmd = "pdftex \"" .
- "\\nonstopmode" .
- "\\pdfcompresslevel$compress" .
- "\\def\\thumbjob{$jobname}" .
- "\\def\\thumbmax{$MaxThumb}" .
- "\\input $texfile" .
- "\"";
- print "> $cmd\n" if $::opt_verbose;
- my @capture = `$cmd`;
- if (!defined(@capture))
- {
- die "$Error Cannot execute pdfTeX!\n";
- }
- if ($::opt_verbose)
- {
- print @capture;
- }
- else
- {
- foreach (@capture)
- {
- print if /^!\s/;
- }
- }
- if ($?)
- {
- my $exitvalue = $?;
- if ($exitvalue > 255)
- {
- $exitvalue >>= 8;
- die "$Error Closing pdfTeX (exit status: $exitvalue)!\n";
- }
- die "$Error Closing pdfTeX ($exitvalue)!\n";
- }
- # test version
- my $versionfound = 0;
- foreach (@capture)
- {
- if (/File:.*thumbpdf.*(\d\d\d\d\/\d\d\/\d\d)\s+v(\d+\.\d+)/)
- {
- $versionfound = 1;
- if ($1 ne $date or $2 ne $version) {
- print <<"END_WARN";
-!!! Warning: Version of `thumbpdf.tex' does not match with perl script!
- Current `thumbpdf.tex': $1 v$2
- Please install version: $date v$version
-END_WARN
- }
- }
- }
- print "!!! Warning: Version of `thumbpdf.tex' not found!\n"
- if !$versionfound;
-
- $_ = pop(@cleanlist);
-}
-
-###
-### parse thumbpdf.pdf
-###
-
-if ($::opt_makedata)
-{
- push(@cleanlist, $pdffile);
-
- print "*** parse `$pdffile' ***\n" unless $::opt_quiet;
-
-### reading file and parse obj structure
-
- my @objno = (); # obj number
- my @objdict = (); # boolean, object is dict
- my @objtext = (); # text of object
- my @objstream = (); # stream of object if any
- my $maxobj = 0;
-
- my @getobjindex = (); # $getobj[obj number] ==> index for $obj...[index]
-
- # open file
- my $PDF = $pdffile;
- open(PDF, $PDF) or die "$Error Cannot open `$PDF'!\n";
- binmode(PDF);
- my $lineno = 0;
-
- # read header
- $_ = <PDF>; $lineno++;
- $_ or die "$Error Cannot read header of `$PDF' or file is empty!\n";
- /^%PDF/ or die "$Error No PDF specification found!\n";
- print "* pdf header: $_" if ($::opt_debug);
-
- # read body objects
- my $count = 0;
- while (<PDF>)
- {
- $lineno++;
-
- # continue, if comment line (2nd line of PDF output by pdfTeX 1.30)
- next if /^%/;
-
- # stop at xref
- last if /^xref$/;
-
- # scan first obj line
- /^(\d+)\s+0\s+obj\s*(<<)?$/ or
- die "$Error `obj' expected on line $lineno!\n";
- $objno[$count] = $1;
- $getobjindex[$1] = $count;
- $objdict[$count] = ($2); # boolean (if $2 exists)
- my $stream = 0;
- print "* obj $objno[$count]" .
- (($objdict[$count]) ? " (dict)" : "") .
- "\n" if $::opt_debug;
-
- # get obj
- $objtext[$count] = "";
- while (<PDF>)
- {
- $lineno++;
-
- if ($objdict[$count])
- {
- if (/^>>/)
- {
- last if /^>>\s+endobj$/; # obj without stream
-
- # get stream
- $_ = <PDF>; $lineno++;
- /^stream$/ or die "$Error `stream' expected on line $lineno!\n";
-
- print "* stream\n" if $::opt_debug;
- $objstream[$count] = "";
- while (<PDF>)
- {
- $lineno++;
-
- if (/(.*)endstream$/)
- {
- $objstream[$count] .= $1;
- last;
- }
- $objstream[$count] .= $_;
- }
-
- $_ = <PDF>; $lineno++;
- /^endobj$/ or die "$Error `endobj' expected on line $lineno!\n";
- last;
- }
- }
- else # no dict
- {
- last if /^endobj$/;
- }
- $objtext[$count] .= $_;
- }
- $count++;
- }
- close(PDF);
- $maxobj = $count;
- print "* $maxobj objects found.\n" if $::opt_debug;
-
-### get thumbnail page numbers
- my @thumbpageno = ();
- my $found = 0;
- foreach (@objtext)
- {
- if (/^<<\/ListThumbs\s+(.+)>>$/)
- {
- $_ = $1;
- chomp;
- @thumbpageno = split / /; # split(/ /, $_);
- print "* ListThumbs: @thumbpageno\n" if $::opt_debug;
- $found = 1;
- last;
- }
- }
- $found or die "$Error `/ListThumbs' not found!\n";
- {
- my $j;
- for ($j=0; $j<@thumbpageno; $j++)
- {
- $thumbpageno[$j] = $1 if $thumbpageno[$j] =~ /^{(.+)}$/;
- }
- }
-
-### identify thumb objects
-
- my @thumbobj = (); # index for @obj... with image stream
- my @thumblength = (); # stream length values
- my @thumbrgbobj = (); # index for @obj... with rgb stream
- my @thumbrgblength = (); # rgb stream length values
- my $maxthumb = 0;
-
- $count = 0;
- my $i;
- for ($i=0; $i<$maxobj; $i++)
- {
- if ($objtext[$i] =~
- /^\/Type\s+\/XObject\n\/Subtype\s+\/Image\n/m)
- {
- $thumbobj[$count] = $i;
- $_ = $';
- $objtext[$i] = $_;
-
- # check width and height
- /\/Width\s+(\d+)\n\/Height\s+(\d+)/m or
- die "$Error width/height of thumbnail not found!\n";
- print "* Size: $1x$2\n" if $::opt_debug;
- print "==> Width ($1) " .
- "of thumbnail `$thumbpageno[$count]' " .
- "is larger than recommended (106).\n"
- if $1 > 106;
- print "==> Height ($2) " .
- "of thumbnail `$thumbpageno[$count]' " .
- "is larger than recommended (106).\n"
- if $2 > 106;
-
- # get stream length
- if (/\/Length\s+(\d+)\s+([\/\>]|$)/m)
- {
- $thumblength[$count] = $1;
- print "* Length (direct): $1\n" if $::opt_debug;
- # remove whitespace after length obj
- $objtext[$i] =~ s/(\/Length\s+\d+)\s+\n/$1\n/;
- }
- else # looking for indirect reference
- {
- /\/Length\s+(\d+)\s+0\s+R/m or
- die "$Error `/Length' entry not found!\n";
- # save obj text for later correction
- my $objpre = $`;
- my $objpost = $';
- # look for length obj
- $getobjindex[$1] or die "$Error Length obj not found!\n";
- $objtext[$getobjindex[$1]] =~ /^(\d+)$/m or
- die "$Error length value not found!\n";
- $thumblength[$count] = $1;
- print "* Length (indirect): $1\n" if $::opt_debug;
- # insert obj length directly:
- $objtext[$i] = $objpre . "/Length $1" . $objpost;
- }
-
- # remove \n from end of stream
- if ($thumblength[$count] < length($objstream[$i])) {
- chop($objstream[$i]);
- }
-
- # check /Indexed /DeviceRGB
- if ($objtext[$i] =~
- /\/ColorSpace\s+\[\/Indexed\s+\/DeviceRGB\s+(\d+)\s+(\d+)\s+0\s+R\]/m)
- {
- # correct thumb object text
- $objtext[$i] =
- "$`/ColorSpace [/Indexed /DeviceRGB $1 \\the\\pdflastobj\\ 0 R]$'";
- # get RGB obj number
- $getobjindex[$2] or die "$Error RGB object not found!\n";
- $_ = $getobjindex[$2];
- $thumbrgbobj[$count] = $_;
- # get stream length
- if ($objtext[$_] =~ /\/Length\s+(\d+)\s+([\/\>]|$)/m)
- {
- $thumbrgblength[$count] = $1;
- print "* RGB length (direct): $1\n" if $::opt_debug;
- $objtext[$_] =~ s/(\/Length\s+\d+)\s+\n/$1\n/;
- }
- else # looking for indirect reference
- {
- $objtext[$_] =~ /\/Length\s+(\d+)\s+0\s+R/m or
- die "$Error Length entry of rgb object not found\n";
- # save obj text for later correction
- my $objrgbpre = $`;
- my $objrgbpost = $';
- # get rgb stream length
- $getobjindex[$1] or die "$Error RGB length object not found!\n";
- $objtext[$getobjindex[$1]] =~ /^(\d+)$/m or
- die "$Error length value not found!\n";
- $thumbrgblength[$count] = $1;
- print "* RGB length (indirect): $1\n" if $::opt_debug;
- # insert RGB object length directly:
- $objtext[$_] = $objrgbpre . "/Length $1" . $objrgbpost;
- }
- }
-
- $count++;
- }
- }
- $maxthumb = $count;
-
- if ($maxthumb != @thumbpageno)
- {
- my $pagecount = @thumbpageno;
- die "$Error $maxthumb thumbnails found, but there should be $pagecount!\n";
- }
- print "* $maxthumb thumbnails found.\n" if $::opt_verbose;
-
-
-###
-### write data files
-###
-
- my $timestamp;
- {
- my ($sec, $min, $hour, $mday, $mon, $year) = localtime();
- $mon++;
- $year += 1900;
- $timestamp = sprintf("%04d/%02d/%02d %02d:%02d:%02d",
- $year, $mon, $mday, $hour, $min, $sec);
- }
- if ($mode_pdftex)
- {
- print "*** write `$pdftexfile' (pdfTeX thumbnail data) ***\n"
- unless $::opt_quiet;
- my $DTA_PT = $pdftexfile;
- open(DTA_PT, ">$DTA_PT") or die "$Error Cannot open `$DTA_PT'!\n";
- binmode(DTA_PT);
- print DTA_PT <<"END_DTA";
-% File: $DTA_PT
-% Producer: $program $version
-% Mode: pdftex
-% Date: $timestamp
-END_DTA
- }
- my $maxpagethumb;
- my $dictbegin;
- if ($mode_pdfmark)
- {
- print "*** write `$pdfmarkfile' (pdfmark thumbnail data) ***\n"
- unless $::opt_quiet;
- my $DTA_PM = $pdfmarkfile;
- open(DTA_PM, ">$DTA_PM") or die "$Error Cannot open `$DTA_PM'!\n";
- binmode(DTA_PM);
-
- # write tex part
- print DTA_PM <<"END_DTA";
-% \\iffalse
-% File: $DTA_PM
-% Producer: $program $version
-% Mode: pdfmark
-% Date: $timestamp
-% \\fi
-END_DTA
-
- # looking for max. number of regular thumbnails
- $maxpagethumb = $maxthumb;
- for ($i=0; $i<$maxobj; $i++)
- {
- if ($objtext[$i] =~ /<<\/MaxThumbNumber\s+(\d+)>>/)
- {
- $maxpagethumb = $1;
- last;
- }
- }
-
- # write TeX part
- for ($i=$maxpagethumb; $i<$maxthumb; $i++)
- {
- print DTA_PM "% \\DefThisThumb{$thumbpageno[$i]}\n";
- }
-
- # write PostScript header
- my $dictstart = <<'END_DICT';
- 4 dict begin
- /enddict {
- counttomark 2 idiv dup dict begin {def} repeat pop
- currentdict end
- } bind def
-END_DICT
- chomp($dictstart);
- $dictbegin = "[";
- my $dictend = "enddict";
- my $filter = "";
- my $read = "readhexstring";
- if ($::opt_level2)
- {
- $dictstart = " 3 dict begin";
- $dictbegin = "<<";
- $dictend = ">>";
- $filter = " /ASCII85Decode filter";
- $read = "readstring";
- }
-
- print DTA_PM <<"END_DTA";
-% \\endinput
-% TeX part ends here
-
-% PostScript definitions
-END_DTA
-
- my $PS_Header = <<"END_HEAD";
-%
-% Default definition of pdfmark
-/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
-%
-% Check the version of Ghostscript. If it is below 6.0,
-% the commands, that produce the thumbnails, are defined
-% to be dummies.
-%
-true
-/product where {
- pop
- product (Ghostscript) search {
- pop pop pop
- revision 600 lt {
- (!!! Warning (thumbpdf): Ghostscript 6.0 required for thumbnails!\\n)
- print pop false
- } if
- }{pop} ifelse
-} if
-{
-% Syntax: <thumb object> thisTHB -
-% thisTHB is used globally, so it is defined in the current
-% dictionary (perhaps userdict should explicitly be set).
- /thisTHB {[ exch /Thumb exch /PAGE pdfmark} bind def
-$dictstart
-% Syntax: <page object> <thumb object> pagethumb -
- /pagethumb {
- [ 3 1 roll $dictbegin exch /Thumb exch $dictend /PUT pdfmark
- } bind def
-% Syntax: <thumb object> <stream length>
-% <mark> <key value pairs> streamobj -
-%
-% Distiller ignores the compression of previously compressed
-% streams and uses its own settings. Therefore for Distiller
-% the streams are uncompressed.
-% Now ghostscript versions greater than 8 behave in the same way
-% as Distiller. Therefore detection for this versions is added.
-% The detection and patch for distiller require features of level 2
-% and the filter /FlateDecode (level 3), that is used by pdfTeX's
-% compression.
- /THB_DistillerPatch false def
- /languagelevel where {
- pop
- languagelevel 2 ge {
- product (Distiller) search {pop pop pop true}{pop false} ifelse
- product (Ghostscript) search {
- pop pop pop
- revision 800 ge
- }{pop false} ifelse
- or
- {
- (FlateDecode) {
- pop
-% Syntax: <dict> THB_DistillerPatch <dict> false
-% <dict> THB_DistillerPatch <dict> <filter>
- /THB_DistillerPatch {
- dup /Filter known {
- dup dup /Filter get exch /Filter undef
- }{false} ifelse
- } bind def
- } (FlateDecode) /Filter resourceforall
- } if
- } if
- } if
- /streamobj {
- $dictend exch
-% Stack: <thumb> <dict> <length>
- 3 -1 roll dup
-% Stack: <dict> <length> <thumb> <thumb>
- [ /_objdef 3 -1 roll /type /stream /OBJ pdfmark
-% Stack: <dict> <length> <thumb>
- dup dup 5 -1 roll
-% Stack: <length> <thumb> <thumb> <thumb> <dict>
- THB_DistillerPatch
-% Stack: <length> <thumb> <thumb> <thumb> <dict> <filter/false>
- [ 4 -2 roll /PUT pdfmark
-% Stack: <length> <thumb> <thumb> <filter/false>
- [ 3 1 roll currentfile${filter}
-% Stack: <length> <thumb> [ <thumb> <filter/false> <file>
- 6 -1 roll string $read pop
-% Stack: <thumb> [ <thumb> <filter/false> <string>
- exch dup type /booleantype ne {true} if {filter} if
-% Stack: <thumb> [ <thumb> <file>
- /PUT pdfmark
-% Stack: <thumb>
- [ exch /CLOSE pdfmark
- } bind def
-}{
-% Syntax: <thumb object> thisTHB -
- /thisTHB {pop} bind def
- 2 dict begin
-% Syntax: <page object> <thumb object> pagethumb -
- /pagethumb {pop pop} bind def
-% Syntax: <thumb object> <stream length>
-% <mark> <key value pairs> streamobj -
- /streamobj {
- cleartomark exch pop
- string currentfile${filter}
- exch $read pop pop
- } bind def
-} ifelse
-END_HEAD
- $PS_Header =~ s/%[^\r\n]*[\r\n]+//gm;
- print DTA_PM $PS_Header;
- print DTA_PM <<"END_DTA";
-
-% adding thumbnails to pages
-END_DTA
-
- for ($i=0; $i<$maxpagethumb; $i++)
- {
- print DTA_PM <<"END_DTA";
-{Page$thumbpageno[$i]} {THB$thumbpageno[$i]} pagethumb
-END_DTA
- }
- print DTA_PM "\n% thumbnail data\n";
- }
-
- for ($i=0; $i<$maxthumb; $i++)
- {
- # rgb object
- if ($thumbrgbobj[$i])
- {
- # find the same rgb object
- my $j;
- for ($j=0; $j<$i; $j++)
- {
- next unless $thumbrgbobj[$j];
- next unless $objtext[$thumbrgbobj[$j]] eq
- $objtext[$thumbrgbobj[$i]];
- next unless $objstream[$thumbrgbobj[$j]] eq
- $objstream[$thumbrgbobj[$i]];
- last;
- }
- if ($j==$i) # not found
- {
- if ($mode_pdftex)
- {
- {
- my $rgbstream = pdftexstream($objstream[$thumbrgbobj[$i]]);
- my $dict = $objtext[$thumbrgbobj[$i]];
- if ($::opt_compress == 10)
- {
- chomp($dict);
- $dict =~ s/\n([^\/])/^^J\n$1/mg;
- $dict =~ s/[ ]+\//\//mg;
- }
- else
- {
- $dict =~ s/\n/^^J\n/mg;
- }
- print DTA_PT <<"END_DTA";
-\\immediate\\pdfobj{<<$J
-$dict>>$J
-stream^^J
-$rgbstream
-endstream}
-\\DefRGB{$i}
-END_DTA
- }
- }
- if ($mode_pdfmark)
- {
- {
- my $rgbstream = pdfmarkstream($objstream[$thumbrgbobj[$i]]);
- my $rgblength = $thumbrgblength[$i];
- my $dict = $objtext[$thumbrgbobj[$i]];
- $dict =~ s/\/Length\s+\d+\s*//;
- $dict =~ s/^\s+//;
- $dict =~ s/\s+$//;
- print DTA_PM <<"END_DTA";
-{RGB_$i} $rgblength $dictbegin
-$dict
-streamobj
-$rgbstream
-END_DTA
- }
- }
- }
- else # $j with same rgb obj
- {
- $objtext[$thumbobj[$i]] =~
- s/\\the\\pdflastobj/\\UseRGB{$j}/;
- print "* Reuses RGB object $j for $i\n" if $::opt_debug;
- }
- }
-
- # thumb object
- if ($mode_pdftex)
- {
- {
- my $dict = $objtext[$thumbobj[$i]];
- if ($::opt_compress == 10)
- {
- chomp($dict);
- $dict =~ s/\n([^\/])/^^J\n$1/mg;
- $dict =~ s/[ ]+\//\//mg;
- $dict =~ s/[ ]+\[/\[/mg;
- }
- else
- {
- $dict =~ s/\n/^^J\n/mg;
- }
- my $stream = pdftexstream($objstream[$thumbobj[$i]]);
- print DTA_PT <<"END_DTA";
-\\immediate\\pdfobj{<<$J
-$dict>>$J
-stream^^J
-$stream
-endstream}
-\\DefThumb{$thumbpageno[$i]}
-END_DTA
- }
- }
- if ($mode_pdfmark)
- {
- {
- my $stream = pdfmarkstream($objstream[$thumbobj[$i]]);
- my $length = $thumblength[$i];
- my $dict = $objtext[$thumbobj[$i]];
- $dict =~ s/\\the\\pdflastobj\\\s*\d+\s*R/{RGB_$i}/;
- $dict =~ s/\\UseRGB{(\d+)}\\\s*\d+\s*R/{RGB_$1}/;
- $dict =~ s/\/Length\s+\d+\s*//;
- $dict =~ s/^\s+//;
- $dict =~ s/\s+$//;
- my $thismarker = "";
- $thismarker = "_", if $i >= $maxpagethumb;
- print DTA_PM <<"END_DTA";
-{THB$thismarker$thumbpageno[$i]} $length $dictbegin
-$dict
-streamobj
-$stream
-END_DTA
- }
- }
- }
-
- if ($mode_pdftex)
- {
- print DTA_PT "\\endinput\n";
- close(DTA_PT);
- }
- if ($mode_pdfmark)
- {
- print DTA_PM <<"END_DTA";
-end
-% end of thumbnail data file
-END_DTA
- close(DTA_PM);
- }
-}
-
-sub pdftexstream
-{
- my $str = "";
- my $mod = 0;
- foreach (split(//, $_[0]))
- {
- my $num = ord($_);
- if ($num == 13) { $str .= '\\/'; }
- elsif ($num < 32) { $str .= '^^' . chr($num + 64); }
- elsif ($num == 32) { $str .= '\\~'; } # space
- elsif ($num == 37) { $str .= '\\%'; } # percent
- elsif ($num == 92) { $str .= '\\\\'; } # backslash
- elsif ($num == 94) { $str .= '\\+'; } # caret
- elsif ($num == 123) { $str .= '\\{'; } # curly brace left
- elsif ($num == 125) { $str .= '\\}'; } # curly brace right
- else { $str .= $_; }
- $mod++;
- if ($mod == 26)
- {
- $mod = 0;
- $str .= "\n";
- }
- }
- chomp $str;
- return $str;
-}
-
-sub pdfmarkstream
-{
- my $str;
- if ($::opt_level2)
- {
- my $s = $_[0];
- my $len = length($s);
- $str = "";
- my $i;
- for ($i=0; $i<$len-4; $i+=4)
- {
- $_ = ASCII85Encode(substr($s, $i, 4));
- s/!!!!!/z/;
- $str .= $_;
- }
- my $r = $len % 4;
- if ($r)
- {
- $_ = substr($s, $i, $r) . "\000\000\000";
- $_ = ASCII85Encode(substr($_, 0, 4));
- $str .= substr($_, 0, $r+1);
- }
- $str =~ s/(.{60})/$1\n/g;
- chomp($str);
- $str .= "~>";
- }
- else
- {
- $str = uc(unpack('H*', $_[0]));
- $str =~ s/(.{60})/$1\n/g;
- chomp($str);
- }
- return $str;
-}
-
-sub ASCII85Encode
-{
- my $val = unpack("N", $_[0]);
- my @c;
- $c[4] = $val % 85 + 33;
- $val = int($val/85);
- $c[3] = $val % 85 + 33;
- $val = int($val/85);
- $c[2] = $val % 85 + 33;
- $val = int($val/85);
- $c[1] = $val % 85 + 33;
- $c[0] = int($val/85) + 33;
- return pack("C*", @c);
-}
-
-sub setsignals {
- my $func = $_[0];
- $SIG{'HUP'} = $func unless $Win;
- $SIG{'INT'} = $func;
- $SIG{'QUIT'} = $func;
- $SIG{'TERM'} = $func;
-}
-
-sub clean {
- if ($::opt_clean) {
- print "*** clear temp files ***\n" unless $::opt_quiet;
- foreach (@cleanlist) {
- unlink;
- }
- }
-}
-
-sub cleanup {
- print "\n" unless $::opt_quiet;
- clean();
- exit 1;
-}
-
-sub gscleanup {
- print "\n" unless $::opt_quiet;
- clean();
- close(::GSKID) if $gskidrunning;
- foreach (glob("$thumbprefix*.png")) {
- unlink;
- }
- exit 1;
-}
-
-clean();
-
-print "*** ready. ***\n" unless $::opt_quiet;
-
-__END__
+../../texmf-dist/scripts/thumbpdf/thumbpdf.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/tie b/Master/bin/mips-irix/tie
index 3b5dcd3861b..7e79c039451 100755
--- a/Master/bin/mips-irix/tie
+++ b/Master/bin/mips-irix/tie
Binary files differ
diff --git a/Master/bin/mips-irix/tmftools b/Master/bin/mips-irix/tmftools
index 7531a966390..444a68a40ee 100755..120000
--- a/Master/bin/mips-irix/tmftools
+++ b/Master/bin/mips-irix/tmftools
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart tmftools.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/tmftools \ No newline at end of file
diff --git a/Master/bin/mips-irix/ttf2afm b/Master/bin/mips-irix/ttf2afm
index 44dc7f6f201..41c09155c86 100755
--- a/Master/bin/mips-irix/ttf2afm
+++ b/Master/bin/mips-irix/ttf2afm
Binary files differ
diff --git a/Master/bin/mips-irix/ttf2pk b/Master/bin/mips-irix/ttf2pk
index 0961d57d333..6f034c8bb19 100755
--- a/Master/bin/mips-irix/ttf2pk
+++ b/Master/bin/mips-irix/ttf2pk
Binary files differ
diff --git a/Master/bin/mips-irix/ttf2tfm b/Master/bin/mips-irix/ttf2tfm
index 13bbe6f1972..f9c951c4348 100755
--- a/Master/bin/mips-irix/ttf2tfm
+++ b/Master/bin/mips-irix/ttf2tfm
Binary files differ
diff --git a/Master/bin/mips-irix/ttftotype42 b/Master/bin/mips-irix/ttftotype42
index d1cc79eda6c..e22c017b012 100755
--- a/Master/bin/mips-irix/ttftotype42
+++ b/Master/bin/mips-irix/ttftotype42
Binary files differ
diff --git a/Master/bin/mips-irix/vftovp b/Master/bin/mips-irix/vftovp
index 2e1c3f6bfd0..8e123f688f1 100755
--- a/Master/bin/mips-irix/vftovp
+++ b/Master/bin/mips-irix/vftovp
Binary files differ
diff --git a/Master/bin/mips-irix/vlna b/Master/bin/mips-irix/vlna
new file mode 100755
index 00000000000..3b1b208ed6d
--- /dev/null
+++ b/Master/bin/mips-irix/vlna
Binary files differ
diff --git a/Master/bin/mips-irix/vpe b/Master/bin/mips-irix/vpe
index 9eb52b69e3c..ed1727b6ff8 100755..120000
--- a/Master/bin/mips-irix/vpe
+++ b/Master/bin/mips-irix/vpe
@@ -1,421 +1 @@
-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__
+../../texmf-dist/scripts/vpe/vpe.pl \ No newline at end of file
diff --git a/Master/bin/mips-irix/vptovf b/Master/bin/mips-irix/vptovf
index c6ce34c95e2..158542ddee4 100755
--- a/Master/bin/mips-irix/vptovf
+++ b/Master/bin/mips-irix/vptovf
Binary files differ
diff --git a/Master/bin/mips-irix/weave b/Master/bin/mips-irix/weave
index 0f4767005ae..e6aeec9602d 100755
--- a/Master/bin/mips-irix/weave
+++ b/Master/bin/mips-irix/weave
Binary files differ
diff --git a/Master/bin/mips-irix/xdvi b/Master/bin/mips-irix/xdvi
index 847bf4acd69..04662a62d36 100755
--- a/Master/bin/mips-irix/xdvi
+++ b/Master/bin/mips-irix/xdvi
@@ -17,15 +17,22 @@ test -f /bin/bsh && test -z "$RUNNING_BSH" \
&& { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
RUNNING_BSH=
-# -help and -version only work if they are the only options. Therefore,
-# we cannot give the "-name xdvi" parameter in that case.
-# SU: Actually, with current xdvik, they should work in any position; but
-# we may keep this for compatibility with older versions and non-k xdvi.
+# -help and -version only used to work if they were the only options,
+# so the "-name xdvi" parameter wasn't used in that case. With current
+# xdvik, it should work in any case, but we keep this logic for compatibility
+# with older xdvik and plain xdvi versions.
+have_basename=`basename foo/bar 2>&1 | grep -i 'not found'`
+if [ "$have_basename"xxx = "xxx" ]; then
+ BASE_NAME=`basename $0`
+else
+ BASE_NAME=`echo $0 | sed 's!.*/!!'`
+fi
+
case "$#:$1" in
1:-help|1:-version)
NAMEOPT=;;
*)
- NAMEOPT='-name xdvi';;
+ NAMEOPT="-name $BASE_NAME";;
esac
xdviappfile=`kpsewhich -progname=xdvi --format='other text files' XDvi`
@@ -43,4 +50,4 @@ if test -n "$xdviappfile"; then
XFILESEARCHPATH="$xdviapppath:${XFILESEARCHPATH-%D}"; export XFILESEARCHPATH
fi
-exec xdvi-motif.bin $NAMEOPT ${1+"$@"}
+exec xdvi-motif $NAMEOPT ${1+"$@"}
diff --git a/Master/bin/mips-irix/xdvi-motif b/Master/bin/mips-irix/xdvi-motif
new file mode 100755
index 00000000000..d0dd7e5b720
--- /dev/null
+++ b/Master/bin/mips-irix/xdvi-motif
Binary files differ
diff --git a/Master/bin/mips-irix/xdvi-motif.bin b/Master/bin/mips-irix/xdvi-motif.bin
deleted file mode 100755
index 91576f9d72b..00000000000
--- a/Master/bin/mips-irix/xdvi-motif.bin
+++ /dev/null
Binary files differ
diff --git a/Master/bin/mips-irix/xdvipdfmx b/Master/bin/mips-irix/xdvipdfmx
index 7971f00f5f1..2bac72d80b5 100755
--- a/Master/bin/mips-irix/xdvipdfmx
+++ b/Master/bin/mips-irix/xdvipdfmx
Binary files differ
diff --git a/Master/bin/mips-irix/xetex b/Master/bin/mips-irix/xetex
index 41a1c14f238..5553ad3b461 100755
--- a/Master/bin/mips-irix/xetex
+++ b/Master/bin/mips-irix/xetex
Binary files differ
diff --git a/Master/bin/mips-irix/xmltools b/Master/bin/mips-irix/xmltools
index 03086d0436b..873458dcc92 100755..120000
--- a/Master/bin/mips-irix/xmltools
+++ b/Master/bin/mips-irix/xmltools
@@ -1,2 +1 @@
-#!/bin/sh
-texmfstart xmltools.rb "$@"
+../../texmf-dist/scripts/context/stubs/unix/xmltools \ No newline at end of file