summaryrefslogtreecommitdiff
path: root/support/hypertex/tanmoy
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/hypertex/tanmoy
Initial commit
Diffstat (limited to 'support/hypertex/tanmoy')
-rw-r--r--support/hypertex/tanmoy/.index.html8
-rwxr-xr-xsupport/hypertex/tanmoy/README2
-rw-r--r--support/hypertex/tanmoy/README-ghostview-mods.html67
-rw-r--r--support/hypertex/tanmoy/X/.index.html103
-rw-r--r--support/hypertex/tanmoy/X/Mosaic6
-rw-r--r--support/hypertex/tanmoy/X/callmosaic36
-rw-r--r--support/hypertex/tanmoy/X/newpg.c37
-rw-r--r--support/hypertex/tanmoy/aps.hty110
-rw-r--r--support/hypertex/tanmoy/article.hty17
-rw-r--r--support/hypertex/tanmoy/book.hty9
-rw-r--r--support/hypertex/tanmoy/espcrc2.hty27
-rw-r--r--support/hypertex/tanmoy/examples/.index.html5
-rw-r--r--support/hypertex/tanmoy/examples/Anomalkap.aux123
-rw-r--r--support/hypertex/tanmoy/examples/Anomalkap.dvibin0 -> 88872 bytes
-rw-r--r--support/hypertex/tanmoy/examples/Anomalkap.hrf157
-rw-r--r--support/hypertex/tanmoy/examples/Anomalkap.log83
-rw-r--r--support/hypertex/tanmoy/examples/Anomalkap.tex1252
-rw-r--r--support/hypertex/tanmoy/examples/Anomalkap.toc18
l---------support/hypertex/tanmoy/examples/README1
-rw-r--r--support/hypertex/tanmoy/examples/ambjorn.aux30
-rw-r--r--support/hypertex/tanmoy/examples/ambjorn.dvibin0 -> 20296 bytes
-rw-r--r--support/hypertex/tanmoy/examples/ambjorn.hrf36
-rw-r--r--support/hypertex/tanmoy/examples/ambjorn.log41
-rw-r--r--support/hypertex/tanmoy/examples/ambjorn.tex383
-rw-r--r--support/hypertex/tanmoy/examples/ambjorn.toc4
-rw-r--r--support/hypertex/tanmoy/fleqn.hty34
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/COPYING416
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/Dir.c163
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/Draw.c920
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/Ghostview.ad251
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/Ghostview.c2029
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/Ghostview.h210
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/GhostviewP.h120
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/HISTORY453
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/Imakefile81
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/Makefile450
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/Path.c900
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/README177
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/README.VMS215
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/README.pdfmark62
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/README.selfile83
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/SFinternal.h145
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/SelFile.c753
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/actions.c512
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/ad2c38
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/callbacks.c749
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/comments.doc71
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/descrip.mms65
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/dialogs.c195
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/getenv.c66
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/ghostview.man905
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/ghostview.ps7017
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/gs.interface100
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/gv.h255
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/gvpdf.pro78
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/main.c937
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/misc.c1314
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/pdf.c88
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/pdf.h9
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/ps.c1431
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/ps.h127
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/run-ad2c1
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/setenv.c107
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/stdc.h40
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/strcasecmp.c103
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/test.ps3302
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/vms_build.com37
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/vms_types.h351
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/xstat.h23
-rw-r--r--support/hypertex/tanmoy/hlatex.tex2
-rw-r--r--support/hypertex/tanmoy/hyperbasics.1.tex206
-rw-r--r--support/hypertex/tanmoy/hyperbasics.new.tex232
-rw-r--r--support/hypertex/tanmoy/hyperbasics.old.tex190
-rw-r--r--support/hypertex/tanmoy/hyperbasics.tex210
-rw-r--r--support/hypertex/tanmoy/hypercwebmac.tex296
-rw-r--r--support/hypertex/tanmoy/hyperlatex.tex263
-rw-r--r--support/hypertex/tanmoy/hyperncwebmac.tex373
-rw-r--r--support/hypertex/tanmoy/hypertest.tex39
-rw-r--r--support/hypertex/tanmoy/hyperwebmac.tex254
-rw-r--r--support/hypertex/tanmoy/ichep.hty59
-rw-r--r--support/hypertex/tanmoy/lhyper.1.tex260
-rw-r--r--support/hypertex/tanmoy/lhyper.old.tex257
-rw-r--r--support/hypertex/tanmoy/prabib.hty19
-rw-r--r--support/hypertex/tanmoy/prabib.old.hty16
-rw-r--r--support/hypertex/tanmoy/report.hty9
-rw-r--r--support/hypertex/tanmoy/revtex.hty1
-rw-r--r--support/hypertex/tanmoy/vanilla.hty8
-rw-r--r--support/hypertex/tanmoy/world_sci.hty54
88 files changed, 30686 insertions, 0 deletions
diff --git a/support/hypertex/tanmoy/.index.html b/support/hypertex/tanmoy/.index.html
new file mode 100644
index 0000000000..83c12bc240
--- /dev/null
+++ b/support/hypertex/tanmoy/.index.html
@@ -0,0 +1,8 @@
+<HTML>
+<HEADER>
+<BASE HREF="http://xxx.lanl.gov/hypertex/">
+<TITLE>HyperTeX</TITLE>
+</HEADER>
+<BODY>
+This document has moved <a href="http://xxx.lanl.gov/hypertex/">here.</a>
+</BODY>
diff --git a/support/hypertex/tanmoy/README b/support/hypertex/tanmoy/README
new file mode 100755
index 0000000000..42935560b7
--- /dev/null
+++ b/support/hypertex/tanmoy/README
@@ -0,0 +1,2 @@
+See http://xxx.lanl.gov/hypertex/ for explanation
+(or via anonymous ftp, xxx.lanl.gov:/pub/hypertex/index.html )
diff --git a/support/hypertex/tanmoy/README-ghostview-mods.html b/support/hypertex/tanmoy/README-ghostview-mods.html
new file mode 100644
index 0000000000..0686895efc
--- /dev/null
+++ b/support/hypertex/tanmoy/README-ghostview-mods.html
@@ -0,0 +1,67 @@
+<PRE>
+Last Modified: Dec 1 1994, 10:47
+
+PDF (Portable Document Format) is a format defined by Adobe and
+describes a page description language that supports hyperlinks. The
+adobe product `distill' can create PDF documents from postscript ones
+by translating the page description. In addition, it allows the
+postscript file to specify the hyperlinks through a new postscript
+operator, pdfmark.
+
+This
+<A HREF="http://nqcd.lanl.gov/people/tanmoy/hypertex/ghostview-1.5-hacked.tar.gz">alpha release</A>
+of the changed version of ghostview is a first
+attempt to make ghostview pdfmark aware. It recognizes the pdfmark
+operator, and tries to cretae `hotlinks' on the display. A key click
+on the link follows the link.
+
+The companion products, the modifications to dvips by Mark Doyle and
+the set of macros comprising hypertex (as described at
+<A HREF="http://xxx.lanl.gov/hypertex/">xxx</A>)
+facilitates the generation of these ps
+files from TeX documents. The modified dvips actually uses a
+postscript procedure pdfm (which translates to an appropriate call to
+pdfmark if pdfm is undefined) to describe the linkage structure. As
+the translation of pdfm to pdfmark is lossy, ghostview should ideally
+understand pdfm directly: see the TODO list.
+
+All keys work as in the standard release of ghostscript: except
+
+ 1) any key-click inside a link follows link instead of magnifying
+ it.
+ 2) b or B goes back in link history if history is non-null: goes to
+ previous page (default behaviour) otherwise. (delete, backspace
+ etc. are still bound to previous_page) does nothing on first page
+ if link history empty.
+ 3) page menu has an extra entry for back which works as in (2).
+
+Here is what it never plans to do:
+
+ 1) Support SRCPAGE option of pdfmark.
+ 2) Support pdfmarks in non-DSC structured documents.
+
+Here is the TODO list. (can also be considered BUG list)
+
+1) Handle pdfmarks of kinds other than /LNK (/ANNOT etc. should be
+ very easy) (currently ignores them)
+2) Handle pdfmarks called in non-default coordinate system.
+3) Handle /LNK to other documents.
+4) Look at target view specification as well (currently it only looks
+ at target page)
+5) Check if communication with ghostscript possible through means
+ other than the stdout.
+6) Do a proper job of parsing pdfmark parameters.(easy but tedious)
+7) Use the rx and ry parameters of the /Border specification of
+ pdfmark. (easy)
+8) Support forward/backward navigation or menu-oriented navigation in
+ link history.
+
+Here is the TODO list for processing pdfm (in addition to pdfmark).
+
+1) Allow initial jump to arbitrary target.
+2) Allow user specified jump to arbitrary target.
+3) Take into account target coordinate.
+4) Allow network URL's.
+5) Make middle click open a smaller window with the target properly
+ centered.
+</PRE>
diff --git a/support/hypertex/tanmoy/X/.index.html b/support/hypertex/tanmoy/X/.index.html
new file mode 100644
index 0000000000..1451189154
--- /dev/null
+++ b/support/hypertex/tanmoy/X/.index.html
@@ -0,0 +1,103 @@
+<header><title>external URL's under X</title></header>
+<h1>external URL's under X</h1>
+<pre>
+Date: Sat, 16 Jul 94 12:49:47 MDT
+From: tanmoy@qcd.lanl.gov (Tanmoy Bhattacharya)
+To: ginsparg@qfwfq.lanl.gov
+Subject: more things needed
+</pre>
+The script for Mosaic is not really that good right now: and we should
+probably think a bit more, and probably should talk to the Mosaic guys
+as well. That is why I do not yet want to publish it. We can put it up
+as an example of how it can be done within the present framework
+itself: not as a way in which we think these should be done.
+<p>
+At the minimum we need Mosaic (and any other www client)
+to set two environmentvariables containing respectively:
+(1) its own pid, and (2) The URL of the document it is calling,
+and should accept by `remote control' either (a) an absolute URL, OR
+(b) a relative URL and a BASE HREF. <br>
+(Instead of using an environment variable for (2), it could instead put
+the URL into a file and name the file in the environment.
+[Does mac have environment variables? It is easy to overflow
+IBM PC environment space].)
+<hr>
+Anyway, here is how the system on nqcd works. No portability issues
+had been considered when writing them: I have tried to express my
+concerns below.
+
+<ol>
+<li> There is a c-program
+<a href="newpg.c">newpg.c</a> which takes 2 or more parameters.
+<ol>
+<li> <b>if</b> the first parameter is non-zero,
+it sets its pgid to the first parameter,
+<b>else</b> it sets its pgid to its pid.
+<li> it replaces itself (without changing pid's) with the program
+ named by its second parameter and passes the rest of the
+ arguments to it.
+<li>Note that it requires ANSI C, the header <sys/types.h> to define pid_t, and
+ the routines setpgid (I haven't checked to see if it exists in
+ SYSV) and execvp.
+</ol>
+
+<li>The actual Mosaic is renamed Mosaic.binary
+
+<li> <a href="Mosaic">Mosaic</a>
+ is a script that calls the c-program (newpg) which starts the
+ actual Mosaic. (It also provides default values to a few environment
+ variables: only WWWBROWSER is relevant to this project). It should
+ work on all unices unchanged provided $0 gets correctly translated,
+ and the paths are corrected.
+
+<li> <a href="callmosaic">callmosaic</a> takes two parameters and does the
+ following:
+ <ol>
+ <li> Ignores the second parameter. See later.
+ <li> It clears the PATH environment variable, and changes the MOSAIC
+ environment variable, if present, to /usr/local/bin/Mosaic. (As
+ a result it uses absolute paths for all system programs,
+ bringing in system dependencies). It redirects standard output
+ to standard error. (should it?)
+ <li> gets its own pgid. (call it x) Doing this from shell is
+ extremely machine dependent. (depends on exact format of ps
+ output! On some machines like IBM Risc stations, may be next to
+ impossible). Should be done with a two line C program instead.
+ <li> checks process with PID x to see if it exists and its
+ identification as returned by ps contains the string
+ `Mosaic'. If so, goes to step 6. (There may be differences
+ between BSD and SYSV ps calls). Probably should also check the
+ DISPLAY environment variable, but no sure way of doing that
+ unless one call call a process which has group kmem
+ permissions. (Unless pstat, which is such a process gives us a
+ way of doing it: I do not know). A less than perfect way does
+ exist with ps -e.
+ <li> checks to see if ${HOME}/.mosaicpid exists and is readable.
+ If so, call the pid in it as x (probably crash if file not in
+ right format), else go to step 6.
+ <li> checks to see if process with PID x exists and its
+ identification as returned by ps contains the string
+ `Mosaic'. If so goto step 6. (BSD and SYSV ps calls may
+ differ). (Note that it does not check to see if the DISPLAY is
+ the same! See point 2)
+ <li> Start a Mosaic passing it the first parameter; and exit when
+ that exits. (should probably `exec' the Mosaic instead. Should
+ it also try a ps -x and check for an unique Mosaic on this
+ display before it starts a new one? See point 2 about
+ display). (The redirection of standard output to standard error
+ stays!) (What happens if the parameter contains backquotes?
+ Haven't checked!)
+ <li> Creates /tmp/Mosaic.x (x being the aforementioned pid) and
+ writes two lines into it (probably crashes if it cannot): the
+ first being `goto' and the second contains whatever came in as
+ the first parameter. Then it signals USR1 to x, and
+ exits. (probably should write the second parameter as a third
+ line.) (What happens if the parameter contains backquotes?
+ Haven't checked!)
+ <li> Note that the second parameter is always ignored. (It is supposed
+ to be the BASE HREF of the document which is calling callmosaic).
+ </ol>
+
+</ol>
+
+</body>
diff --git a/support/hypertex/tanmoy/X/Mosaic b/support/hypertex/tanmoy/X/Mosaic
new file mode 100644
index 0000000000..0d75e4f6d8
--- /dev/null
+++ b/support/hypertex/tanmoy/X/Mosaic
@@ -0,0 +1,6 @@
+#!/bin/sh --
+WWWBROWSER=${WWWBROWSER-/usr/local/bin/callmosaic} \
+PATH=/usr/ucb:$PATH \
+NNTPSERVER=${NNTPSERVER-newshost} \
+WWW_wais_GATEWAY=${WWW_wais_GATEWAY-http://www.ncsa.uiuc.edu:8001} \
+/usr/local/bin/newpg 0 $0.binary $*
diff --git a/support/hypertex/tanmoy/X/callmosaic b/support/hypertex/tanmoy/X/callmosaic
new file mode 100644
index 0000000000..a0eec1463b
--- /dev/null
+++ b/support/hypertex/tanmoy/X/callmosaic
@@ -0,0 +1,36 @@
+#!/bin/sh --
+# This is a generic shell script for messaging Mosaic written by
+# tanmoy@lanl.gov based on an idea by Paul F. Mende and
+# an implementation by krobison@nucleus.harvard.edu
+#
+# It takes two params: an URL and a base URL to interpret it with
+# respect to. It currently ignores this second parameter.
+#
+# stdout to stderr anyway
+exec >&2
+# Note that it sets PATH to null to avoid security
+# problems.
+PATH=
+MOSAIC=/usr/local/bin/Mosaic
+# Find my invoking Mosaic. (pid with our pgid)
+mypid=`/bin/ps -jx$$ | /usr/ucb/tail -1 | /bin/cut -c 12-17`
+mypid=`/bin/expr $mypid`
+if /bin/ps -lww$mypid | /bin/grep Mosaic > /dev/null; then /bin/true;
+else
+ if [ -r ${HOME}/.mosaicpid ]; then
+ mypid=`/bin/cat ${HOME}/.mosaicpid`
+ mypid=`/bin/expr $mypid`
+ if /bin/ps -lww$mypid | /bin/grep Mosaic > /dev/null; then /bin/true;
+ else
+ ${MOSAIC} "$1" &
+ exit 0
+ fi
+ else
+ ${MOSAIC} "$1" &
+ exit 0
+ fi
+fi
+/bin/rm -f /tmp/Mosaic.$mypid
+/bin/echo goto >/tmp/Mosaic.$mypid
+/bin/echo "$1" >>/tmp/Mosaic.$mypid
+/bin/kill -USR1 $mypid
diff --git a/support/hypertex/tanmoy/X/newpg.c b/support/hypertex/tanmoy/X/newpg.c
new file mode 100644
index 0000000000..d17832f49e
--- /dev/null
+++ b/support/hypertex/tanmoy/X/newpg.c
@@ -0,0 +1,37 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+#ifndef EXIT_FAILURE
+ #define EXIT_FAILURE 1
+#endif
+
+#define abrt() return EXIT_FAILURE
+
+int main(int argc, char *argv[])
+{
+ pid_t pgid, pid=0; int arg1;
+
+ if (argc < 3) {
+ fprintf(stderr,"Usage: %s pgid command args\n",argv[0]);
+ abrt();
+ }
+
+ if(sscanf(argv[1],"%d",&arg1)!=1) {
+ fprintf(stderr,"Usage: %s pgid command args\n",argv[0]);
+ abrt();
+ }
+ pgid = arg1;
+
+ if (setpgid(0,pgid)) {
+ fprintf(stderr,"Error changing pgid\n");
+ abrt();
+ }
+
+ if(execvp(argv[2],&argv[2])) {
+ fprintf(stderr,"Error execvping\n");
+ abrt();
+ }
+
+ return 0; /* Impossible */
+}
diff --git a/support/hypertex/tanmoy/aps.hty b/support/hypertex/tanmoy/aps.hty
new file mode 100644
index 0000000000..daebb0a95e
--- /dev/null
+++ b/support/hypertex/tanmoy/aps.hty
@@ -0,0 +1,110 @@
+\let\hypernoname=\relax
+\def\@eqnnum{\hbox{\reset@font\rm(\hyperdef\hypernoname{equation}%
+ {\theequation}{\theequation})}}
+\let\make@eqnnum=\@eqnnum
+\def\eqnum#1{\dec@eqnnum \global\def\make@eqnnum{\reset@font\rm
+ (\hyperdef\hypernoname{equation}{#1}{#1})}%
+\edef\@currentlabel{\hyper@\hyperpr@ref{}{equation}{#1}{#1}}%
+}
+
+\def\mathletters{%
+\inc@eqnnum \setcounter{eqletter}{0}%
+\hyperdef\hypernoname{equation}{\theequation}{}%
+\edef\@currentlabel{\hyper@\hyperpr@ref{}{equation}%
+ {\theequation}{\theequation}}%
+\def\theequation{\theequation@prefix\arabic{equation}\alph{eqletter}}%
+\def\inc@eqnnum{\addtocounter{eqletter}{1}}%
+\def\dec@eqnnum{\addtocounter{eqletter}{-1}}%
+}
+
+\def\equation{\par\vskip-\lastskip\vskip\abovedisplayskip
+\inc@eqnnum\def\@currentlabel{%
+ \hyper@\hyperpr@ref{}{equation}{\theequation}{\theequation}}%
+\setbox\@testboxa=\hbox\bgroup\hskip\@totalleftmargin\hskip\@indentamount
+\hbox\bgroup$\displaystyle
+}
+
+\def\hyperdis@bl@#1#2#3#4{{#4}}%
+\def\eqnarray{\par\vskip-\lastskip\vskip\abovedisplayskip
+\inc@eqnnum\def\@currentlabel{%
+ \hyper@\hyperpr@ref{}{equation}{\theequation}{\theequation}}%
+\global\@eqnswtrue\m@th
+\global\@eqcnt\z@
+\tabskip\@totalleftmargin\advance\tabskip by\@indentamount\let\\\@eqncr
+\halign to\hsize\bgroup\hskip\@centering
+$\displaystyle\tabskip\z@{##{}}$&\global\@eqcnt\@ne
+\hfil${{}##{}}$\hfil
+&\global\@eqcnt\tw@ $\displaystyle\tabskip\z@{##}$\hfil
+\tabskip\@centering \if@eqnsw\phantom{\let\hyperdef=\hyperdis@bl@
+\make@eqnnum\kern\@eqtoeqnum}\fi
+&\llap{##}\tabskip\z@\cr}
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+\let\@svsec\@empty\else
+ \let\hyper@n@=\hyperdef
+ \let\hyperdef=\hyper@nique
+ \refstepcounter{#1}%
+ \let\hyperdef=\hyper@n@
+\def\@tempa{#8}%
+\def\hyper@tmp@{#1}%
+\ifx\@tempa\empty %
+\ifappendixon %
+\if@mainhead %
+\def\@tempa{APPENDIX }\def\@tempb{}\def\hyper@tmp@{appendix}%
+\else %
+\def\@tempa{}\def\@tempb{. }\def\hyper@tmp@{#1}%
+\fi
+\else %
+\def\@tempa{}\def\@tempb{. }\def\hyper@tmp@{#1}%
+\fi
+\else %
+\ifappendixon %
+\if@mainhead %
+\def\@tempa{APPENDIX }\def\@tempb{: }\def\hyper@tmp@{appendix}%
+\else %
+\def\@tempa{}\def\@tempb{. }\def\hyper@tmp@{#1}%
+\fi
+\else %
+\def\@tempa{}\def\@tempb{. }\def\hyper@tmp@{#1}%
+\fi
+\fi
+ \let\hyper@n@=\hyperdef
+ \let\hyperdef=\relax\let\hypernoname=\relax
+\edef\@svsec{\hyperdef\hypernoname{\hyper@tmp@}%
+ {\csname the#1\endcsname}{\@tempa\csname the#1\endcsname\@tempb}}
+ \let\hyperdef=\hyper@n@\fi
+\@tempskipa #5\relax
+\ifdim \@tempskipa>\z@
+\begingroup #6\relax
+{\hskip #3\relax\@svsec}{\interlinepenalty \@M
+\if@mainhead\uppercase{#8}\else#8\fi\par}%
+\endgroup
+\csname #1mark\endcsname{#7}\addcontentsline
+{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+\protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\hbox{\hskip1pt\relax\csname the#1\endcsname}%
+ }\hskip-1pt\relax}\fi
+#7}\else
+\def\@svsechd{#6\hskip #3\relax %
+\@svsec \if@mainhead\uppercase{#8}\else#8\fi
+\csname #1mark\endcsname
+{#7}\addcontentsline
+{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+\protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\hbox{\hskip1pt\relax\csname the#1\endcsname}%
+ }\hskip-1pt\relax}\fi
+#7}}\fi
+\@xsect{#5}}
+
+\hyper@pen{aps1\@ptsize}
+\def\@tempa{prb}
+\ifx\@tempa\@journal %
+\def\tempa{\hyper@pen{prbbib}}
+\else
+\def\tempa{\hyper@pen{prabib}}
+\fi
+\tempa
+
+\if@titlepage
+\hyper@pen{titlepag}
+\fi
diff --git a/support/hypertex/tanmoy/article.hty b/support/hypertex/tanmoy/article.hty
new file mode 100644
index 0000000000..2bd4de4bd7
--- /dev/null
+++ b/support/hypertex/tanmoy/article.hty
@@ -0,0 +1,17 @@
+\long\def\@makecaption#1#2{%
+ \vskip 10\p@
+ \setbox\@tempboxa\hbox{#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ \unhbox\@tempboxa\par
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi}
+
+\hyper@pen{art1\@ptsize}
+\if@twocolumn
+ \hyper@pen{twocolum}
+\fi
+
+\if@titlepage
+ \hyper@pen{titlepag}
+\fi
diff --git a/support/hypertex/tanmoy/book.hty b/support/hypertex/tanmoy/book.hty
new file mode 100644
index 0000000000..c616929a22
--- /dev/null
+++ b/support/hypertex/tanmoy/book.hty
@@ -0,0 +1,9 @@
+\long\def\@makecaption#1#2{%
+ \vskip 10\p@
+ \setbox\@tempboxa\hbox{#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ \unhbox\@tempboxa\par
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi}
+
diff --git a/support/hypertex/tanmoy/espcrc2.hty b/support/hypertex/tanmoy/espcrc2.hty
new file mode 100644
index 0000000000..0da7c46632
--- /dev/null
+++ b/support/hypertex/tanmoy/espcrc2.hty
@@ -0,0 +1,27 @@
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \let\hyper@n@=\hyperdef
+ \let\hyperdef=\hyper@nique
+ \refstepcounter{#1}%
+ \let\hyperdef=\relax\let\hypernoname=\relax
+ \edef\@svsec{\hyperdef\hypernoname{#1}%
+ {\csname the#1\endcsname}{\csname the#1\endcsname.\hskip0.5em}}%
+ \let\hyperdef=\hyper@n@\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup
+ #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\hbox{\hskip1pt\relax\csname the#1\endcsname}%
+ }\hskip-1pt\relax}\fi #7}%
+ \else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\hbox{\hskip1pt\relax\csname the#1\endcsname}%
+ }\hskip-1pt\relax}\fi #7}}%
+ \fi \@xsect{#5}}
diff --git a/support/hypertex/tanmoy/examples/.index.html b/support/hypertex/tanmoy/examples/.index.html
new file mode 100644
index 0000000000..35eee2a0e3
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/.index.html
@@ -0,0 +1,5 @@
+<H1>ERROR! ERROR! ERROR!</H1>
+
+Who told you to look here?
+
+Please go back to hypertex <A href="http://nqcd.lanl.gov/people/tanmoy/hypertex/">root directory</A>.
diff --git a/support/hypertex/tanmoy/examples/Anomalkap.aux b/support/hypertex/tanmoy/examples/Anomalkap.aux
new file mode 100644
index 0000000000..98d88ee63f
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/Anomalkap.aux
@@ -0,0 +1,123 @@
+\relax
+\citation{KP}
+\citation{Jan}
+\citation{CS}
+\citation{KP}
+\citation{FS}
+\citation{Neu}
+\citation{Neu2}
+\citation{AK}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {i}}{\hbox {\hskip 1pt\relax \uppercase {i}}}\hskip -1pt\relax }Introduction}{3}}
+\newlabel{sec:int}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {i}}{\uppercase {i}}}{3}}
+\citation{KP}
+\citation{Alt}
+\citation{Dis}
+\citation{CS}
+\citation{Neu}
+\citation{Neu}
+\citation{Sham}
+\citation{chiral}
+\citation{Neu}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {ii}}{\hbox {\hskip 1pt\relax \uppercase {ii}}}\hskip -1pt\relax }Action, Fermion Propagator and Chiral Zero Modes}{5}}
+\newlabel{sec:model}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {ii}}{\uppercase {ii}}}{5}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{A}{\hbox {\hskip 1pt\relax A}}\hskip -1pt\relax }Lattice Action}{5}}
+\citation{Neu}
+\citation{KP}
+\citation{Neu}
+\citation{Dis}
+\citation{Neu}
+\citation{Neu}
+\citation{Alt}
+\newlabel{actionf}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{3}{3}}{6}}
+\citation{Neu}
+\citation{CS}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{B}{\hbox {\hskip 1pt\relax B}}\hskip -1pt\relax }Chiral Zero Modes}{7}}
+\citation{Neu}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{C}{\hbox {\hskip 1pt\relax C}}\hskip -1pt\relax }Fermion Propagator and Zero Modes}{8}}
+\newlabel{fprop}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{11}{11}}{8}}
+\newlabel{gl}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{13}{13}}{8}}
+\citation{Neu}
+\citation{Neu}
+\citation{CS}
+\newlabel{gr}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{14}{14}}{9}}
+\citation{Sham}
+\citation{Sham}
+\citation{Dis}
+\newlabel{wil}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{17}{17}}{10}}
+\newlabel{shl}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{18}{18}}{10}}
+\newlabel{shr}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{19}{19}}{10}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{D}{\hbox {\hskip 1pt\relax D}}\hskip -1pt\relax }Fermion Feynman Rules }{10}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {iii}}{\hbox {\hskip 1pt\relax \uppercase {iii}}}\hskip -1pt\relax }Perturbative Calculations for the Chiral Schwinger Model}{11}}
+\newlabel{sec:2dim}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {iii}}{\uppercase {iii}}}{11}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{A@}{\hbox {\hskip 1pt\relax A}}\hskip -1pt\relax }Effective Action at Fermion One-Loop}{12}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{B@}{\hbox {\hskip 1pt\relax B}}\hskip -1pt\relax }Evaluation of Zero Mode Contributions}{12}}
+\citation{Dis}
+\newlabel{sumf}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{37}{37}}{14}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{C@}{\hbox {\hskip 1pt\relax C}}\hskip -1pt\relax }Evaluation of Remaining Contributions}{14}}
+\newlabel{gcs}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{39}{39}}{14}}
+\citation{CS}
+\citation{CS}
+\newlabel{sum}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{41}{41}}{15}}
+\newlabel{cst}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{42}{42}}{15}}
+\citation{FS}
+\citation{Neu,AK}
+\citation{chiral}
+\citation{Dis}
+\citation{chiral}
+\newlabel{sumk}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{44}{44}}{16}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{D@}{\hbox {\hskip 1pt\relax D}}\hskip -1pt\relax }Total Contributions}{16}}
+\newlabel{eff}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{45}{45}}{16}}
+\citation{Neu}
+\citation{Neu2}
+\citation{JR}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {iv}}{\hbox {\hskip 1pt\relax \uppercase {iv}}}\hskip -1pt\relax }Anomalies in the Chiral Schwinger Model}{17}}
+\newlabel{sec:anomaly}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {iv}}{\uppercase {iv}}}{17}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{A@@}{\hbox {\hskip 1pt\relax A}}\hskip -1pt\relax }Currents and their Divergence}{17}}
+\newlabel{current}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{49}{49}}{18}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{B@@}{\hbox {\hskip 1pt\relax B}}\hskip -1pt\relax }Gauge invariance}{18}}
+\newlabel{sum0a}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{52}{52}}{18}}
+\citation{Jan}
+\newlabel{sum0b}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{53}{53}}{19}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{C@@}{\hbox {\hskip 1pt\relax C}}\hskip -1pt\relax }Gauge Anomalies}{19}}
+\citation{KP,CS}
+\citation{CS}
+\citation{CS}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{D@@}{\hbox {\hskip 1pt\relax D}}\hskip -1pt\relax }Chern-Simons Current}{20}}
+\citation{CS}
+\citation{Dis}
+\citation{KP,Jan,Dis}
+\citation{Dis}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{E}{\hbox {\hskip 1pt\relax E}}\hskip -1pt\relax }Pythagorean Chiral Schwinger Model and Anomaly in Fermion Number Current}{21}}
+\citation{Dis}
+\citation{Neu}
+\citation{AK}
+\citation{Dis}
+\citation{chiral}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {v}}{\hbox {\hskip 1pt\relax \uppercase {v}}}\hskip -1pt\relax }conclusions}{23}}
+\newlabel{sec:concl}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {v}}{\uppercase {v}}}{23}}
+\citation{Neu}
+\citation{Neu3}
+\citation{Neu2}
+\bibcite{KP}{1}
+\bibcite{Jan}{2}
+\bibcite{CS}{3}
+\bibcite{FS}{4}
+\bibcite{Neu}{5}
+\bibcite{Neu2}{6}
+\bibcite{AK}{7}
+\bibcite{Alt}{8}
+\bibcite{Dis}{9}
+\bibcite{Sham}{10}
+\bibcite{chiral}{11}
+\bibcite{JR}{12}
+\bibcite{Neu3}{13}
+\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {1}{\ignorespaces Two zero modes $u_L$ and $u_R$ as a function of $s$ at $m_0=0.1$ and 0.5 for $p_1=p_2=0$. We take $L=100$.}}{26}}
+\newlabel{zero}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{figure}{1}{1}}{26}}
+\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {2}{\ignorespaces The coefficient of the anomaly $C(s)$ for the Kaplan's method as a function of $s$ at $m_0=0.1$ and 0.5 for $L=100$.}}{26}}
+\newlabel{anomalyK}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{figure}{2}{2}}{26}}
+\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {3}{\ignorespaces The coefficient of the anomaly $C(s)$ for the Shamir's method as a function of $s$ at $m_0=0.1$ and 0.5 for $L=100$.}}{26}}
+\newlabel{anomalyS}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{figure}{3}{3}}{26}}
+\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {4}{\ignorespaces The coefficient of the Chern-Simons current $I(s)$ for the Kaplan's method as a function of $s$ at $m_0=0.1$ and 0.5 for $L=100$.}}{26}}
+\newlabel{CSK}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{figure}{4}{4}}{26}}
+\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {5}{\ignorespaces The coefficient of the Chern-Simons current $I(s)$ for the Shamir's method as a function of $s$ at $m_0=0.1$ and 0.5 for $L=100$.}}{26}}
+\newlabel{CSS}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{figure}{5}{5}}{26}}
diff --git a/support/hypertex/tanmoy/examples/Anomalkap.dvi b/support/hypertex/tanmoy/examples/Anomalkap.dvi
new file mode 100644
index 0000000000..980bc473c5
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/Anomalkap.dvi
Binary files differ
diff --git a/support/hypertex/tanmoy/examples/Anomalkap.hrf b/support/hypertex/tanmoy/examples/Anomalkap.hrf
new file mode 100644
index 0000000000..1ceb603dd4
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/Anomalkap.hrf
@@ -0,0 +1,157 @@
+\def \hyperj@nk {{}{page}{1}}
+\def \hyperj@nk {{}{page}{2}}
+\def \hypernoname {{}{section}{\uppercase {i}}}
+\def \hyperj@nk {{}{page}{3}}
+\def \hyperj@nk {{}{page}{4}}
+\def \hypernoname {{}{section}{\uppercase {ii}}}
+\def \hypernoname {{}{subsection}{A}}
+\def \hypernoname {{}{equation}{1}}
+\def \hypernoname {{}{equation}{2}}
+\def \hyperj@nk {{}{page}{5}}
+\def \hypernoname {{}{equation}{3}}
+\def \hypernoname {{}{equation}{4}}
+\def \hypernoname {{}{equation}{4a}}
+\def \hypernoname {{}{equation}{4b}}
+\def \hypernoname {{}{equation}{5}}
+\def \hypernoname {{}{equation}{6}}
+\def \hyperj@nk {{}{page}{6}}
+\def \hypernoname {{}{subsection}{B}}
+\def \hypernoname {{}{equation}{7}}
+\def \hypernoname {{}{equation}{8}}
+\def \hypernoname {{}{equation}{9}}
+\def \hypernoname {{}{equation}{10}}
+\def \hyperj@nk {{}{page}{7}}
+\def \hypernoname {{}{subsection}{C}}
+\def \hypernoname {{}{equation}{11}}
+\def \hypernoname {{}{equation}{12}}
+\def \hypernoname {{}{equation}{13}}
+\def \hypernoname {{}{equation}{14}}
+\def \hyperj@nk {{}{page}{8}}
+\def \hypernoname {{}{equation}{15}}
+\def \hypernoname {{}{equation}{15a}}
+\def \hypernoname {{}{equation}{15b}}
+\def \hypernoname {{}{equation}{15c}}
+\def \hypernoname {{}{equation}{15d}}
+\def \hypernoname {{}{equation}{16}}
+\def \hypernoname {{}{equation}{17}}
+\def \hyperj@nk {{}{page}{9}}
+\def \hypernoname {{}{equation}{18}}
+\def \hypernoname {{}{equation}{19}}
+\def \hypernoname {{}{equation}{20}}
+\def \hypernoname {{}{equation}{21}}
+\def \hypernoname {{}{subsection}{D}}
+\def \hypernoname {{}{equation}{22}}
+\def \hyperj@nk {{}{page}{10}}
+\def \hypernoname {{}{equation}{23}}
+\def \hypernoname {{}{equation}{24}}
+\def \hypernoname {{}{equation}{25}}
+\def \hypernoname {{}{section}{\uppercase {iii}}}
+\def \hyperj@nk {{}{page}{11}}
+\def \hypernoname {{}{subsection}{A@}}
+\def \hypernoname {{}{equation}{26}}
+\def \hypernoname {{}{equation}{27}}
+\def \hypernoname {{}{equation}{28}}
+\def \hypernoname {{}{subsection}{B@}}
+\def \hypernoname {{}{equation}{29}}
+\def \hypernoname {{}{equation}{30}}
+\def \hyperj@nk {{}{page}{12}}
+\def \hypernoname {{}{equation}{31}}
+\def \hypernoname {{}{equation}{32}}
+\def \hypernoname {{}{equation}{33}}
+\def \hypernoname {{}{equation}{34}}
+\def \hypernoname {{}{equation}{34a}}
+\def \hypernoname {{}{equation}{34b}}
+\def \hypernoname {{}{equation}{35}}
+\def \hyperj@nk {{}{page}{13}}
+\def \hypernoname {{}{equation}{36}}
+\def \hypernoname {{}{equation}{37}}
+\def \hypernoname {{}{subsection}{C@}}
+\def \hypernoname {{}{equation}{38}}
+\def \hypernoname {{}{equation}{39}}
+\def \hypernoname {{}{equation}{40}}
+\def \hyperj@nk {{}{page}{14}}
+\def \hypernoname {{}{equation}{41}}
+\def \hypernoname {{}{equation}{42}}
+\def \hypernoname {{}{equation}{43}}
+\def \hypernoname {{}{equation}{44}}
+\def \hyperj@nk {{}{page}{15}}
+\def \hypernoname {{}{subsection}{D@}}
+\def \hypernoname {{}{equation}{45}}
+\def \hyperj@nk {{}{page}{16}}
+\def \hypernoname {{}{equation}{46}}
+\def \hypernoname {{}{equation}{47}}
+\def \hypernoname {{}{section}{\uppercase {iv}}}
+\def \hypernoname {{}{subsection}{A@@}}
+\def \hypernoname {{}{equation}{48}}
+\def \hyperj@nk {{}{page}{17}}
+\def \hypernoname {{}{equation}{49}}
+\def \hypernoname {{}{equation}{50}}
+\def \hypernoname {{}{equation}{51}}
+\def \hypernoname {{}{subsection}{B@@}}
+\def \hypernoname {{}{equation}{52}}
+\def \hypernoname {{}{equation}{53}}
+\def \hyperj@nk {{}{page}{18}}
+\def \hypernoname {{}{subsection}{C@@}}
+\def \hypernoname {{}{equation}{54}}
+\def \hypernoname {{}{equation}{55}}
+\def \hypernoname {{}{equation}{56}}
+\def \hypernoname {{}{equation}{57}}
+\def \hypernoname {{}{equation}{58}}
+\def \hypernoname {{}{equation}{59}}
+\def \hypernoname {{}{equation}{60}}
+\def \hyperj@nk {{}{page}{19}}
+\def \hypernoname {{}{equation}{61}}
+\def \hypernoname {{}{subsection}{D@@}}
+\def \hypernoname {{}{equation}{62}}
+\def \hypernoname {{}{equation}{63}}
+\def \hypernoname {{}{equation}{64}}
+\def \hyperj@nk {{}{page}{20}}
+\def \hypernoname {{}{equation}{65}}
+\def \hypernoname {{}{subsection}{E}}
+\def \hypernoname {{}{equation}{66}}
+\def \hyperj@nk {{}{page}{21}}
+\def \hypernoname {{}{equation}{67}}
+\def \hypernoname {{}{equation}{68}}
+\def \hypernoname {{}{equation}{69}}
+\def \hypernoname {{}{equation}{70}}
+\def \hypernoname {{}{equation}{71}}
+\def \hypernoname {{}{section}{\uppercase {v}}}
+\def \hyperj@nk {{}{page}{22}}
+\def \hypernoname {{}{enumi}{1}}
+\def \hypernoname {{}{enumi}{2}}
+\def \hyperj@nk {{}{page}{23}}
+\def \hypernoname {{}{enumi}{3}}
+\def \hyperj@nk {{}{page}{24}}
+\def \hypernoname {{}{enumiv}{1}}
+\def \hypernoname {{}{reference}{1}}
+\def \hypernoname {{}{enumiv}{2}}
+\def \hypernoname {{}{reference}{2}}
+\def \hypernoname {{}{enumiv}{3}}
+\def \hypernoname {{}{reference}{3}}
+\def \hypernoname {{}{enumiv}{4}}
+\def \hypernoname {{}{reference}{4}}
+\def \hypernoname {{}{enumiv}{5}}
+\def \hypernoname {{}{reference}{5}}
+\def \hypernoname {{}{enumiv}{6}}
+\def \hypernoname {{}{reference}{6}}
+\def \hypernoname {{}{enumiv}{7}}
+\def \hypernoname {{}{reference}{7}}
+\def \hypernoname {{}{enumiv}{8}}
+\def \hypernoname {{}{reference}{8}}
+\def \hypernoname {{}{enumiv}{9}}
+\def \hypernoname {{}{reference}{9}}
+\def \hypernoname {{}{enumiv}{10}}
+\def \hypernoname {{}{reference}{10}}
+\def \hypernoname {{}{enumiv}{11}}
+\def \hypernoname {{}{reference}{11}}
+\def \hypernoname {{}{enumiv}{12}}
+\def \hypernoname {{}{reference}{12}}
+\def \hypernoname {{}{enumiv}{13}}
+\def \hypernoname {{}{reference}{13}}
+\def \hyperj@nk {{}{page}{25}}
+\def \hypernoname {{}{figure}{1}}
+\def \hypernoname {{}{figure}{2}}
+\def \hypernoname {{}{figure}{3}}
+\def \hypernoname {{}{figure}{4}}
+\def \hypernoname {{}{figure}{5}}
+\def \hyperj@nk {{}{page}{26}}
diff --git a/support/hypertex/tanmoy/examples/Anomalkap.log b/support/hypertex/tanmoy/examples/Anomalkap.log
new file mode 100644
index 0000000000..ce0984f50c
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/Anomalkap.log
@@ -0,0 +1,83 @@
+This is TeX, C Version 3.141 (format=hlatex 94.7.16) 17 JUL 1994 21:43
+**Anomalkap
+(Anomalkap.tex
+LaTeX Version 2.09 <25 March 1992>
+(/usr/local/lib/tex/inputs/hypertex/hyperlatex.tex
+(/usr/local/lib/tex/inputs/hypertex/hyperbasics.tex
+\hyperf@le=\read1
+ (Anomalkap.hrf)
+\hyperf@le=\write3
+\hypert@ks=\toks11
+)
+\hyper@inputcheck=\read2
+)
+(/usr/local/lib/tex/inputs/RevTeX/revtex.sty
+Filename: revtex.sty, v3.0 <27 October 92>
+(/usr/local/lib/tex/inputs/RevTeX/aps.sty
+Filename: aps.sty, v3.0 <28 October 1992>
+REVTeX message: NFSS not detected. Assuming OFSS.
+(/usr/local/lib/tex/inputs/RevTeX/aps12.sty
+Filename: aps12.sty, v3.0 <2 October 1992>
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\@indentflag=\count85
+\@eqtoeqnum=\dimen99
+\c@eqletter=\count86
+\c@equation=\count87
+\@testboxa=\box25
+\@testboxb=\box26
+ (/usr/local/lib/tex/inputs/RevTeX/prabib.sty
+Filename: prabib.sty, v3.0 <9/14/92>
+\WidestRefLabelThusFar=\dimen100
+)
+\c@figure=\count88
+\c@table=\count89
+\c@tablenote=\count90
+\@Ldec=\dimen101
+\@Rdec=\dimen102
+)) (/usr/local/lib/tex/inputs/hypertex/revtex.hty
+(/usr/local/lib/tex/inputs/hypertex/aps.hty
+(/usr/local/lib/tex/inputs/hypertex/prabib.hty))) (Anomalkap.aux) [1
+
+]
+(Anomalkap.toc)
+\tf@toc=\write4
+ [2] [3] [4] [5] [6] [7]
+Overfull \hbox (9.95148pt too wide) detected at line 359
+ []
+
+\hbox(87.00085+81.00085)x468.0
+.\glue 0.0
+.\glue 0.0 plus 1000.0
+.\hbox(87.00085+81.00085)x477.95148
+..\mathon
+..\twlmi G
+..\hbox(5.46666+0.0)x6.95146, shifted 1.79999
+...\egtmi R
+..\twlrm (
+..\twlmi p
+..etc.
+.\glue 0.0 plus 1000.0
+
+[8] [9] [10] [11] 'subsection.A' duplicate 'subsection.B' duplicate [12]
+[13] 'subsection.C' duplicate [14] [15] 'subsection.D' duplicate [16]
+'subsection.A' duplicate 'subsection.A@' duplicate [17]
+'subsection.B' duplicate 'subsection.B@' duplicate [18]
+'subsection.C' duplicate 'subsection.C@' duplicate [19]
+'subsection.D' duplicate 'subsection.D@' duplicate [20] [21] [22] [23] [24]
+[25] [26] (Anomalkap.aux) )
+Here is how much of TeX's memory you used:
+ 672 strings out of 11975
+ 8828 string characters out of 87114
+ 43334 words of memory out of 262141
+ 2584 multiletter control sequences out of 9500
+ 20236 words of font info for 76 fonts, out of 100000 for 255
+ 14 hyphenation exceptions out of 607
+ 15i,12n,25p,332b,198s stack positions out of 300i,40n,60p,3000b,4000s
+
+Output written on Anomalkap.dvi (26 pages, 88872 bytes).
diff --git a/support/hypertex/tanmoy/examples/Anomalkap.tex b/support/hypertex/tanmoy/examples/Anomalkap.tex
new file mode 100644
index 0000000000..234613653f
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/Anomalkap.tex
@@ -0,0 +1,1252 @@
+\documentstyle[preprint,aps]{revtex}
+%\documentstyle[prd,aps]{revtex}
+\begin{document}
+%\draft
+
+\title{Perturbative analysis for Kaplan's lattice chiral fermions}
+
+
+\author{S. Aoki and H. Hirose}
+\address{Institute of Physics, University of Tsukuba, Tsukuba
+Ibaraki-305, Japan}
+
+\date{\today}
+
+\maketitle
+
+\begin{abstract}
+Perturbation theory for lattice fermions with domain wall mass terms
+is developed and is applied to
+investigate the chiral Schwinger model formulated on the lattice
+by Kaplan's method.
+We calculate the effective action for gauge fields to one loop,
+and find that it contains a longitudinal component even for anomaly-free cases.
+From the effective action we obtain
+gauge anomalies and Chern-Simons current without ambiguity.
+We also show that the current corresponding to the fermion number
+has a non-zero divergence and it flows off the wall into the extra
+dimension.
+Similar results are obtained for a proposal
+by Shamir, who used a constant mass term with free boundaries
+instead of domain walls.
+\end{abstract}
+\pacs{11.15Ha, 11.30Rd, 11.90.+t}
+
+\narrowtext
+
+\newpage
+\tableofcontents
+\newpage
+
+\section{Introduction}
+\label{sec:int}
+
+Construction of chiral gauge theories is one of the long-standing
+problems of lattice field theories. Because of the fermion doubling
+phenomenon,
+a naively discretized lattice fermion field yields $2^d$ fermion modes, half of
+one chirality and half of the other, so that the theory is non-chiral.
+Several lattice approaches have been proposed to define chiral gauge theories,
+but so far none of them have been proven to work successfully.
+
+Kaplan has proposed a new approach\cite{KP} to this problem.
+He suggested that it may be possible to simulate the behavior of massless
+chiral fermions in 2k dimensions by
+a lattice theory of massive fermions in 2k+1 dimensions if
+the fermion mass has a shape of a domain wall in the
+2k+1-th dimension.
+He showed for the weak gauge coupling limit
+that massless chiral states arise as zero-modes bound to
+the 2k-dimensional domain wall while all doublers can be given large gauge
+invariant masses. If the chiral fermion content that appears
+on the domain wall
+is anomalous the 2k-dimensional gauge current flows off the wall
+into the extra dimension so that the theory can not be 2k-dimensional.
+Therefore he argued that
+this approach possibly simulates the 2k-dimensional chiral fermions
+only for anomaly-free cases.
+
+His idea was tested for smooth external gauge fields.
+Jansen\cite{Jan} showed numerically
+that in the case of the chiral Schwinger model in 2 dimensions
+with three fermions of charge 3, 4, and 5 the anomalies
+in the gauge currents cancel on the wall.
+The Chern-Simons current far away from the domain wall
+was calculated in Ref.\ \cite{CS}. It is shown that
+the 2k+1-th component of the current is non-zero
+in the positive mass region
+and zero in the negative mass region
+such that the derivative of the current cancels
+the 2k-dimensional gauge anomaly on the wall, as was argued in Ref.\ \cite{KP}.
+
+In the continuum perturbation theory
+Frolov and Slavnov\cite{FS} proposed a gauge invariant regularization
+of the standard model through an infinite tower of regulator fields.
+Some similarity between their proposal and the Kaplan's approach
+was pointed out by Narayanan and Neuberger\cite{Neu}.
+It has been also shown that
+the chiral fermion determinant can be nonperturbatively defined as an
+overlap of two vacua\cite{Neu2}, which can be extended to lattice theories.
+Using Narayanan and Neuberger's point of view,
+we observed in Ref.\ \cite{AK} that
+non-gauge (chiral) anomalies are correctly reproduced within
+the Frolov and Slavnov's regularization method.
+
+The results above provide positive indications that Kaplan's method for chiral
+fermion may work.
+There exists, however, several potential problems in his approach.
+Since the original 2k+1-dimensional model is vector-like,
+there always exists an anti-chiral mode, localized on an anti-domain wall
+formed by periodicity of the extra dimension.
+If the chiral mode and the anti-chiral mode are paired into
+a Dirac mode, this approach fails to simulate chiral gauge theories.
+Without dynamical gauge fields, the overlap between the chiral mode and
+the anti-chiral mode is suppressed as $O (e^{-L})$ where $L$ is the size of the
+extra dimension. If gauge fields become dynamical, the overlap
+depends on the gauge coupling. In the original paper\cite{KP}
+the strong coupling limit of the gauge coupling in the extra dimension
+was proposed to suppress the overlap. However,
+a mean-field calculation\cite{Alt}
+in this limit indicated that the chiral mode disappears and the model becomes
+vector-like.
+
+More recently Distler and Rey\cite{Dis} pointed out that
+the Kaplan's method may have a problem in reproducing fermion number
+non-conservation expected in the standard model.
+Using the 2-dimensional chiral Schwinger model
+they argued that either the 2-dimensional fermion number current is exactly
+conserved or the light degree of freedom flows off the wall into the
+extra dimension so that the model can not be 2-dimensional.
+
+In this paper we carry out a detailed perturbative analysis of the Kaplan's
+proposal for smooth background gauge fields on a finite lattice
+taking the chiral Schwinger model in 2-dimensions as a concrete example.
+In sect.\ \ref{sec:model},
+we formulate the lattice perturbation theory for
+the Kaplan's method with the periodic boundary condition.
+Since translational invariance is violated by domain wall mass terms,
+usual Feynman rules in the momentum space can not be used except
+in the regions far away from the domain wall\cite{CS}.
+To perform perturbative calculations near or on the wall,
+we use the Feynman rules in real space of the extra dimension,
+as proposed in ref.\ \cite{Neu}.
+We calculate the fermion propagator for the periodic boundary condition,
+which reproduces the fermion propagator in ref.\cite{Neu}
+near the origin of the extra dimension.
+A similar calculation is also made for the constant fermion mass
+with {\it free} boundaries in the 2k+1-th dimension.
+As shown by Shamir\cite{Sham} the constant mass term
+with this boundary condition
+can also produce the chiral zero mode on the 2k-dimensional
+boundary.
+The results are similar but simpler than those by the Kaplan's method.
+In sect.\ \ref{sec:2dim},
+using the Feynman rules of sect.\ \ref{sec:model}
+we calculate a fermion one-loop effective action for the U(1) gauge field
+of the chiral Schwinger model simulated by the Kaplan's method.
+We find that the effective action
+contains the longitudinal component as well as
+parity-odd terms,
+and that this longitudinal component, which
+breaks gauge invariance, remains non-zero even for anomaly-free cases.
+This result is compared with those of the conventional Wilson fermion
+formulation of this model\cite{chiral}.
+In sect.\ \ref{sec:anomaly}
+we derive gauge anomalies as well as the Chern-Simons current
+from the effective action without ambiguity.
+Then we show that the current corresponding to
+the fermion number has a non-zero divergence
+and the fermion number current flows off the walls into the extra dimension.
+In sect.\ \ref{sec:concl}, we give our conclusions and discussions.
+
+\section{Action, Fermion Propagator and Chiral Zero Modes}
+\label{sec:model}
+
+\subsection{Lattice Action}
+We consider a vector gauge theory in D=2k+1 dimensions with
+a domain wall mass term. For later convenience we use the
+notation of ref.\cite{Neu}, where the fermionic action is written in terms of
+a d=2k dimensional theory with infinitely many flavors.
+Our action is denoted as
+\begin{equation}
+S= S_G + S_F .
+\end{equation}
+The action for gauge field $S_G$ is given by
+\begin{eqnarray}
+S_G & =& \beta \sum_{n,\mu>\nu}\sum_s {\rm Re}\{ {\rm Tr} [U_{\mu\nu}(n,s)]\}
+ \nonumber \\
+& +& \beta_D \sum_{n,\mu}\sum_s {\rm Re} \{ {\rm Tr} [U_{\mu D}(n,s)]\}
+\end{eqnarray}
+where $\mu$, $\nu$ run from 1 to $d$,
+$n$ is a point on a d-dimensional lattice and $s$ a coordinate in the
+extra dimension,
+$\beta$ is the inverse gauge coupling for plaquettes $U_{\mu\nu}$
+and $\beta_D$ that for plaquettes $U_{\mu D}$.
+In general we can take $\beta \not= \beta_D$.
+The fermionic part of the action $S_F$ is given by
+\widetext
+\begin{eqnarray}
+S_F & = & {1\over 2}\sum_{n,\mu}\sum_s \bar\psi_s(n)\gamma_\mu
+[U_{s,\mu}(n)\psi_s(n+\mu ) - U^\dagger_{s,\mu}(n-\mu)\psi_s(n-\mu ) ]
+ \nonumber \\
+ &+& \sum_n \sum_{s,t} \bar\psi_s(n) [ M_0 P_R + M_0^\dagger P_L]_{st}
+\psi_t(n)
+\nonumber \\
+ & + & {1\over 2}\sum_{n,\mu}\sum_s \bar\psi_s(n)
+[U_{s,\mu}(n)\psi_s(n+\mu ) + U^\dagger_{s,\mu}(n-\mu)\psi_s(n-\mu )
+ -2\psi_s(n) ]
+\label{actionf}
+\end{eqnarray}
+where $s$, $t$ are considered as flavor indices,
+$P_{R/L} = (1 \pm \gamma_{2k+1})/2$,
+\narrowtext
+\begin{mathletters}
+\begin{eqnarray}
+(M_0)_{st} & = & U_{s,D}(n)\delta_{s+1,t}- a(s)\delta_{st}
+ \\
+(M_0^\dagger)_{st} & = & U^\dagger_{s-1,D}(n)\delta_{s-1,t}- a(s)\delta_{st} ,
+\end{eqnarray}
+\end{mathletters}
+and $U_{s,\mu}(n)$, $U_{s,D}(n)$ are link variables for gauge fields.
+We consider the above model with periodic boundaries
+in the extra dimension,
+so that $s$, $t$ run from $-L$ to $L-1$, and we take
+\begin{equation}
+a(s) = 1 - m_0[ {\rm sign}(s+{1\over 2}) \cdot {\rm sign}(L-s-
+{1\over 2})]
+= \left\{
+\begin{array}{ll}
+1-m_0, & -{1\over 2} < s < L-{1\over 2} \\
+1+m_0, & -L-{1\over 2} < s < -{1\over 2}
+\end{array}
+\right.
+\end{equation}
+for $-L \leq s < L $. It is easy to see\cite{Neu} that $S_F$ above is
+identical to the Kaplan's action in D=2k+1 dimensions\cite{KP}
+with the Wilson parameter $r=1$. In fact the second term
+in eq.\ (\ref{actionf}) can be rewritten as
+\begin{eqnarray}
+& {1\over 2}& \bar\psi_s\gamma_D [U_{s,D}\psi_{s+1}-U_{s-1,D}\psi_{s-1}]
+ \nonumber \\
+&+& {1\over 2}\bar\psi_s[U_{s,D}\psi_{s+1}+U_{s-1,D}\psi_{s-1}
+-2\psi_s] + M(s) \bar\psi_s \psi_s
+\end{eqnarray}
+with $M(s)=m_0 [ {\rm sign}(s+1/2) \cdot {\rm sign}(L-s-1/2)]$.
+Note that our action is slightly different from that of ref.\cite{Neu}:
+we have the D-th component of the link variable $U_{s,D}(n)$
+and all link variables have $s$ dependence. With the gauge fixing condition
+$U_{s,D}(n) =1$ for all $s$ and $n$\cite{Dis},
+our action becomes almost identical to that of ref.\cite{Neu}, but
+still the $s$ dependence exists in our link variables in d dimensions.
+The model in ref.\cite{Neu} corresponds to our model at
+$\beta_D =\infty$, where $s$ dependences of gauge fields are
+completely suppressed, and the model at $\beta_D = 0$ was
+investigated by the mean field method\cite{Alt}.
+
+\subsection{Chiral Zero Modes}
+We now consider chiral zero modes of the action $S_F$ in
+the weak coupling limit , i.e. $\forall U_{s,\mu} = \forall U_{s,D}=1$.
+According to ref.\cite{Neu}, the right-handed zero modes are given
+by zero modes of the operator $M$ and the left-handed zero modes
+by those of the operator $M^\dagger$, where
+\begin{equation}
+(M)_{st} = (M_0)_{st} + {\nabla (p)\over 2}\delta_{st}, \
+(M^\dagger )_{st} = (M_0^\dagger )_{st} + {\nabla (p)\over 2}\delta_{st}
+\end{equation}
+with $\nabla (p)\equiv \sum_{\mu=1}^d 2 [\cos (p_\mu a) - 1 ]$
+in momentum space of d dimensions.
+It is noted that $ 0 \leq -\nabla(p) \leq 4d$ and zero modes exist
+if and only if $ -\nabla (p) \le 2m_0$\cite{CS}.
+Hereafter we only consider the case that $ 0 < m_0 < 2$.
+In this range of $m_0$, there is only one right-handed zero mode $u_R$
+satisfying $ M \cdot u_R = 0$, which is given by
+\begin{equation}
+u_R(s) = \left\{ \begin{array}{ll}
+\displaystyle (1-\nabla (p)/2-m_0)^s C_0^{-1} & \mbox{for $s \geq 0$} \\
+ & \\
+\displaystyle (1-\nabla (p)/2+m_0)^s C_0^{-1} & \mbox{for $s < 0$}
+\end{array} \right.
+\end{equation}
+where the d-dimensional momentum $p$ has to be restricted to
+$ 0 \leq m_0+\nabla (p) /2 $ so that
+$(1-\nabla/ 2 -m_0) \leq 1$. The normalization constant $C_0$ takes the value
+\begin{equation}
+{1-(1-\nabla (p)/2-m_0)^L\over m_0+\nabla (p)/2} +
+{1-(1-\nabla (p)/2+m_0)^{-L}\over m_0 - \nabla (p)/2} .
+\end{equation}
+This zero mode is localized around $s=0$.
+On a finite lattice (i.e. $L\not= \infty$) with the periodic boundary
+condition, there exists another zero mode $u_L$ with the opposite
+chirality satisfying $ M\cdot u_L = 0 $, which is given by
+$ u_L(s) = u_R(L-t-1)$ and is localized around $s=L$.
+The overlap between the two zero modes vanishes exponentially as
+$L\rightarrow \infty$;
+\begin{eqnarray}
+\sum_{s=-L}^{L-1} u_R(s) u_L(s) & =& C_0^{-2} L\times
+ (1-{\nabla (p)\over2}-m_0)^L
+ \nonumber \\
+&\times &
+(1-{\nabla (p)\over 2}+m_0)^{-L}
+\longrightarrow 0,
+\end{eqnarray}
+We illustrate the shape of the two zero modes $u_R$ and $u_L$
+at $m_0= 0.1$ and 0.5 for $ p =0$ in Fig.\ \ref{zero}.
+
+\subsection{Fermion Propagator and Zero Modes}
+The fermion propagator in d-dimensional momentum space and
+in real D-th space has been obtained in ref.\cite{Neu} for
+the infinite D-th space(i.e. $L=\infty$ ).
+It is not difficult to obtain
+the fermion propagator for a finite lattice with
+periodic boundaries. We have
+\begin{eqnarray}
+S_F(p)_{st} & = &- \left[ [(i\sum_\mu \gamma_\mu \bar p_\mu+ M ) G_L (p)]_{st}
+P_L \right.
+ \nonumber \\
+& + &
+\left. [(i\sum_\mu \gamma_\mu \bar p_\mu+ M^\dagger ) G_R (p)]_{st}P_R \right]
+\label{fprop}
+\end{eqnarray}
+where
+\begin{equation}
+G_L (p) ={1\over \bar p^2 + M^\dagger M },
+\quad
+G_R (p) ={1\over \bar p^2 + M M^\dagger }
+\end{equation}
+with $\bar p_\mu = \sin (p_\mu a)$ .
+Explicit expressions for $G_L$ and $G_R$ are complicated in general,
+but they become simple for large $L$ where we neglect terms of order
+$O(e^{-cL})$ with $c > 0$.
+We obtain
+\widetext
+\begin{equation}
+G_L(p)_{st} =
+\left\{ \begin{array}{ll}
+B e^{-\alpha_+|s-t|} + (A_L-B) e^{-\alpha_+(s+t)} +
+(A_R-B) e^{-\alpha_+(2L-s-t)},
+& (s,t \ge 0) \\
+ & \\
+A_Le^{-\alpha_+s+\alpha_-t} +A_Re^{-\alpha_+(L-s)-\alpha_-(L+t)},
+& (s\ge 0,\ t\le 0) \\
+ & \\
+A_Le^{\alpha_-s-\alpha_+t} + A_Re^{-\alpha_-(L+s)-\alpha_+(L-t)},
+& (s\le 0,\ t\ge 0) \\
+ & \\
+C e^{-\alpha_-|s-t|}+ (A_L-C) e^{\alpha_-(s+t)} +
+(A_R-C) e^{-\alpha_-(2L+s+t)},
+& (s,t \le 0)
+\end{array} \right.
+\label{gl}
+\end{equation}
+\begin{equation}
+G_R(p)_{st} =
+\left\{ \begin{array}{ll}
+B e^{-\alpha_+|s-t|} + (A_R-B) e^{-\alpha_+(s+t+2)} +
+(A_L-B) e^{-\alpha_+(2L-s-t-2)},
+& (s,t \ge -1) \\
+ & \\
+A_Re^{-\alpha_+(s+1)+\alpha_-(t+1)} +A_Le^{-\alpha_+(L-s-1)-\alpha_-(L+t+1)},
+& (s\ge -1,\ t\le -1) \\
+ & \\
+A_Re^{\alpha_-(s+1)-\alpha_+(t+1)} +A_Le^{-\alpha_-(L+s+1)-\alpha_+(L-t-1)},
+& (s\le -1,\ t\ge -1) \\
+ & \\
+C e^{-\alpha_-|s-t|} + (A_R-C) e^{\alpha_-(s+t+2)} +
+(A_L-C) e^{-\alpha_-(2L+s+t+2)},
+& (s,t \le -1)
+\end{array} \right.
+\label{gr}
+\end{equation}
+\narrowtext where
+\begin{mathletters}
+\begin{equation}
+a_{\pm} = 1 -{\nabla (p)\over 2}\mp m_0
+\end{equation}
+\begin{equation}
+\alpha_{\pm} = {\rm arccosh} [{1\over 2}(a_{\pm}+{1+\bar p^2\over a_{\pm}})]
+\geq 0,
+\end{equation}
+\begin{equation}
+A_L = {1\over a_+ e^{\alpha_+} - a_-e^{-\alpha_-}}, \qquad
+A_R ={1\over a_- e^{\alpha_-}- a_+e^{-\alpha_+}}
+\end{equation}
+\begin{equation}
+B = {1\over 2 a_+ {\rm sinh} \alpha_+}, \qquad
+C = {1\over 2 a_- {\rm sinh} \alpha_-} .
+\end{equation}
+\end{mathletters}
+
+For $|s|, |t| \ll L$ the propagator above coincides with
+that of ref.\cite{Neu}.
+From the form of $A_L$, $A_R$, $B$ and $C$,
+it is easy to see\cite{Neu}
+that singularities occur only in $A_L$ at $p=0$;
+\begin{equation}
+A_L \longrightarrow {m_0(4-m_0^2) \over 4 p^2 a^2 },
+\qquad p\rightarrow 0 .
+\end{equation}
+Therefore the propagator $G_L$ describes a massless right-handed
+fermion around $s,t = 0$ and $G_R$ a massless left-handed fermion
+around $|s|,|t| = L$, which correspond to the two zero modes in the
+previous subsection.
+Later we use the above forms of the fermion propagator
+to calculate fermion one-loop diagrams.
+It is also noted that the fermion propagator away from the two domain walls
+approaches the Wilson fermion propagator
+with a {\it constant} mass term, i.e. ,
+\begin{eqnarray}
+S_F(p) & \rightarrow
+& \int {dp_D\over 2\pi}
+{e^{ia p_D(s-t)} \over i\gamma\cdot p + i\gamma_D p_D \pm m_0
+-\nabla (p) +1-\cos (p_D a)}
+\label{wil}
+\end{eqnarray}
+for $1 \ll |s|, |t|, |L-s|, |L-t|$ with $s\cdot t > 0$, where $+m_0$ is taken
+for $s,t > 0$ and $-m_0$ for $s,t < 0$.
+Therefore the calculation in ref.\cite{CS} is valid in this region
+of $s$ and $t$.
+
+Before closing this subsection, we give the form of propagator for the Shamir's
+free boundary fermions\cite{Sham}.
+This is again given by eq.(\ref{fprop})
+with $M_{st}=\delta_{s+1,t}-a_+ \delta_{s,t}$
+and $M^\dagger_{st}=\delta_{s-1,t}-a_+ \delta_{s,t}$.
+For large $L$, it becomes\cite{Sham}
+\begin{equation}
+G_L(p)_{st} =
+B e^{-\alpha_+|s-t|} + A'_L e^{-\alpha_+(s+t)}
++A'_Re^{\alpha_+(s+t-2L)}
+\label{shl}
+\end{equation}
+\begin{equation}
+G_R(p)_{st} =
+B e^{-\alpha_+|s-t|}+ A'_R e^{-\alpha_+(s+t)} +
+A'_Le^{\alpha_+(s+t-2L)} ,
+\label{shr}
+\end{equation}
+where
+\begin{equation}
+A'_L = B {1-a_+e^{-\alpha_+}\over a_+e^{\alpha_+}-1}, \qquad
+A'_R = - Be^{-2\alpha_+}
+\end{equation}
+and now $ 0 \le s,t \le L$.
+Singularities occur only in $A'_L$ at $p=0$ such that
+\begin{equation}
+A'_L \rightarrow {m_0(2-m_0)\over p^2 a^2} .
+\end{equation}
+Thus, the propagator describes a right-handed massless
+fermion around one boundary at $s,t = 0$ and
+a left-handed massless around the other boundary at $s,t = L$.
+
+\subsection{Fermion Feynman Rules }
+In this subsection, we write down the lattice Feynman rules for fermions
+relevant for fermion one-loop calculations,
+which will be performed in the next section.
+We first choose the axial gauge fixing $U_{s,D}=1$.
+Although the full gauge symmetries in D dimensions are lost,
+the theory is still invariant under gauge
+transformations independent of $s$ \cite{Dis}.
+We consider the limit of small d-dimensional gauge coupling, and take
+\begin{equation}
+U_{s,\mu}(n) = exp[i a g A_\mu (s, n+\mu/2)]
+\end{equation}
+where $a$ is the lattice spacing, and
+$g \propto 1/\sqrt\beta$
+is the gauge coupling constant whose mass dimension is $2-D/2$
+(mass dimension of the gauge fields $A_\mu$ is $D/2-1$).
+It is noted that the other gauge coupling $g_s \propto 1/\sqrt{\beta_s}$
+is not necessarily small and can be made arbitrary large.
+We consider Feynman rules in momentum space for the physical
+d dimensions but in real space for the extra dimension.
+\begin{itemize}
+\item The fermion propagator is given by
+\begin{equation}
+< \psi_s (-p) \bar\psi_t (p) > = S_F(p)_{st}.
+\end{equation}
+where $S_F$ has been given in eq.(\ref{fprop}) with
+eqs.(\ref{gl},\ref{gr}) for the Kaplan's fermions or with
+eqs.(\ref{shl},\ref{shr}) for the Shamir's fermions.
+
+\item The fermion vertex coupled to a single gauge field is given by
+\begin{equation}
+ag \bar\psi_s(q) \partial_\mu [ S_F^{-1}({q+p\over 2})]_{ss}
+A_\mu(s,p-q)\psi_s(-p).
+\end{equation}
+Here
+$\partial_\mu S_F^{-1}(q) = \displaystyle {\partial S_F^{-1}(q)\over
+\partial (q_\mu a)} = iC_\mu(q)\gamma_\mu + S_\mu (q)$ with
+$C_\mu (q)= \cos (q_\mu a)$ and $S_\mu (q)= \sin (q_\mu a)$.
+From this form of the vertex it is easy to see that
+the fermion tadpole diagram for an external gauge field vanishes identically.
+\item The fermion vertex with two gauge fields is given by
+\begin{equation}
+- a^2 {g^2\over 2}
+\bar\psi_s(q) [\partial^2_\mu S_F^{-1}({q+p\over 2})]_{ss}
+A^2_\mu(s,p-q)\psi_s(-p)
+\end{equation}
+where $A_\mu^2(s,p) = A_\mu (s,p-p_1) A_\mu(s,p_1)$ with $p$ and $p_1$ fixed.
+\end{itemize}
+
+\section{Perturbative Calculations for the Chiral Schwinger Model}
+\label{sec:2dim}
+In the following two sections
+we analyze the chiral Schwinger model
+formulated via the Kaplan's method for lattice chiral fermions.
+Using the Feynman rules of the previous section
+for $D=3$,
+we calculate the effective action for external gauge fields,
+from which we
+derive gauge anomalies, Chern-Simons current, and anomaly of the
+fermion number current.
+We perform the calculations for the Shamir's method in parallel
+with those for the Kaplan's method.
+
+\subsection{Effective Action at Fermion One-Loop}
+Since $ [ A_\mu, A_\nu ]=0$ for U(1) gauge fields, all diagrams with
+odd number of external gauge fields vanishes identically.
+Furthermore diagrams with four or more external gauge fields
+are all convergent. Therefore only the diagrams with two external gauge
+fields are potentially divergent. The effective action
+for two external gauge fields is denoted by
+\begin{eqnarray}
+S_{eff}^{(2)} & \equiv & -{g^2\over 2}\sum_{p,s,t}
+A_\mu (s,p) A_\nu (t,-p) I^{\mu\nu}(p)_{st}
+ \nonumber \\
+&=& -{g^2\over 2}\sum_{p,s,t} A_\mu (s,p) A_\nu (t,-p)
+ [I_a^{(2)} + I_b^{(2)}]^{\mu\nu} _{st},
+\end{eqnarray}
+where
+\begin{eqnarray}
+[I_a^{(2)}]^{\mu\nu} _{st} & = &
+\int_{-\pi/a}^{\pi/a} {d^2 q\over (2\pi)^2}
+{\rm tr} \left\{[\partial_\mu S_F^{-1}(q+{p\over 2})\cdot S_F(q+p)]_{st}
+ \right. \nonumber \\
+& \times & \left.
+[\partial_\nu S_F^{-1}(q+{p\over 2})\cdot S_F(q)]_{ts}\right\}\times a^2
+\end{eqnarray}
+and
+\begin{equation}
+[I_b^{(2)}]^{\mu\nu} _{st} = -\delta_{st} \delta_{\mu\nu}
+\int_{-\pi/a}^{\pi/a} {d^2 q\over (2\pi)^2}
+{\rm tr} [\partial_\mu^2 S_F^{-1}(q)\cdot S_F(q)]_{ss} \times a^2
+\end{equation}
+with tr meaning trace over spinor indices.
+
+\subsection{Evaluation of Zero Mode Contributions}
+To evaluate $I^{\mu\nu}(p)$ we decompose it into two parts as
+\begin{equation}
+I^{\mu\nu}(p) = I^{\mu\nu}_0(p)+ [I^{\mu\nu}(p)-I^{\mu\nu}_0(p)]
+\end{equation}
+where $I^{\mu\nu}_0$ is the contribution of zero modes and
+$I^{\mu\nu}-I_0^{\mu\nu}$ is the remaining contribution.
+For $I_0^{\mu\nu}$ we replace the integrand of $I^{\mu\nu}$
+with that in the $a\rightarrow 0$ limit, and we obtain
+\begin{eqnarray}
+I^{\mu\nu}_0(p)_{st} & = &
+\sum_X \int_{-\nabla (q)\le 2m_0} {d^2 q\over (2\pi)^2}
+ \nonumber \\
+& \times &
+{\rm tr} \left[
+i\gamma_\mu (-i\gamma_\alpha (q+p)_\alpha a ) G_X^0(q+p)_{st} P_X
+ \right. \nonumber \\
+& \times &
+\left.
+i\gamma_\nu (-i\gamma_\beta (q+p)_\beta a ) G_X^0(q+p)_{ts} P_X]
+\right] \times a^2 ,
+\end{eqnarray}
+with $X=L$ for $|s|,|t| \approx 0$, or $X=R$ for $|s|,|t| \approx L$.
+The zero mode propagators $G_X^0$ are given by
+\begin{equation}
+G_X^0(q)_{st} = \lim_{a\rightarrow 0} G_X(q)_{st}
+= {1\over q^2 a^2 } F_X (s,t)
+\end{equation}
+where $ F_X(s,t) = F_X(t,s)$ and
+\widetext
+\begin{equation}
+F_L(s,t) = {m_0(4-m_0^2)\over 4 } \times \left\{
+\begin{array} {ll}
+ (1- m_0)^{s+t} & \mbox{\ for $s,t \ge 0$ } \\
+ & \\
+ (1- m_0)^s(1+m_0)^t & \mbox{\ for $s \ge 0$ and $t < 0$ } \\
+ & \\
+ (1+m_0) ^{s+t} & \mbox{\ for $s,t \le 0$ }
+\end{array} \right.
+\end{equation}
+\begin{equation}
+F_R(s,t) = {m_0(4-m_0^2)\over 4 } \times \left\{
+\begin{array} {ll}
+ (1- m_0)^{2L-s-t-2} & \mbox{\ for $s,t \ge 0$ } \\
+ & \\
+ (1- m_0)^{L-s-1} (1+m_0)^{-L-t-1} & \mbox{\ for $s \ge 0$ and $t < 0$ } \\
+ & \\
+ (1+m_0) ^{-2L-s-t-2} & \mbox{\ for $s,t \le 0$ }
+\end{array} \right.
+\end{equation}
+\narrowtext for the Kaplan's fermion with the domain wall mass terms, and
+\begin{mathletters}
+\begin{eqnarray}
+F_L(s,t) &=& m_0 (2-m_0) (1-m_0)^{s+t}
+ \\
+F_R(s,t) &=& m_0 (2-m_0) (1-m_0)^{2L-s-t}
+\end{eqnarray}
+\end{mathletters}
+for the Shamir's fermion with the constant mass terms and free boundaries.
+
+We evaluate $I^{\mu\nu}_0(p)$ in the $a\rightarrow 0$ limit.
+In this limit
+\begin{eqnarray}
+\displaystyle
+&\displaystyle \lim_{a\rightarrow 0}& \int_{-\nabla (q)\le 2m_0}
+{d^2 q\over (2\pi)^2}
+{\rm tr}[P_X\gamma_\mu\gamma_\alpha\gamma_\nu\gamma_\beta ]
+{(q+p)_\alpha q_\beta \over (q+p)^2 q^2}
+ \nonumber \\
+& = & \displaystyle
+ \int_{-\infty}^{\infty} {d^2 q\over (2\pi)^2}
+{\rm tr}[P_X\gamma_\mu\gamma_\alpha\gamma_\nu\gamma_\beta ]
+{(q+p)_\alpha q_\beta \over (q+p)^2 q^2}
+ \nonumber \\
+& = & \displaystyle
+{1\over 2\pi}\left[ \delta_X
+i\epsilon^{\mu\alpha}{p_\nu p_\mu\over p^2} +
+(\delta^{\mu\nu}-{p_\mu p_\nu\over p^2})-{\delta^{\mu\nu}\over 2}\right] ,
+\end{eqnarray}
+therefore we obtain
+\begin{eqnarray}
+\lim_{a\rightarrow 0} I^{\mu\nu}_0(p) & = &
+\sum_X {1\over 2\pi}[\delta_X i\epsilon^{\mu\alpha}{p_\nu p_\mu\over p^2} +
+(\delta^{\mu\nu}-{p_\mu p_\nu\over p^2})-{\delta^{\mu\nu}\over 2}]
+ \nonumber \\
+&\times & F_X(s,t)^2
+\end{eqnarray}
+where $\delta_L=1$ and $\delta_R=-1$.
+It is noted that $F_X$ satisfies
+\begin{equation}
+\sum_{t}F_X(s,t)^2 = F_X(s,s) , \qquad
+\sum_{s,t}F_X(s,t)^2 =1 .
+\label{sumf}
+\end{equation}
+
+\subsection{Evaluation of Remaining Contributions}
+We consider the remaining terms in $I^{\mu\nu}$.
+Since the combination $I^{\mu\nu}(p) - I^{\mu\nu}_0(p)$ is infra-red finite,
+we can change the integration variable from $q$ to $ q a$
+and take the $a\rightarrow 0$ limit in the integrand. Thus we obtain
+\begin{equation}
+\lim_{a\rightarrow 0} I^{\mu\nu}(p) - I^{\mu\nu}_0(p)
+ =I^{\mu\nu} (0) = {1\over 2\pi}\cdot
+[i \epsilon^{\mu\nu}\Gamma_{CS} +\delta^{\mu\nu} K]
+\end{equation}
+where
+\begin{eqnarray}
+\Gamma_{CS}(s,t)& = & {\epsilon^{\mu\nu}\over i}
+2\pi
+\int {d^2q\over (2\pi)^2} {\rm tr}\left\{ [\partial_\mu S_F^{-1}(q)S_F(q)]_{st}
+ \right. \nonumber \\
+& \times & \left.
+[\partial_\nu S_F^{-1}(q)S_F(q)]_{ts}\right\}
+\label{gcs}
+\end{eqnarray}
+and
+\begin{eqnarray}
+& \displaystyle K (s,t) = 2\pi
+\int {d^2q\over (2\pi)^2}\left[
+{\rm tr}\left\{ [\partial_\mu S_F^{-1}(q)S_F(q)]_{st}
+ \right. \right. \nonumber \\
+& \times \left. \left.
+[\partial_\mu S_F^{-1}(q)S_F(q)]_{ts}\right\}
+- \delta_{st}{\rm tr} [\partial_\mu^2 S_F^{-1}(q)S_F(q)]_{ss} \right] .
+\end{eqnarray}
+Here no summation over $\mu$, $\nu$ is implied.
+
+The parity-odd term $\Gamma_{CS}$ is the coefficient function of
+a 3-dimensional Chern-Simons term in the axial gauge\cite{Dis},
+which satisfies $\Gamma_{CS}(s,t)= - \Gamma_{CS}(t,s)$.
+It is easy to show that
+\begin{eqnarray}
+& \displaystyle \sum_t \Gamma_{CS}(s,t) =-{ \epsilon^{\mu\nu}\over i}
+\int {d^2q\over 2\pi} {\rm tr}\left\{ \partial_\mu S_F^{-1}(q)\partial_\nu
+S_F(q)\right\}_{ss}
+ \nonumber \\
+& = \displaystyle {\epsilon^{\mu\nu}\over i} \left[ \int {dq_\mu \over 2\pi}
+{\rm tr}\left\{ \partial_\mu S_F^{-1}(q)\cdot S_F(q)\right\}_{ss}
+\right]_{q_\nu =\epsilon}^\pi \nonumber
+\end{eqnarray}
+This would be zero if there were
+no infra-red singularities in $S_F$.
+However, because of the contribution from zero modes,
+$S_F$ is singular at $q=0$. Therefore
+\widetext
+\begin{eqnarray}
+\sum_t \Gamma_{CS}(s,t) & = & - \sum_t\Gamma_{CS}(t,s)
+ = \displaystyle
+4 \lim_{\epsilon\rightarrow 0} \left[ \int_{\epsilon}^{\pi/2}
+{dq_\mu\over 2\pi}\sum_X \delta_X
+[S_\nu (q) C_\mu (q) G_X^0 (q)]_{ss}\right]_{q_\nu =\epsilon}^{\pi /2}
+ \nonumber \\
+&=& \displaystyle
+-4 \sum_X \delta_X F_X(s,s)
+\lim_{\epsilon\rightarrow 0} \int_{\epsilon}^{\pi/2} {dq_\mu\over 2\pi}
+{\epsilon\over q_\mu^2 + \epsilon^2}
+ \nonumber \\
+& = & \displaystyle
+-\sum_X 2\delta_X
+{F_X(s,s)\over\pi} \left[\tan^{-1}{q\over\epsilon}\right]_{\epsilon}^{\pi/2}
+ \nonumber \\
+& = & \displaystyle
+-\sum_X {\delta_X\over 2} F_X(s,s) ,
+\label{sum}
+\end{eqnarray}
+\narrowtext where $F_X(s,t)$ is given in the previous subsection.
+
+Since $S_F$ becomes the Wilson fermion propagator with constant mass term
+for $1 \ll |s|,|t|, |L-s|, |L-t|$ with $s\cdot t > 0$ [see eq.(\ref{wil}) ],
+it becomes
+\begin{eqnarray} &
+\sum_{s,t}\Gamma_{CS}^{\mu\nu}(s,t)A_\mu(s,p) A_\mu(t,-p)
+\longrightarrow
+ \nonumber \\
+& -\epsilon^{\mu\nu} \int dp_3 A_\mu(p_3,p)p_3 A_\mu (-p_3,-p)
+\displaystyle \int {d^3 q\over (2\pi)^2}
+ \nonumber \\
+& \times
+{\rm tr}\left\{ [\partial_\mu S_F^{-1}\cdot S_F ]
+[\partial_3 S_F^{-1}\cdot S_F ] [\partial_\nu S_F^{-1}\cdot S_F ]
+\right\} ,
+\label{cst}
+\end{eqnarray}
+which coincides with the result of ref.\cite{CS}. This is a good check of our
+calculation. From Ref.\ \cite{CS} we obtain
+\begin{equation}
+= \epsilon^{\mu\nu} \int dp_3 A_\mu(p_3,p)p_3 A_\nu (-p_3,-p)
+\times \left\{
+\begin{array}{ll}
+\displaystyle 1 & \mbox{\quad for $+m_0$} \\
+ & \\
+0 & \mbox{\quad for $-m_0$}
+\end{array} .
+\right. \nonumber
+\end{equation}
+
+The parity-even term $K$ satisfies
+$K(s,t)=K(t,s)$ and
+\begin{eqnarray}
+ & \sum_{t}& K(s,t) = \sum_t K(t,s)
+ \nonumber \\
+& = & \displaystyle
+- \int {d^2 q\over (2\pi)^2}
+{\rm tr}\left\{
+[\partial_\mu S_F^{-1}\cdot\partial_\mu S_F]_{ss} + [\partial_\mu^2 S_F^{-1}
+\cdot S_F ]_{ss} \right\}
+ \nonumber \\
+ & = & \sum_X {1\over 2}\cdot F_X (s,s)
+\label{sumk}
+\end{eqnarray}
+The derivation of the last equality is similar to that of eq.(\ref{sum}).
+
+
+\subsection{Total Contributions}
+Combining the above contributions we finally obtain
+\widetext
+\begin{eqnarray}
+S_{eff}^{(2)} &=&
+-{g^2\over 4\pi} \sum_{s,t} \int d^2 x \left\{
+\sum_X F_X(s,t)^2
+[A_\mu(s,x)(\delta^{\mu\nu}-{\partial_\mu\partial_\nu \over \Box}) A_\nu (t,x)]
+ \right.
+ \nonumber \\
+&+&
+[K(s,t)- \sum_X {1\over 2}\cdot F_X(s,t)^2 ] A_\mu (s,x) A_\mu (t,x)
+ \nonumber \\
+ &+& \left.
+\sum_X i\delta_X F_X(s,t)^2 [{\partial_\mu\over \Box }
+A_\mu (s,x)\epsilon^{\alpha\nu}\partial_\alpha A_\nu (t,x) ]+
+i\Gamma_{CS}(s,t) \epsilon^{\mu\nu} A_\mu(s,x) A_\nu(t,x)
+\right\} .
+\label{eff}
+\end{eqnarray}
+\narrowtext
+This is the main result of this paper.
+It is noted that the above formula is valid for both the Kaplan's and
+the Shamir's methods.
+The following consequences can be drawn from eq.\ (\ref{eff}) above.
+
+The Parity-odd terms, which are proportional to $\epsilon^{\alpha\nu}$,
+are unambiguously defined, contrary to the case of the continuum regularization
+for anomaly free chiral gauge theories\cite{FS}
+which only regulates the parity even terms\cite{Neu,AK}.
+These parity-odd terms break gauge invariance in the 2-dimensional sense.
+
+For {\it anomalous} chiral Schwinger model,
+the parity-odd term with $X=R$ is localized around $s=0$
+and that for $X=L$ is localized around $s=L$.
+The effective action above for anomalous chiral Schwinger model via
+the Kaplan's method or the Shamir's variation is different from the one
+via the usual Wilson fermion in 2 dimensions\cite{chiral}:
+The term proportional to $\Gamma_{CS}$, which can not be evaluated analytically
+for $s$ dependent gauge fields, is special for chiral fermions
+from 3-dimensional theories, and the presence of this term prevents us from
+concluding whether the anomalous chiral Schwinger model can be consistently
+defined via the Kaplan's (Shamir's) method.
+
+For anomaly free cases such that $\sum_R g_R^2 = \sum_L g_L^2$,
+the parity-odd terms are exactly cancelled {\it locally} in $s$ space.
+Here $g_{R(L)}$ is the coupling constant of a fermion with positive
+(negative) $m_0$ which generate a right-handed (left-handed) zero mode
+around $s=0$. The simplest but non-trivial example is
+a Pythagorean case, $g_R=3, 4$ and $g_L = 5$\cite{Dis}.
+Even for these anomaly free cases,
+the longitudinal term, whose coefficient is $K-F^2/2$,
+remains non-zero in the effective action,
+so that gauge invariance in the {\it 2-dimensional} sense is
+violated.
+In this regard
+the form of the effective action via the Kaplan's
+(Shamir's) method is similar to
+the one via the usual Wilson fermion\cite{chiral}.
+
+Let us consider the effective action for $s$ independent gauge fields
+as in ref.\cite{Neu}.
+Since $\sum_{\mu ,\nu }\epsilon^{\mu\nu} A_\mu(x) A_\nu(x) = 0$
+for $s$ independent gauge fields, the Chern-Simons term vanishes.
+The other parity-odd term is cancelled between the two zero modes
+since $\sum_{X,s,t} \delta_X F_X(s,t)^2=0$.
+The longitudinal term also vanishes due to the identity
+\begin{equation}
+\sum_{t}[K(s,t)-{F_X(s,t)^2\over 2}] =
+\sum_{t}[{F_X(s,t)^2\over 2}-{F_X(s,t)^2\over 2}] = 0
+\end{equation}
+[see eqs.\ (\ref{sumf}) and (\ref{sumk})].
+Therefore the effective action becomes
+\begin{equation}
+S_{eff}^{(2)} =
+-2\times {g^2\over 4\pi} \int d^2 x
+[ A_\mu(x)(\delta^{\mu\nu}-{\partial_\mu\partial_\nu \over \Box}) A_\nu (x)].
+\end{equation}
+This effective action is transverse and thus gauge invariant
+in the 2-dimensional sense. Both zero modes around $s=0$ and $s=L$
+equally contribute so that a factor 2 appears in the above result.
+This is consistent with the general formula derived in
+ref.\cite{Neu2}.
+The anomalous chiral Schwinger model can not be simulated
+by the Kaplan's (Shamir's) method with the $s$-independent gauge fields,
+since the gauge fields see {\it both} of the zero modes so that
+it fails to reproduce the parity-odd term, expected to exist\cite{JR}
+
+\section{Anomalies in the Chiral Schwinger Model}
+\label{sec:anomaly}
+
+\subsection{Currents and their Divergence}
+
+From the effective action obtained in the previous section, we
+can calculate the vacuum expectation values of various currents
+in the presence of back-ground gauge fields.
+Let us define the fermion number current as
+\begin{equation}
+\langle J_\mu^g (s, x) \rangle
+= {\delta S_{eff}^{(2)} \over g\delta A_\mu (s, x) }
+\end{equation}
+where the index $g$ in the current explicitly shows the charge of the
+fermion.
+From eq. (\ref{eff}) we obtain
+\widetext
+\begin{eqnarray}
+ J_\mu^g(s,x) &=& i{g\over 4\pi}\sum_t
+ [ \sum_X \delta_X F_X(s,t)^2(\epsilon^{\alpha\nu}\partial_\mu
++\epsilon^{\alpha\mu}\partial_\nu ){\partial_\alpha\over \Box}A_\nu (t, x)
+-2\Gamma_{CS}\epsilon^{\mu\nu} A_\nu (t,x)]
+ \nonumber \\
+&-& {g\over 4\pi}\sum_t
+[2\sum_X F_X(s,t)^2
+(\delta^{\mu\nu}-{\partial_\mu\partial_\nu \over \Box}) A_\nu (t,x)
++
+(2 K(s,t)- \sum_X F_X(s,t)^2 ) A_\mu (t,x) ]
+ \nonumber \\
+& \equiv & J_\mu^{g,odd}+ J_\mu^{g,even}
+\label{current}
+\end{eqnarray}
+\narrowtext
+where $J_\mu^{g,odd}$ is a parity-odd current (the first two
+terms) and $J_\mu^{g,even}$ is a parity-even current (the last two
+terms). Hereafter
+all $J_\mu$ should be understood as vacuum expectation values,
+though $\langle \qquad\rangle$ is suppressed.
+From the fermion number current
+the gauge current for a fermion with charge $g$ is easily constructed as
+$ J_\mu^G (s,x) \equiv g J_\mu^g (s,x)$.
+
+Divergences of the parity-odd and parity-even currents become
+\begin{eqnarray}
+\partial_\mu J_\mu^{g,odd}(s,x)
+ &= & i {g\over 4\pi} \sum_t[\sum_X \delta_XF_X(s,t)^2- 2\Gamma_{CS}(s,t)]
+ \nonumber \\
+&\times & \epsilon^{\mu\nu} \partial_\mu A_\nu (t,x) ,
+\end{eqnarray}
+\begin{eqnarray}
+\partial_\mu J^\mu_{g,even}(s,x)
+ & = & {g\over 4\pi} \sum_t [\sum_X F_X(s,t)^2- 2K(s,t)]
+ \nonumber \\
+&\times & \partial_\mu A_\mu (t,x) .
+\end{eqnarray}
+
+\subsection{Gauge invariance}
+
+As mentioned in Sect.\ \ref{sec:model},
+the action in $A_3 = 0$ gauge is invariant
+under $s$ independent gauge transformation. This invariance implies
+$\sum_{s} \partial_\mu J_\mu^G (s,x) = 0$. This identity is satisfied in
+our calculation of the effective action, since
+\begin{eqnarray}
+ \sum_s & [\sum_X\delta_XF_X(s,t)^2- 2\Gamma_{CS}(s,t)]
+ \nonumber \\
+&= \sum_X \delta_X [F_X(t,t)-F_X(t,t)] =0
+ \label{sum0a}
+\end{eqnarray}
+\begin{eqnarray}
+ \sum_s & [\sum_X F_X(s,t)^2- 2 K(s,t)]
+ \nonumber \\
+&= \sum_X [F_X(t,t)-F_X(t,t)] =0
+\label{sum0b}
+\end{eqnarray}
+from eqs.(\ref{sumf},\ref{sum},\ref{sumk}).
+
+\subsection{Gauge Anomalies}
+The gauge anomaly for a fermion with a charge $g$, denoted $T_g$, is defined by
+$ T_g = g\partial_\mu J_\mu^{g,odd}$, and it becomes
+\begin{equation}
+T_g (s,x) = \sum_t g^2 C(s,t)\times T^0(t,x)
+\end{equation}
+where
+\begin{equation}
+T^0(t,x) =
+i{1\over 4\pi} \epsilon^{\mu\nu} \partial_\mu A_\nu (t,x)
+\end{equation}
+is the gauge anomaly of a {\it 2-dimensional} theory, and
+\begin{equation}
+C(s,t) = \sum_X \delta_XF_X(s,t)^2-2 \Gamma_{CS}(s,t)
+\end{equation}
+represents the spread of the gauge anomaly over the 3rd direction
+due to the spread of zero modes.
+This spread of the anomaly has been observed in a numerical
+computation\cite{Jan}.
+It is noted that the divergence of the gauge current $J_\mu^G$ also contains
+parity-even contributions, given by
+\begin{equation}
+\sum_t D(s,t)\times {g^2\over 4\pi} \partial_\mu A_\mu(t,x)
+\end{equation}
+where $ D(s,t) = \sum_X F_X(s,t)^2-2 K(s,t)$.
+
+The one-loop integral (\ref{gcs}) defining
+$\Gamma_{CS}$ is
+too complicated to calculate analytically.
+For $t$-independent gauge fields $A_\mu (t,x) = A_\mu (x)$
+there is a considerable simplification and
+we obtain
+\begin{equation}
+T_g (s,x) = g^2C(s)\times T^0(x)
+\end{equation}
+where
+\begin{equation}
+T^0(x)= i{1\over 4\pi} \epsilon^{\mu\nu} \partial_\mu A_\nu (x)
+\end{equation}
+and
+\widetext
+\begin{eqnarray}
+C(s) &=& \sum_t C(s,t) = 2 \sum_X \delta_X F_X(s,s)
+ \nonumber \\
+&=& {m_0(4-m_0^2)\over 2}
+\times \left\{
+\begin{array}{ll}
+\left[ (1-m_0)^{2s}-(1-m_0)^{2(L-s-1)} \right] & \mbox{\ for $s \ge 0$} \\
+ & \\
+\left[ (1+m_0)^{2s}-(1+m_0)^{-2(L+s+1)}\right] & \mbox{\ for $s \le 0$}
+\end{array}
+\right. .
+\end{eqnarray}
+\narrowtext
+for the Kaplan's method. We plot $C(s)$ as a function of $s$
+at $m_0= 0.1$ and 0.5 in Fig.\ref{anomalyK}.
+For the Shamir's method, we obtain
+\begin{equation}
+C(s) = 2m_0(2-m_0)\cdot
+\left[ (1-m_0)^{2s}-(1-m_0)^{2(L-s)} \right]
+\end{equation}
+and plot this in Fig.\ref{anomalyS}.
+It is noted that there is no parity-even contribution in $\partial_\mu J_\mu^G$
+since $\sum_t D(s,t) = 0$ in this case.
+
+\subsection{Chern-Simons Current}
+From the 3-dimensional point of view, the gauge anomaly should be cancelled
+in such a way that $T_g
++ \partial_3 gJ_3^{CS}(s,x)=0$\cite{KP,CS}, where $J_3^{CS}$ is the
+third component of the Chern-Simons current for the 3-dimensional
+vector gauge theory. With our gauge fixing the effective action does not
+depends on $A_3$, and it is difficult to calculate $J_3^{CS}$ analytically
+except in the region away from domain-walls\cite{CS}.
+However, for $t$-independent gauge fields,
+we can obtain the Chern-Simons current everywhere via the relation
+$\partial_3 gJ^3_{g,odd}(s,x) = -T_g$, which becomes
+\begin{equation}
+J_3^{CS}(s+{1\over 2},x)-J_3^{CS}(s-{1\over 2},x) = g^2C(s)\times T^0 (x).
+\end{equation}
+Taking $J_3^{CS}(s+{1\over 2},x)= g^2 I(s)\cdot T^0 (x)$, we obtain
+\begin{equation}
+I(s+{1\over 2})-I(s-{1\over 2}) = C(s) .
+\end{equation}
+We have to solve this equation with the boundary condition
+$ I(s)\rightarrow -2$ as $s\rightarrow +\infty$\cite{CS}.
+For a finite $s$ space $s\rightarrow +\infty$ means
+$ 1\ll s \ll L$.
+
+For the Kaplan's method we obtain
+\widetext
+\begin{equation}
+I(s-{1\over 2})=\left\{
+\begin{array}{ll}
+\displaystyle
+{2+m_0\over 2}\cdot [(1-m_0)^{2s}+(1-m_0)^{2(L-s)}]-2 & \mbox{\quad
+$0\le s\le L$} \\
+ & \\
+\displaystyle -{2-m_0\over 2}\cdot
+[(1+m_0)^{2s}+(1+m_0)^{-2(L+s)}] & \mbox{\quad $ -L\le s\le 0$}
+\end{array}
+\right. .
+\end{equation}
+\narrowtext
+This solution automatically satisfies the other boundary condition
+that $ I(s)\rightarrow 0$ as $\rightarrow -\infty$\cite{CS}.
+Again $\rightarrow -\infty$ means $ 1\ll -s \ll L$ for a finite $s$ space.
+We plot $I(s)$ as a function of $s$ at $m_0=0.1$ and 0.5 in Fig.\ \ref{CSK}.
+For the Shamir's method we obtain
+\begin{eqnarray}
+I(s-{1\over 2}) &= 2[(1-m_0)^{2s}+(1-m_0)^{2(L-s+1)}]-2
+ \nonumber \\
+ & \qquad \qquad \mbox{for $0\le s\le L-1$},
+\end{eqnarray}
+which is plotted in Fig.\ \ref{CSS}.
+
+\subsection{Pythagorean Chiral Schwinger Model and
+Anomaly in Fermion Number Current}
+
+Let us consider the Pythagorean chiral Schwinger model\cite{Dis}.
+In this model there are
+two right-handed fermions with charges $g_1$ and $g_2$, and
+one left-handed fermion with charge $g_3$.
+Formulation of this model via the Kaplan's method has already been discussed
+in ref.\cite{KP,Jan,Dis}
+( an extension to the Shamir's method is straightforward ).
+We assign $+m_0$ for fermions with charge $g_1$ and $g_2$, and
+$-m_0$ for a fermion with charge $g_3$. The value of $|m_0|$ should
+be equal for all fermions, as will be seen below.
+
+The theory has a $U(1)^3$ symmetry\cite{Dis} corresponding to independent phase
+rotations of three fermions. The corresponding currents are
+\begin{equation}
+\left\{
+\begin{array}{lll}
+J_\mu^G &=& g_1 J_\mu^{g_1}+g_2 J_\mu^{g_2}+g_3 J_\mu^{g_3} \\
+ & & \\
+J_\mu^R &=& g_2 J_\mu^{g_1}-g_1 J_\mu^{g_2} \\
+ & & \\
+J_\mu^F &=& J_\mu^{g_1}+J_\mu^{g_2}+J_\mu^{g_3}
+\end{array}
+\right.
+\end{equation}
+The first one is the gauge current, whose divergence becomes
+\begin{equation}
+\partial_\mu J_\mu^G(s,x) = (g_1^2+g_2^2-g_3^2)\times \sum_t C(s,t)\cdot
+ T^0(t,x).
+\end{equation}
+Therefore, if $g_1^2+g_2^2 = g_3^2$ (Pythagorean relation) is satisfied
+and if all fermions
+have the same value of $|m_0|$ to give the same $C(s,t)$,
+this current is conserved and there is no gauge anomaly for any
+background gauge fields.
+The second current is non-anomalous, since
+\begin{equation}
+\partial_\mu J_\mu^R (s, x)=(g_2\cdot g_1 - g_1\cdot g_2)\sum_t
+C(s,t)\cdot T^0(t,x) = 0 .
+\end{equation}
+
+The third current, which corresponds to the fermion number of the theory,
+is anomalous, since
+\begin{equation}
+\partial_\mu J_\mu^F (s, x)=( g_1 + g_2 - g_3)\times\sum_t C(s,t) \cdot
+T^0(t,x) .
+\end{equation}
+The Kaplan's method as well as the Shamir's one
+successfully give a non-zero divergence for the fermion number current, though
+the coefficient $C(s,t)$ has a finite width.
+For $t$-independent gauge fields, this anomaly becomes
+\begin{equation}
+( g_1 + g_2 - g_3)\cdot C(s)\cdot T^0(x)
+\end{equation}
+where $C(s)$ is almost localized at $s=0$ and at $s=L$ as seen in
+Fig.\ref{anomalyK} and Fig.\ref{anomalyS}.
+Since the fermion number is conserved in the 3-dimensional
+theory, the third component of the fermion number current should satisfy
+$\partial_3 J_3^F + ( g_1 + g_2 - g_3)\cdot C(s)\cdot T^0(x) = 0$\cite{Dis}.
+Therefore we obtain
+\begin{equation}
+J_3^F(s,x)= (g_1+g_2-g_3)\cdot I(s)\cdot T^0(x) .
+\end{equation}
+
+\section{conclusions}
+\label{sec:concl}
+In this paper we have formulated a lattice perturbative expansion for
+the Kaplan's chiral fermion theories, extending the suggestion
+by Narayanan and Neuberger\cite{Neu}.
+Applying our perturbative technique to the chiral Schwinger model
+formulated via the Kaplan's or the Shamir's method,
+we have calculates the fermion one-loop effective action for gauge fields.
+The effective action contains parity-odd terms and
+longitudinal terms, both of which break 2-dimensional gauge invariance,
+and the anomaly of the gauge current is obtained from the effective action.
+The gauge anomaly is calculable in the Kaplan's (Shamir's)
+method if the perturbative expansion is carefully formulated.
+For the anomaly-free Pythagorean chiral Schwinger model,
+the fermion number current is anomalous. To obtain this anomaly
+the fermion number current should not be summed over $s$, in contrast
+to the case of the continuum calculation\cite{AK}, where
+the anomaly comes from an infinite summation over $s$.
+
+The main conclusions drawn from the results are as follows.
+
+\begin{enumerate}
+\item
+Anomaly of the fermion number current is shown to be
+non-zero in this method, though the current flows off walls
+into the extra dimension.
+Since the current is external we feel that this
+does not affect the dynamics of the model
+and therefore does not spoil the 2-dimensional nature of the chiral
+zero mode, contrary to the suggestion of Ref.\cite{Dis}.
+The 3-dimensional nature of the Kaplan's (Shamir's)
+formulation manifests itself only in the
+non-conservation of the fermion number, which is expected to occur in Nature.
+
+\item Two-dimensional gauge invariance at low energy
+can not be assured by the Kaplan's (Shamir's) method,
+except for $s$-independent
+gauge fields, even for anomaly-free cases.
+This is similar to the situation with
+lattice chiral gauge theories formulated with the ordinary Wilson mass
+term\cite{chiral}.
+In this point the Kaplan's (Shamir's) method does not seem better than the
+conventional approaches.
+At this moment it is not clear whether this violation of gauge invariance
+spoils the whole program of this method. In particular the effects of the
+longitudinal component of gauge fields has to be analyzed further.
+
+\item If the theory is anomaly free and gauge fields are
+$s$-independent\cite{Neu}, the gauge invariance as a 2-dimensional theory
+can be maintained. However, the gauge fields feel both of the zero modes
+even in the $L\rightarrow \infty$ limit, and the fermion loop contribution
+to the effective action is twice as large as the one expected from a single
+chiral fermion. Therefore we have to take a square-root of
+the fermion determinant
+to obtain the correct contribution.
+For fermion quantities such as the fermion number current, however,
+it seems possible
+to separate the contribution of the chiral zero mode at $s=0$ from
+that of the anti-chiral zero mode at $s=L$, as seen in the previous section.
+\end{enumerate}
+
+Perturbative calculations performed in
+this paper can be extended to 4+1 dimensional theories. Of course
+actual calculations become much more complicated and difficult
+because of severe ultra-violet divergences in 4+1 dimensions than
+in 2+1 dimensions.
+Work in this direction is in progress.
+
+\acknowledgements
+We would like to think Prof. Ukawa for discussions and the careful reading of
+the manuscript.
+
+After finishing this work, a new paper by Narayanan and Neuberger\cite{Neu3}
+appeared. In the paper
+the gauge anomaly for the chiral Schwinger model was calculated
+semi-analytically via the overlap formula of ref.\cite{Neu2}.
+
+
+\begin{references}
+\bibitem{KP}D.\ B.\ Kaplan, Phys.\ Lett.\ {\bf B288}, 342 (1992).
+
+\bibitem{Jan}K.\ Jansen, Phys.\ Lett.\ {\bf B288}, 348 (1992).
+
+\bibitem{CS}M.\ F.\ L.\ Golterman, K.\ Jansen, and D.\ B.\ Kaplan,
+Phys.\ Lett.\ {\bf B301}, 219 (1993).
+
+\bibitem{FS}S.\ A.\ Frolov and A.\ A.\ Slavnov,
+Phys.\ Lett.\ {\bf B309}, 344 (1993).
+
+\bibitem{Neu}R.\ Narayanan and H.\ Neuberger,
+Phys.\ Lett.\ {\bf B302}, 62 (1993).
+
+\bibitem{Neu2}R.\ Narayanan and H.\ Neuberger, RU-93-25,
+Rutgers University preprint, July 1993.
+
+\bibitem{AK}S.\ Aoki and Y.\ Kikukawa, UTHEP-258/KUNS-1204,
+University of Tsukuba preprint, June 1993.
+
+\bibitem{Alt}C.\ P.\ Korthals-Altes, S.\ Nicolis and J.\ Prades,
+CPT-93/P.2920, Center de Physique Th\'{e}orique preprint, June 1993.
+
+\bibitem{Dis}J.\ Distler and S.-J.\ Rey, PUPT-1386/NSF-ITP-93-66/SNUTP 93-27,
+Princeton University preprint, May 1993.
+
+\bibitem{Sham}Y.\ Shamir, WIS-93/20/FEB-PH, Weizmann Institute preprint,
+February 1993.
+
+\bibitem{chiral}S.\ Aoki, Phys.\ Rev\ Lett.\ {\bf 60} 2109 (1988);
+K.\ Funakubo and T.\ Kashiwa,{\it ibid} {\bf 60} 2113 (1988);
+T.\ D.\ Kieu, D.\ Sen, S.-S.\ Xue, {\it ibid} {\bf 60} 2117 (1988);
+S.\ Aoki, Phys.\ Rev.\ {\bf D38} 618 (1988).
+
+\bibitem{JR}R.\ Jackiw and R.\ Rajaraman,
+Phys.\ Rev\ Lett.\ {\bf 54} 1219 (1985).
+
+\bibitem{Neu3}R.\ Narayanan and H.\ Neuberger, RU-93-34,
+Rutgers University preprint, August 1993.
+
+\end{references}
+
+\newpage
+
+\begin{figure}
+\caption{ Two zero modes $u_L$ and $u_R$
+as a function of $s$ at
+$m_0=0.1$ and 0.5 for $p_1=p_2=0$. We take $L=100$.}
+\label{zero}
+\end{figure}
+
+\begin{figure}
+\caption{ The coefficient of the anomaly $C(s)$
+for the Kaplan's method as a function of $s$
+at $m_0=0.1$ and 0.5 for $L=100$.}
+\label{anomalyK}
+\end{figure}
+
+\begin{figure}
+\caption{ The coefficient of the anomaly $C(s)$
+for the Shamir's method
+as a function of $s$ at $m_0=0.1$ and 0.5 for $L=100$.}
+\label{anomalyS}
+\end{figure}
+
+\begin{figure}
+\caption{The coefficient of the Chern-Simons current $I(s)$
+for the Kaplan's method as a function of $s$
+at $m_0=0.1$ and 0.5 for $L=100$.}
+\label{CSK}
+\end{figure}
+
+\begin{figure}
+\caption{ The coefficient of the Chern-Simons current $I(s)$
+for the Shamir's method as a function of $s$
+at $m_0=0.1$ and 0.5 for $L=100$.}
+\label{CSS}
+\end{figure}
+
+\end{document}
+\bye
diff --git a/support/hypertex/tanmoy/examples/Anomalkap.toc b/support/hypertex/tanmoy/examples/Anomalkap.toc
new file mode 100644
index 0000000000..f1c82fd707
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/Anomalkap.toc
@@ -0,0 +1,18 @@
+\contentsline {section}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {i}}{\hbox {\hskip 1pt\relax \uppercase {i}}}\hskip -1pt\relax }Introduction}{3}
+\contentsline {section}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {ii}}{\hbox {\hskip 1pt\relax \uppercase {ii}}}\hskip -1pt\relax }Action, Fermion Propagator and Chiral Zero Modes}{5}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{A}{\hbox {\hskip 1pt\relax A}}\hskip -1pt\relax }Lattice Action}{5}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{B}{\hbox {\hskip 1pt\relax B}}\hskip -1pt\relax }Chiral Zero Modes}{7}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{C}{\hbox {\hskip 1pt\relax C}}\hskip -1pt\relax }Fermion Propagator and Zero Modes}{8}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{D}{\hbox {\hskip 1pt\relax D}}\hskip -1pt\relax }Fermion Feynman Rules }{10}
+\contentsline {section}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {iii}}{\hbox {\hskip 1pt\relax \uppercase {iii}}}\hskip -1pt\relax }Perturbative Calculations for the Chiral Schwinger Model}{11}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{A@}{\hbox {\hskip 1pt\relax A}}\hskip -1pt\relax }Effective Action at Fermion One-Loop}{12}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{B@}{\hbox {\hskip 1pt\relax B}}\hskip -1pt\relax }Evaluation of Zero Mode Contributions}{12}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{C@}{\hbox {\hskip 1pt\relax C}}\hskip -1pt\relax }Evaluation of Remaining Contributions}{14}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{D@}{\hbox {\hskip 1pt\relax D}}\hskip -1pt\relax }Total Contributions}{16}
+\contentsline {section}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {iv}}{\hbox {\hskip 1pt\relax \uppercase {iv}}}\hskip -1pt\relax }Anomalies in the Chiral Schwinger Model}{17}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{A@@}{\hbox {\hskip 1pt\relax A}}\hskip -1pt\relax }Currents and their Divergence}{17}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{B@@}{\hbox {\hskip 1pt\relax B}}\hskip -1pt\relax }Gauge invariance}{18}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{C@@}{\hbox {\hskip 1pt\relax C}}\hskip -1pt\relax }Gauge Anomalies}{19}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{D@@}{\hbox {\hskip 1pt\relax D}}\hskip -1pt\relax }Chern-Simons Current}{20}
+\contentsline {subsection}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{subsection}{E}{\hbox {\hskip 1pt\relax E}}\hskip -1pt\relax }Pythagorean Chiral Schwinger Model and Anomaly in Fermion Number Current}{21}
+\contentsline {section}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{\uppercase {v}}{\hbox {\hskip 1pt\relax \uppercase {v}}}\hskip -1pt\relax }conclusions}{23}
diff --git a/support/hypertex/tanmoy/examples/README b/support/hypertex/tanmoy/examples/README
new file mode 120000
index 0000000000..59a23c461d
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/README
@@ -0,0 +1 @@
+../README \ No newline at end of file
diff --git a/support/hypertex/tanmoy/examples/ambjorn.aux b/support/hypertex/tanmoy/examples/ambjorn.aux
new file mode 100644
index 0000000000..56ee1cd5e4
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/ambjorn.aux
@@ -0,0 +1,30 @@
+\relax
+\citation{bcm}
+\citation{mp}
+\citation{bcm}
+\citation{bcm}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{1}{\hbox {\hskip 1pt\relax 1}}\hskip -1pt\relax }Introduction}{3}}
+\newlabel{*1}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{1}{1}}{3}}
+\newlabel{*2}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{2}{2}}{3}}
+\newlabel{*3}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{3}{3}}{3}}
+\newlabel{*4}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{4}{4}}{3}}
+\citation{ppf}
+\citation{parisi,kp,smm}
+\@writefile{lot}{\string\contentsline\space {table}{\string\numberline\space {1}{\ignorespaces Statistics collected at various $\beta $. In all measurements $\lambda = 10$}}{4}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{2}{\hbox {\hskip 1pt\relax 2}}\hskip -1pt\relax }Numerical method}{4}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{3}{\hbox {\hskip 1pt\relax 3}}\hskip -1pt\relax }Scaling of the string tension}{5}}
+\newlabel{*5}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{5}{5}}{5}}
+\newlabel{*6}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{6}{6}}{5}}
+\newlabel{*7}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{7}{7}}{5}}
+\newlabel{*7a}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{8}{8}}{5}}
+\citation{gutbrod}
+\citation{bcm}
+\newlabel{*8}{{\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{equation}{9}{9}}{6}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {\relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{4}{\hbox {\hskip 1pt\relax 4}}\hskip -1pt\relax }Conclusions}{6}}
+\bibcite{bcm}{1}
+\bibcite{mp}{2}
+\bibcite{parisi}{3}
+\bibcite{kp}{4}
+\bibcite{smm}{5}
+\bibcite{ppf}{6}
+\bibcite{gutbrod}{7}
diff --git a/support/hypertex/tanmoy/examples/ambjorn.dvi b/support/hypertex/tanmoy/examples/ambjorn.dvi
new file mode 100644
index 0000000000..595b217744
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/ambjorn.dvi
Binary files differ
diff --git a/support/hypertex/tanmoy/examples/ambjorn.hrf b/support/hypertex/tanmoy/examples/ambjorn.hrf
new file mode 100644
index 0000000000..659cbc3425
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/ambjorn.hrf
@@ -0,0 +1,36 @@
+\def \hyperj@nk {{}{page}{1}}
+\def \hyperj@nk {{}{page}{2}}
+\def \hypernoname {{}{section}{1}}
+\def \hypernoname {{}{equation}{1}}
+\def \hypernoname {{}{equation}{2}}
+\def \hypernoname {{}{equation}{3}}
+\def \hypernoname {{}{equation}{4}}
+\def \hyperj@nk {{}{page}{3}}
+\def \hypernoname {{}{section}{2}}
+\def \hypernoname {{}{table}{1}}
+\def \hypernoname {{}{section}{3}}
+\def \hyperj@nk {{}{page}{4}}
+\def \hypernoname {{}{equation}{5}}
+\def \hypernoname {{}{equation}{6}}
+\def \hypernoname {{}{equation}{7}}
+\def \hypernoname {{}{equation}{8}}
+\def \hyperj@nk {{}{page}{5}}
+\def \hypernoname {{}{equation}{9}}
+\def \hypernoname {{}{footnote}{1}}
+\def \hypernoname {{}{section}{4}}
+\def \hyperj@nk {{}{page}{6}}
+\def \hypernoname {{}{enumiv}{1}}
+\def \hypernoname {{}{reference}{1}}
+\def \hypernoname {{}{enumiv}{2}}
+\def \hypernoname {{}{reference}{2}}
+\def \hypernoname {{}{enumiv}{3}}
+\def \hypernoname {{}{reference}{3}}
+\def \hypernoname {{}{enumiv}{4}}
+\def \hypernoname {{}{reference}{4}}
+\def \hypernoname {{}{enumiv}{5}}
+\def \hypernoname {{}{reference}{5}}
+\def \hypernoname {{}{enumiv}{6}}
+\def \hypernoname {{}{reference}{6}}
+\def \hypernoname {{}{enumiv}{7}}
+\def \hypernoname {{}{reference}{7}}
+\def \hyperj@nk {{}{page}{7}}
diff --git a/support/hypertex/tanmoy/examples/ambjorn.log b/support/hypertex/tanmoy/examples/ambjorn.log
new file mode 100644
index 0000000000..6df6af7e69
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/ambjorn.log
@@ -0,0 +1,41 @@
+This is TeX, C Version 3.141 (format=lplain 93.1.26) 6 JUL 1994 17:16
+**ambjorn
+(ambjorn.tex
+LaTeX Version 2.09 <25 March 1992>
+(/usr/local/lib/tex/inputs/hypertex/lhyper.tex
+(/usr/local/lib/tex/inputs/hypertex/hyperbasics.tex
+\hyperf@le=\read1
+ (ambjorn.hrf)
+\hyperf@le=\write3
+\hypert@ks=\toks11
+)
+\hyper@inputcheck=\read2
+)
+(/usr/local/lib/tex/inputs/LaTeX/sty/article.sty
+Standard Document Style `article' <14 Jan 92>.
+(/usr/local/lib/tex/inputs/LaTeX/sty/art12.sty)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+)
+(/usr/local/lib/tex/inputs/hypertex/article.hty) (ambjorn.aux) [1
+
+]
+(ambjorn.toc)
+\tf@toc=\write4
+ [2] [3] [4] [5] [6] [7] (ambjorn.aux) )
+Here is how much of TeX's memory you used:
+ 324 strings out of 11979
+ 3418 string characters out of 87164
+ 35152 words of memory out of 262141
+ 2258 multiletter control sequences out of 9500
+ 18996 words of font info for 72 fonts, out of 100000 for 255
+ 14 hyphenation exceptions out of 607
+ 15i,8n,17p,272b,220s stack positions out of 300i,40n,60p,3000b,4000s
+
+Output written on ambjorn.dvi (7 pages, 20296 bytes).
diff --git a/support/hypertex/tanmoy/examples/ambjorn.tex b/support/hypertex/tanmoy/examples/ambjorn.tex
new file mode 100644
index 0000000000..9ddcdea665
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/ambjorn.tex
@@ -0,0 +1,383 @@
+%Paper: hep-lat/9405022
+%From: AMBJORN@nbivax.nbi.dk
+%Date: Wed, 25 May 1994 15:01:51 +0200
+\input lhyper
+\documentstyle[12pt]{article}
+\textwidth 150mm
+\textheight 235mm
+\newcommand{\rf}[1]{(\ref{#1})}
+%\newcommand{\beq}{\begin{equation}}
+%\newcommand{\eeq}{\end{equation}}
+\newcommand{\bea}{\begin{eqnarray}}
+\newcommand{\eea}{\end{eqnarray}}
+\newcommand{\g}{\gamma}
+\renewcommand{\l}{\lambda}
+\renewcommand{\b}{\beta}
+\renewcommand{\a}{\alpha}
+\newcommand{\n}{\nu}
+\newcommand{\m}{\mu}
+\newcommand{\th}{\theta}
+\newcommand{\ep}{\varepsilon}
+\newcommand{\om}{\omega}
+\newcommand{\sg}{\sigma}
+\newcommand{\k}{\kappa}
+\newcommand{\vph}{\varphi}
+\newcommand{\oh}{\frac{1}{2}}
+\newcommand{\oq}{\frac{1}{4}}
+\newcommand{\dt}{\triangle t}
+\newcommand{\fdt}{\frac{1}{\triangle t^2}}
+\newcommand{\dg}{\dagger}
+\newcommand{\non}{\nonumber \\}
+\newcommand{\tr}{{\rm Tr}\;}
+\newcommand{\ra}{\right\rangle}
+\newcommand{\la}{\left\langle}
+\newcommand{\sgn}{{\rm sgn}}
+
+\newcommand{\cD}{{\cal D}}
+\newcommand{\cS}{{\cal S}}
+\newcommand{\cM}{{\cal M}}
+\newcommand{\cK}{{\cal K}}
+\newcommand{\cT}{{\cal T}}
+\newcommand{\cN}{{\cal N}}
+\newcommand{\cL}{{\cal L}}
+\newcommand{\cO}{{\cal O}}
+\newcommand{\cR}{{\cal R}}
+%
+\newcommand{\noi}{\noindent}
+\newcommand{\no}{\nonumber}
+\newcommand{\Vqq}{V_{q\bar{q}}}
+%
+\def\void{}
+%\def\labelmark{\marginpar{\small\labelname}}
+\def\labelmark{}
+
+\newenvironment{formula}[1]{\def\labelname{#1}
+\ifx\void\labelname\def\junk{\begin{displaymath}}
+\else\def\junk{\begin{equation}\label{\labelname}}\fi\junk}%
+{\ifx\void\labelname\def\junk{\end{displaymath}}
+\else\def\junk{\end{equation}}\fi\junk\labelmark\def\labelname{}}
+
+\newenvironment{formulas}[1]{\def\labelname{#1}
+\ifx\void\labelname\def\junk{\begin{displaymath}\begin{array}{lll}}
+\else\def\junk{\begin{equation}\label{\labelname}\left.
+\begin{array}{lll}}\fi\def\arraystretch{1.5}\junk}%
+{\ifx\void\labelname\def\junk{\end{array}\end{displaymath}}
+\else\def\junk{\end{array}\right.\end{equation}}
+\fi\junk\labelmark\def\labelname{}\def\junk{}
+\def\arraystretch{1}}
+
+\newcommand{\beq}{\begin{formula}}
+\newcommand{\eeq}{\end{formula}}
+\newcommand{\beqv}{\begin{formula}{}}
+
+\begin{document}
+\topmargin 0pt
+\oddsidemargin 5mm
+\headheight 0pt
+\headsep 0pt
+\topskip 9mm
+
+\hfill NBI-HE-94-30
+
+\hfill March 1994
+
+\begin{center}
+\vspace{24pt}
+{\large \bf Scaling with a modified Wilson action which suppresses\\
+ Z$_2$ artifacts in SU(2) lattice gauge theories}
+
+\vspace{24pt}
+
+{\sl J. Ambj\o rn } and {\sl G. Thorleifsson}
+
+\vspace{6pt}
+
+ The Niels Bohr Institute\\
+Blegdamsvej 17, DK-2100 Copenhagen \O , Denmark\\
+
+
+\end{center}
+
+\vspace{24pt}
+
+\addtolength{\baselineskip}{0.20\baselineskip}
+\vfill
+
+\begin{center}
+{\bf Abstract}
+\end{center}
+
+\vspace{12pt}
+
+\noindent
+A modified Wilson action which suppresses plaquettes which take
+negative values is used to study the scaling behavior of the
+string tension. The use of the $\b_E$ scheme gives good agreement
+with asymptotic two loop results.
+
+
+\vfill
+
+\newpage
+\tableofcontents
+\newpage
+
+
+\section{Introduction}
+The simplest and most popular choice of a gauge lattice action is
+the one proposed by Wilson, which for the group $SU(2)$ reads:
+\beq{*1}
+S_W (U_l) = \b \sum_{\Box} (1 -\oh \tr U_\Box ),
+\eeq
+where $\b = 4/g^2$, $U_l \in SU(2)$ is the link variable
+defined on the link $l \equiv (x,\m)$, while $\Box \equiv (x,\m\n)$
+refers to the location and orientation of the corresponding plaquette.
+$U_\Box$ is the standard plaquette variable:
+\beq{*2}
+U_\Box \equiv U_{x,\m\n} = U_{x,\m}U_{x+\m,\n}U^\dg_{x+\n,\m}U^\dg_{x,\n}.
+\eeq
+
+In any Monte Carlo simulation the crucial question is whether the
+field configurations generated provide an adequate representation
+of the continuum physics. The naive continuum limit can only
+be obtained for $\oh \tr U_\Box \approx 1$. Especially
+any lattice configurations which locally have some $U_\Box$'s where
+$\oh \tr U_\Box \approx -1$ are lattice artifacts which a priori
+have nothing to do with continuum configurations. A complete suppression
+of such configurations should not change any continuum physics. For
+the values of $\b$ where one performs the Monte
+Carlo simulations such local $Z_2$ fluctuations are not at all rare if
+$S_W$ is used. It is thus very important to make sure that these fluctuations
+have no impact on continuum observables. The easiest way to do so is to
+modify the lattice action in such a way that these small-scale fluctuations
+are suppressed, without influencing plaquettes where $\tr U_\Box > 0$.
+This can be done by modifying the Wilson action as follows \cite{bcm}:
+\beq{*3}
+S=S_W+S_\l,
+\eeq
+where $S_W$ is the standard Wilson action \rf{*1}, while $S_\l$ is
+\beq{*4}
+S_\l = \l \sum_{\Box} [1-\sgn( \tr U_\Box)].
+\eeq
+
+The action \rf{*3} was studied for $\l =\infty$ in \cite{mp} while
+the phase structure in the $(\b,\l)$ plane was studied in \cite{bcm}.
+For a fixed $\l$ one would expect the same continuum limit for
+$\b \to \infty$ and also the same identification $\b = 4/g^2$.
+However, as shown in \cite{bcm} there is a marked difference
+between, say, Creutz ratios, measured for $\l =0$ (the Wilson action)
+and for $\l =0.5$ in the case of $\b=2.5$.
+One would expect the difference to be even more pronounced with increasing
+$\l$. This illustrates that plaquettes with negative values may
+play an important role for the range of $\b$'s where the scaling of
+pure $SU(2)$ lattice gauge theories is usually studied, and one could
+be worried about the relation to continuum physics. The fact that one gets
+acceptable agreement with continuum scaling relations could be fortuitous
+since one would expect the action $S$ to reproduce continuum physics
+better for large $\l$. One purpose of this article is to show that
+we indeed get the correct scaling relations for large $\l$ and that there
+is no reason to expect the plaquettes with negative values which appear
+in the Wilson action to play any important role for $\b \geq 2.2$.
+Another purpose is to test whether the $\l$ modification of the action
+may improve the approach to scaling for the reasons mentioned above.
+
+\section{Numerical method}
+
+The numerical simulations were performed using a standard
+Metropolis algorithm to update the gauge fields, combined
+with an overrelaxation algorithm to
+decrease the autocorrelations. For every Metropolis sweep
+we performed 4 overrelaxation steps.
+Lattice size
+$12^4$ with periodic boundary conditions was used and we
+measured
+all Wilson loops up to the size $6 \times 6$.
+In order to improve the statistics we modified the
+configurations using the Parisi trick
+\cite{ppf} before measuring. Unlike in the case of
+$\lambda = 0$ the integration involved in the Parisi trick
+had to be performed numerically and was thus costly in
+computer time. But the gain in the statistics did more than
+compensate for that.
+
+The choice of parameters was $\lambda = 10$, which was
+sufficient to suppress all negative plaquettes, and
+$\beta \in [1.0,2.5]$.
+We found a scaling window for $\beta \in
+[1.5,1.9]$ and concentrated the simulations in
+that interval. Usually 1000 sweeps where used for
+thermalization and the number of sweeps used
+for measuring, for various $\beta$,
+is shown in table 1. Measurements were performed
+every fifth sweep and the errors were estimated by
+using the jackknife method.
+
+\begin{table}
+\begin{center}
+\begin{tabular}{c|c|c}
+$\beta$ & No. of sweeps & No. of measurements \\ \hline
+1.5 & 55250 & 11050 \\
+1.6 & 65250 & 13050 \\
+1.7 & 63750 & 12750 \\
+1.8 & 88750 & 17750 \\
+1.9 & 45000 & 9000
+
+
+
+\end{tabular}
+\caption{Statistics collected at various $\beta$. In all measurements
+$\lambda = 10$}
+\end{center}
+\end{table}
+
+
+
+
+
+\section{Scaling of the string tension}
+The $\b$-values in the scaling window are even smaller
+than the ones used for the standard Wilson action. If one wants to
+test scaling by comparing with the perturbative two-loop result
+using the identification $\b = 4/g^2$
+it is doomed to fail. We clearly need a suitable effective coupling
+which we can use instead of $g^2$. Here we will use the
+so-called $\b_E$ scheme \cite{parisi,kp,smm}. This scheme is simple
+and well suited to deal with ``perturbations'' of the Wilson
+action, like the ones given by \rf{*3}-\rf{*4}. Let us define
+\beq{*5}
+\b_E = \frac{3}{4} \frac{1}{1-\la \oh \tr U_\Box \ra}.
+\eeq
+{}From weak coupling expansions ($\b \to \infty,~~\l$ fixed), it is seen that
+\beq{*6}
+\b_E \to \b~~~~~{\rm for}~~~~ \b \to \infty.
+\eeq
+It is consistent to use the $g_E=4/\b_E$ in the two loop $\b$-function
+since $g_E$ is a function of $g$ and the two first coefficients of the
+$\b$-function are invariant under a non-singular coupling constant
+redefinition. The use of $\b_E$ in the two loop $\b$-function
+is known to diminish scaling violations in a variety of situations:
+The string tension in $SU(2)$ and $SU(3)$ gauge theories,
+the mass gap in the $SU(2)$ and $SU(3)$ chiral models and the
+deconfining transition temperature $T_c$, again for $SU(2)$ and $SU(3)$
+gauge theories, just to mention some. We will now show that the method
+works well for the modified Wilson action with $\l=10$.
+
+Let us first note that for $\l =10$ the $\b$-range $1.4-1.9$ is mapped
+into the $\b_E$-range $1.837-2.104$, which should compared to the
+corresponding map for the ordinary Wilson action where the
+$\b$-range $2.2-2.5$ is mapped into the $\b_E$-range $1.741-2.154$.
+{}From the measurements of Wilson loops mentioned in the last section
+we extract the string tension using the simplest method: If $W(R,T)$
+denotes a $R \times T$ Wilson loop we first form
+\beq{*7}
+V_{eff} (R,T) = \log [W(R,T)/W(R,T-1)].
+\eeq
+For $T \to \infty$ $V_{eff} (R,T)$ should go to the ground state static
+quark potential $\Vqq(R)$. We have available $T \leq 6$ and the results
+agree within error bars for $T=5-6$. We have used these values as $\Vqq(R)$
+for $R \leq 6$. Next $\Vqq(R)$ is fitted to the form:
+\beq{*7a}
+\Vqq(R) = C - \frac{E}{R} + \sg R
+\eeq
+and the error bars for $\sg$ are mainly coming from
+systematic errors arising
+from fits with various lower cuts in $R$. It is clear that with the
+limited range of $R$ and $T$'s available to us nothing will be gained
+by applying some of the many more elaborate schemes of fitting which are
+available.
+
+$\log \sg(\b_E)$ is finally plotted in fig. 1 against $\b_E$. The curve
+shown is the one obtained from the two-loop $\b$-function, according to
+which the scaling of the lattice string tension
+$\sg(\b_E) = \sg_{cont} a^2(\b_E)$ is governed by the two-loop scaling
+of the lattice spacing $a(\b_E)^2$:
+\beq{*8}
+ a^2(\b_E) = \Lambda^{-2}
+\left( \frac{6\pi^2}{11} \b_E\right)^{102/121}
+\exp\left[-\frac{6\pi^2}{11} \b_E\right].
+\eeq
+It is clear that scaling is reasonable well satisfied in the given
+range of $\b_E$.
+
+It is interesting to compare these results with the corresponding
+ones obtained by using the ordinary Wilson action. The range of $\b$
+which gives the same range of $\b_E$ as were used for the
+modified action will be $2.3 \le \b \le 2.5$. In this range it is
+well known that naive application of scaling does not work particularly
+well, and to get a fair comparison with the results for the modified
+action we use again the $\b_E$ coupling constant transformation.
+We now follow the same method as in the case of the modified action
+and extract the string tension\footnote{The data used
+for $\b=2.4$ and 2.5 are taken from \cite{gutbrod}.}. The result is
+shown as a function of $\b_E$ in fig. 1. The use of $\b_E$ has
+improved the scaling considerable compared to
+the use of $\b$ as a coupling constant, as already mentioned, and it
+is apparent from fig.1 that agreement with the two-loop scaling
+is as good for the Wilson action as for the modified action.
+
+
+\section{Conclusions}
+The suppression of negative valued plaquettes should not change the
+continuum limit of pure $SU(2)$ lattice gauge theories since these
+configurations are pure lattice artifacts. Naively one might even
+expect a smoother approach to the continuum limit if such a suppression
+is implemented. The modified Wilson action \rf{*3} indeed suppresses
+negative valued plaquettes for large values of $\l$ and it is possible
+to approach continuum physics for much smaller values of $\b$. However,
+for these small values of $\b$ the relation between the continuum
+coupling constant $g^2$ and $\b$ is not a simple one and in order to
+extract the scaling behavior one has to use a modified coupling constant
+closer reflecting the physics of the system. The $\b_E$-scheme is such
+a prescription and using it we have found good agreement with continuum
+physics. From these results it seems clear that
+the theory with modified Wilson action
+belongs to the same universality class as the theory defined by the
+ordinary Wilson action when $\b$ is sufficiently large. The worry
+mentioned in \cite{bcm} is thus ruled out. In addition it seems
+that the approach to scaling is not dramatically improved
+compared to the situation for ordinary Wilson action. Indirectly
+this indicates that negative plaquette excitations play no important
+role in the scaling region for the ordinary Wilson action, at least
+when we discuss observables like the string tension. However,
+one would expect that the modified Wilson action is
+considerable better when it comes to the measurements of
+topological objects like instantons.
+
+\vspace{24pt}
+
+\noindent
+{\bf Acknowledgement} We thank V. Mitrjushkin for discussions and
+many useful suggestions. Part of the computations were performed
+at UNI-C and were made possible by a grant from the
+Danish Ministry of Research and Technology.
+
+
+
+\vspace{24pt}
+
+\addtolength{\baselineskip}{-0.20\baselineskip}
+
+
+\begin{thebibliography}{99}
+\bibitem{bcm}V. G. Bornyakov, M. Creutz and V.K. Mitrjushkin, Phys.Rev. D44
+(1991) 3918.
+\bibitem{mp}G. Mack and E. Pietarinen, Nucl.Phys. B205, (1982) 141.
+\bibitem{parisi}G. Parisi, Proceedings of the XX$^th$ conference
+on high energy physics, Madison 1980.
+\bibitem{kp}F. Karsch and R. Petronzio, Phys.Lett. 139B (1984) 403.
+\bibitem{smm}S. Samuel, O. Martin and K. Moriarty, Phys.Lett. 153B
+(1985) 87.
+\bibitem{ppf}G. Parisi, R. Petronzio and F. Rapuano, Phys.Lett. 126B
+(1983) 418.
+\bibitem{gutbrod}F. Gutbrod, Z.Phys. C37 (1987) 143.
+\end{thebibliography}
+
+
+\vspace{36pt}
+
+\noindent
+{\bf Figure 1:} The measured string tension using the modified
+action (upper curve) and the ordinary Wilson action (lower curve)
+as functions of $\beta_E$.
+
+\end{document}
diff --git a/support/hypertex/tanmoy/examples/ambjorn.toc b/support/hypertex/tanmoy/examples/ambjorn.toc
new file mode 100644
index 0000000000..ae167251e4
--- /dev/null
+++ b/support/hypertex/tanmoy/examples/ambjorn.toc
@@ -0,0 +1,4 @@
+\contentsline {section}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{1}{\hbox {\hskip 1pt\relax 1}}\hskip -1pt\relax }Introduction}{3}
+\contentsline {section}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{2}{\hbox {\hskip 1pt\relax 2}}\hskip -1pt\relax }Numerical method}{4}
+\contentsline {section}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{3}{\hbox {\hskip 1pt\relax 3}}\hskip -1pt\relax }Scaling of the string tension}{5}
+\contentsline {section}{\numberline {\relax \let \hyper@@@ \relax \let \hyper@@@ \relax \let \hyper@@@ \hyper@ \hyperpr@ref {}{section}{4}{\hbox {\hskip 1pt\relax 4}}\hskip -1pt\relax }Conclusions}{6}
diff --git a/support/hypertex/tanmoy/fleqn.hty b/support/hypertex/tanmoy/fleqn.hty
new file mode 100644
index 0000000000..25ce02344e
--- /dev/null
+++ b/support/hypertex/tanmoy/fleqn.hty
@@ -0,0 +1,34 @@
+\let\hypernoname=\relax
+\def\equation{\@beginparpenalty\predisplaypenalty
+ \@endparpenalty\postdisplaypenalty
+\let\hyper@n@=\hyperdef
+\let\hyperdef=\hyper@nique\refstepcounter{equation}%
+\let\hyperdef=\hyper@n@
+\trivlist \item[]\leavevmode
+\let\hyper@qn@=\theequation
+\def\theequation{\hyperdef\hypernoname{equation}{\hyper@qn@}{\hyper@qn@}}%
+ \hbox to\linewidth\bgroup $\m@th% $ TO MAKE DOLLAR NESTING OK
+ \displaystyle
+\hskip\mathindent}
+
+\def\eqnarray{\stepcounter{equation}%
+ \let\hyper@qn@=\theequation
+ \hyper@nique\hypernoname{equation}{\hyper@qn@}{}%
+ \edef\@currentlabel{%
+ \hyper@\hyperpr@ref\hypernoname{\hyper@qn@}}%
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip
+$$%
+\def\theequation{\hyperdef\hypernoname{equation}{\hyper@qn@}{\hyper@qn@}}%
+\edef\@currentlabel{%
+\hyper@\hyperpr@ref\noexpand\hypernoname{\noexpand\hyper@qn@}}%
+\m@th\halign
+to\linewidth\bgroup\@eqnsel\hskip\@centering$\displaystyle\tabskip\z@
+ {##}$&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/COPYING b/support/hypertex/tanmoy/ghostview-1.5-hacked/COPYING
new file mode 100644
index 0000000000..6757284672
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/COPYING
@@ -0,0 +1,416 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+
+
+
+
+
+
+
+
+
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+
+
+
+
+
+
+
+
+
+
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/Dir.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/Dir.c
new file mode 100644
index 0000000000..ed26312aa0
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/Dir.c
@@ -0,0 +1,163 @@
+/*
+ * Copyright 1989 Software Research Associates, Inc., Tokyo, Japan
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Software Research Associates not be used
+ * in advertising or publicity pertaining to distribution of the software
+ * without specific, written prior permission. Software Research Associates
+ * makes no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * SOFTWARE RESEARCH ASSOCIATES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Erik M. van der Poel
+ * Software Research Associates, Inc., Tokyo, Japan
+ * erik@sra.co.jp
+ */
+
+#include <stdio.h>
+
+#ifdef SEL_FILE_IGNORE_CASE
+#include <ctype.h>
+#endif /* def SEL_FILE_IGNORE_CASE */
+
+#include "SFinternal.h"
+
+#if defined(SVR4) || defined(SYSV) || defined(USG) || defined(__osf__)
+#include <dirent.h>
+#else /* defined(SVR4) || defined(SYSV) || defined(USG) */
+#include <sys/dir.h>
+#define dirent direct
+#endif /* defined(SVR4) || defined(SYSV) || defined(USG) */
+
+#include <sys/stat.h>
+
+#if defined(SVR4) || defined(SYSV) || defined(USG)
+extern void qsort();
+#endif /* defined(SVR4) || defined(SYSV) || defined(USG) */
+
+#ifdef SEL_FILE_IGNORE_CASE
+int
+SFcompareEntries(p, q)
+ SFEntry *p;
+ SFEntry *q;
+{
+ register char *r, *s;
+ register char c1, c2;
+
+ r = p->real;
+ s = q->real;
+
+ c1 = *r++;
+ if (islower(c1)) {
+ c1 = toupper(c1);
+ }
+ c2 = *s++;
+ if (islower(c2)) {
+ c2 = toupper(c2);
+ }
+
+ while (c1 == c2) {
+ if (!c1) {
+ return strcmp(p->real, q->real);
+ }
+ c1 = *r++;
+ if (islower(c1)) {
+ c1 = toupper(c1);
+ }
+ c2 = *s++;
+ if (islower(c2)) {
+ c2 = toupper(c2);
+ }
+ }
+
+ return c1 - c2;
+}
+#else /* def SEL_FILE_IGNORE_CASE */
+int
+SFcompareEntries(p, q)
+ SFEntry *p;
+ SFEntry *q;
+{
+ return strcmp(p->real, q->real);
+}
+#endif /* def SEL_FILE_IGNORE_CASE */
+
+int
+SFgetDir(dir)
+ SFDir *dir;
+{
+ SFEntry *result = NULL;
+ int alloc = 0;
+ int i;
+ DIR *dirp;
+ struct dirent *dp;
+ char *str;
+ int len;
+ int maxChars;
+ struct stat statBuf;
+
+ maxChars = strlen(dir->dir) - 1;
+
+ dir->entries = NULL;
+ dir->nEntries = 0;
+ dir->nChars = 0;
+
+ result = NULL;
+ i = 0;
+
+ dirp = opendir(".");
+ if (!dirp) {
+ return 1;
+ }
+
+ (void) stat(".", &statBuf);
+ dir->mtime = statBuf.st_mtime;
+
+ (void) readdir(dirp); /* throw away "." */
+
+#ifndef S_IFLNK
+ (void) readdir(dirp); /* throw away ".." */
+#endif /* ndef S_IFLNK */
+
+ while (dp = readdir(dirp)) {
+ if (i >= alloc) {
+ alloc = 2 * (alloc + 1);
+ result = (SFEntry *) XtRealloc((char *) result,
+ (unsigned) (alloc * sizeof(SFEntry)));
+ }
+ result[i].statDone = 0;
+ str = dp->d_name;
+ len = strlen(str);
+ result[i].real = XtMalloc((unsigned) (len + 2));
+ (void) strcat(strcpy(result[i].real, str), " ");
+ if (len > maxChars) {
+ maxChars = len;
+ }
+ result[i].shown = result[i].real;
+ i++;
+ }
+
+#if defined(SVR4) || defined(SYSV) || defined(USG)
+ qsort((char *) result, (unsigned) i, sizeof(SFEntry), SFcompareEntries);
+#else /* defined(SVR4) || defined(SYSV) || defined(USG) */
+ qsort((char *) result, i, sizeof(SFEntry), SFcompareEntries);
+#endif /* defined(SVR4) || defined(SYSV) || defined(USG) */
+
+ dir->entries = result;
+ dir->nEntries = i;
+ dir->nChars = maxChars + 1;
+
+ closedir(dirp);
+
+ return 0;
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/Draw.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/Draw.c
new file mode 100644
index 0000000000..28bd17b772
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/Draw.c
@@ -0,0 +1,920 @@
+/*
+ * Copyright 1989 Software Research Associates, Inc., Tokyo, Japan
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Software Research Associates not be used
+ * in advertising or publicity pertaining to distribution of the software
+ * without specific, written prior permission. Software Research Associates
+ * makes no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * SOFTWARE RESEARCH ASSOCIATES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Erik M. van der Poel
+ * Software Research Associates, Inc., Tokyo, Japan
+ * erik@sra.co.jp
+ */
+
+#include <stdio.h>
+#include "SFinternal.h"
+#include "xstat.h"
+#include <X11/StringDefs.h>
+#include <X11/Xaw/Scrollbar.h>
+#include <X11/Xaw/Cardinals.h>
+
+#define SF_DEFAULT_FONT "9x15"
+
+#ifdef ABS
+#undef ABS
+#endif
+#define ABS(x) (((x) < 0) ? (-(x)) : (x))
+
+typedef struct {
+ char *fontname;
+} TextData, *textPtr;
+
+int SFcharWidth, SFcharAscent, SFcharHeight;
+
+int SFcurrentInvert[3] = { -1, -1, -1 };
+
+static GC SFlineGC, SFscrollGC, SFinvertGC, SFtextGC;
+
+static XtResource textResources[] = {
+ {XtNfont, XtCFont, XtRString, sizeof (char *),
+ XtOffset(textPtr, fontname), XtRString, SF_DEFAULT_FONT},
+};
+
+static XFontStruct *SFfont;
+
+static int SFcurrentListY;
+
+static XtIntervalId SFscrollTimerId;
+
+SFinitFont()
+{
+ TextData *data;
+
+ data = XtNew(TextData);
+
+ XtGetApplicationResources(selFileForm, (XtPointer) data, textResources,
+ XtNumber(textResources), (Arg *) NULL, ZERO);
+
+ SFfont = XLoadQueryFont(SFdisplay, data->fontname);
+ if (!SFfont) {
+ SFfont = XLoadQueryFont(SFdisplay, SF_DEFAULT_FONT);
+ if (!SFfont) {
+ char sbuf[256];
+
+ (void) sprintf(sbuf, "XsraSelFile: can't get font %s",
+ SF_DEFAULT_FONT);
+
+ XtAppError(SFapp, sbuf);
+ }
+ }
+
+ SFcharWidth = (SFfont->max_bounds.width + SFfont->min_bounds.width) / 2;
+ SFcharAscent = SFfont->max_bounds.ascent;
+ SFcharHeight = SFcharAscent + SFfont->max_bounds.descent;
+}
+
+SFcreateGC()
+{
+ XGCValues gcValues;
+ XRectangle rectangles[1];
+
+ gcValues.foreground = SFfore;
+
+ SFlineGC = XtGetGC(
+ selFileLists[0],
+ (XtGCMask)
+ GCForeground |
+ 0,
+ &gcValues
+ );
+
+ SFscrollGC = XtGetGC(
+ selFileLists[0],
+ (XtGCMask)
+ 0,
+ &gcValues
+ );
+
+ gcValues.function = GXinvert;
+ gcValues.plane_mask = (SFfore ^ SFback);
+
+ SFinvertGC = XtGetGC(
+ selFileLists[0],
+ (XtGCMask)
+ GCFunction |
+ GCPlaneMask |
+ 0,
+ &gcValues
+ );
+
+ gcValues.foreground = SFfore;
+ gcValues.background = SFback;
+ gcValues.font = SFfont->fid;
+
+ SFtextGC = XCreateGC(
+ SFdisplay,
+ XtWindow(selFileLists[0]),
+ (unsigned long)
+ GCForeground |
+ GCBackground |
+ GCFont |
+ 0,
+ &gcValues
+ );
+
+ rectangles[0].x = SFlineToTextH + SFbesideText;
+ rectangles[0].y = 0;
+ rectangles[0].width = SFcharsPerEntry * SFcharWidth;
+ rectangles[0].height = SFupperY + 1;
+
+ XSetClipRectangles(
+ SFdisplay,
+ SFtextGC,
+ 0,
+ 0,
+ rectangles,
+ 1,
+ Unsorted
+ );
+}
+
+SFclearList(n, doScroll)
+ int n;
+ int doScroll;
+{
+ SFDir *dir;
+
+ SFcurrentInvert[n] = -1;
+
+ XClearWindow(SFdisplay, XtWindow(selFileLists[n]));
+
+ XDrawSegments(SFdisplay, XtWindow(selFileLists[n]), SFlineGC, SFsegs,
+ 2);
+
+ if (doScroll) {
+ dir = &(SFdirs[SFdirPtr + n]);
+
+ if ((SFdirPtr + n < SFdirEnd) && dir->nEntries && dir->nChars) {
+ XawScrollbarSetThumb(
+ selFileVScrolls[n],
+ (float) (((double) dir->vOrigin) /
+ dir->nEntries),
+ (float) (((double) ((dir->nEntries < SFlistSize)
+ ? dir->nEntries : SFlistSize)) /
+ dir->nEntries)
+ );
+
+ XawScrollbarSetThumb(
+ selFileHScrolls[n],
+ (float) (((double) dir->hOrigin) / dir->nChars),
+ (float) (((double) ((dir->nChars <
+ SFcharsPerEntry) ? dir->nChars :
+ SFcharsPerEntry)) / dir->nChars)
+ );
+ } else {
+ XawScrollbarSetThumb(selFileVScrolls[n], (float) 0.0,
+ (float) 1.0);
+ XawScrollbarSetThumb(selFileHScrolls[n], (float) 0.0,
+ (float) 1.0);
+ }
+ }
+}
+
+static
+SFdeleteEntry(dir, entry)
+ SFDir *dir;
+ SFEntry *entry;
+{
+ register SFEntry *e;
+ register SFEntry *end;
+ int n;
+ int idx;
+
+ idx = entry - dir->entries;
+
+ if (idx < dir->beginSelection) {
+ dir->beginSelection--;
+ }
+ if (idx <= dir->endSelection) {
+ dir->endSelection--;
+ }
+ if (dir->beginSelection > dir->endSelection) {
+ dir->beginSelection = dir->endSelection = -1;
+ }
+
+ if (idx < dir->vOrigin) {
+ dir->vOrigin--;
+ }
+
+ XtFree(entry->real);
+
+ end = &(dir->entries[dir->nEntries - 1]);
+
+ for (e = entry; e < end; e++) {
+ *e = *(e + 1);
+ }
+
+ if (!(--dir->nEntries)) {
+ return;
+ }
+
+ n = dir - &(SFdirs[SFdirPtr]);
+ if ((n < 0) || (n > 2)) {
+ return;
+ }
+
+ XawScrollbarSetThumb(
+ selFileVScrolls[n],
+ (float) (((double) dir->vOrigin) / dir->nEntries),
+ (float) (((double) ((dir->nEntries < SFlistSize) ?
+ dir->nEntries : SFlistSize)) / dir->nEntries)
+ );
+}
+
+static
+SFwriteStatChar(name, last, statBuf)
+ char *name;
+ int last;
+ struct stat *statBuf;
+{
+ name[last] = SFstatChar(statBuf);
+}
+
+static int
+SFstatAndCheck(dir, entry)
+ SFDir *dir;
+ SFEntry *entry;
+{
+ struct stat statBuf;
+ char save;
+ int last;
+
+ /*
+ * must be restored before returning
+ */
+ save = *(dir->path);
+ *(dir->path) = 0;
+
+ if (!SFchdir(SFcurrentPath)) {
+ last = strlen(entry->real) - 1;
+ entry->real[last] = 0;
+ entry->statDone = 1;
+ if (
+ (!stat(entry->real, &statBuf))
+
+#ifdef S_IFLNK
+
+ || (!lstat(entry->real, &statBuf))
+
+#endif /* ndef S_IFLNK */
+
+ ) {
+ if (SFfunc) {
+ char *shown;
+
+ shown = NULL;
+ if (SFfunc(entry->real, &shown, &statBuf)) {
+ if (shown) {
+ int len;
+
+ len = strlen(shown);
+ entry->shown = XtMalloc(
+ (unsigned) (len + 2)
+ );
+ (void) strcpy(entry->shown,
+ shown);
+ SFwriteStatChar(
+ entry->shown,
+ len,
+ &statBuf
+ );
+ entry->shown[len + 1] = 0;
+ }
+ } else {
+ SFdeleteEntry(dir, entry);
+
+ *(dir->path) = save;
+ return 1;
+ }
+ }
+ SFwriteStatChar(entry->real, last, &statBuf);
+ } else {
+ entry->real[last] = ' ';
+ }
+ }
+
+ *(dir->path) = save;
+ return 0;
+}
+
+static
+SFdrawStrings(w, dir, from, to)
+ register Window w;
+ register SFDir *dir;
+ register int from;
+ register int to;
+{
+ register int i;
+ register SFEntry *entry;
+ int x;
+
+ x = SFtextX - dir->hOrigin * SFcharWidth;
+
+ if (dir->vOrigin + to >= dir->nEntries) {
+ to = dir->nEntries - dir->vOrigin - 1;
+ }
+ for (i = from; i <= to; i++) {
+ entry = &(dir->entries[dir->vOrigin + i]);
+ if (!(entry->statDone)) {
+ if (SFstatAndCheck(dir, entry)) {
+ if (dir->vOrigin + to >= dir->nEntries) {
+ to = dir->nEntries - dir->vOrigin - 1;
+ }
+ i--;
+ continue;
+ }
+ }
+ XDrawImageString(
+ SFdisplay,
+ w,
+ SFtextGC,
+ x,
+ SFtextYoffset + i * SFentryHeight,
+ entry->shown,
+ strlen(entry->shown)
+ );
+ if (dir->vOrigin + i == dir->beginSelection) {
+ XDrawLine(
+ SFdisplay,
+ w,
+ SFlineGC,
+ SFlineToTextH + 1,
+ SFlowerY + i * SFentryHeight,
+ SFlineToTextH + SFentryWidth - 2,
+ SFlowerY + i * SFentryHeight
+ );
+ }
+ if (
+ (dir->vOrigin + i >= dir->beginSelection) &&
+ (dir->vOrigin + i <= dir->endSelection)
+ ) {
+ SFcompletionSegs[0].y1 = SFcompletionSegs[1].y1 =
+ SFlowerY + i * SFentryHeight;
+ SFcompletionSegs[0].y2 = SFcompletionSegs[1].y2 =
+ SFlowerY + (i + 1) * SFentryHeight - 1;
+ XDrawSegments(
+ SFdisplay,
+ w,
+ SFlineGC,
+ SFcompletionSegs,
+ 2
+ );
+ }
+ if (dir->vOrigin + i == dir->endSelection) {
+ XDrawLine(
+ SFdisplay,
+ w,
+ SFlineGC,
+ SFlineToTextH + 1,
+ SFlowerY + (i + 1) * SFentryHeight - 1,
+ SFlineToTextH + SFentryWidth - 2,
+ SFlowerY + (i + 1) * SFentryHeight - 1
+ );
+ }
+ }
+}
+
+SFdrawList(n, doScroll)
+ int n;
+ int doScroll;
+{
+ SFDir *dir;
+ Window w;
+
+ SFclearList(n, doScroll);
+
+ if (SFdirPtr + n < SFdirEnd) {
+ dir = &(SFdirs[SFdirPtr + n]);
+ w = XtWindow(selFileLists[n]);
+ XDrawImageString(
+ SFdisplay,
+ w,
+ SFtextGC,
+ SFtextX - dir->hOrigin * SFcharWidth,
+ SFlineToTextV + SFaboveAndBelowText + SFcharAscent,
+ dir->dir,
+ strlen(dir->dir)
+ );
+ SFdrawStrings(w, dir, 0, SFlistSize - 1);
+ }
+}
+
+SFdrawLists(doScroll)
+ int doScroll;
+{
+ int i;
+
+ for (i = 0; i < 3; i++) {
+ SFdrawList(i, doScroll);
+ }
+}
+
+static
+SFinvertEntry(n)
+ register int n;
+{
+ XFillRectangle(
+ SFdisplay,
+ XtWindow(selFileLists[n]),
+ SFinvertGC,
+ SFlineToTextH,
+ SFcurrentInvert[n] * SFentryHeight + SFlowerY,
+ SFentryWidth,
+ SFentryHeight
+ );
+}
+
+static unsigned long
+SFscrollTimerInterval()
+{
+ static int maxVal = 200;
+ static int varyDist = 50;
+ static int minDist = 50;
+ int t;
+ int dist;
+
+ if (SFcurrentListY < SFlowerY) {
+ dist = SFlowerY - SFcurrentListY;
+ } else if (SFcurrentListY > SFupperY) {
+ dist = SFcurrentListY - SFupperY;
+ } else {
+ return (unsigned long) 1;
+ }
+
+ t = maxVal - ((maxVal / varyDist) * (dist - minDist));
+
+ if (t < 1) {
+ t = 1;
+ }
+
+ if (t > maxVal) {
+ t = maxVal;
+ }
+
+ return (unsigned long) t;
+}
+
+static void
+SFscrollTimer(p, id)
+ XtPointer p;
+ XtIntervalId *id;
+{
+ SFDir *dir;
+ int save;
+ int n;
+
+ n = (int) p;
+
+ dir = &(SFdirs[SFdirPtr + n]);
+ save = dir->vOrigin;
+
+ if (SFcurrentListY < SFlowerY) {
+ if (dir->vOrigin > 0) {
+ SFvSliderMovedCallback(selFileVScrolls[n], n,
+ dir->vOrigin - 1);
+ }
+ } else if (SFcurrentListY > SFupperY) {
+ if (dir->vOrigin < dir->nEntries - SFlistSize) {
+ SFvSliderMovedCallback(selFileVScrolls[n], n,
+ dir->vOrigin + 1);
+ }
+ }
+
+ if (dir->vOrigin != save) {
+ if (dir->nEntries) {
+ XawScrollbarSetThumb(
+ selFileVScrolls[n],
+ (float) (((double) dir->vOrigin) / dir->nEntries),
+ (float) (((double) ((dir->nEntries < SFlistSize) ?
+ dir->nEntries : SFlistSize)) / dir->nEntries)
+ );
+ }
+ }
+
+ if (SFbuttonPressed) {
+ SFscrollTimerId = XtAppAddTimeOut(SFapp,
+ SFscrollTimerInterval(), SFscrollTimer, (XtPointer) n);
+ }
+}
+
+static int
+SFnewInvertEntry(n, event)
+ register int n;
+ register XMotionEvent *event;
+{
+ register int x, y;
+ register int new;
+ static int SFscrollTimerAdded = 0;
+
+ x = event->x;
+ y = event->y;
+
+ if (SFdirPtr + n >= SFdirEnd) {
+ return -1;
+ } else if (
+ (x >= 0) && (x <= SFupperX) &&
+ (y >= SFlowerY) && (y <= SFupperY)
+ ) {
+ register SFDir *dir = &(SFdirs[SFdirPtr + n]);
+
+ if (SFscrollTimerAdded) {
+ SFscrollTimerAdded = 0;
+ XtRemoveTimeOut(SFscrollTimerId);
+ }
+
+ new = (y - SFlowerY) / SFentryHeight;
+ if (dir->vOrigin + new >= dir->nEntries) {
+ return -1;
+ }
+ return new;
+ } else {
+ if (SFbuttonPressed) {
+ SFcurrentListY = y;
+ if (!SFscrollTimerAdded) {
+ SFscrollTimerAdded = 1;
+ SFscrollTimerId = XtAppAddTimeOut(SFapp,
+ SFscrollTimerInterval(), SFscrollTimer,
+ (XtPointer) n);
+ }
+ }
+
+ return -1;
+ }
+}
+
+/* ARGSUSED */
+void
+SFenterList(w, n, event)
+ Widget w;
+ register int n;
+ register XEnterWindowEvent *event;
+{
+ register int new;
+
+ /* sanity */
+ if (SFcurrentInvert[n] != -1) {
+ SFinvertEntry(n);
+ SFcurrentInvert[n] = -1;
+ }
+
+ new = SFnewInvertEntry(n, (XMotionEvent *) event);
+ if (new != -1) {
+ SFcurrentInvert[n] = new;
+ SFinvertEntry(n);
+ }
+}
+
+/* ARGSUSED */
+void
+SFleaveList(w, n, event)
+ Widget w;
+ register int n;
+ XEvent *event;
+{
+ if (SFcurrentInvert[n] != -1) {
+ SFinvertEntry(n);
+ SFcurrentInvert[n] = -1;
+ }
+}
+
+/* ARGSUSED */
+void
+SFmotionList(w, n, event)
+ Widget w;
+ register int n;
+ register XMotionEvent *event;
+{
+ register int new;
+
+ new = SFnewInvertEntry(n, event);
+
+ if (new != SFcurrentInvert[n]) {
+ if (SFcurrentInvert[n] != -1) {
+ SFinvertEntry(n);
+ }
+ SFcurrentInvert[n] = new;
+ if (new != -1) {
+ SFinvertEntry(n);
+ }
+ }
+}
+
+/* ARGSUSED */
+void
+SFvFloatSliderMovedCallback(w, n, fnew)
+ Widget w;
+ int n;
+ float *fnew;
+{
+ int new;
+
+ new = (*fnew) * SFdirs[SFdirPtr + n].nEntries;
+
+ SFvSliderMovedCallback(w, n, new);
+}
+
+/* ARGSUSED */
+void
+SFvSliderMovedCallback(w, n, new)
+ Widget w;
+ int n;
+ int new;
+{
+ int old;
+ register Window win;
+ SFDir *dir;
+
+ dir = &(SFdirs[SFdirPtr + n]);
+
+ old = dir->vOrigin;
+ dir->vOrigin = new;
+
+ if (old == new) {
+ return;
+ }
+
+ win = XtWindow(selFileLists[n]);
+
+ if (ABS(new - old) < SFlistSize) {
+ if (new > old) {
+ XCopyArea(
+ SFdisplay,
+ win,
+ win,
+ SFscrollGC,
+ SFlineToTextH,
+ SFlowerY + (new - old) * SFentryHeight,
+ SFentryWidth + SFlineToTextH,
+ (SFlistSize - (new - old)) * SFentryHeight,
+ SFlineToTextH,
+ SFlowerY
+ );
+ XClearArea(
+ SFdisplay,
+ win,
+ SFlineToTextH,
+ SFlowerY + (SFlistSize - (new - old)) *
+ SFentryHeight,
+ SFentryWidth + SFlineToTextH,
+ (new - old) * SFentryHeight,
+ False
+ );
+ SFdrawStrings(win, dir, SFlistSize - (new - old),
+ SFlistSize - 1);
+ } else {
+ XCopyArea(
+ SFdisplay,
+ win,
+ win,
+ SFscrollGC,
+ SFlineToTextH,
+ SFlowerY,
+ SFentryWidth + SFlineToTextH,
+ (SFlistSize - (old - new)) * SFentryHeight,
+ SFlineToTextH,
+ SFlowerY + (old - new) * SFentryHeight
+ );
+ XClearArea(
+ SFdisplay,
+ win,
+ SFlineToTextH,
+ SFlowerY,
+ SFentryWidth + SFlineToTextH,
+ (old - new) * SFentryHeight,
+ False
+ );
+ SFdrawStrings(win, dir, 0, old - new);
+ }
+ } else {
+ XClearArea(
+ SFdisplay,
+ win,
+ SFlineToTextH,
+ SFlowerY,
+ SFentryWidth + SFlineToTextH,
+ SFlistSize * SFentryHeight,
+ False
+ );
+ SFdrawStrings(win, dir, 0, SFlistSize - 1);
+ }
+}
+
+/* ARGSUSED */
+void
+SFvAreaSelectedCallback(w, n, pnew)
+ Widget w;
+ int n;
+ int pnew;
+{
+ SFDir *dir;
+ int new;
+
+ dir = &(SFdirs[SFdirPtr + n]);
+
+ new = dir->vOrigin +
+ (((double) pnew) / SFvScrollHeight) * dir->nEntries;
+
+ if (new > dir->nEntries - SFlistSize) {
+ new = dir->nEntries - SFlistSize;
+ }
+
+ if (new < 0) {
+ new = 0;
+ }
+
+ if (dir->nEntries) {
+ float f;
+
+ f = ((double) new) / dir->nEntries;
+
+ XawScrollbarSetThumb(
+ w,
+ f,
+ (float) (((double) ((dir->nEntries < SFlistSize) ?
+ dir->nEntries : SFlistSize)) / dir->nEntries)
+ );
+ }
+
+ SFvSliderMovedCallback(w, n, new);
+}
+
+/* ARGSUSED */
+void
+SFhSliderMovedCallback(w, n, new)
+ Widget w;
+ int n;
+ float *new;
+{
+ SFDir *dir;
+ int save;
+
+ dir = &(SFdirs[SFdirPtr + n]);
+ save = dir->hOrigin;
+ dir->hOrigin = (*new) * dir->nChars;
+ if (dir->hOrigin == save) {
+ return;
+ }
+
+ SFdrawList(n, SF_DO_NOT_SCROLL);
+}
+
+/* ARGSUSED */
+void
+SFhAreaSelectedCallback(w, n, pnew)
+ Widget w;
+ int n;
+ int pnew;
+{
+ SFDir *dir;
+ int new;
+
+ dir = &(SFdirs[SFdirPtr + n]);
+
+ new = dir->hOrigin +
+ (((double) pnew) / SFhScrollWidth) * dir->nChars;
+
+ if (new > dir->nChars - SFcharsPerEntry) {
+ new = dir->nChars - SFcharsPerEntry;
+ }
+
+ if (new < 0) {
+ new = 0;
+ }
+
+ if (dir->nChars) {
+ float f;
+
+ f = ((double) new) / dir->nChars;
+
+ XawScrollbarSetThumb(
+ w,
+ f,
+ (float) (((double) ((dir->nChars < SFcharsPerEntry) ?
+ dir->nChars : SFcharsPerEntry)) / dir->nChars)
+ );
+
+ SFhSliderMovedCallback(w, n, &f);
+ }
+}
+
+/* ARGSUSED */
+void
+SFpathSliderMovedCallback(w, client_data, new)
+ Widget w;
+ XtPointer client_data;
+ float *new;
+{
+ SFDir *dir;
+ int n;
+ XawTextPosition pos;
+ int SFdirPtrSave;
+
+ SFdirPtrSave = SFdirPtr;
+ SFdirPtr = (*new) * SFdirEnd;
+ if (SFdirPtr == SFdirPtrSave) {
+ return;
+ }
+
+ SFdrawLists(SF_DO_SCROLL);
+
+ n = 2;
+ while (SFdirPtr + n >= SFdirEnd) {
+ n--;
+ }
+
+ dir = &(SFdirs[SFdirPtr + n]);
+
+ pos = dir->path - SFcurrentPath;
+
+ if (!strncmp(SFcurrentPath, SFstartDir, strlen(SFstartDir))) {
+ pos -= strlen(SFstartDir);
+ if (pos < 0) {
+ pos = 0;
+ }
+ }
+
+ XawTextSetInsertionPoint(selFileField, pos);
+}
+
+/* ARGSUSED */
+
+void
+SFpathAreaSelectedCallback(w, client_data, pnew)
+ Widget w;
+ XtPointer client_data;
+ int pnew;
+{
+ int new;
+ float f;
+
+ new = SFdirPtr + (((double) pnew) / SFpathScrollWidth) * SFdirEnd;
+
+ if (new > SFdirEnd - 3) {
+ new = SFdirEnd - 3;
+ }
+
+ if (new < 0) {
+ new = 0;
+ }
+
+ f = ((double) new) / SFdirEnd;
+
+ XawScrollbarSetThumb(
+ w,
+ f,
+ (float) (((double) ((SFdirEnd < 3) ? SFdirEnd : 3)) /
+ SFdirEnd)
+ );
+
+ SFpathSliderMovedCallback(w, (XtPointer) NULL, &f);
+}
+
+Boolean
+SFworkProc()
+{
+ register SFDir *dir;
+ register SFEntry *entry;
+
+ for (dir = &(SFdirs[SFdirEnd - 1]); dir >= SFdirs; dir--) {
+ if (!(dir->nEntries)) {
+ continue;
+ }
+ for (
+ entry = &(dir->entries[dir->nEntries - 1]);
+ entry >= dir->entries;
+ entry--
+ ) {
+ if (!(entry->statDone)) {
+ (void) SFstatAndCheck(dir, entry);
+ return False;
+ }
+ }
+ }
+
+ SFworkProcAdded = 0;
+
+ return True;
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/Ghostview.ad b/support/hypertex/tanmoy/ghostview-1.5-hacked/Ghostview.ad
new file mode 100644
index 0000000000..1c6085d899
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/Ghostview.ad
@@ -0,0 +1,251 @@
+! Ghostview.ad -- Application defaults file for ghostview.
+! Copyright (C) 1992 Timothy O. Theisen
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 2 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program; if not, write to the Free Software
+! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+!
+! Author: Tim Theisen Systems Programmer
+! Internet: tim@cs.wisc.edu Department of Computer Sciences
+! UUCP: uwvax!tim University of Wisconsin-Madison
+! Phone: (608)262-0438 1210 West Dayton Street
+! FAX: (608)262-9777 Madison, WI 53706
+
+! This file is part of the hacked version of the ghostview package
+! which is distributed under the terms of the gnu license. The
+! modification referred to above is by Tanmoy Bhattacharya,
+! <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification,
+! nor the original program provides any warranty.
+
+! All of the button labels and actions are determined in this file.
+! It should be easy to adapt to any language.
+! To use a different version of ghostscript, you can add the resource
+! *Ghostview.interpreter: /my/very/own/gs
+
+*input: True
+*allowShellResize: True
+*ShapeStyle: Oval
+*Font: -adobe-new century schoolbook-medium-r-normal--*-140-*-*-p-*-iso8859-1
+*Text*Font: -adobe-courier-medium-r-normal--*-140-*-*-m-*-iso8859-1
+*ghostviewButton.Label: Ghostview
+*copyright.Label: Copyright...
+*quit.Label: Quit
+*fileButton.Label: File
+*open.Label: Open...
+*reopen.Label: Reopen
+*printwhole.Label: Print...
+*printmarked.Label: Print marked pages...
+*save.Label: Save marked pages...
+*pageButton.Label: Page
+*next.Label: Next
+*show.Label: Redisplay
+*prev.Label: Previous
+*center.Label: Center
+*mark.Label: Mark
+*unmark.Label: Unmark
+*magstepButton.Label: Magstep
+*orientationButton.Label: Orientation
+*portrait.Label: Portrait
+*landscape.Label: Landscape
+*upsidedown.Label: Upside-down
+*seascape.Label: Seascape
+*swap.Label: Swap Landscape
+*pagemediaButton.Label: Media
+*pageview.useBottom: True
+*pageview.useRight: True
+*MenuButton.baseTranslations: #replace \n\
+ <EnterWindow>: highlight() \n\
+ <LeaveWindow>: reset() \n\
+ ! <BtnDown>: reset() PopupMenu() \n\
+ ! Shift<BtnDown>: reset() PopupMenu() \n\
+ ! Lock <BtnDown>: reset() PopupMenu() \n\
+ ! Lock Shift<BtnDown>: reset() PopupMenu() \n\
+ !Ctrl <BtnDown>: reset() PopupMenu() \n\
+ !Ctrl Shift<BtnDown>: reset() PopupMenu() \n\
+ !Ctrl Lock <BtnDown>: reset() PopupMenu() \n\
+ !Ctrl Lock Shift<BtnDown>: reset() PopupMenu()
+*MenuButton.translations: #replace \n\
+ <EnterWindow>: highlight() \n\
+ <LeaveWindow>: reset() \n\
+ ! <BtnDown>: reset() PopupMenu() \n\
+ ! Shift<BtnDown>: reset() PopupMenu() \n\
+ ! Lock <BtnDown>: reset() PopupMenu() \n\
+ ! Lock Shift<BtnDown>: reset() PopupMenu() \n\
+ !Ctrl <BtnDown>: reset() PopupMenu() \n\
+ !Ctrl Shift<BtnDown>: reset() PopupMenu() \n\
+ !Ctrl Lock <BtnDown>: reset() PopupMenu() \n\
+ !Ctrl Lock Shift<BtnDown>: reset() PopupMenu()
+*SimpleMenu.baseTranslations: #replace \n\
+ <EnterWindow>: highlight() \n\
+ <LeaveWindow>: unhighlight() \n\
+ <BtnMotion>: highlight() \n\
+ <Btn2Up>: MenuPopdown() GhostviewForce() notify() unhighlight() \n\
+ <BtnUp>: MenuPopdown() GhostviewDefault() notify() unhighlight()
+*SimpleMenu.translations: #replace \n\
+ <EnterWindow>: highlight() \n\
+ <LeaveWindow>: unhighlight() \n\
+ <BtnMotion>: highlight() \n\
+ <Btn2Up>: MenuPopdown() GhostviewForce() notify() unhighlight() \n\
+ <BtnUp>: MenuPopdown() GhostviewDefault() notify() unhighlight()
+*okay.Label: Okay
+*cancel.Label: Cancel
+*dismiss.Label: Dismiss
+*Ghostview.busyCursor: target
+Ghostview.baseTranslations: #replace \n\
+ <MapNotify>: GhostviewCheckFile() \n\
+ <Message>WM_PROTOCOLS: GhostviewDeleteWindow()
+Ghostview.translations: #replace \n\
+ <MapNotify>: GhostviewCheckFile() \n\
+ <Message>WM_PROTOCOLS: GhostviewDeleteWindow()
+*TopLevelShell.baseTranslations: #replace \n\
+ <Message>WM_PROTOCOLS: GhostviewDismiss()
+*TopLevelShell.translations: #replace \n\
+ <Message>WM_PROTOCOLS: GhostviewDismiss()
+*TransientShell.baseTranslations: #replace \n\
+ <Message>WM_PROTOCOLS: GhostviewDismiss()
+*TransientShell.translations: #replace \n\
+ <Message>WM_PROTOCOLS: GhostviewDismiss()
+*zoom.form.baseTranslations: #replace \n\
+ <Key>Q: GhostviewDeleteZoom()
+*zoom.form.translations: #replace \n\
+ <Key>Q: GhostviewDeleteZoom()
+*zoom.baseTranslations: #replace \n\
+ <Message>WM_PROTOCOLS: GhostviewDeleteWindow()
+*zoom.translations: #replace \n\
+ <Message>WM_PROTOCOLS: GhostviewDeleteWindow()
+*Ghostview.baseTranslations: #replace \n\
+ <Message>: message() \n\
+ <EnterWindow>: notify(0) \n\
+ <LeaveWindow>: GhostviewEraseLocator() \n\
+ <MotionNotify>: notify(0) \n\
+ <Btn1Down>: notify(180 180 200 200) \n\
+ <Btn2Down>: notify(120 120 300 300) \n\
+ <Btn3Down>: notify(90 90 400 400)
+*Ghostview.translations: #replace \n\
+ <Message>: message() \n\
+ <EnterWindow>: notify(0) \n\
+ <LeaveWindow>: GhostviewEraseLocator() \n\
+ <MotionNotify>: notify(0) \n\
+ <Btn1Down>: notify(180 180 200 200) \n\
+ <Btn2Down>: notify(120 120 300 300) \n\
+ <Btn3Down>: notify(90 90 400 400)
+*toc.baseTranslations: #replace \n\
+ <FocusIn>: focus-in() \n\
+ <FocusOut>: focus-out() \n\
+ <Btn1Down>: select-start() \n\
+ <Btn1Motion>: extend-adjust() \n\
+ <Btn1Up>: extend-end(PRIMARY, CUT_BUFFER0) \n\
+ <Btn2Down>: select-start() \n\
+ <Btn2Motion>: extend-adjust() \n\
+ <Btn2Up>: extend-end(PRIMARY, CUT_BUFFER0) GhostviewShow() \n\
+ <Btn3Down>: extend-start() \n\
+ <Btn3Motion>: extend-adjust() \n\
+ <Btn3Up>: extend-end(PRIMARY, CUT_BUFFER0)
+*toc.translations: #replace \n\
+ <FocusIn>: focus-in() \n\
+ <FocusOut>: focus-out() \n\
+ <Btn1Down>: select-start() \n\
+ <Btn1Motion>: extend-adjust() \n\
+ <Btn1Up>: extend-end(PRIMARY, CUT_BUFFER0) \n\
+ <Btn2Down>: select-start() \n\
+ <Btn2Motion>: extend-adjust() \n\
+ <Btn2Up>: extend-end(PRIMARY, CUT_BUFFER0) GhostviewShow() \n\
+ <Btn3Down>: extend-start() \n\
+ <Btn3Motion>: extend-adjust() \n\
+ <Btn3Up>: extend-end(PRIMARY, CUT_BUFFER0)
+*Form.baseTranslations: #replace \n\
+ <Key>C: GhostviewCenter() \n\
+ <Key>Q: GhostviewQuit() \n\
+ <Key>O: GhostviewOpen() \n\
+ <Key>R: GhostviewReopen() \n\
+ <Key>S: GhostviewSave() \n\
+ Shift<Key>P: GhostviewPrintWhole() \n\
+ <Key>P: GhostviewPrintMarked() \n\
+ <Key>BackSpace: GhostviewPrevious() \n\
+ <Key>Delete: GhostviewPrevious() \n\
+ <Key>B: GhostviewBack() \n\
+ <Key>Prior: GhostviewPrevious() \n\
+ <Key>space: GhostviewNext() \n\
+ <Key>Return: GhostviewNext() \n\
+ <Key>F: GhostviewNext() \n\
+ <Key>Next: GhostviewNext() \n\
+ <Key>Tab: GhostviewNext() \n\
+ <Key>period: GhostviewShow() \n\
+ Ctrl<Key>L: GhostviewShow() \n\
+ <Key>M: GhostviewMark() \n\
+ <Key>N: GhostviewUnmark() \n\
+ <Key>0: GhostviewSetMagstep(0) \n\
+ <Key>1: GhostviewSetMagstep(1) \n\
+ <Key>2: GhostviewSetMagstep(2) \n\
+ <Key>3: GhostviewSetMagstep(3) \n\
+ <Key>4: GhostviewSetMagstep(4) \n\
+ <Key>5: GhostviewSetMagstep(5) \n\
+ <Key>+: GhostviewIncreaseMagstep() \n\
+ <Key>-: GhostviewDecreaseMagstep() \n\
+ <Key>U: GhostviewScrollUp() \n\
+ <Key>D: GhostviewScrollDown() \n\
+ <Key>K: GhostviewScrollUp() \n\
+ <Key>J: GhostviewScrollDown() \n\
+ <Key>H: GhostviewScrollLeft() \n\
+ <Key>L: GhostviewScrollRight() \n\
+ Shift<Key>Up: GhostviewForce() GhostviewSetOrientation(portrait) \n\
+ Shift<Key>Right: GhostviewForce() GhostviewSetOrientation(landscape) \n\
+ Shift<Key>Down: GhostviewForce() GhostviewSetOrientation(upside-down) \n\
+ Shift<Key>Left: GhostviewForce() GhostviewSetOrientation(seascape) \n\
+ <Key>Up: GhostviewDefault() GhostviewSetOrientation(portrait) \n\
+ <Key>Right: GhostviewDefault() GhostviewSetOrientation(landscape) \n\
+ <Key>Down: GhostviewDefault() GhostviewSetOrientation(upside-down) \n\
+ <Key>Left: GhostviewDefault() GhostviewSetOrientation(seascape)
+*Form.translations: #replace \n\
+ <Key>C: GhostviewCenter() \n\
+ <Key>Q: GhostviewQuit() \n\
+ <Key>O: GhostviewOpen() \n\
+ <Key>R: GhostviewReopen() \n\
+ <Key>S: GhostviewSave() \n\
+ Shift<Key>P: GhostviewPrintWhole() \n\
+ <Key>P: GhostviewPrintMarked() \n\
+ <Key>BackSpace: GhostviewPrevious() \n\
+ <Key>Delete: GhostviewPrevious() \n\
+ <Key>B: GhostviewBack() \n\
+ <Key>Prior: GhostviewPrevious() \n\
+ <Key>space: GhostviewNext() \n\
+ <Key>Return: GhostviewNext() \n\
+ <Key>F: GhostviewNext() \n\
+ <Key>Next: GhostviewNext() \n\
+ <Key>Tab: GhostviewNext() \n\
+ <Key>period: GhostviewShow() \n\
+ Ctrl<Key>L: GhostviewShow() \n\
+ <Key>M: GhostviewMark() \n\
+ <Key>N: GhostviewUnmark() \n\
+ <Key>0: GhostviewSetMagstep(0) \n\
+ <Key>1: GhostviewSetMagstep(1) \n\
+ <Key>2: GhostviewSetMagstep(2) \n\
+ <Key>3: GhostviewSetMagstep(3) \n\
+ <Key>4: GhostviewSetMagstep(4) \n\
+ <Key>5: GhostviewSetMagstep(5) \n\
+ <Key>+: GhostviewIncreaseMagstep() \n\
+ <Key>-: GhostviewDecreaseMagstep() \n\
+ <Key>U: GhostviewScrollUp() \n\
+ <Key>D: GhostviewScrollDown() \n\
+ <Key>K: GhostviewScrollUp() \n\
+ <Key>J: GhostviewScrollDown() \n\
+ <Key>H: GhostviewScrollLeft() \n\
+ <Key>L: GhostviewScrollRight() \n\
+ Shift<Key>Up: GhostviewForce() GhostviewSetOrientation(portrait) \n\
+ Shift<Key>Right: GhostviewForce() GhostviewSetOrientation(landscape) \n\
+ Shift<Key>Down: GhostviewForce() GhostviewSetOrientation(upside-down) \n\
+ Shift<Key>Left: GhostviewForce() GhostviewSetOrientation(seascape) \n\
+ <Key>Up: GhostviewDefault() GhostviewSetOrientation(portrait) \n\
+ <Key>Right: GhostviewDefault() GhostviewSetOrientation(landscape) \n\
+ <Key>Down: GhostviewDefault() GhostviewSetOrientation(upside-down) \n\
+ <Key>Left: GhostviewDefault() GhostviewSetOrientation(seascape)
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/Ghostview.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/Ghostview.c
new file mode 100644
index 0000000000..4d427ac80d
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/Ghostview.c
@@ -0,0 +1,2029 @@
+/*
+ * Ghostview.c -- Ghostview widget.
+ * Copyright (C) 1992 Timothy O. Theisen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Tim Theisen Systems Programmer
+ * Internet: tim@cs.wisc.edu Department of Computer Sciences
+ * UUCP: uwvax!tim University of Wisconsin-Madison
+ * Phone: (608)262-0438 1210 West Dayton Street
+ * FAX: (608)262-9777 Madison, WI 53706
+ */
+
+/* This file is part of the hacked version of the ghostview package */
+/* which is distributed under the terms of the gnu license. The */
+/* modification referred to above is by Tanmoy Bhattacharya, */
+/* <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification, */
+/* nor the original program provides any warranty. */
+
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xatom.h>
+#include <X11/Xproto.h>
+#include <X11/Xos.h>
+#include "GhostviewP.h"
+#include "pdf.h"
+#include <ctype.h>
+
+#ifndef XlibSpecificationRelease
+typedef char *XPointer;
+#endif
+
+#include <signal.h>
+#ifdef SIGNALRETURNSINT
+#define SIGVAL int
+#else
+#define SIGVAL void
+#endif
+
+#ifdef NON_BLOCKING_IO
+#include <fcntl.h>
+/* if POSIX O_NONBLOCK is not available, use O_NDELAY */
+#if !defined(O_NONBLOCK) && defined(O_NDELAY)
+#define O_NONBLOCK O_NDELAY
+#endif
+#endif
+
+#include <errno.h>
+/* BSD 4.3 errno.h does not declare errno */
+extern int errno;
+/* Both error returns are checked for non-blocking I/O. */
+/* Manufacture the other error code if only one exists. */
+#if !defined(EWOULDBLOCK) && defined(EAGAIN)
+#define EWOULDBLOCK EAGAIN
+#endif
+#if !defined(EAGAIN) && defined(EWOULDBLOCK)
+#define EAGAIN EWOULDBLOCK
+#endif
+
+#ifndef VMS
+/* GV_BUFSIZ is set to the minimum POSIX PIPE_BUF to ensure that
+ * nonblocking writes to ghostscript will work properly.
+ */
+#define GV_BUFSIZ 1024*1024
+#else /* VMS */
+/*
+** GV_BUFSIZ is the maximum length line we can handle, so we up it to 1024
+*/
+#define GV_BUFSIZ 1024*1024
+#endif /* VMS */
+
+static void ComputeXdpi();
+static void ComputeYdpi();
+
+static XtResource resources[] = {
+#define offset(field) XtOffsetOf(GhostviewRec, ghostview.field)
+ { XtNarguments, XtCArguments, XtRString, sizeof(String),
+ offset(arguments), XtRString, (XtPointer)NULL },
+ { XtNbottomMargin, XtCMargin, XtRInt, sizeof(int),
+ offset(bottom_margin), XtRImmediate, (XtPointer)0 },
+ { XtNbusyCursor, XtCCursor, XtRCursor, sizeof(XtPointer),
+ offset(busy_cursor), XtRString, "watch" },
+ { XtNcallback, XtCCallback, XtRCallback, sizeof(XtPointer),
+ offset(callback), XtRCallback, (XtPointer)NULL },
+ { XtNcursor, XtCCursor, XtRCursor, sizeof(XtPointer),
+ offset(cursor), XtRString, "crosshair" },
+ { XtNfilename, XtCFilename, XtRString, sizeof(String),
+ offset(filename), XtRString, (XtPointer)NULL },
+ { XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
+ offset(foreground), XtRString, XtDefaultForeground},
+ { XtNinterpreter, XtCInterpreter, XtRString, sizeof(String),
+ offset(interpreter), XtRString, "gs" },
+ { XtNleftMargin, XtCMargin, XtRInt, sizeof(int),
+ offset(left_margin), XtRImmediate, (XtPointer)0 },
+ { XtNllx, XtCBoundingBox, XtRInt, sizeof(int),
+ offset(llx), XtRImmediate, (XtPointer)0 },
+ { XtNlly, XtCBoundingBox, XtRInt, sizeof(int),
+ offset(lly), XtRImmediate, (XtPointer)0 },
+ { XtNmessageCallback, XtCCallback, XtRCallback, sizeof(XtPointer),
+ offset(message_callback), XtRCallback, (XtPointer)NULL },
+ { XtNorientation, XtCOrientation, XtRPageOrientation,
+ sizeof(XtPageOrientation), offset(orientation), XtRImmediate,
+ (XtPointer)XtPageOrientationPortrait },
+ { XtNoutputCallback, XtCCallback, XtRCallback, sizeof(XtPointer),
+ offset(output_callback), XtRCallback, (XtPointer)NULL },
+ { XtNpalette, XtCPalette, XtRPalette, sizeof(XtPalette),
+ offset(palette), XtRImmediate, (XtPointer)XtPaletteColor },
+ { XtNquiet, XtCQuiet, XtRBoolean, sizeof(Boolean),
+ offset(quiet), XtRImmediate, (XtPointer)True },
+ { XtNrightMargin, XtCMargin, XtRInt, sizeof(int),
+ offset(right_margin), XtRImmediate, (XtPointer)0 },
+ { XtNsafer, XtCSafer, XtRBoolean, sizeof(Boolean),
+ offset(safer), XtRImmediate, (XtPointer)True },
+ { XtNtopMargin, XtCMargin, XtRInt, sizeof(int),
+ offset(top_margin), XtRImmediate, (XtPointer)0 },
+ { XtNuseBackingPixmap, XtCUseBackingPixmap, XtRBoolean, sizeof(Boolean),
+ offset(use_bpixmap), XtRImmediate, (XtPointer)True },
+ { XtNurx, XtCBoundingBox, XtRInt, sizeof(int),
+ offset(urx), XtRImmediate, (XtPointer)612 },
+ { XtNury, XtCBoundingBox, XtRInt, sizeof(int),
+ offset(ury), XtRImmediate, (XtPointer)792 },
+ { XtNxdpi, XtCResolution, XtRFloat, sizeof(float),
+ offset(xdpi), XtRCallProc, (XtPointer)ComputeXdpi },
+ { XtNydpi, XtCResolution, XtRFloat, sizeof(float),
+ offset(ydpi), XtRCallProc, (XtPointer)ComputeYdpi },
+#undef offset
+};
+
+static void Message();
+static void Notify();
+static void Input();
+static void Output();
+
+static void ClassInitialize();
+static void ClassPartInitialize();
+static void Initialize();
+static void Realize();
+static void Destroy();
+static void Resize();
+static Boolean SetValues();
+static XtGeometryResult QueryGeometry();
+
+static void Layout();
+static Boolean ComputeSize();
+static void ChangeSize();
+static Boolean Setup();
+static void StartInterpreter();
+static void StopInterpreter();
+static void InterpreterFailed();
+
+static XtActionsRec actions[] =
+{
+ {"message", Message},
+ {"notify", Notify},
+};
+
+/* notify takes zero to four parameters. The first two give the width and
+ * height of the zoom requested in the default user coordinate system.
+ * If they are omitted, a default value of 72 is provided. If the second
+ * parameter is omitted, the zoom area is assumed to be a square.
+ * The next two parameters give the desired resolution of the zoom window.
+ * If they are omitted, a default value of 300 is provided. If the four
+ * parameter is omitted, the y resolution is assumed to be equal to the
+ * x resolution.
+ */
+static char translations[] =
+"<Message>: message() \n\
+<Btn1Down>: notify(72) \n\
+<Btn2Down>: notify(108) \n\
+<Btn3Down>: notify(144) \n\
+";
+
+GhostviewClassRec ghostviewClassRec = {
+ { /* core fields */
+ /* superclass */ (WidgetClass) &coreClassRec,
+ /* class_name */ "Ghostview",
+ /* widget_size */ sizeof(GhostviewRec),
+ /* class_initialize */ ClassInitialize,
+ /* class_part_initialize */ ClassPartInitialize,
+ /* class_inited */ FALSE,
+ /* initialize */ Initialize,
+ /* initialize_hook */ NULL,
+ /* realize */ Realize,
+ /* actions */ actions,
+ /* num_actions */ XtNumber(actions),
+ /* resources */ resources,
+ /* num_resources */ XtNumber(resources),
+ /* xrm_class */ NULLQUARK,
+ /* compress_motion */ TRUE,
+ /* compress_exposure */ TRUE,
+ /* compress_enterleave */ TRUE,
+ /* visible_interest */ FALSE,
+ /* destroy */ Destroy,
+ /* resize */ Resize,
+ /* expose */ NULL,
+ /* set_values */ SetValues,
+ /* set_values_hook */ NULL,
+ /* set_values_almost */ XtInheritSetValuesAlmost,
+ /* get_values_hook */ NULL,
+ /* accept_focus */ NULL,
+ /* version */ XtVersion,
+ /* callback_private */ NULL,
+ /* tm_table */ translations,
+ /* query_geometry */ QueryGeometry,
+ /* display_accelerator */ XtInheritDisplayAccelerator,
+ /* extension */ NULL
+ },
+ { /* ghostview fields */
+ /* ghostview */ NULL,
+ /* gv_colors */ NULL,
+ /* next */ NULL,
+ /* page */ NULL,
+ /* done */ NULL
+ }
+};
+
+WidgetClass ghostviewWidgetClass = (WidgetClass)&ghostviewClassRec;
+
+/* Procedures that compute the default xdpi and ydpi from display parameters */
+
+static void
+ComputeXdpi(w, offset, value)
+ Widget w;
+ int offset;
+ XrmValue *value;
+{
+ static float xdpi;
+ xdpi = 25.4 * WidthOfScreen(XtScreen(w)) / WidthMMOfScreen(XtScreen(w));
+ value->addr = (XtPointer) &xdpi;
+}
+
+static void
+ComputeYdpi(w, offset, value)
+ Widget w;
+ int offset;
+ XrmValue *value;
+{
+ static float ydpi;
+ ydpi = 25.4 * HeightOfScreen(XtScreen(w)) / HeightMMOfScreen(XtScreen(w));
+ value->addr = (XtPointer) &ydpi;
+}
+
+/* Message action routine.
+ * Passes ghostscript message events back to application via
+ * the message callback. It also marks the interpreter as
+ * being not busy at the end of page, and stops the interpreter
+ * when it send a "done" message.
+ */
+static void
+Message(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params; /* unused */
+ Cardinal *num_params; /* unused */
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ GhostviewWidgetClass gvc = (GhostviewWidgetClass) XtClass(w);
+
+ gvw->ghostview.mwin = event->xclient.data.l[0];
+ if (event->xclient.message_type ==
+ XmuInternAtom(XtDisplay(w), gvc->ghostview_class.page)) {
+ gvw->ghostview.busy = False;
+ XDefineCursor(XtDisplay(gvw), XtWindow(gvw), gvw->ghostview.cursor);
+ XtCallCallbackList(w, gvw->ghostview.message_callback, "Page");
+ } else if (event->xclient.message_type ==
+ XmuInternAtom(XtDisplay(w), gvc->ghostview_class.done)) {
+ StopInterpreter(w);
+ XtCallCallbackList(w, gvw->ghostview.message_callback, "Done");
+ }
+}
+
+/* Notify action routine.
+ * Calculates where the user clicked in the default user coordinate system.
+ * Call the callbacks with the point of click and size of zoom window
+ * requested.
+ */
+static void
+Notify(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ GhostviewReturnStruct ret_val;
+
+ /* notify takes zero to four parameters. The first two give the width and
+ * height of the zoom requested in the default user coordinate system.
+ * If they are omitted, a default value of 72 is provided. If the second
+ * parameter is omitted, the zoom area is assumed to be a square.
+ * The next two parameters give the desired resolution of the zoom window.
+ * If they are omitted, a default value of 300 is provided. If the four
+ * parameter is omitted, the y resolution is assumed to be equal to the
+ * x resolution.
+ */
+ switch (*num_params) {
+ case 0:
+ ret_val.width = ret_val.height = 72;
+ ret_val.xdpi = ret_val.ydpi = 300;
+ break;
+ case 1:
+ ret_val.width = ret_val.height = atoi(params[0]);
+ ret_val.xdpi = ret_val.ydpi = 300;
+ break;
+ case 2:
+ ret_val.width = atoi(params[0]);
+ ret_val.height = atoi(params[1]);
+ ret_val.xdpi = ret_val.ydpi = 300;
+ break;
+ case 3:
+ ret_val.width = atoi(params[0]);
+ ret_val.height = atoi(params[1]);
+ ret_val.xdpi = ret_val.ydpi = atoi(params[2]);
+ break;
+ default:
+ ret_val.width = atoi(params[0]);
+ ret_val.height = atoi(params[1]);
+ ret_val.xdpi = atoi(params[2]);
+ ret_val.ydpi = atoi(params[3]);
+ break;
+ }
+
+ switch (gvw->ghostview.orientation) {
+ case XtPageOrientationPortrait:
+ ret_val.psx = gvw->ghostview.llx +
+ event->xbutton.x * 72.0 / gvw->ghostview.xdpi;
+ ret_val.psy = gvw->ghostview.ury -
+ event->xbutton.y * 72.0 / gvw->ghostview.ydpi;
+ break;
+ case XtPageOrientationLandscape:
+ ret_val.psx = gvw->ghostview.llx +
+ event->xbutton.y * 72.0 / gvw->ghostview.ydpi;
+ ret_val.psy = gvw->ghostview.lly +
+ event->xbutton.x * 72.0 / gvw->ghostview.xdpi;
+ break;
+ case XtPageOrientationUpsideDown:
+ ret_val.psx = gvw->ghostview.urx -
+ event->xbutton.x * 72.0 / gvw->ghostview.xdpi;
+ ret_val.psy = gvw->ghostview.lly +
+ event->xbutton.y * 72.0 / gvw->ghostview.ydpi;
+ break;
+ case XtPageOrientationSeascape:
+ ret_val.psx = gvw->ghostview.urx -
+ event->xbutton.y * 72.0 / gvw->ghostview.ydpi;
+ ret_val.psy = gvw->ghostview.ury -
+ event->xbutton.x * 72.0 / gvw->ghostview.xdpi;
+ break;
+ }
+ XtCallCallbackList(w, gvw->ghostview.callback, (XtPointer) &ret_val);
+}
+
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+
+static Boolean broken_pipe = False;
+
+static SIGVAL
+CatchPipe(i)
+ int i;
+{
+ broken_pipe = True;
+#ifdef SIGNALRETURNSINT
+ return 0;
+#endif
+}
+
+#ifndef VMS
+
+/* Input - Feed data to ghostscript's stdin.
+ * Write bytes to ghostscript using non-blocking I/O.
+ * Also, pipe signals are caught during writing. The return
+ * values are checked and the appropriate action is taken. I do
+ * this at this low level, because it may not be appropriate for
+ * SIGPIPE to be caught for the overall application.
+ */
+
+static void
+Input(client_data, source, id)
+ XtPointer client_data;
+ int *source;
+ XtInputId *id;
+{
+ Widget w = (Widget) client_data;
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ int bytes_written;
+ SIGVAL (*oldsig)();
+
+ oldsig = signal(SIGPIPE, CatchPipe);
+
+#ifdef NON_BLOCKING_IO
+ do {
+#endif
+
+ if (gvw->ghostview.buffer_bytes_left == 0) {
+
+ /* Get a new section if required */
+ if (gvw->ghostview.ps_input && gvw->ghostview.bytes_left == 0) {
+ struct record_list *ps_old = gvw->ghostview.ps_input;
+ gvw->ghostview.ps_input = ps_old->next;
+ if (ps_old->close) fclose(ps_old->fp);
+ XtFree((char *)ps_old);
+ }
+
+ /* Have to seek at the beginning of each section */
+ if (gvw->ghostview.ps_input &&
+ gvw->ghostview.ps_input->seek_needed) {
+ if (gvw->ghostview.ps_input->len > 0)
+ fseek(gvw->ghostview.ps_input->fp,
+ gvw->ghostview.ps_input->begin, SEEK_SET);
+ gvw->ghostview.ps_input->seek_needed = False;
+ gvw->ghostview.bytes_left = gvw->ghostview.ps_input->len;
+ }
+
+ if (gvw->ghostview.bytes_left > GV_BUFSIZ) {
+ gvw->ghostview.buffer_bytes_left =
+ fread(gvw->ghostview.input_buffer,
+ sizeof (char), GV_BUFSIZ,
+ gvw->ghostview.ps_input->fp);
+ } else if (gvw->ghostview.bytes_left > 0) {
+ gvw->ghostview.buffer_bytes_left =
+ fread(gvw->ghostview.input_buffer,
+ sizeof (char), gvw->ghostview.bytes_left,
+ gvw->ghostview.ps_input->fp);
+ } else {
+ gvw->ghostview.buffer_bytes_left = 0;
+ }
+ if (gvw->ghostview.bytes_left > 0 &&
+ gvw->ghostview.buffer_bytes_left == 0) {
+ InterpreterFailed(w); /* Error occurred */
+ }
+ gvw->ghostview.input_buffer_ptr = gvw->ghostview.input_buffer;
+ gvw->ghostview.bytes_left -= gvw->ghostview.buffer_bytes_left;
+ }
+
+ if (gvw->ghostview.buffer_bytes_left > 0) {
+ bytes_written = write(gvw->ghostview.interpreter_input,
+ gvw->ghostview.input_buffer_ptr,
+ gvw->ghostview.buffer_bytes_left);
+
+ if (broken_pipe) {
+ broken_pipe = False;
+ InterpreterFailed(w); /* Something bad happened */
+ } else if (bytes_written == -1) {
+ if ((errno != EWOULDBLOCK) && (errno != EAGAIN)) {
+ InterpreterFailed(w); /* Something bad happened */
+ }
+ } else {
+ gvw->ghostview.buffer_bytes_left -= bytes_written;
+ gvw->ghostview.input_buffer_ptr += bytes_written;
+ }
+ }
+#ifdef NON_BLOCKING_IO
+ } while(gvw->ghostview.ps_input &&
+ gvw->ghostview.buffer_bytes_left == 0);
+#endif
+ signal(SIGPIPE, oldsig);
+ if (gvw->ghostview.ps_input == NULL &&
+ gvw->ghostview.buffer_bytes_left == 0) {
+ if (gvw->ghostview.interpreter_input_id != None) {
+ XtRemoveInput(gvw->ghostview.interpreter_input_id);
+ gvw->ghostview.interpreter_input_id = None;
+ }
+ }
+}
+
+/* Output - receive I/O from ghostscript's stdout and stderr.
+ * Pass this to the application via the output_callback. */
+static void
+Output(client_data, source, id)
+ XtPointer client_data;
+ int *source;
+ XtInputId *id;
+{
+ Widget w = (Widget) client_data;
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ char buf[GV_BUFSIZ+1];
+ int bytes = 0;
+
+ if (*source == gvw->ghostview.interpreter_output) {
+ bytes = read(gvw->ghostview.interpreter_output, buf, GV_BUFSIZ);
+ if (bytes == 0) { /* EOF occurred */
+ close(gvw->ghostview.interpreter_output);
+ gvw->ghostview.interpreter_output = -1;
+ XtRemoveInput(gvw->ghostview.interpreter_output_id);
+ return;
+ } else if (bytes == -1) {
+ InterpreterFailed(w); /* Something bad happened */
+ return;
+ }
+ } else if (*source == gvw->ghostview.interpreter_error) {
+ bytes = read(gvw->ghostview.interpreter_error, buf, GV_BUFSIZ);
+ if (bytes == 0) { /* EOF occurred */
+ close(gvw->ghostview.interpreter_error);
+ gvw->ghostview.interpreter_error = -1;
+ XtRemoveInput(gvw->ghostview.interpreter_error_id);
+ return;
+ } else if (bytes == -1) {
+ InterpreterFailed(w); /* Something bad happened */
+ return;
+ }
+ }
+ if (bytes > 0) {
+ buf[bytes] = '\0';
+ pdf_process(buf);
+ if (*buf) {
+ XtCallCallbackList(w, gvw->ghostview.output_callback, (XtPointer) buf);
+ }
+ else {
+ bytes = 0;
+ }
+ }
+}
+
+#endif /* VMS */
+
+/* Register the type converter required for the PageOrientation. */
+/* Register the type converter required for the Palette. */
+/* This routine is called exactly once. */
+static void
+ClassInitialize()
+{
+ XtSetTypeConverter(XtRString, XtRPageOrientation,
+ XmuCvtStringToPageOrientation, NULL, 0,
+ XtCacheAll, NULL);
+ XtSetTypeConverter(XtRString, XtRPalette,
+ XmuCvtStringToPalette, NULL, 0,
+ XtCacheAll, NULL);
+}
+
+/* Get atoms needed to communicate with ghostscript. */
+/* This routine is called once per display. */
+static void
+ClassPartInitialize(class)
+ WidgetClass class;
+{
+ GhostviewWidgetClass gvc = (GhostviewWidgetClass)class;
+ gvc->ghostview_class.ghostview = XmuMakeAtom("GHOSTVIEW");
+ gvc->ghostview_class.gv_colors = XmuMakeAtom("GHOSTVIEW_COLORS");
+ gvc->ghostview_class.next = XmuMakeAtom("NEXT");
+ gvc->ghostview_class.page = XmuMakeAtom("PAGE");
+ gvc->ghostview_class.done = XmuMakeAtom("DONE");
+}
+
+/* Initialize private state. */
+
+static void
+Initialize(request, new, args, num_args)
+ Widget request, new;
+ ArgList args; /* unused */
+ Cardinal *num_args; /* unused */
+{
+ XGCValues values;
+ XtGCMask mask;
+ GhostviewWidget ngvw = (GhostviewWidget) new;
+ GhostviewWidget rgvw = (GhostviewWidget) request;
+
+ values.foreground = new->core.background_pixel;
+ mask = GCForeground;
+ ngvw->ghostview.gc = XtGetGC(new, mask, &values);
+ ngvw->ghostview.mwin = None;
+ ngvw->ghostview.disable_start = False;
+ ngvw->ghostview.interpreter_pid = -1;
+ ngvw->ghostview.input_buffer = NULL;
+ ngvw->ghostview.bytes_left = 0;
+#ifndef VMS
+ ngvw->ghostview.input_buffer_ptr = NULL;
+ ngvw->ghostview.buffer_bytes_left = 0;
+#endif
+ ngvw->ghostview.ps_input = NULL;
+ ngvw->ghostview.interpreter_input = -1;
+ ngvw->ghostview.interpreter_output = -1;
+#ifndef VMS
+ ngvw->ghostview.interpreter_error = -1;
+ ngvw->ghostview.interpreter_input_id = None;
+ ngvw->ghostview.interpreter_output_id = None;
+ ngvw->ghostview.interpreter_error_id = None;
+#else /* VMS */
+ memset(ngvw->ghostview.interpreter_input_iosb, 0, 8);
+ memset(ngvw->ghostview.interpreter_output_iosb, 0, 8);
+ ngvw->ghostview.output_buffer = NULL;
+#endif /* VMS */
+ ngvw->ghostview.gs_width = 0;
+ ngvw->ghostview.gs_height = 0;
+ ngvw->ghostview.changed = False;
+ ngvw->ghostview.busy = False;
+
+ /* Compute window size */
+ Layout(new, (rgvw->core.width == 0), (rgvw->core.height == 0));
+}
+
+/* Create Window and start interpreter if needed */
+static void
+Realize(w, valueMask, attributes)
+ Widget w;
+ Mask *valueMask;
+ XSetWindowAttributes *attributes;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+
+ if (gvw->ghostview.cursor != None) {
+ attributes->cursor = gvw->ghostview.cursor;
+ *valueMask |= CWCursor;
+ }
+
+ XtCreateWindow(w, (unsigned int) InputOutput, (Visual *) CopyFromParent,
+ *valueMask, attributes);
+
+ Setup(w);
+}
+
+/* Destroy routine: kill the interpreter and release the GC */
+static void
+Destroy(w)
+ Widget w;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+
+ StopInterpreter(w);
+ XtReleaseGC(w, gvw->ghostview.gc);
+ if (gvw->ghostview.input_buffer) XtFree(gvw->ghostview.input_buffer);
+#ifdef VMS
+ if (gvw->ghostview.output_buffer) XtFree(gvw->ghostview.output_buffer);
+#endif /* VMS */
+ if (gvw->core.background_pixmap != XtUnspecifiedPixmap)
+ XFreePixmap(XtDisplay(w), gvw->core.background_pixmap);
+}
+
+/* Process resize request. Requested size cannot be changed.
+ * NOTE: This routine may be called before the widget is realized.
+ * (It was a surprise to me.)
+ * If the widget is realized, start a new interpreter by calling Setup().
+ * If Setup() actually started a new interpreter and it is taking input
+ * from stdin, send a refresh message to the application. This is the
+ * only way that the application can be notified that it needs to resend
+ * the input because someone forced a new window size on the widget.
+ */
+static void
+Resize(w)
+ Widget w;
+{
+ Layout(w, False, False);
+ if (!XtIsRealized(w)) return;
+ if (Setup(w)) {
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ if (gvw->ghostview.filename == NULL) {
+ XtCallCallbackList(w, gvw->ghostview.message_callback, "Refresh");
+ }
+ }
+}
+
+/* SetValues routine. Set new private state, based on changed values
+ * in the widget. Always returns False, because redisplay is never needed.
+ */
+static Boolean
+SetValues(current, request, new)
+ Widget current, request, new;
+{
+ GhostviewWidget cgvw = (GhostviewWidget) current;
+ GhostviewWidget rgvw = (GhostviewWidget) request;
+ GhostviewWidget ngvw = (GhostviewWidget) new;
+ String cfilename;
+ String rfilename;
+ String carguments;
+ String rarguments;
+
+ cfilename = cgvw->ghostview.filename;
+ if (cfilename == NULL) cfilename = "(null)";
+ rfilename = rgvw->ghostview.filename;
+ if (rfilename == NULL) rfilename = "(null)";
+ carguments = cgvw->ghostview.arguments;
+ if (carguments == NULL) carguments = "(null)";
+ rarguments = rgvw->ghostview.arguments;
+ if (rarguments == NULL) rarguments = "(null)";
+
+ if (XtIsRealized(new) && !ngvw->ghostview.busy &&
+ (cgvw->ghostview.cursor != ngvw->ghostview.cursor)) {
+ XDefineCursor(XtDisplay(new), XtWindow(new), ngvw->ghostview.cursor);
+ }
+ if (XtIsRealized(new) && ngvw->ghostview.busy &&
+ (cgvw->ghostview.busy_cursor != ngvw->ghostview.busy_cursor)) {
+ XDefineCursor(XtDisplay(new), XtWindow(new),
+ ngvw->ghostview.busy_cursor);
+ }
+ if (cgvw->core.background_pixel != rgvw->core.background_pixel) {
+ XGCValues values;
+ XtGCMask mask;
+
+ XtReleaseGC(current, cgvw->ghostview.gc);
+ values.foreground = new->core.background_pixel;
+ mask = GCForeground;
+ ngvw->ghostview.gc = XtGetGC(new, mask, &values);
+ }
+ if ((cgvw->core.width != rgvw->core.width) ||
+ (cgvw->core.height != rgvw->core.height) ||
+ (cgvw->core.background_pixel != rgvw->core.background_pixel) ||
+ (cgvw->ghostview.foreground != rgvw->ghostview.foreground) ||
+ (cgvw->ghostview.palette != rgvw->ghostview.palette) ||
+ strcmp(cgvw->ghostview.interpreter, rgvw->ghostview.interpreter) ||
+ strcmp(carguments, rarguments) ||
+ (cgvw->ghostview.quiet != rgvw->ghostview.quiet) ||
+ (cgvw->ghostview.safer != rgvw->ghostview.safer) ||
+ strcmp(cfilename, rfilename) ||
+ (cgvw->ghostview.orientation != rgvw->ghostview.orientation) ||
+ (cgvw->ghostview.use_bpixmap != rgvw->ghostview.use_bpixmap) ||
+ (cgvw->ghostview.xdpi != rgvw->ghostview.xdpi) ||
+ (cgvw->ghostview.ydpi != rgvw->ghostview.ydpi) ||
+ (cgvw->ghostview.bottom_margin != rgvw->ghostview.bottom_margin) ||
+ (cgvw->ghostview.left_margin != rgvw->ghostview.left_margin) ||
+ (cgvw->ghostview.right_margin != rgvw->ghostview.right_margin) ||
+ (cgvw->ghostview.top_margin != rgvw->ghostview.top_margin) ||
+ (cgvw->ghostview.llx != rgvw->ghostview.llx) ||
+ (cgvw->ghostview.lly != rgvw->ghostview.lly) ||
+ (cgvw->ghostview.urx != rgvw->ghostview.urx) ||
+ (cgvw->ghostview.ury != rgvw->ghostview.ury)) {
+
+ ngvw->ghostview.changed = True;
+ Layout(new, True, True);
+ }
+
+ if (ngvw->ghostview.changed && XtIsRealized(current)) Setup(new);
+ return(False);
+}
+
+/* Function Name: QueryGeometry
+ * Description: This tells the parent what size we would like to be
+ * given certain constraints.
+ * Arguments: w - the widget.
+ * intended - what the parent intends to do with us.
+ * requested - what we want to happen.
+ */
+
+static XtGeometryResult
+QueryGeometry(w, intended, requested)
+Widget w;
+XtWidgetGeometry *intended, *requested;
+{
+ Dimension new_width, new_height;
+ Boolean change, width_req, height_req;
+
+ width_req = intended->request_mode & CWWidth;
+ height_req = intended->request_mode & CWHeight;
+
+ if (width_req)
+ new_width = intended->width;
+ else
+ new_width = w->core.width;
+
+ if (height_req)
+ new_height = intended->height;
+ else
+ new_height = w->core.height;
+
+ requested->request_mode = 0;
+
+/*
+ * We only care about our height and width.
+ */
+
+ if (!width_req && !height_req)
+ return(XtGeometryYes);
+
+ change = ComputeSize(w, !width_req, !height_req, &new_width, &new_height);
+
+ requested->request_mode |= CWWidth;
+ requested->width = new_width;
+ requested->request_mode |= CWHeight;
+ requested->height = new_height;
+
+ if (change)
+ return(XtGeometryAlmost);
+ return(XtGeometryYes);
+}
+
+/* Layout the widget. */
+
+static void
+Layout(w, xfree, yfree)
+ Widget w;
+ Boolean xfree, yfree;
+{
+ Dimension width = w->core.width;
+ Dimension height = w->core.height;
+ Boolean different_size = ComputeSize(w, xfree, yfree, &width, &height);
+ if (different_size) ChangeSize(w, width, height);
+}
+
+/* Compute new size of window, sets xdpi and ydpi if necessary.
+ * returns True if new window size is different */
+static Boolean
+ComputeSize(w, xfree, yfree, width, height)
+ Widget w;
+ Boolean xfree, yfree; /* Am I allowed to change width or height */
+ Dimension *width, *height;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ Dimension new_width = *width;
+ Dimension new_height = *height;
+ float newxdpi, newydpi;
+ Boolean change;
+
+ if (xfree && yfree) {
+ /* width and height can be changed, calculate window size according */
+ /* to xpdi and ydpi */
+ switch (gvw->ghostview.orientation) {
+ case XtPageOrientationPortrait:
+ case XtPageOrientationUpsideDown:
+ new_width = (gvw->ghostview.urx - gvw->ghostview.llx) / 72.0 *
+ gvw->ghostview.xdpi + 0.5;
+ new_height = (gvw->ghostview.ury - gvw->ghostview.lly) / 72.0 *
+ gvw->ghostview.ydpi + 0.5;
+ break;
+ case XtPageOrientationLandscape:
+ case XtPageOrientationSeascape:
+ new_width = (gvw->ghostview.ury - gvw->ghostview.lly) / 72.0 *
+ gvw->ghostview.xdpi + 0.5;
+ new_height = (gvw->ghostview.urx - gvw->ghostview.llx) / 72.0 *
+ gvw->ghostview.ydpi + 0.5;
+ break;
+ }
+ } else if (xfree) {
+ /* height is fixed. Preserve aspect ratio by recomputing */
+ /* ydpi and xdpi */
+ switch (gvw->ghostview.orientation) {
+ case XtPageOrientationPortrait:
+ case XtPageOrientationUpsideDown:
+ newydpi = gvw->core.height * 72.0 /
+ (gvw->ghostview.ury - gvw->ghostview.lly);
+ newxdpi = newydpi * gvw->ghostview.xdpi / gvw->ghostview.ydpi;
+ gvw->ghostview.xdpi = newxdpi;
+ gvw->ghostview.ydpi = newydpi;
+ new_width = (gvw->ghostview.urx - gvw->ghostview.llx) / 72.0 *
+ gvw->ghostview.xdpi + 0.5;
+ break;
+ case XtPageOrientationLandscape:
+ case XtPageOrientationSeascape:
+ newydpi = gvw->core.height * 72.0 /
+ (gvw->ghostview.urx - gvw->ghostview.llx);
+ newxdpi = newydpi * gvw->ghostview.xdpi / gvw->ghostview.ydpi;
+ gvw->ghostview.xdpi = newxdpi;
+ gvw->ghostview.ydpi = newydpi;
+ new_width = (gvw->ghostview.ury - gvw->ghostview.lly) / 72.0 *
+ gvw->ghostview.xdpi + 0.5;
+ break;
+ }
+ } else if (yfree) {
+ /* width is fixed. Preserve aspect ratio by recomputing */
+ /* xdpi and ydpi */
+ switch (gvw->ghostview.orientation) {
+ case XtPageOrientationPortrait:
+ case XtPageOrientationUpsideDown:
+ newxdpi = gvw->core.width * 72.0 /
+ (gvw->ghostview.urx - gvw->ghostview.llx);
+ newydpi = newxdpi * gvw->ghostview.ydpi / gvw->ghostview.xdpi;
+ gvw->ghostview.xdpi = newxdpi;
+ gvw->ghostview.ydpi = newydpi;
+ new_height = (gvw->ghostview.ury - gvw->ghostview.lly) / 72.0 *
+ gvw->ghostview.ydpi + 0.5;
+ break;
+ case XtPageOrientationLandscape:
+ case XtPageOrientationSeascape:
+ newxdpi = gvw->core.width * 72.0 /
+ (gvw->ghostview.ury - gvw->ghostview.lly);
+ newydpi = newxdpi * gvw->ghostview.ydpi / gvw->ghostview.xdpi;
+ gvw->ghostview.xdpi = newxdpi;
+ gvw->ghostview.ydpi = newydpi;
+ new_height = (gvw->ghostview.urx - gvw->ghostview.llx) / 72.0 *
+ gvw->ghostview.ydpi + 0.5;
+ break;
+ }
+ } else {
+ /* height and width are fixed. Just have to live with it. */
+ switch (gvw->ghostview.orientation) {
+ case XtPageOrientationPortrait:
+ case XtPageOrientationUpsideDown:
+ gvw->ghostview.xdpi = gvw->core.width * 72.0 /
+ (gvw->ghostview.urx - gvw->ghostview.llx);
+ gvw->ghostview.ydpi = gvw->core.height * 72.0 /
+ (gvw->ghostview.ury - gvw->ghostview.lly);
+ break;
+ case XtPageOrientationLandscape:
+ case XtPageOrientationSeascape:
+ gvw->ghostview.xdpi = gvw->core.width * 72.0 /
+ (gvw->ghostview.ury - gvw->ghostview.lly);
+ gvw->ghostview.ydpi = gvw->core.height * 72.0 /
+ (gvw->ghostview.urx - gvw->ghostview.llx);
+ break;
+ }
+ }
+
+ change = (new_width != *width) || (new_height != *height);
+ *width = new_width;
+ *height = new_height;
+ return (change);
+}
+
+/* Function Name: ChangeSize.
+ * Description: Request a size change.
+ * Arguments: w - the widget to try change the size of.
+ */
+
+static void
+ChangeSize(w, width, height)
+Widget w;
+Dimension width, height;
+{
+ XtWidgetGeometry request, reply;
+ Boolean changed = False;
+
+ request.request_mode = CWWidth | CWHeight;
+ request.width = width;
+ request.height = height;
+
+ switch ( XtMakeGeometryRequest(w, &request, &reply) ) {
+ case XtGeometryYes:
+ changed = True;
+ break;
+ case XtGeometryNo:
+ break;
+ case XtGeometryAlmost:
+ ComputeSize(w, (request.height != reply.height),
+ (request.width != reply.width),
+ &(reply.width), &(reply.height));
+ request = reply;
+ switch (XtMakeGeometryRequest(w, &request, &reply) ) {
+ case XtGeometryYes:
+ changed = True;
+ break;
+ case XtGeometryNo:
+ break;
+ case XtGeometryAlmost:
+ request = reply;
+ ComputeSize(w, FALSE, FALSE, &(request.width), &(request.height));
+ request.request_mode = CWWidth | CWHeight;
+ XtMakeGeometryRequest(w, &request, &reply);
+ changed = True;
+ break;
+ }
+ break;
+ }
+
+ /* If success, setup the widet for the new size. */
+ if (changed && XtIsRealized(w)) Setup(w);
+}
+
+/* Catch the alloc error when there is not enough resources for the
+ * backing pixmap. Automatically shut off backing pixmap and let the
+ * user know when this happens.
+ */
+static Boolean alloc_error;
+static XErrorHandler oldhandler;
+
+static int
+catch_alloc (dpy, err)
+Display *dpy;
+XErrorEvent *err;
+{
+ if (err->error_code == BadAlloc) {
+ alloc_error = True;
+ }
+ if (alloc_error) return 0;
+ return oldhandler(dpy, err);
+}
+
+/* Setup - sets up the backing pixmap, and GHOSTVIEW property and
+ * starts interpreter if needed.
+ * NOTE: the widget must be realized before calling Setup().
+ * Returns True if a new interpreter was started, False otherwise.
+ */
+
+static Boolean
+Setup(w)
+ Widget w;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ GhostviewWidgetClass gvc = (GhostviewWidgetClass) XtClass(w);
+ char buf[GV_BUFSIZ];
+ Pixmap bpixmap;
+ XSetWindowAttributes xswa;
+
+ if (!gvw->ghostview.changed &&
+ (gvw->core.width == gvw->ghostview.gs_width) &&
+ (gvw->core.height == gvw->ghostview.gs_height)) return False;
+
+ StopInterpreter(w);
+
+ if ((gvw->core.width != gvw->ghostview.gs_width) ||
+ (gvw->core.height != gvw->ghostview.gs_height) ||
+ (!gvw->ghostview.use_bpixmap)) {
+ if (gvw->core.background_pixmap != XtUnspecifiedPixmap) {
+ XFreePixmap(XtDisplay(w), gvw->core.background_pixmap);
+ gvw->core.background_pixmap = XtUnspecifiedPixmap;
+ XSetWindowBackgroundPixmap(XtDisplay(w), XtWindow(w), None);
+ }
+ }
+
+ if (gvw->ghostview.use_bpixmap) {
+ if (gvw->core.background_pixmap == XtUnspecifiedPixmap) {
+ /* Get a Backing Pixmap, but be ready for the BadAlloc. */
+ XSync(XtDisplay(w), False); /* Get to known state */
+ oldhandler = XSetErrorHandler(catch_alloc);
+ alloc_error = False;
+ bpixmap = XCreatePixmap(XtDisplay(w), XtWindow(w),
+ gvw->core.width, gvw->core.height,
+ gvw->core.depth);
+ XSync(XtDisplay(w), False); /* Force the error */
+ if (alloc_error) {
+ XtCallCallbackList(w, gvw->ghostview.message_callback,
+ "BadAlloc");
+ if (bpixmap != None) {
+ XFreePixmap(XtDisplay(w), bpixmap);
+ XSync(XtDisplay(w), False); /* Force the error */
+ bpixmap = None;
+ }
+ }
+ oldhandler = XSetErrorHandler(oldhandler);
+ if (bpixmap != None) {
+ gvw->core.background_pixmap = bpixmap;
+ XSetWindowBackgroundPixmap(XtDisplay(w), XtWindow(w),
+ gvw->core.background_pixmap);
+ }
+ } else {
+ bpixmap = gvw->core.background_pixmap;
+ }
+ } else {
+ if (gvw->core.background_pixmap != XtUnspecifiedPixmap) {
+ XFreePixmap(XtDisplay(w), gvw->core.background_pixmap);
+ gvw->core.background_pixmap = XtUnspecifiedPixmap;
+ XSetWindowBackgroundPixmap(XtDisplay(w), XtWindow(w), None);
+ }
+ bpixmap = None;
+ }
+
+ if (bpixmap != None) {
+ xswa.backing_store = NotUseful;
+ XChangeWindowAttributes(XtDisplay(w), XtWindow(w),
+ CWBackingStore, &xswa);
+ } else {
+ xswa.backing_store = Always;
+ XChangeWindowAttributes(XtDisplay(w), XtWindow(w),
+ CWBackingStore, &xswa);
+ }
+
+ gvw->ghostview.gs_width = gvw->core.width;
+ gvw->ghostview.gs_height = gvw->core.height;
+
+ sprintf(buf, "%d %d %d %d %d %d %g %g %d %d %d %d",
+ bpixmap, gvw->ghostview.orientation,
+ gvw->ghostview.llx, gvw->ghostview.lly,
+ gvw->ghostview.urx, gvw->ghostview.ury,
+ gvw->ghostview.xdpi, gvw->ghostview.ydpi,
+ gvw->ghostview.left_margin, gvw->ghostview.bottom_margin,
+ gvw->ghostview.right_margin, gvw->ghostview.top_margin);
+ XChangeProperty(XtDisplay(w), XtWindow(w),
+ XmuInternAtom(XtDisplay(w), gvc->ghostview_class.ghostview),
+ XA_STRING, 8, PropModeReplace,
+ (unsigned char *)buf, strlen(buf));
+
+ sprintf(buf, "%s %d %d",
+ gvw->ghostview.palette == XtPaletteMonochrome ? "Monochrome" :
+ gvw->ghostview.palette == XtPaletteGrayscale ? "Grayscale" :
+ gvw->ghostview.palette == XtPaletteColor ? "Color" : "?",
+ gvw->ghostview.foreground, gvw->core.background_pixel);
+ XChangeProperty(XtDisplay(w), XtWindow(w),
+ XmuInternAtom(XtDisplay(w), gvc->ghostview_class.gv_colors),
+ XA_STRING, 8, PropModeReplace,
+ (unsigned char *)buf, strlen(buf));
+
+ XSync(XtDisplay(w), False); /* Be sure to update properties */
+ StartInterpreter(w);
+ return True;
+}
+
+#ifndef VMS
+
+/* This routine starts the interpreter. It sets the DISPLAY and
+ * GHOSTVIEW environment variables. The GHOSTVIEW environment variable
+ * contains the Window that ghostscript should write on.
+ *
+ * This routine also opens pipes for stdout and stderr and initializes
+ * application input events for them. If input to ghostscript is not
+ * from a file, a pipe for stdin is created. This pipe is setup for
+ * non-blocking I/O so that the user interface never "hangs" because of
+ * a write to ghostscript.
+ */
+static void
+StartInterpreter(w)
+ Widget w;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ int std_in[2];
+ int std_out[2];
+ int std_err[2];
+ char buf[GV_BUFSIZ];
+#define NUM_ARGS 100
+ char *argv[NUM_ARGS];
+ char *arguments = NULL;
+ char *cptr;
+ int argc = 0;
+ int ret;
+
+ StopInterpreter(w);
+
+ /* Clear the window before starting a new interpreter. */
+ if (gvw->core.background_pixmap != XtUnspecifiedPixmap) {
+ XFillRectangle(XtDisplay(w), gvw->core.background_pixmap,
+ gvw->ghostview.gc,
+ 0, 0, gvw->core.width, gvw->core.height);
+ }
+ XClearArea(XtDisplay(w), XtWindow(w),
+ 0, 0, gvw->core.width, gvw->core.height, False);
+
+ if (gvw->ghostview.disable_start) return;
+
+ argv[argc++] = gvw->ghostview.interpreter;
+ argv[argc++] = "-sDEVICE=x11";
+ argv[argc++] = "-dNOPAUSE";
+ if (gvw->ghostview.quiet) argv[argc++] = "-dQUIET";
+ if (gvw->ghostview.safer) argv[argc++] = "-dSAFER";
+ argv[argc++] = "gvpdf.pro";
+ if (gvw->ghostview.arguments) {
+ cptr = arguments = XtNewString(gvw->ghostview.arguments);
+ while (isspace(*cptr)) cptr++;
+ while (*cptr) {
+ argv[argc++] = cptr;
+ while (*cptr && !isspace(*cptr)) cptr++;
+ if (*cptr) *cptr++ = '\0';
+ if (argc + 2 >= NUM_ARGS) {
+ fprintf(stderr, "Too many arguments to interpreter.\n");
+ exit(1);
+ }
+ while (isspace(*cptr)) cptr++;
+ }
+ }
+ argv[argc++] = "-";
+ argv[argc++] = NULL;
+
+ if (gvw->ghostview.filename == NULL) {
+ ret = pipe(std_in);
+ if (ret == -1) {
+ perror("Could not create pipe");
+ exit(1);
+ }
+ } else if (strcmp(gvw->ghostview.filename, "-")) {
+ std_in[0] = open(gvw->ghostview.filename, O_RDONLY, 0);
+ }
+ ret = pipe(std_out);
+ if (ret == -1) {
+ perror("Could not create pipe");
+ exit(1);
+ }
+ ret = pipe(std_err);
+ if (ret == -1) {
+ perror("Could not create pipe");
+ exit(1);
+ }
+
+ gvw->ghostview.changed = False;
+ gvw->ghostview.busy = True;
+ XDefineCursor(XtDisplay(gvw), XtWindow(gvw), gvw->ghostview.busy_cursor);
+#if defined(SYSV) || defined(USG)
+#define vfork fork
+#endif
+ gvw->ghostview.interpreter_pid = vfork();
+
+ if (gvw->ghostview.interpreter_pid == 0) { /* child */
+ close(std_out[0]);
+ close(std_err[0]);
+ dup2(std_out[1], 1);
+ close(std_out[1]);
+ dup2(std_err[1], 2);
+ close(std_err[1]);
+ sprintf(buf, "%d", XtWindow(w));
+ setenv("GHOSTVIEW", buf, True);
+ setenv("DISPLAY", XDisplayString(XtDisplay(w)), True);
+ if (gvw->ghostview.filename == NULL) {
+ close(std_in[1]);
+ dup2(std_in[0], 0);
+ close(std_in[0]);
+ } else if (strcmp(gvw->ghostview.filename, "-")) {
+ dup2(std_in[0], 0);
+ close(std_in[0]);
+ }
+ execvp(argv[0], argv);
+ sprintf(buf, "Exec of %s failed", argv[0]);
+ perror(buf);
+ _exit(1);
+ } else {
+ if (gvw->ghostview.filename == NULL) {
+#ifdef NON_BLOCKING_IO
+ int result;
+#endif
+ close(std_in[0]);
+
+#ifdef NON_BLOCKING_IO
+ result = fcntl(std_in[1], F_GETFL, 0);
+ result = result | O_NONBLOCK;
+ result = fcntl(std_in[1], F_SETFL, result);
+#endif
+ gvw->ghostview.interpreter_input = std_in[1];
+ gvw->ghostview.interpreter_input_id = None;
+ } else if (strcmp(gvw->ghostview.filename, "-")) {
+ close(std_in[0]);
+ }
+ close(std_out[1]);
+ gvw->ghostview.interpreter_output = std_out[0];
+ gvw->ghostview.interpreter_output_id =
+ XtAppAddInput(XtWidgetToApplicationContext(w), std_out[0],
+ (XtPointer)XtInputReadMask, Output, (XtPointer)w);
+ close(std_err[1]);
+ gvw->ghostview.interpreter_error = std_err[0];
+ gvw->ghostview.interpreter_error_id =
+ XtAppAddInput(XtWidgetToApplicationContext(w), std_err[0],
+ (XtPointer)XtInputReadMask, Output, (XtPointer)w);
+ }
+ if (arguments) XtFree(arguments);
+}
+
+/* Stop the interperter, if present, and remove any Input sources. */
+/* Also reset the busy state. */
+static void
+StopInterpreter(w)
+ Widget w;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ if (gvw->ghostview.interpreter_pid >= 0) {
+ kill(gvw->ghostview.interpreter_pid, SIGTERM);
+ wait(0);
+ gvw->ghostview.interpreter_pid = -1;
+ }
+ if (gvw->ghostview.interpreter_input >= 0) {
+ close(gvw->ghostview.interpreter_input);
+ gvw->ghostview.interpreter_input = -1;
+ if (gvw->ghostview.interpreter_input_id != None) {
+ XtRemoveInput(gvw->ghostview.interpreter_input_id);
+ gvw->ghostview.interpreter_input_id = None;
+ }
+ while (gvw->ghostview.ps_input) {
+ struct record_list *ps_old = gvw->ghostview.ps_input;
+ gvw->ghostview.ps_input = ps_old->next;
+ if (ps_old->close) fclose(ps_old->fp);
+ XtFree((char *)ps_old);
+ }
+ }
+ if (gvw->ghostview.interpreter_output >= 0) {
+ close(gvw->ghostview.interpreter_output);
+ gvw->ghostview.interpreter_output = -1;
+ XtRemoveInput(gvw->ghostview.interpreter_output_id);
+ }
+ if (gvw->ghostview.interpreter_error >= 0) {
+ close(gvw->ghostview.interpreter_error);
+ gvw->ghostview.interpreter_error = -1;
+ XtRemoveInput(gvw->ghostview.interpreter_error_id);
+ }
+ gvw->ghostview.busy = False;
+ XDefineCursor(XtDisplay(gvw), XtWindow(gvw), gvw->ghostview.cursor);
+}
+
+#endif /* VMS */
+
+/* The interpeter failed, Stop what's left and notify application */
+static void
+InterpreterFailed(w)
+ Widget w;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ StopInterpreter(w);
+ XtCallCallbackList(w, gvw->ghostview.message_callback, "Failed");
+}
+
+/*
+ * Public Routines
+ */
+
+/* GhostviewDisableInterpreter:
+ * Stop any interpreter and disable new ones from starting.
+ */
+void
+GhostviewDisableInterpreter(w)
+ Widget w;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ gvw->ghostview.disable_start = True;
+ if (XtIsRealized(w)) StopInterpreter(w);
+}
+
+/* GhostviewDisableInterpreter:
+ * Allow an interpreter to start and start one if the widget is
+ * currently realized.
+ */
+void
+GhostviewEnableInterpreter(w)
+ Widget w;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ gvw->ghostview.disable_start = False;
+ if (XtIsRealized(w)) StartInterpreter(w);
+}
+
+/* GhostviewIsInterpreterReady:
+ * Returns True if the interpreter is ready for new input.
+ */
+Boolean
+GhostviewIsInterpreterReady(w)
+ Widget w;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ return gvw->ghostview.interpreter_pid != -1 &&
+ !gvw->ghostview.busy &&
+ gvw->ghostview.ps_input == NULL;
+}
+
+/* GhostviewIsInterpreterRunning:
+ * Returns True if the interpreter is running.
+ */
+Boolean
+GhostviewIsInterpreterRunning(w)
+ Widget w;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ return gvw->ghostview.interpreter_pid != -1;
+}
+
+/* GhostviewGetBackingPixmap:
+ * Returns the current backing pixmap.
+ */
+Pixmap
+GhostviewGetBackingPixmap(w)
+ Widget w;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ if (gvw->core.background_pixmap != XtUnspecifiedPixmap)
+ return(gvw->core.background_pixmap);
+ else
+ return(None);
+}
+
+#ifndef VMS
+
+/* GhostviewSendPS:
+ * Queue a portion of a PostScript file for output to ghostscript.
+ * fp: FILE * of the file in question. NOTE: if you have several
+ * Ghostview widgets reading from the same file. You must open
+ * a unique FILE * for each widget.
+ * SendPS does not actually send the PostScript, it merely queues it
+ * for output.
+ * begin: position in file (returned from ftell()) to start.
+ * len: number of bytes to write.
+ *
+ * If an interpreter is not running, nothing is queued and
+ * False is returned.
+ */
+Boolean
+GhostviewSendPS(w, fp, begin, len, close)
+ Widget w;
+ FILE *fp;
+ long begin;
+ unsigned int len;
+ Bool close;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ struct record_list *ps_new;
+
+ if (gvw->ghostview.interpreter_input < 0) return False;
+ ps_new = (struct record_list *) XtMalloc(sizeof (struct record_list));
+ ps_new->fp = fp;
+ ps_new->begin = begin;
+ ps_new->len = len;
+ ps_new->seek_needed = True;
+ ps_new->close = close;
+ ps_new->next = NULL;
+
+ if (gvw->ghostview.input_buffer == NULL) {
+ gvw->ghostview.input_buffer = XtMalloc(GV_BUFSIZ);
+ }
+
+ if (gvw->ghostview.ps_input == NULL) {
+ gvw->ghostview.input_buffer_ptr = gvw->ghostview.input_buffer;
+ gvw->ghostview.bytes_left = len;
+ gvw->ghostview.buffer_bytes_left = 0;
+ gvw->ghostview.ps_input = ps_new;
+ gvw->ghostview.interpreter_input_id =
+ XtAppAddInput(XtWidgetToApplicationContext(w),
+ gvw->ghostview.interpreter_input,
+ (XtPointer)XtInputWriteMask, Input, (XtPointer)w);
+ } else {
+ struct record_list *p = gvw->ghostview.ps_input;
+ while (p->next != NULL) {
+ p = p->next;
+ }
+ p->next = ps_new;
+ }
+ return True;
+}
+
+#endif /* VMS */
+
+/* GhostviewNextPage:
+ * Tell ghostscript to start the next page.
+ * Returns False if ghostscript is not running, or not ready to start
+ * another page.
+ * If another page is started. Sets the busy flag and cursor.
+ */
+Boolean
+GhostviewNextPage(w)
+ Widget w;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ GhostviewWidgetClass gvc = (GhostviewWidgetClass) XtClass(w);
+ XEvent event;
+
+ if (gvw->ghostview.interpreter_pid < 0) return False;
+ if (gvw->ghostview.mwin == None) return False;
+
+ if (!gvw->ghostview.busy) {
+ gvw->ghostview.busy = True;
+ XDefineCursor(XtDisplay(gvw), XtWindow(gvw),
+ gvw->ghostview.busy_cursor);
+
+ event.xclient.type = ClientMessage;
+ event.xclient.display = XtDisplay(w);
+ event.xclient.window = gvw->ghostview.mwin;
+ event.xclient.message_type =
+ XmuInternAtom(XtDisplay(w), gvc->ghostview_class.next);
+ event.xclient.format = 32;
+ XSendEvent(XtDisplay(w), gvw->ghostview.mwin, False, 0, &event);
+ XFlush(XtDisplay(w)); /* And push it out */
+ return True;
+ } else {
+ return False;
+ }
+}
+
+#define done(type, value) \
+ { \
+ if (toVal->addr != NULL) { \
+ if (toVal->size < sizeof(type)) { \
+ toVal->size = sizeof(type); \
+ return False; \
+ } \
+ *(type*)(toVal->addr) = (value); \
+ } \
+ else { \
+ static type static_val; \
+ static_val = (value); \
+ toVal->addr = (XPointer)&static_val; \
+ } \
+ toVal->size = sizeof(type); \
+ return True; \
+ }
+
+/* PageOrienation Conversion Routine.
+ * Returns True if Conversion is successful.
+ */
+Boolean
+XmuCvtStringToPageOrientation(dpy, args, num_args, fromVal, toVal, data)
+ Display *dpy;
+ XrmValue *args; /* unused */
+ Cardinal *num_args; /* unused */
+ XrmValue *fromVal;
+ XrmValue *toVal;
+ XtPointer *data; /* unused */
+{
+ static XrmQuark XrmQEportrait;
+ static XrmQuark XrmQElandscape;
+ static XrmQuark XrmQEupsideDown;
+ static XrmQuark XrmQEseascape;
+ static int haveQuarks;
+ XrmQuark q;
+ char *str = (XPointer) fromVal->addr;
+ char lowerName[1000];
+
+ if (str == NULL) return False;
+
+ if (!haveQuarks) {
+ XrmQEportrait = XrmStringToQuark(XtEportrait);
+ XrmQElandscape = XrmStringToQuark(XtElandscape);
+ XrmQEupsideDown = XrmStringToQuark(XtEupsideDown);
+ XrmQEseascape = XrmStringToQuark(XtEseascape);
+ haveQuarks = 1;
+ }
+
+ XmuCopyISOLatin1Lowered(lowerName, str);
+
+ q = XrmStringToQuark(lowerName);
+
+ if (q == XrmQEportrait)
+ done(XtPageOrientation, XtPageOrientationPortrait);
+ if (q == XrmQElandscape)
+ done(XtPageOrientation, XtPageOrientationLandscape);
+ if (q == XrmQEupsideDown)
+ done(XtPageOrientation, XtPageOrientationUpsideDown);
+ if (q == XrmQEseascape)
+ done(XtPageOrientation, XtPageOrientationSeascape);
+
+ XtDisplayStringConversionWarning(dpy, str, XtRPageOrientation);
+ return False;
+}
+
+/* Palette Conversion Routine.
+ * Returns True if Conversion is successful.
+ */
+Boolean
+XmuCvtStringToPalette(dpy, args, num_args, fromVal, toVal, data)
+ Display *dpy;
+ XrmValue *args; /* unused */
+ Cardinal *num_args; /* unused */
+ XrmValue *fromVal;
+ XrmValue *toVal;
+ XtPointer *data; /* unused */
+{
+ static XrmQuark XrmQEmonochrome;
+ static XrmQuark XrmQEgrayscale;
+ static XrmQuark XrmQEcolor;
+ static int haveQuarks;
+ XrmQuark q;
+ char *str = (XPointer) fromVal->addr;
+ char lowerName[1000];
+
+ if (str == NULL) return False;
+
+ if (!haveQuarks) {
+ XrmQEmonochrome = XrmStringToQuark(XtEmonochrome);
+ XrmQEgrayscale = XrmStringToQuark(XtEgrayscale);
+ XrmQEcolor = XrmStringToQuark(XtEcolor);
+ haveQuarks = 1;
+ }
+
+ XmuCopyISOLatin1Lowered(lowerName, str);
+
+ q = XrmStringToQuark(lowerName);
+
+ if (q == XrmQEmonochrome)
+ done(XtPalette, XtPaletteMonochrome);
+ if (q == XrmQEgrayscale)
+ done(XtPalette, XtPaletteGrayscale);
+ if (q == XrmQEcolor)
+ done(XtPalette, XtPaletteColor);
+
+ XtDisplayStringConversionWarning(dpy, str, XtRPalette);
+ return False;
+}
+
+#ifdef VMS
+
+/*
+** VMS specific include files
+*/
+#include <descrip.h>
+#include <ssdef.h>
+#include <clidef.h>
+#include <lnmdef.h>
+#include <iodef.h>
+#include <dvidef.h>
+#include "vms_types.h"
+
+#define ERR_SIGNAL(s) if(!((s) & 1))lib$signal((s), 0, 0)
+#define XtEFN 23
+
+struct g_l_i
+{
+ GhostviewWidget w;
+ struct g_l_i *next;
+};
+
+typedef struct g_l_i GhostListItem, *GLI_p;
+
+static GhostListItem glhead = {(GhostviewWidget) -1, NULL};
+static GLI_p GL = &glhead;
+static size_t GLI_Size = sizeof(GhostListItem);
+static XtInputId EventId;
+
+/*
+** This routine is passed to XtAppAddInput(). It is called whenever the event
+** flag number XtEFN is set and the Xt main loop becomes idle. It clears the
+** event flag and then scans all the ghostview widgets for completed I/O
+** requests, processing each as they are found. We have to do them all because
+** there is no way to have Xt dispatch them individually without a window of
+** vulnerability that can cause missed events, or by using a separate event
+** flag for each I/O stream. Event flags are, unfortunately, a limited
+** resource.
+*/
+static Boolean
+IOProcess()
+{
+ GhostviewWidget gvw;
+ GLI_p cur;
+
+ /*
+ ** Before we process any I/O's, clear the event flag.
+ */
+ sys$clref(XtEFN);
+ /*
+ ** Scan all the ghostview widgets and check for completed I/O's
+ */
+ for(cur = GL->next; cur; cur = cur->next){
+ /*
+ ** Get the widget and check for I/O complete on either mailbox.
+ */
+ gvw = cur->w;
+ if(gvw->ghostview.interpreter_input_iosb[0])Input(gvw);
+ if(gvw->ghostview.interpreter_output_iosb[0])Output(gvw);
+ }
+}
+
+/*
+** This is an AST routine. It is called asynchronously whenever one of our
+** mailbox I/O's completes.
+*/
+static void
+IOComplete(client_data)
+ XtPointer client_data;
+{
+ /*
+ ** Set the event flag to tell Xt to call IOProcess.
+ */
+ sys$setef(XtEFN);
+}
+
+static void
+GLInsert(w)
+ GhostviewWidget w;
+{
+ GLI_p new;
+ int first;
+
+ /*
+ ** Insert this widget after the list head
+ */
+ first = (GL->next == NULL);
+ new = XtMalloc(GLI_Size);
+ new->w = w;
+ new->next = GL->next;
+ GL->next = new;
+ /*
+ ** If this is the first item on the list, call XtAppAddInput()
+ */
+ if(first)EventId = XtAppAddInput(XtWidgetToApplicationContext(w), XtEFN, 0,
+ IOProcess, 0);
+}
+
+static void
+GLRemove(w)
+ GhostviewWidget w;
+{
+ GLI_p prev, cur;
+ int last = 0;
+
+ /*
+ ** Find and remove this widget from the list.
+ */
+ prev = GL;
+ cur = prev->next;
+ while(cur && cur->w != w){
+ prev = cur;
+ cur = cur->next;
+ }
+ if(cur){
+ prev->next = cur->next;
+ XtFree(cur);
+ last = (GL->next == NULL);
+ }
+ /*
+ ** If this was the last item on the list, call XtRemoveInput()
+ */
+ if(last)XtRemoveInput(EventId);
+}
+
+/* Input - Feed data to ghostscript's stdin.
+ * Write bytes to ghostscript using non-blocking I/O.
+ * Also, pipe signals are caught during writing. The return
+ * values are checked and the appropriate action is taken. I do
+ * this at this low level, because it may not be appropriate for
+ * SIGPIPE to be caught for the overall application.
+ */
+
+static void
+Input(gvw)
+ GhostviewWidget gvw;
+{
+ int stat, bbytes;
+ char *ch;
+
+ /*
+ ** Check for error on previous I/O.
+ */
+ stat = gvw->ghostview.interpreter_input_iosb[0];
+ if(stat != SS$_NORMAL){
+ InterpreterFailed(gvw);
+ } else {
+
+ /* Get a new section if required */
+
+ if (gvw->ghostview.ps_input && gvw->ghostview.bytes_left == 0) {
+ struct record_list *ps_old = gvw->ghostview.ps_input;
+ gvw->ghostview.ps_input = ps_old->next;
+ if (ps_old->close) fclose(ps_old->fp);
+ XtFree((char *)ps_old);
+ }
+ if(gvw->ghostview.ps_input){
+ /* Have to seek at the beginning of each section */
+ if (gvw->ghostview.ps_input->seek_needed) {
+ if (gvw->ghostview.ps_input->len > 0)
+ fseek(gvw->ghostview.ps_input->fp,
+ gvw->ghostview.ps_input->begin, SEEK_SET);
+ gvw->ghostview.ps_input->seek_needed = False;
+ gvw->ghostview.bytes_left = gvw->ghostview.ps_input->len;
+ }
+ /*
+ ** Read a line from the file.
+ */
+ ch = fgets(gvw->ghostview.input_buffer, GV_BUFSIZ,
+ gvw->ghostview.ps_input->fp);
+ if(!ch){
+ /*
+ ** Error, EOF when there's supposed to be data left.
+ */
+ InterpreterFailed(gvw);
+ } else {
+ /*
+ ** Write it to the mailbox.
+ */
+ bbytes = strlen(gvw->ghostview.input_buffer);
+ gvw->ghostview.bytes_left -= bbytes;
+ stat = sys$qio(0, (short)gvw->ghostview.interpreter_input,
+ IO$_WRITEVBLK, &gvw->ghostview.interpreter_input_iosb,
+ IOComplete, 0, gvw->ghostview.input_buffer, bbytes,
+ 0, 0, 0, 0);
+ ERR_SIGNAL(stat);
+ }
+ }
+ }
+}
+
+/* Output - receive I/O from ghostscript's stdout and stderr.
+ * Pass this to the application via the output_callback. */
+static void
+Output(gvw)
+ GhostviewWidget gvw;
+{
+ char buf[GV_BUFSIZ+1];
+ int bytes, stat;
+
+ stat = gvw->ghostview.interpreter_output_iosb[0];
+ bytes = gvw->ghostview.interpreter_output_iosb[1];
+ if (stat == SS$_NORMAL) {
+ /*
+ ** Got a message. If line complete, pass to the output_callback.
+ **
+ ** HACK ALERT, if bytes is -1 nothing happens, but an I/O is queued.
+ ** This is our first time code, since Xt doesn't queue the I/O for us
+ ** under VMS, just watches for completion. In StartInterpreter We setup
+ ** an IOSB with a success status and -1 bytes so Xt will call us the
+ ** first time to get the I/O queued.
+ */
+ if (bytes == 0) {
+ strcpy(buf, "\n");
+ } else if (bytes == 1) {
+ buf[0] = gvw->ghostview.output_buffer[0];
+ buf[1] = '\0';
+ } else if (bytes > 1) {
+ /*
+ ** Copy the message to a local buffer and pass it to the callback.
+ */
+ memcpy(buf, gvw->ghostview.output_buffer, bytes);
+ buf[bytes] = '\0';
+ }
+ if(bytes >= 0)XtCallCallbackList(gvw, gvw->ghostview.output_callback,
+ (XtPointer) buf);
+ /*
+ ** Queue a new read to the mailbox
+ */
+ stat = sys$qio(0, (short)gvw->ghostview.interpreter_output,
+ IO$_READVBLK, &gvw->ghostview.interpreter_output_iosb, IOComplete,
+ 0, gvw->ghostview.output_buffer, GV_BUFSIZ, 0, 0, 0, 0);
+ ERR_SIGNAL(stat);
+ } else {
+ InterpreterFailed(gvw); /* Something bad happened */
+ }
+}
+
+/* This routine starts the interpreter. It sets the DISPLAY and
+ * GHOSTVIEW environment variables. The GHOSTVIEW environment variable
+ * contains the Window that ghostscript should write on.
+ *
+ * This routine also opens pipes for stdout and stderr and initializes
+ * application input events for them. If input to ghostscript is not
+ * from a file, a pipe for stdin is created. This pipe is setup for
+ * non-blocking I/O so that the user interface never "hangs" because of
+ * a write to ghostscript.
+ */
+static void
+StartInterpreter(w)
+ Widget w;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ char buf[GV_BUFSIZ];
+ char cmd[512];
+ int ret;
+ short ch1, ch2;
+ char in_mbx_name[65], out_mbx_name[65];
+ long pid, nowait = CLI$M_NOWAIT;
+ const $DESCRIPTOR(ghostview_desc, "GHOSTVIEW");
+ const $DESCRIPTOR(display_desc, "DECW$DISPLAY");
+ const $DESCRIPTOR(lnt_desc, "LNM$PROCESS");
+ $DESCRIPTOR(in_desc, "");
+ $DESCRIPTOR(out_desc, "");
+ $DESCRIPTOR(lnm_desc, "");
+ $DESCRIPTOR(cmd_desc, cmd);
+ ITEM_LIST_3_T(gv_list, 1) = {{{0, LNM$_STRING, buf, NULL}}, 0};
+ ITEM_LIST_3_T(dis_list, 1) = {{{0, LNM$_STRING, NULL, NULL}}, 0};
+ ITEM_LIST_3_T(dvi_list, 1) = {{{64, DVI$_DEVNAM, NULL, NULL}}, 0};
+ IOSB_GET_T dvi_iosb;
+
+ /*
+ ** Stop interpreter if running
+ */
+ StopInterpreter(w);
+ /*
+ ** Clear the window before starting a new interpreter.
+ */
+ if (gvw->core.background_pixmap != XtUnspecifiedPixmap) {
+ XFillRectangle(XtDisplay(w), gvw->core.background_pixmap,
+ gvw->ghostview.gc,
+ 0, 0, gvw->core.width, gvw->core.height);
+ }
+ XClearArea(XtDisplay(w), XtWindow(w),
+ 0, 0, gvw->core.width, gvw->core.height, False);
+ /*
+ ** Check for disabled.
+ */
+ if (gvw->ghostview.disable_start) return;
+ /*
+ ** Build Ghostscript startup command
+ */
+ strcpy(cmd, gvw->ghostview.interpreter);
+ strcat(cmd, " \"-sDEVICE=x11\" \"-dNOPAUSE\" ");
+ if (gvw->ghostview.quiet) strcat(cmd, "\"-dQUIET\" ");
+ if (gvw->ghostview.safer) strcat(cmd, "\"-dSAFER\" ");
+ if (gvw->ghostview.arguments) {
+ strcat(cmd, gvw->ghostview.arguments);
+ strcat(cmd, " ");
+ }
+ strcat(cmd, "\"-\" ");
+
+ /*
+ ** Determine input source.
+ */
+ if (gvw->ghostview.filename == NULL) {
+ /*
+ ** Create a mailbox to feed input to Ghostscript and get its name.
+ */
+ ret = sys$crembx(0, &ch1, GV_BUFSIZ, GV_BUFSIZ, 0, 0, 0, 0);
+ ERR_SIGNAL(ret);
+ dvi_list.item[0].buffer_p = in_mbx_name;
+ ret = sys$getdvi(0, ch1, 0, &dvi_list, &dvi_iosb, 0, 0, 0);
+ ERR_SIGNAL(ret); ERR_SIGNAL(dvi_iosb.status);
+ in_mbx_name[64] = '\0';
+ in_desc.dsc$a_pointer = in_mbx_name;
+ in_desc.dsc$w_length = strlen(in_mbx_name);
+ } else {
+ /*
+ ** Set up file name to give Ghostscript as standard input.
+ */
+ in_desc.dsc$a_pointer = gvw->ghostview.filename;
+ in_desc.dsc$w_length = strlen(gvw->ghostview.filename);
+ }
+ /*
+ ** Create mailbox to receive Ghostscript's output
+ */
+ ret = sys$crembx(0, &ch2, GV_BUFSIZ, GV_BUFSIZ, 0, 0, 0, 0);
+ ERR_SIGNAL(ret);
+ dvi_list.item[0].buffer_p = out_mbx_name;
+ ret = sys$getdvi(0, ch2, 0, &dvi_list, &dvi_iosb, 0, 0, 0);
+ ERR_SIGNAL(ret); ERR_SIGNAL(dvi_iosb.status);
+ out_mbx_name[64] = '\0';
+ out_desc.dsc$a_pointer = out_mbx_name;
+ out_desc.dsc$w_length = strlen(out_mbx_name);
+ /*
+ ** Create GHOSTVIEW and DECW$DISPLAY logical names.
+ **
+ ** We use CRELNM rather than LIB$SET_LOGICAL because we want these to be
+ ** user mode and go away when the program exits. It doesn't matter that we
+ ** may set them multiple times, as with the mailbox logicals, since once
+ ** Ghostscript starts we don't need them any more.
+ */
+ sprintf(buf, "%d", XtWindow(w));
+ gv_list.item[0].buffer_size = strlen(buf);
+ ret = sys$crelnm(0, &lnt_desc, &ghostview_desc, 0, &gv_list);
+ ERR_SIGNAL(ret);
+ dis_list.item[0].buffer_p = XDisplayString(XtDisplay(w));
+ dis_list.item[0].buffer_size = strlen(dis_list.item[0].buffer_p);
+ ret = sys$crelnm(0, &lnt_desc, &display_desc, 0, &dis_list);
+ ERR_SIGNAL(ret);
+ /*
+ ** Spawn Ghostscript process
+ */
+ gvw->ghostview.changed = False;
+ gvw->ghostview.busy = True;
+ cmd_desc.dsc$w_length = strlen(cmd);
+ ret = lib$spawn(&cmd_desc, &in_desc, &out_desc, &nowait, 0, &pid, 0, 0,
+ 0, 0, 0, 0, 0);
+ ERR_SIGNAL(ret);
+ XDefineCursor(XtDisplay(gvw), XtWindow(gvw), gvw->ghostview.busy_cursor);
+ /*
+ ** Everything worked, initialize IOSBs and save info about interpretter.
+ */
+ gvw->ghostview.interpreter_pid = pid;
+ if (gvw->ghostview.filename == NULL) {
+ gvw->ghostview.interpreter_input = ch1;
+ gvw->ghostview.interpreter_input_iosb[0] = 0;
+ }
+ gvw->ghostview.interpreter_output = ch2;
+ if (gvw->ghostview.output_buffer == NULL) {
+ gvw->ghostview.output_buffer = XtMalloc(GV_BUFSIZ);
+ }
+ GLInsert(gvw);
+ /*
+ ** Fake a completed I/O so Output will get called to queue the first I/O.
+ */
+ gvw->ghostview.interpreter_output_iosb[0] = SS$_NORMAL;
+ gvw->ghostview.interpreter_output_iosb[1] = -1;
+ IOComplete();
+}
+
+/* Stop the interperter, if present, and remove any Input sources. */
+/* Also reset the busy state. */
+static void
+StopInterpreter(w)
+ Widget w;
+{
+ int ret;
+
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ if (gvw->ghostview.interpreter_pid >= 0) {
+ ret = sys$delprc(&gvw->ghostview.interpreter_pid, 0);
+ if(ret != SS$_NORMAL && ret != SS$_NONEXPR)lib$signal(ret, 0, 0);
+ gvw->ghostview.interpreter_pid = -1;
+ }
+ if (gvw->ghostview.interpreter_input >= 0) {
+ (void) sys$dassgn(gvw->ghostview.interpreter_input);
+ gvw->ghostview.interpreter_input = -1;
+ while (gvw->ghostview.ps_input) {
+ struct record_list *ps_old = gvw->ghostview.ps_input;
+ gvw->ghostview.ps_input = ps_old->next;
+ if (ps_old->close) fclose(ps_old->fp);
+ XtFree((char *)ps_old);
+ }
+ }
+ if (gvw->ghostview.interpreter_output >= 0) {
+ (void) sys$dassgn(gvw->ghostview.interpreter_output);
+ gvw->ghostview.interpreter_output = -1;
+ }
+ gvw->ghostview.busy = False;
+ XDefineCursor(XtDisplay(gvw), XtWindow(gvw), gvw->ghostview.cursor);
+ GLRemove(gvw);
+}
+
+/* GhostviewSendPS:
+ * Queue a portion of a PostScript file for output to ghostscript.
+ * fp: FILE * of the file in question. NOTE: if you have several
+ * Ghostview widgets reading from the same file. You must open
+ * a unique FILE * for each widget.
+ * SendPS does not actually send the PostScript, it merely queues it
+ * for output.
+ * begin: position in file (returned from ftell()) to start.
+ * len: number of bytes to write.
+ *
+ * If an interpreter is not running, nothing is queued and
+ * False is returned.
+ */
+Boolean
+GhostviewSendPS(w, fp, begin, len, close)
+ Widget w;
+ FILE *fp;
+ long begin;
+ unsigned int len;
+ Bool close;
+{
+ GhostviewWidget gvw = (GhostviewWidget) w;
+ struct record_list *ps_new;
+
+ if (gvw->ghostview.interpreter_input < 0) return False;
+ if(len != 0){
+ ps_new = (struct record_list *) XtMalloc(sizeof (struct record_list));
+ ps_new->fp = fp;
+ ps_new->begin = begin;
+ ps_new->len = len;
+ ps_new->seek_needed = True;
+ ps_new->close = close;
+ ps_new->next = NULL;
+
+ if (gvw->ghostview.input_buffer == NULL) {
+ gvw->ghostview.input_buffer = XtMalloc(GV_BUFSIZ);
+ }
+
+ if (gvw->ghostview.ps_input == NULL) {
+ gvw->ghostview.bytes_left = len;
+ gvw->ghostview.ps_input = ps_new;
+ /*
+ ** Fake a completed I/O so Input will get called to queue the
+ ** first I/O.
+ */
+ gvw->ghostview.interpreter_input_iosb[0] = SS$_NORMAL;
+ gvw->ghostview.interpreter_input_iosb[1] = -1;
+ IOComplete();
+ } else {
+ struct record_list *p = gvw->ghostview.ps_input;
+ while (p->next != NULL) {
+ p = p->next;
+ }
+ p->next = ps_new;
+ }
+ }
+ return True;
+}
+#endif /* VMS */
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/Ghostview.h b/support/hypertex/tanmoy/ghostview-1.5-hacked/Ghostview.h
new file mode 100644
index 0000000000..d6f6fa5780
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/Ghostview.h
@@ -0,0 +1,210 @@
+/*
+ * Ghostview.h -- Public header file for Ghostview widget.
+ * Copyright (C) 1992 Timothy O. Theisen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Tim Theisen Systems Programmer
+ * Internet: tim@cs.wisc.edu Department of Computer Sciences
+ * UUCP: uwvax!tim University of Wisconsin-Madison
+ * Phone: (608)262-0438 1210 West Dayton Street
+ * FAX: (608)262-9777 Madison, WI 53706
+ */
+
+#ifndef _Ghostview_h
+#define _Ghostview_h
+/* Be sure that FILE* is defined */
+#include <stdio.h>
+
+/****************************************************************
+ *
+ * Ghostview widget
+ *
+ ****************************************************************/
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ arguments Arguments String NULL
+ background Background Pixel XtDefaultBackground
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ bottomMargin Margin int 0
+ busyCursor Cursor Cursor watch
+ callback Callback Pointer NULL
+ cursor Cursor Cursor crosshair
+ destroyCallback Callback Pointer NULL
+ filename Filename String "-"
+ foreground Foreground Pixel XtDefaultForeground
+ height Height Dimension 0
+ interpreter Interpreter String "gs"
+ leftMargin Margin int 0
+ llx BoundingBox Int 0
+ lly BoundingBox Int 0
+ mappedWhenManaged MappedWhenManaged Boolean True
+ messageCallback Callback Pointer NULL
+ orientation Orientation PageOrientation Portrait
+ outputCallback Callback Pointer NULL
+ palette Palette Palette Color
+ quiet Quiet Boolean True
+ rightMargin Margin int 0
+ safer Safer Boolean True
+ topMargin Margin int 0
+ urx BoundingBox Int 612
+ ury BoundingBox Int 792
+ useBackingPixmap UseBackingPixmap Boolean True
+ width Width Dimension 0
+ x Position Position 0
+ xdpi Resolution Float **
+ y Position Position 0
+ ydpi Resolution Float **
+
+ ** automatically calculated from display parameters if width and
+ height are not set.
+
+*/
+
+/* define any special resource names here that are not in <X11/StringDefs.h> */
+
+#define XtNbusyCursor "busyCursor"
+#define XtNcursor "cursor"
+#define XtNfilename "filename"
+#define XtNinterpreter "interpreter"
+#define XtNmessageCallback "messageCallback"
+#define XtNoutputCallback "outputCallback"
+#define XtNpalette "palette"
+#define XtNarguments "arguments"
+#define XtNquiet "quiet"
+#define XtNsafer "safer"
+#define XtNllx "llx"
+#define XtNlly "lly"
+#define XtNurx "urx"
+#define XtNury "ury"
+#define XtNuseBackingPixmap "useBackingPixmap"
+#define XtNxdpi "xdpi"
+#define XtNydpi "ydpi"
+#define XtNrightMargin "rightMargin"
+#define XtNleftMargin "leftMargin"
+#define XtNbottomMargin "bottomMargin"
+#define XtNtopMargin "topMargin"
+
+#define XtCBoundingBox "BoundingBox"
+#define XtCFilename "Filename"
+#define XtCInterpreter "Interpreter"
+#define XtCPalette "Palette"
+#define XtCArguments "Arguments"
+#define XtCQuiet "Quiet"
+#define XtCSafer "Safer"
+#define XtCResolution "Resolution"
+#define XtCUseBackingPixmap "UseBackingPixmap"
+
+/******************************************************************************
+ * XmuCvtStringToPageOrientation
+ */
+/* Number represents clockwise rotation of the paper in degrees */
+typedef enum {
+ XtPageOrientationPortrait = 0, /* Normal portrait orientation */
+ XtPageOrientationLandscape = 90, /* Normal landscape orientation */
+ XtPageOrientationUpsideDown = 180, /* Don't think this will be used much */
+ XtPageOrientationSeascape = 270 /* Landscape rotated the other way */
+} XtPageOrientation;
+#define XtEportrait "portrait"
+#define XtElandscape "landscape"
+#define XtEupsideDown "upside-down"
+#define XtEseascape "seascape"
+#define XtRPageOrientation "PageOrientation"
+extern Boolean XmuCvtStringToPageOrientation();
+
+/******************************************************************************
+ * XmuCvtStringToPalette
+ */
+typedef enum {
+ XtPaletteMonochrome,
+ XtPaletteGrayscale,
+ XtPaletteColor
+} XtPalette;
+#define XtEmonochrome "monochrome"
+#define XtEgrayscale "grayscale"
+#define XtEcolor "color"
+#define XtRPalette "Palette"
+extern Boolean XmuCvtStringToPalette();
+
+/* declare specific GhostviewWidget class and instance datatypes */
+
+typedef struct _GhostviewClassRec* GhostviewWidgetClass;
+typedef struct _GhostviewRec* GhostviewWidget;
+
+/* declare the class constant */
+
+extern WidgetClass ghostviewWidgetClass;
+
+/* Public routines */
+
+extern void GhostviewEnableInterpreter(
+#if NeedFunctionPrototypes
+ Widget /* w */
+#endif
+);
+
+extern void GhostviewDisableInterpreter(
+#if NeedFunctionPrototypes
+ Widget /* w */
+#endif
+);
+
+extern Boolean GhostviewIsInterpreterReady(
+#if NeedFunctionPrototypes
+ Widget /* w */
+#endif
+);
+
+extern Boolean GhostviewIsInterpreterRunning(
+#if NeedFunctionPrototypes
+ Widget /* w */
+#endif
+);
+
+extern Pixmap GhostviewGetBackingPixmap(
+#if NeedFunctionPrototypes
+ Widget /* w */
+#endif
+);
+
+extern Boolean GhostviewSendPS(
+#if NeedFunctionPrototypes
+ Widget /* widget */,
+ FILE* /* fp */,
+ long /* begin */,
+ unsigned int /* len */,
+ Bool /* close */
+#endif
+);
+
+extern Boolean GhostviewNextPage(
+#if NeedFunctionPrototypes
+ Widget /* w */
+#endif
+);
+
+/* The structure returned by the regular callback */
+
+typedef struct _GhostviewReturnStruct {
+ int width, height;
+ int psx, psy;
+ float xdpi, ydpi;
+} GhostviewReturnStruct;
+
+#endif /* _Ghostview_h */
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/GhostviewP.h b/support/hypertex/tanmoy/ghostview-1.5-hacked/GhostviewP.h
new file mode 100644
index 0000000000..0749b2dc34
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/GhostviewP.h
@@ -0,0 +1,120 @@
+/*
+ * GhostviewP.h -- Private header file for Ghostview widget.
+ * Copyright (C) 1992 Timothy O. Theisen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Tim Theisen Systems Programmer
+ * Internet: tim@cs.wisc.edu Department of Computer Sciences
+ * UUCP: uwvax!tim University of Wisconsin-Madison
+ * Phone: (608)262-0438 1210 West Dayton Street
+ * FAX: (608)262-9777 Madison, WI 53706
+ */
+
+#ifndef _GhostviewP_h
+#define _GhostviewP_h
+
+#include "Ghostview.h"
+#include <X11/Xmu/Atoms.h>
+#include <X11/Xmu/CharSet.h>
+#include <stdio.h>
+
+typedef struct {
+ AtomPtr ghostview;
+ AtomPtr gv_colors;
+ AtomPtr next;
+ AtomPtr page;
+ AtomPtr done;
+} GhostviewClassPart;
+
+typedef struct _GhostviewClassRec {
+ CoreClassPart core_class;
+ GhostviewClassPart ghostview_class;
+} GhostviewClassRec;
+
+extern GhostviewClassRec ghostviewClassRec;
+
+/* structure to describe section of file to send to ghostscript */
+struct record_list {
+ FILE *fp;
+ long begin;
+ unsigned int len;
+ Boolean seek_needed;
+ Boolean close;
+ struct record_list *next;
+};
+
+typedef struct {
+ /* resources */
+ Pixel foreground;
+ Cursor cursor;
+ Cursor busy_cursor;
+ XtCallbackList callback;
+ XtCallbackList message_callback;
+ XtCallbackList output_callback;
+ String interpreter;
+ Boolean quiet;
+ Boolean safer;
+ Boolean use_bpixmap;
+ String arguments;
+ String filename;
+ XtPageOrientation orientation;
+ XtPalette palette;
+ float xdpi;
+ float ydpi;
+ int llx;
+ int lly;
+ int urx;
+ int ury;
+ int left_margin;
+ int bottom_margin;
+ int right_margin;
+ int top_margin;
+ /* private state */
+ GC gc; /* GC used to clear window */
+ Window mwin; /* destination of ghostsript messages */
+ Boolean disable_start; /* whether to fork ghostscript */
+ int interpreter_pid;/* pid of ghostscript, -1 if none */
+ struct record_list *ps_input; /* pointer it gs input queue */
+ char *input_buffer; /* pointer to input buffer */
+ unsigned int bytes_left; /* bytes left in section */
+#ifndef VMS
+ char *input_buffer_ptr; /* pointer into input buffer */
+ unsigned int buffer_bytes_left; /* bytes left in buffer */
+#endif
+ int interpreter_input; /* fd gs stdin, -1 if None */
+ int interpreter_output; /* fd gs stdout, -1 if None */
+#ifndef VMS
+ int interpreter_error; /* fd gs stderr, -1 if None */
+ XtInputId interpreter_input_id; /* XtInputId for above */
+ XtInputId interpreter_output_id; /* XtInputId for above */
+ XtInputId interpreter_error_id; /* XtInputId for above */
+#else /* VMS */
+ short interpreter_input_iosb[4]; /* I/O Status Blocks */
+ short interpreter_output_iosb[4]; /* for each mailbox */
+ char *output_buffer; /* pointer to output buffer */
+#endif /* VMS */
+ Dimension gs_width; /* Width of window at last Setup() */
+ Dimension gs_height; /* Height of window at last Setup() */
+ Boolean busy; /* Is gs busy drawing? */
+ Boolean changed; /* something changed since Setup()? */
+} GhostviewPart;
+
+typedef struct _GhostviewRec {
+ CorePart core;
+ GhostviewPart ghostview;
+} GhostviewRec;
+
+#endif /* _GhostviewP_h */
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/HISTORY b/support/hypertex/tanmoy/ghostview-1.5-hacked/HISTORY
new file mode 100644
index 0000000000..36d008228d
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/HISTORY
@@ -0,0 +1,453 @@
+==================== ghostview 1.5 HACKED (25 Jul 93) =====================
+
+ Hacked by tanmoy@qcd.lanl.gov to support pdfmarks (alpha release)
+
+==================== ghostview 1.5 (25 Jul 93) =====================
+
+ 1. Minimize comparison is DSC scanner to further speed it up.
+
+ 2. Modify MenuButton translations to popup menu under any combination
+ of modifiers.
+
+ 3. Change all occurances of .Translation to .translation to allow #augment
+ and #override to work properly.
+
+ 4. Rename ghostview widget "preload" resource to "arguments".
+
+ 5. Add foreground and palette resources to Ghostview widget.
+ Allow user to set the palette from the command line.
+ Remove special visual and special cmap code.
+
+ 6. Remove Standard Color Map installation code.
+
+ 7. Sync the connection just after setting the properties to ensure they
+ are set when gs starts. Flush the next page event to ensure ghostscript
+ starts right away.
+
+ 8. Fix up bug in pasting of arguments into exec() call.
+
+ 9. Add safer resource and make it the default.
+
+10. Apply HOME directory selfile fix from Erik van der Poel.
+
+11. Invoke ad2c with sh, so it work properly with for people using VPATH.
+
+12. Improve comment scanner. Avoid allocating 0 bytes when %%Pages: 0
+ is present. Blank lines are counted with the section that they follow.
+ This is necessary one one decides that the current section being scanned
+ belong somewhere else.
+
+13. Various portability patches. (For Alpha-OSF/1 in particular.)
+
+==================== ghostview 1.4.1 ( 2 Nov 92) =====================
+
+ 1. Fix a couple of bugs introduced into the PostScript comment scanner.
+ - Change isblank() to blank() to avoid name clash.
+ - Upgrade blank() to call not DSC comments blank lines.
+ - Avoid core dump by guarding against garbage bewteen the %%EndSetup
+ and first %%Page.
+ - Collsaped sections (Documents, Files, ProcSets, etc.) are no longer
+ returned as a comment line. They are now properly recognized.
+ - Avoid looping by truncating line buffer at EOF.
+
+ 2. Synchronize X connection before trying to force error associated with
+ backing pixmap.
+
+ 3. Add <Tab> as another keyboard accelerator for Next.
+
+==================== ghostview 1.4 (11 Oct 92) =====================
+
+ 1. Merge in VMS support from Terry Poot <tp@mccall.com>.
+
+ 2. Force the Alloc error to occur immediately after trying to allocate
+ the backing pixmap. Deal with it as best as we can.
+
+ 3. Withdraw unused function GhostviewGetInputFileDescriptor().
+
+ 4. Use XCOMM trick from X11R5 to make Imakefile more portable.
+
+ 5. Renamed ghostview.h to gv.h and Ghostview.ad.h to app-defaults.h to
+ avoid limitations in VMS file names.
+
+ 6. Correct problem where ghostscript interpreter was not being killed
+ when the popup zoom window was dismissed.
+
+ 7. Propagate error messages about alloc failures and interpreter failures
+ in both main and zoom windows back to the information window.
+
+ 8. Catch X errors and gracefully die if one occurs.
+
+ 9. Relayout ghostview whenever the document requests a new orientation or
+ page media.
+
+10. Allow for multipage encapsulated PostScript figures.
+
+11. More upgrades to PostScript scanner.
+ - Comment section now terminated by %X where X is unprintable.
+ - Length of section is now properly computed when there is an
+ included document.
+ - Cleaned up misuse of global variables.
+ - Ignore comments within %%Begin(End)Feature, %%Begin(End)File,
+ %%Begin(End)Font, %%Begin(End)ProcSet, %%Begin(End)Resource.
+ - Change enum {LLX, LLY, URX, URY} to #defines to avoid confusing some
+ compilers.
+
+12. Pay attention to ordinal number on %%Page comment to detect included
+ figures without %%Begin(End)Document guards.
+
+13. Added reopen button.
+
+14. Small POSIX change in Dir.c
+
+15. Make installStdCmap false by default.
+
+16. Fix error where wrong pages were being saved or printed when descending
+ page order is used.
+
+17. Be sure to discard old backing pixmap if new alloc fails.
+
+==================== ghostview 1.3-terry (30 May 92) =====================
+
+ 1. Rework the DSC comment scanner to return the length of the section as
+ well as the start and end position.
+
+ 2. Rework sending PostScript input down the pipe to eliminate a gross
+ efficiency problem. I/O is done in 512 byte buffers rather than
+ line by line. As many buffers as possible are sent before returning
+ from routine.
+
+ 3. Change Path.c to include <X11/Xos.h> to get <sys/types.h> and define
+ getuid in terms of uid_t.
+
+ 4. Added #defines for memset() and memcpy() for use when BSD4_2 is defined.
+
+==================== ghostview 1.3 (12 May 92) =====================
+
+ 1. Fix bug where EPSF figures with a %%Page comment would cause ghostview
+ to use garbage for the orientation or media.
+
+ 2. Redid waiting for form to change size before reattaching the chains the X
+ way. (Previous algorithm used a subsidiary event loop. It was prone
+ to getting stuck with the wrong app-defaults.) The new algorithm uses
+ timer events with exponential backoff.
+
+ 3. Added Prior and Next keys to page back and forward.
+
+ 4. Added GhostviewCheckFile action and bound it to MapNotify. Ghostview will
+ now redraw the current page on deiconify when the file has changed.
+
+ 5. Added application resource for the name of the PRINER environment variable.
+ Default is LPDEST for SYSV and PRINTER for BSD. Also changed printer
+ command to default to lp for SYSV and lpr for BSD.
+
+ 6. Change Print Marked Pages to mark the current selection or current page
+ when no pages are marked. It unmarks any page that it marked after sending
+ output to the print command. Also, change Print Marked Pages to call
+ print whole when there was no table of contents. This allows people to
+ print a EPSF figure without having to press Shift P.
+
+ 7. Automatically center page within viewport. autoCenter app-default or
+ -nocenter can be used to disable this behavior. Add Center to Page menu
+ and GhostviewCenter action and bind it to the C key.
+
+ 8. Reworked the way that popup zoom windows work. The notify event contains
+ both the window size desired and resolution desired. This allows much
+ greater flexibility in the zoom windows. Changed the default zooms to
+ be all 500x500 pixels at 200, 300, and 400 dpi. Popup zoom windows can
+ be dismissed with the new dismiss button or pressing Q within the window.
+
+ 9. Added -page <label> to start preview at a specific page.
+
+10. Made minor change in Path.c for OCS88.
+ (88open Object Compatibility Standard)
+
+11. Disable interpreter earlier in setup_ghostview to avoid forking a new
+ gs and then immediately killing it.
+
+12. Correct generation of page numbers for documents without useful page labels
+ and descending page order.
+
+13. Coerce Magstep specified on command line in range.
+
+14. Add U and D for scroll up and down. Moved unmark keyboard accelerator
+ to N.
+
+15. Add a couple of type casts to pacify some really picky compilers.
+
+16. Use vfork() instead of fork(), except when SYSV or USG is defined.
+
+==================== ghostview 1.2 (21 Apr 92) =====================
+
+ 1. Apply patch from Jonathan Stone <jonathan@isor.vuw.ac.nz> to
+ explicitly call ./ad2c.
+
+ 2. Fix problem with occasionally leaving an old file open.
+
+ 3. Apply portability patches to SelFile widget for Interactive 2.2 from
+ Karl Berry <karl@cs.umb.edu>. Also added .NOEXPORT to the Imakefile.
+
+ 4. Apply portability patches to SelFile widget for SVR4 from Kimmo Suominen
+ <Kimmo.Suominen@lut.fi>.
+
+ 5. Fix error where wrong page(s) is(are) selected for printing in a
+ document with Descending page order.
+
+ 6. Added .defaultPrinter application resource. This string is used as
+ the printer name if the PRINTER enviroment variable is not set. Also,
+ allow the user to specify a NULL printername.
+
+ 7. The Redisplay button was bound to the Next Page function. It is correct
+ now.
+
+ 8. It has been pointed out to me (repeatedly) that most users' screens are
+ landscape orientation and the documents that they want to preview are
+ portrait orientation placing a high value on sceen real estate in the
+ vertical direction. I have changed the layout to use vertical space for
+ the viewport alone. (Added undocumented action to <Key>Z to trigger
+ relayout.)
+
+ 9. Installed workaround for when form does not give me the sizes that I
+ asked for. (Set all sizes, force relayout, request all sizes, if something
+ different repeat.) Also, wait for shell resize before putting
+ wm_size_hints in effect.
+
+10. Tab stops adjusted in man page to work for both nroff and troff.
+
+11. Added the following optimization: If reopening the same file and the
+ prolog and setup are at the same place (byte position) in the file,
+ assume that the prolog is identical and don't restart gs.
+
+12. Move "*input: true" and "*allowShellResize: true" to the app-defaults file.
+
+13. Mark values from the DSC comments with the "document" icon in the popup
+ menus.
+
+14. Since the title and date are sometimes truncated by the new layout, make
+ them one item popup menus with the optional "document" icon.
+
+15. Added two routines to the Ghostview widget that allows the application to
+ query whether ghostscript is ready for new input, or if it is running.
+ (It has to keep track of this already so why make the application do it as
+ well.)
+
+16. Avoid unnecessary restarting of ghostscript when user initiates changes
+ that have no effect on the current page.
+
+17. Don't rebuild the pagemedia menu on every document open. Just when the
+ media list changes.
+
+18. Added an option/application resource so that the user can control whether
+ a standard colormap is installed.
+
+19. Added an option/application resource so that the user can control whether
+ a private colormap is used.
+
+==================== ghostview 1.1 (25 Mar 92) =====================
+
+ 1. Remove HP-widget fluff from SelFile routines.
+
+ 2. Remove pre-R4 fluff from SelFile routines.
+
+ 3. Change "About..." popup to "Copyright..."
+
+ 4. Added "Redisplay" menu button.
+
+ 5. Changed name of topsy-turvy to seascape.
+
+ 6. Added baseTranslations for X11R5.
+
+ 7. Added F and B as synonyms for Next Page and Prev Page.
+
+ 8. Added R and ctrl-L as synonyms for Redisplay Page.
+
+ 9. Reworked NON_BLOCKING_IO to work with POSIX and SYSV.
+
+10. Added margins to the Ghostview widget. This lets the popup zoom
+ window "fool" tricky PostScript figure into thinking they have the
+ whole page to draw on.
+
+11. Added preload resource to ghostview widget. This allows on to preload
+ fonts for instance. Real handy for drawings that like to load fonts
+ over and over again.
+
+12. Added GhostviewGetInputFileDescriptor convenience routine for other
+ applications that might like to use the widget.
+
+13. Fix XmuCvtStringToPageOrientation type converter. Used to just assume
+ the it would allocate the storage. Now will write into preallocated
+ storage. (This fixed command line orientation options.)
+
+14. Adopt ad2c for generating fallback resources. Rework Imakefile to
+ include that and streamline SIGNAL_DEFINES.
+
+15. Two malloc mistakes fixed (Used 1 more byte than alloced.)
+
+16. Include HOME_ON_DEMAND patch from Erik to reduce network load of
+ SelFile widget when users home directories are NFS mounted.
+
+17. Reworked SelFile widget to be a transient shell, and automatically
+ place itself under the cursor.
+
+18. Reworked SelFile widget to acutally open the requested file. Then
+ it doesn't pop down and back up again when the user makes a mistake.
+
+19. Changed overall size calculation to be precise. Add window manager
+ horizontal and vertical margins for those who want to be as precise.
+
+20. Added a work around for ncdwm users. Xt intrinsics put bogus information
+ into size hints. Changing this slightly allows ncdwm to work right.
+
+21. Fix bug when left bitmap of date or locator would be set when title
+ was not realized.
+
+22. Make dialog box a transient window for the main window. (This resource
+ had to be set after both were realized.)
+
+23. Delay mapping main window until after all geometry negotiation is done.
+
+24. Fix bug (introduced in beta4) which would cause page numbers, rather
+ then page labels to be used.
+
+25. Don't replace the std cmap, just use what is there.
+
+26. Man page included.
+
+27. Always clear the window before starting interpreter.
+
+28. Only popup the information window once.
+
+==================== ghostview 1.0 beta 4 (05 Nov 91) =====================
+
+1. Changes for X11R5.
+ - Fix up bogus function prototypes.
+ - Type casts inserted where appropriate.
+
+2. Added Delete Window protocol to SelFile widget.
+
+3. Added chains within SelFile form widget. (Otherwise resizing would
+ mess up its appearance.)
+
+4. Correct problem with Text widget and useStringInPlace.
+
+5. Moved setting of size hints to a separate routine.
+
+6. Reset scroll bars of Viewport widget to 0 before resizing.
+ (If Viewport goofs up it resize a nonzero scroll postion.)
+ Scroll bars a set back to original location after the resize.
+
+7. Change resize routine to accurate calculate new size when checking to
+ make sure it isn't bigger than the screen.
+
+8. Added two checks for exhausted dynamic memory after malloc.
+
+9. Fixup parsing of comments when copying to a new file.
+
+10.Fixup default pagemedia so that it is still in effect after viewing
+ a document with a pagemedia specified in the PostScript comments.
+
+==================== ghostview 1.0 beta 3 (07 Aug 91) =====================
+
+1. Ability to print whole file as well as selected pages.
+
+2. Put locator within form widget rather than popping it up.
+
+3. Send a message whenever the interpreter (ghostscript) fails (dumps core).
+
+4. Add a convenience routine to Ghostview widget to return the backing pixmap.
+
+5. Reworked the handling of dialog widgets.
+
+6. Optionally include the SelFile file selector for open and save dialogs.
+
+7. Corrected code that gave size hints to the window manager. Things
+ now resize properly under motif. Also, set size hints via SetValues
+ rather than directly.
+
+8. Fixed up problem that could cause core dumps when switching files.
+
+9. Removed hard coding of background to white and foreground to black
+ when using the default colormap. If a special visual is used, you
+ have to live with black and white.
+
+10.Added check to make sure app-defaults were installed.
+
+11.Made the display of title, date, and locator optional.
+
+12.Rework command line options.
+
+13.Allow input from stdin.
+
+14.Ensure that orientation was set from app-defaults/command-line rather
+ than individual Ghostview resources.
+
+15.Made next button insensitive on last page and prev button insensitive
+ on first page.
+
+16.Correct problem where the files would appear to switch but the previous
+ one would continue to be displayed.
+
+17.Changed the type of "distance" from Dimension to int. (This would cause
+ core dumps on some architectures.)
+
+18.Changed pscopydoc to preserve the second argument to the %%Pages: comment.
+
+19.Changed pscopydoc to not use the same FILE* as main.
+
+20.added openwindows option/app-default to work-around openwindows bitmap bug.
+
+21.Rewrote addr+enum_const expressions to &(addr[enum_const]) to pacify some
+ compilers.
+
+==================== ghostview 1.0 beta 2 (24 Jul 91) =====================
+
+Portability:
+ - include <fcntl.h> on all systems for O_NDELAY
+ - set O_NDELAY = O_NONBLOCK for system V and POSIX systems
+ - set EWOULDBLOCK = EAGAIN for system V and POSIX systems
+ - include the free BSD sources for getenv, setenv, and strcasecmp
+ for systems the don't have them.
+ - Recoded XtSetFloatArg to be more portable.
+
+Bugs fixed:
+ - PostScript Scanner properly handles nested documents (%%BeginDocument:)
+ - Only one (correct) %%Pages: comment in saved or printed file.
+ - Prevent dialog box components from getting squished.
+ - GhostviewSetOrientation action works now.
+ - GhostviewSetPageMedia action works now.
+ - Documents with structuring comments, but no pages don't cause core dumps.
+ - Bug in AsciiText widget was worked-around to avoid core dumps when
+ switching to another document.
+ - Documents with pages in Descending order now have the table of contents
+ displayed in reverse order.
+
+Resource leaks plugged:
+ - Input buffer and backing pixmap are now freed when widget is destroyed.
+ - Input file descriptor is closed on zoom windows.
+
+Enhancements: (Thanks for the suggestions.)
+ - When forcing a page media or orientation on a page, indicate that fact
+ with a different marker on the orientation and/or page media menu.
+ - Allow a forced page media to override the bounding box on epsf figures.
+ - Added a locator which displays the coordinates in the default PostScript
+ coordinate system while the mouse button is pressed in the main viewport.
+ To avoid popping up a zoom window, leave the main viewport before releasing
+ the mouse button.
+ - All top level windows now understand WM_DELETE_WINDOW protocol. mwm
+ users can use the close button.
+ - If all the page labels are identical, use the ordinal page number instead.
+ - Added popup dialog box to specify printer. The default is the contents
+ of the PRINTER environment variable.
+ - Added actions to allow scrolling of main viewport from keyboard.
+ These are currently bound to h,j,k,l.
+ - Enhanced PostScript scanner to accept real numbers on %%BoundingBox:
+ comments. (Didn't anyone read the spec, it calls for integers!)
+ - Added a limit check in increase/decrease magstep to prevent the magstep
+ from being off the menu. (People objected to not being able to check the
+ magstep.)
+ - Added an option to the Ghostview widget to use backing store instead
+ of a backing pixmap. (set "*Ghostview.useBackingPixmap: False" to use
+ backing store.)
+
+==================== ghostview 1.0 beta 1 (17 Jul 91) =====================
+
+Original Release, No changes.
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/Imakefile b/support/hypertex/tanmoy/ghostview-1.5-hacked/Imakefile
new file mode 100644
index 0000000000..d21c4c5561
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/Imakefile
@@ -0,0 +1,81 @@
+#ifndef XCOMM
+#define XCOMM #
+#endif
+
+XCOMM Imakefile -- Imakefile for ghostview.
+XCOMM Copyright (C) 1992 Timothy O. Theisen
+XCOMM
+XCOMM This program is free software; you can redistribute it and/or modify
+XCOMM it under the terms of the GNU General Public License as published by
+XCOMM the Free Software Foundation; either version 2 of the License, or
+XCOMM (at your option) any later version.
+XCOMM
+XCOMM This program is distributed in the hope that it will be useful,
+XCOMM but WITHOUT ANY WARRANTY; without even the implied warranty of
+XCOMM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+XCOMM GNU General Public License for more details.
+XCOMM
+XCOMM You should have received a copy of the GNU General Public License
+XCOMM along with this program; if not, write to the Free Software
+XCOMM Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+XCOMM
+XCOMM Author: Tim Theisen Systems Programmer
+XCOMM Internet: tim@cs.wisc.edu Department of Computer Sciences
+XCOMM UUCP: uwvax!tim University of Wisconsin-Madison
+XCOMM Phone: (608)262-0438 1210 West Dayton Street
+XCOMM FAX: (608)262-9777 Madison, WI 53706
+
+
+XCOMM This file is part of the hacked version of the ghostview package
+XCOMM which is distributed under the terms of the gnu license. The
+XCOMM modification referred to above is by Tanmoy Bhattacharya,
+XCOMM <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification,
+XCOMM nor the original program provides any warranty.
+
+ GS_DIR = /usr/local/lib/ghostscript
+
+#define Use_SelFile
+
+#ifdef Use_SelFile
+ SRCS = main.c misc.c callbacks.c actions.c dialogs.c \
+ Ghostview.c ps.c getenv.c setenv.c strcasecmp.c \
+ SelFile.c Dir.c Path.c Draw.c pdf.c
+ OBJS = main.o misc.o callbacks.o actions.o dialogs.o \
+ Ghostview.o ps.o getenv.o setenv.o strcasecmp.o \
+ SelFile.o Dir.o Path.o Draw.o pdf.o
+ SELFILE_DEFINE = -DSELFILE
+#else
+ SRCS = main.c misc.c callbacks.c actions.c dialogs.c \
+ Ghostview.c ps.c getenv.c setenv.c strcasecmp.c pdf.c
+ OBJS = main.o misc.o callbacks.o actions.o dialogs.o \
+ Ghostview.o ps.o getenv.o setenv.o strcasecmp.o pdf.o
+ SELFILE_DEFINE =
+#endif
+
+ DEPLIBS = XawClientDepLibs
+LOCAL_LIBRARIES = XawClientLibs
+ SYS_LIBRARIES = -lm
+
+XCOMM Add -DBSD4_2 to DEFINES if you system does not have memset() and memcpy()
+XCOMM Remove -DNOMEMMOVE if memmove exists.
+
+ DEFINES = -DNON_BLOCKING_IO -DNOMEMMOVE \
+ $(SIGNAL_DEFINES) $(SELFILE_DEFINE)
+
+.NOEXPORT:
+
+AllTarget(ghostview)
+
+depend:: app-defaults.h
+
+ComplexProgramTarget(ghostview)
+InstallAppDefaults(Ghostview)
+InstallNonExec(gvpdf.pro,$(GS_DIR))
+
+main.o: app-defaults.h
+
+app-defaults.h: Ghostview.ad ad2c
+ sh ad2c Ghostview.ad > app-defaults.h
+
+clean::
+ $(RM) app-defaults.h
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/Makefile b/support/hypertex/tanmoy/ghostview-1.5-hacked/Makefile
new file mode 100644
index 0000000000..5b05db8071
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/Makefile
@@ -0,0 +1,450 @@
+# Makefile generated by imake - do not edit!
+# $XConsortium: imake.c,v 1.65 91/07/25 17:50:17 rws Exp $
+#
+# The cpp used on this machine replaces all newlines and multiple tabs and
+# spaces in a macro expansion with a single space. Imake tries to compensate
+# for this, but is not always successful.
+#
+
+# -------------------------------------------------------------------------
+# Makefile generated from "Imake.tmpl" and <Imakefile>
+# $XConsortium: Imake.tmpl,v 1.139 91/09/16 08:52:48 rws Exp $
+#
+# Platform-specific parameters may be set in the appropriate <vendor>.cf
+# configuration files. Site-specific parameters should be set in the file
+# site.def. Full rebuilds are recommended if any parameters are changed.
+#
+# If your C preprocessor does not define any unique symbols, you will need
+# to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
+# "make World" the first time).
+#
+
+# -------------------------------------------------------------------------
+# site-specific configuration parameters that need to come before
+# the platform-specific parameters - edit site.def to change
+
+# site: $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
+
+# -------------------------------------------------------------------------
+# platform-specific configuration parameters - edit sun.cf to change
+
+# platform: $XConsortium: sun.cf,v 1.72.1.1 92/03/18 13:13:37 rws Exp $
+
+# operating system: SunOS 4.1.3
+
+# $XConsortium: sunLib.rules,v 1.7 91/12/20 11:19:47 rws Exp $
+
+.c.o:
+ $(CC) -c $(CFLAGS) $*.c
+
+# -------------------------------------------------------------------------
+# site-specific configuration parameters that go after
+# the platform-specific parameters - edit site.def to change
+
+# site: $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
+
+ SHELL = /bin/sh
+
+ TOP = .
+ CURRENT_DIR = .
+
+ AR = ar clq
+ BOOTSTRAPCFLAGS =
+ CC = gcc -fpcc-struct-return
+ AS = as
+
+ COMPRESS = compress
+ CPP = /lib/cpp $(STD_CPP_DEFINES)
+ PREPROCESSCMD = gcc -fpcc-struct-return -E $(STD_CPP_DEFINES)
+ INSTALL = install
+ LD = ld
+ LINT = lint
+ LINTLIBFLAG = -C
+ LINTOPTS = -axz
+ LN = ln -s
+ MAKE = make
+ MV = mv
+ CP = cp
+
+ RANLIB = ranlib
+ RANLIBINSTFLAGS =
+
+ RM = rm -f
+ TROFF = psroff
+ MSMACROS = -ms
+ TBL = tbl
+ EQN = eqn
+ STD_INCLUDES =
+ STD_CPP_DEFINES =
+ STD_DEFINES =
+ EXTRA_LOAD_FLAGS =
+ EXTRA_LIBRARIES =
+ TAGS = ctags
+
+ SHAREDCODEDEF = -DSHAREDCODE
+ SHLIBDEF = -DSUNSHLIB
+
+ PROTO_DEFINES =
+
+ INSTPGMFLAGS =
+
+ INSTBINFLAGS = -m 0755
+ INSTUIDFLAGS = -m 4755
+ INSTLIBFLAGS = -m 0644
+ INSTINCFLAGS = -m 0444
+ INSTMANFLAGS = -m 0444
+ INSTDATFLAGS = -m 0444
+ INSTKMEMFLAGS = -g kmem -m 2755
+
+ PROJECTROOT = /usr/local
+
+ TOP_INCLUDES = -I$(INCROOT)
+
+ CDEBUGFLAGS = -O2
+ CCOPTIONS =
+
+ ALLINCLUDES = $(INCLUDES) $(EXTRA_INCLUDES) $(TOP_INCLUDES) $(STD_INCLUDES)
+ ALLDEFINES = $(ALLINCLUDES) $(STD_DEFINES) $(EXTRA_DEFINES) $(PROTO_DEFINES) $(DEFINES)
+ CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(ALLDEFINES)
+ LINTFLAGS = $(LINTOPTS) -DLINT $(ALLDEFINES)
+
+ LDLIBS = $(SYS_LIBRARIES) $(EXTRA_LIBRARIES)
+
+ LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) $(LOCAL_LDFLAGS) -L$(USRLIBDIR)
+
+ LDCOMBINEFLAGS = -X -r
+ DEPENDFLAGS = -I /usr/local/lib/gcc-lib/sparc-sun-sunos4.1.3/2.5.5/include/
+
+ MACROFILE = sun.cf
+ RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut
+
+ IMAKE_DEFINES =
+
+ IRULESRC = $(CONFIGDIR)
+ IMAKE_CMD = $(IMAKE) -DUseInstalled -I$(IRULESRC) $(IMAKE_DEFINES)
+
+ ICONFIGFILES = $(IRULESRC)/Imake.tmpl $(IRULESRC)/Imake.rules \
+ $(IRULESRC)/Project.tmpl $(IRULESRC)/site.def \
+ $(IRULESRC)/$(MACROFILE) $(EXTRA_ICONFIGFILES)
+
+# -------------------------------------------------------------------------
+# X Window System Build Parameters
+# $XConsortium: Project.tmpl,v 1.138.1.1 92/11/11 09:49:19 rws Exp $
+
+# -------------------------------------------------------------------------
+# X Window System make variables; this need to be coordinated with rules
+
+ PATHSEP = /
+ USRLIBDIR = /usr/local/lib
+ BINDIR = /usr/local/bin
+ INCROOT = /usr/local/include
+ BUILDINCROOT = $(TOP)
+ BUILDINCDIR = $(BUILDINCROOT)/X11
+ BUILDINCTOP = ..
+ INCDIR = $(INCROOT)/X11
+ ADMDIR = /usr/adm
+ LIBDIR = $(USRLIBDIR)/X11
+ CONFIGDIR = $(LIBDIR)/config
+ LINTLIBDIR = $(USRLIBDIR)/lint
+
+ FONTDIR = $(LIBDIR)/fonts
+ XINITDIR = $(LIBDIR)/xinit
+ XDMDIR = $(LIBDIR)/xdm
+ TWMDIR = $(LIBDIR)/twm
+ MANPATH = /usr/local/man
+ MANSOURCEPATH = $(MANPATH)/man
+ MANSUFFIX = n
+ LIBMANSUFFIX = 3
+ MANDIR = $(MANSOURCEPATH)$(MANSUFFIX)
+ LIBMANDIR = $(MANSOURCEPATH)$(LIBMANSUFFIX)
+ NLSDIR = $(LIBDIR)/nls
+ PEXAPIDIR = $(LIBDIR)/PEX
+ XAPPLOADDIR = $(LIBDIR)/app-defaults
+ FONTCFLAGS = -t
+
+ INSTAPPFLAGS = $(INSTDATFLAGS)
+
+ IMAKE = imake
+ DEPEND = makedepend
+ RGB = rgb
+
+ FONTC = bdftopcf
+
+ MKFONTDIR = mkfontdir
+ MKDIRHIER = /bin/sh $(BINDIR)/mkdirhier
+
+ CONFIGSRC = $(TOP)/config
+ DOCUTILSRC = $(TOP)/doc/util
+ CLIENTSRC = $(TOP)/clients
+ DEMOSRC = $(TOP)/demos
+ LIBSRC = $(TOP)/lib
+ FONTSRC = $(TOP)/fonts
+ INCLUDESRC = $(TOP)/X11
+ SERVERSRC = $(TOP)/server
+ UTILSRC = $(TOP)/util
+ SCRIPTSRC = $(UTILSRC)/scripts
+ EXAMPLESRC = $(TOP)/examples
+ CONTRIBSRC = $(TOP)/../contrib
+ DOCSRC = $(TOP)/doc
+ RGBSRC = $(TOP)/rgb
+ DEPENDSRC = $(UTILSRC)/makedepend
+ IMAKESRC = $(CONFIGSRC)
+ XAUTHSRC = $(LIBSRC)/Xau
+ XLIBSRC = $(LIBSRC)/X
+ XMUSRC = $(LIBSRC)/Xmu
+ TOOLKITSRC = $(LIBSRC)/Xt
+ AWIDGETSRC = $(LIBSRC)/Xaw
+ OLDXLIBSRC = $(LIBSRC)/oldX
+ XDMCPLIBSRC = $(LIBSRC)/Xdmcp
+ BDFTOSNFSRC = $(FONTSRC)/bdftosnf
+ BDFTOSNFSRC = $(FONTSRC)/clients/bdftosnf
+ BDFTOPCFSRC = $(FONTSRC)/clients/bdftopcf
+ MKFONTDIRSRC = $(FONTSRC)/clients/mkfontdir
+ FSLIBSRC = $(FONTSRC)/lib/fs
+ FONTSERVERSRC = $(FONTSRC)/server
+ EXTENSIONSRC = $(TOP)/extensions
+ XILIBSRC = $(EXTENSIONSRC)/lib/xinput
+ PEXLIBSRC = $(EXTENSIONSRC)/lib/PEXlib
+ PHIGSLIBSRC = $(EXTENSIONSRC)/lib/PEX
+
+# $XConsortium: sunLib.tmpl,v 1.14.1.2 92/11/11 09:55:02 rws Exp $
+
+SHLIBLDFLAGS = -assert pure-text
+PICFLAGS = -fpic
+
+ DEPEXTENSIONLIB =
+ EXTENSIONLIB = -lXext
+
+ DEPXLIB = $(DEPEXTENSIONLIB)
+ XLIB = $(EXTENSIONLIB) -lX11
+
+ DEPXMULIB = $(USRLIBDIR)/libXmu.sa.$(SOXMUREV)
+ XMULIBONLY = -lXmu
+ XMULIB = -lXmu
+
+ DEPOLDXLIB =
+ OLDXLIB = -loldX
+
+ DEPXTOOLLIB = $(USRLIBDIR)/libXt.sa.$(SOXTREV)
+ XTOOLLIB = -lXt
+
+ DEPXAWLIB = $(USRLIBDIR)/libXaw.sa.$(SOXAWREV)
+ XAWLIB = -lXaw
+
+ DEPXILIB =
+ XILIB = -lXi
+
+ DEPPEXLIB =
+ PEXLIB = -lPEX5
+
+ SOXLIBREV = 4.10
+ SOXTREV = 4.10
+ SOXAWREV = 5.0
+ SOOLDXREV = 4.10
+ SOXMUREV = 4.10
+ SOXEXTREV = 4.10
+ SOXINPUTREV = 4.10
+ SOPEXREV = 1.0
+
+ DEPXAUTHLIB = $(USRLIBDIR)/libXau.a
+ XAUTHLIB = -lXau
+ DEPXDMCPLIB = $(USRLIBDIR)/libXdmcp.a
+ XDMCPLIB = -lXdmcp
+
+ DEPPHIGSLIB = $(USRLIBDIR)/libphigs.a
+ PHIGSLIB = -lphigs
+
+ DEPXBSDLIB = $(USRLIBDIR)/libXbsd.a
+ XBSDLIB = -lXbsd
+
+ LINTEXTENSIONLIB = $(LINTLIBDIR)/llib-lXext.ln
+ LINTXLIB = $(LINTLIBDIR)/llib-lX11.ln
+ LINTXMU = $(LINTLIBDIR)/llib-lXmu.ln
+ LINTXTOOL = $(LINTLIBDIR)/llib-lXt.ln
+ LINTXAW = $(LINTLIBDIR)/llib-lXaw.ln
+ LINTXI = $(LINTLIBDIR)/llib-lXi.ln
+ LINTPEX = $(LINTLIBDIR)/llib-lPEX5.ln
+ LINTPHIGS = $(LINTLIBDIR)/llib-lphigs.ln
+
+ DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB)
+
+ DEPLIBS1 = $(DEPLIBS)
+ DEPLIBS2 = $(DEPLIBS)
+ DEPLIBS3 = $(DEPLIBS)
+
+# -------------------------------------------------------------------------
+# Imake rules for building libraries, programs, scripts, and data files
+# rules: $XConsortium: Imake.rules,v 1.123 91/09/16 20:12:16 rws Exp $
+
+# -------------------------------------------------------------------------
+# start of Imakefile
+
+# Imakefile -- Imakefile for ghostview.
+# Copyright (C) 1992 Timothy O. Theisen
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# Author: Tim Theisen Systems Programmer
+# Internet: tim@cs.wisc.edu Department of Computer Sciences
+# UUCP: uwvax!tim University of Wisconsin-Madison
+# Phone: (608)262-0438 1210 West Dayton Street
+# FAX: (608)262-9777 Madison, WI 53706
+
+# This file is part of the hacked version of the ghostview package
+# which is distributed under the terms of the gnu license. The
+# modification referred to above is by Tanmoy Bhattacharya,
+# <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification,
+# nor the original program provides any warranty.
+
+ GS_DIR = /usr/local/lib/ghostscript
+
+ SRCS = main.c misc.c callbacks.c actions.c dialogs.c \
+ Ghostview.c ps.c getenv.c setenv.c strcasecmp.c \
+ SelFile.c Dir.c Path.c Draw.c pdf.c
+ OBJS = main.o misc.o callbacks.o actions.o dialogs.o \
+ Ghostview.o ps.o getenv.o setenv.o strcasecmp.o \
+ SelFile.o Dir.o Path.o Draw.o pdf.o
+ SELFILE_DEFINE = -DSELFILE
+
+ DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB)
+LOCAL_LIBRARIES = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB)
+ SYS_LIBRARIES = -lm
+
+# Add -DBSD4_2 to DEFINES if you system does not have memset() and memcpy()
+# Remove -DNOMEMMOVE if memmove exists.
+
+ DEFINES = -DNON_BLOCKING_IO -DNOMEMMOVE \
+ $(SIGNAL_DEFINES) $(SELFILE_DEFINE)
+
+.NOEXPORT:
+
+all:: ghostview
+
+depend:: app-defaults.h
+
+ PROGRAM = ghostview
+
+all:: ghostview
+
+ghostview: $(OBJS) $(DEPLIBS)
+ $(RM) $@
+ $(CC) -o $@ $(OBJS) $(LDOPTIONS) $(LOCAL_LIBRARIES) $(LDLIBS) $(EXTRA_LOAD_FLAGS)
+
+saber_ghostview:: $(SRCS)
+ # load $(ALLDEFINES) $(SRCS) $(LOCAL_LIBRARIES) $(SYS_LIBRARIES) $(EXTRA_LIBRARIES)
+
+osaber_ghostview:: $(OBJS)
+ # load $(ALLDEFINES) $(OBJS) $(LOCAL_LIBRARIES) $(SYS_LIBRARIES) $(EXTRA_LIBRARIES)
+
+install:: ghostview
+ @if [ -d $(DESTDIR)$(BINDIR) ]; then set +x; \
+ else (set -x; $(MKDIRHIER) $(DESTDIR)$(BINDIR)); fi
+ $(INSTALL) -c $(INSTPGMFLAGS) ghostview $(DESTDIR)$(BINDIR)
+
+install.man:: ghostview.man
+ @if [ -d $(DESTDIR)$(MANDIR) ]; then set +x; \
+ else (set -x; $(MKDIRHIER) $(DESTDIR)$(MANDIR)); fi
+ $(INSTALL) -c $(INSTMANFLAGS) ghostview.man $(DESTDIR)$(MANDIR)/ghostview.$(MANSUFFIX)
+
+depend::
+ $(DEPEND) $(DEPENDFLAGS) -s "# DO NOT DELETE" -- $(ALLDEFINES) -- $(SRCS)
+
+lint:
+ $(LINT) $(LINTFLAGS) $(SRCS) $(LINTLIBS)
+lint1:
+ $(LINT) $(LINTFLAGS) $(FILE) $(LINTLIBS)
+
+clean::
+ $(RM) $(PROGRAM)
+
+install:: Ghostview.ad
+ @if [ -d $(DESTDIR)$(XAPPLOADDIR) ]; then set +x; \
+ else (set -x; $(MKDIRHIER) $(DESTDIR)$(XAPPLOADDIR)); fi
+ $(INSTALL) -c $(INSTAPPFLAGS) Ghostview.ad $(DESTDIR)$(XAPPLOADDIR)/Ghostview
+
+install:: gvpdf.pro
+ $(INSTALL) -c $(INSTDATFLAGS) gvpdf.pro $(DESTDIR)$(GS_DIR)
+
+main.o: app-defaults.h
+
+app-defaults.h: Ghostview.ad ad2c
+ sh ad2c Ghostview.ad > app-defaults.h
+
+clean::
+ $(RM) app-defaults.h
+
+# -------------------------------------------------------------------------
+# common rules for all Makefiles - do not edit
+
+emptyrule::
+
+clean::
+ $(RM_CMD) "#"*
+
+Makefile::
+ -@if [ -f Makefile ]; then set -x; \
+ $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
+ else exit 0; fi
+ $(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)
+
+tags::
+ $(TAGS) -w *.[ch]
+ $(TAGS) -xw *.[ch] > TAGS
+
+saber:
+ # load $(ALLDEFINES) $(SRCS)
+
+osaber:
+ # load $(ALLDEFINES) $(OBJS)
+
+# -------------------------------------------------------------------------
+# empty rules for directories that do not have SUBDIRS - do not edit
+
+install::
+ @echo "install in $(CURRENT_DIR) done"
+
+install.man::
+ @echo "install.man in $(CURRENT_DIR) done"
+
+Makefiles::
+
+includes::
+
+# -------------------------------------------------------------------------
+# dependencies generated by makedepend
+
+# DO NOT DELETE
+
+main.o: Ghostview.h
+main.o: gv.h
+main.o: ps.h app-defaults.h
+misc.o: Ghostview.h gv.h ps.h pdf.h
+callbacks.o: Ghostview.h gv.h
+callbacks.o: ps.h pdf.h
+actions.o: gv.h
+actions.o: Ghostview.h ps.h
+dialogs.o: gv.h
+dialogs.o: Ghostview.h
+Ghostview.o: GhostviewP.h Ghostview.h
+Ghostview.o: pdf.h
+ps.o: ps.h
+strcasecmp.o: stdc.h
+SelFile.o: SFinternal.h
+Dir.o: SFinternal.h
+Path.o: SFinternal.h
+Path.o: xstat.h
+Draw.o: SFinternal.h
+Draw.o: xstat.h
+pdf.o: pdf.h
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/Path.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/Path.c
new file mode 100644
index 0000000000..3d72fa09d0
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/Path.c
@@ -0,0 +1,900 @@
+/*
+ * Copyright 1989 Software Research Associates, Inc., Tokyo, Japan
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Software Research Associates not be used
+ * in advertising or publicity pertaining to distribution of the software
+ * without specific, written prior permission. Software Research Associates
+ * makes no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * SOFTWARE RESEARCH ASSOCIATES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Erik M. van der Poel
+ * Software Research Associates, Inc., Tokyo, Japan
+ * erik@sra.co.jp
+ */
+
+#include <stdio.h>
+
+#ifdef SEL_FILE_IGNORE_CASE
+#include <ctype.h>
+#endif /* def SEL_FILE_IGNORE_CASE */
+
+#include <X11/Xos.h>
+#include <pwd.h>
+#include "SFinternal.h"
+#include "xstat.h"
+#include <X11/Xaw/Scrollbar.h>
+
+#if defined(SVR4) || defined(SYSV) || defined(USG)
+extern uid_t getuid();
+extern void qsort();
+#endif /* defined(SVR4) || defined(SYSV) || defined(USG) */
+
+typedef struct {
+ char *name;
+ char *dir;
+} SFLogin;
+
+SFDir *SFdirs = NULL;
+
+int SFdirEnd;
+
+int SFdirPtr;
+
+int SFbuttonPressed = 0;
+
+static int SFdoNotTouchDirPtr = 0;
+
+static int SFdoNotTouchVorigin = 0;
+
+static SFDir SFrootDir, SFhomeDir;
+
+static SFLogin *SFlogins;
+
+static int SFtwiddle = 0;
+
+int
+SFchdir(path)
+ char *path;
+{
+ int result;
+
+ result = 0;
+
+ if (strcmp(path, SFcurrentDir)) {
+ result = chdir(path);
+ if (!result) {
+ (void) strcpy(SFcurrentDir, path);
+ }
+ }
+
+ return result;
+}
+
+static
+SFfree(i)
+ int i;
+{
+ register SFDir *dir;
+ register int j;
+
+ dir = &(SFdirs[i]);
+
+ for (j = dir->nEntries - 1; j >= 0; j--) {
+ if (dir->entries[j].shown != dir->entries[j].real) {
+ XtFree(dir->entries[j].shown);
+ }
+ XtFree(dir->entries[j].real);
+ }
+
+ XtFree((char *) dir->entries);
+
+ XtFree(dir->dir);
+
+ dir->dir = NULL;
+}
+
+static
+SFstrdup(s1, s2)
+ char **s1;
+ char *s2;
+{
+ *s1 = strcpy(XtMalloc((unsigned) (strlen(s2) + 1)), s2);
+}
+
+static
+SFunreadableDir(dir)
+ SFDir *dir;
+{
+ char *cannotOpen = "<cannot open> ";
+
+ dir->entries = (SFEntry *) XtMalloc(sizeof(SFEntry));
+ dir->entries[0].statDone = 1;
+ SFstrdup(&dir->entries[0].real, cannotOpen);
+ dir->entries[0].shown = dir->entries[0].real;
+ dir->nEntries = 1;
+ dir->nChars = strlen(cannotOpen);
+}
+
+#ifdef SEL_FILE_IGNORE_CASE
+static
+SFstrncmp(p, q, n)
+ register char *p, *q;
+ register int n;
+{
+ register char c1, c2;
+ char *psave, *qsave;
+ int nsave;
+
+ psave = p;
+ qsave = q;
+ nsave = n;
+
+ c1 = *p++;
+ if (islower(c1)) {
+ c1 = toupper(c1);
+ }
+ c2 = *q++;
+ if (islower(c2)) {
+ c2 = toupper(c2);
+ }
+
+ while ((--n >= 0) && (c1 == c2)) {
+ if (!c1) {
+ return strncmp(psave, qsave, nsave);
+ }
+ c1 = *p++;
+ if (islower(c1)) {
+ c1 = toupper(c1);
+ }
+ c2 = *q++;
+ if (islower(c2)) {
+ c2 = toupper(c2);
+ }
+ }
+
+ if (n < 0) {
+ return strncmp(psave, qsave, nsave);
+ }
+
+ return c1 - c2;
+}
+#endif /* def SEL_FILE_IGNORE_CASE */
+
+static
+SFreplaceText(dir, str)
+ SFDir *dir;
+ char *str;
+{
+ int len;
+
+ *(dir->path) = 0;
+ len = strlen(str);
+ if (str[len - 1] == '/') {
+ (void) strcat(SFcurrentPath, str);
+ } else {
+ (void) strncat(SFcurrentPath, str, len - 1);
+ }
+ if (strncmp(SFcurrentPath, SFstartDir, strlen(SFstartDir))) {
+ SFsetText(SFcurrentPath);
+ } else {
+ SFsetText(&(SFcurrentPath[strlen(SFstartDir)]));
+ }
+
+ SFtextChanged();
+}
+
+static void
+SFexpand(str)
+ char *str;
+{
+ int len;
+ int cmp;
+ char *name, *growing;
+ SFDir *dir;
+ SFEntry *entry, *max;
+
+ len = strlen(str);
+
+ dir = &(SFdirs[SFdirEnd - 1]);
+
+ if (dir->beginSelection == -1) {
+ SFstrdup(&str, str);
+ SFreplaceText(dir, str);
+ XtFree(str);
+ return;
+ } else if (dir->beginSelection == dir->endSelection) {
+ SFreplaceText(dir, dir->entries[dir->beginSelection].shown);
+ return;
+ }
+
+ max = &(dir->entries[dir->endSelection + 1]);
+
+ name = dir->entries[dir->beginSelection].shown;
+ SFstrdup(&growing, name);
+
+ cmp = 0;
+ while (!cmp) {
+ entry = &(dir->entries[dir->beginSelection]);
+ while (entry < max) {
+ if (cmp = strncmp(growing, entry->shown, len)) {
+ break;
+ }
+ entry++;
+ }
+ len++;
+ }
+
+ /*
+ * SFreplaceText() expects filename
+ */
+ growing[len - 2] = ' ';
+
+ growing[len - 1] = 0;
+ SFreplaceText(dir, growing);
+ XtFree(growing);
+}
+
+static int
+SFfindFile(dir, str)
+ SFDir *dir;
+ register char *str;
+{
+ register int i, last, max;
+ register char *name, save;
+ SFEntry *entries;
+ int len;
+ int begin, end;
+ int result;
+
+ len = strlen(str);
+
+ if (str[len - 1] == ' ') {
+ SFexpand(str);
+ return 1;
+ } else if (str[len - 1] == '/') {
+ len--;
+ }
+
+ max = dir->nEntries;
+
+ entries = dir->entries;
+
+ i = 0;
+ while (i < max) {
+ name = entries[i].shown;
+ last = strlen(name) - 1;
+ save = name[last];
+ name[last] = 0;
+
+#ifdef SEL_FILE_IGNORE_CASE
+ result = SFstrncmp(str, name, len);
+#else /* def SEL_FILE_IGNORE_CASE */
+ result = strncmp(str, name, len);
+#endif /* def SEL_FILE_IGNORE_CASE */
+
+ name[last] = save;
+ if (result <= 0) {
+ break;
+ }
+ i++;
+ }
+ begin = i;
+ while (i < max) {
+ name = entries[i].shown;
+ last = strlen(name) - 1;
+ save = name[last];
+ name[last] = 0;
+
+#ifdef SEL_FILE_IGNORE_CASE
+ result = SFstrncmp(str, name, len);
+#else /* def SEL_FILE_IGNORE_CASE */
+ result = strncmp(str, name, len);
+#endif /* def SEL_FILE_IGNORE_CASE */
+
+ name[last] = save;
+ if (result) {
+ break;
+ }
+ i++;
+ }
+ end = i;
+
+ if (begin != end) {
+ if (
+ (dir->beginSelection != begin) ||
+ (dir->endSelection != end - 1)
+ ) {
+ dir->changed = 1;
+ dir->beginSelection = begin;
+ if (str[strlen(str) - 1] == '/') {
+ dir->endSelection = begin;
+ } else {
+ dir->endSelection = end - 1;
+ }
+ }
+ } else {
+ if (dir->beginSelection != -1) {
+ dir->changed = 1;
+ dir->beginSelection = -1;
+ dir->endSelection = -1;
+ }
+ }
+
+ if (
+ SFdoNotTouchVorigin ||
+ ((begin > dir->vOrigin) && (end < dir->vOrigin + SFlistSize))
+ ) {
+ SFdoNotTouchVorigin = 0;
+ return 0;
+ }
+
+ i = begin - 1;
+ if (i > max - SFlistSize) {
+ i = max - SFlistSize;
+ }
+ if (i < 0) {
+ i = 0;
+ }
+
+ if (dir->vOrigin != i) {
+ dir->vOrigin = i;
+ dir->changed = 1;
+ }
+
+ return 0;
+}
+
+static
+SFunselect()
+{
+ SFDir *dir;
+
+ dir = &(SFdirs[SFdirEnd - 1]);
+ if (dir->beginSelection != -1) {
+ dir->changed = 1;
+ }
+ dir->beginSelection = -1;
+ dir->endSelection = -1;
+}
+
+static int
+SFcompareLogins(p, q)
+ SFLogin *p, *q;
+{
+ return strcmp(p->name, q->name);
+}
+
+static
+SFgetHomeDirs()
+{
+ struct passwd *pw;
+ int alloc;
+ int i;
+ SFEntry *entries = NULL;
+ int len;
+ int maxChars;
+
+ {
+ alloc = 1;
+ i = 1;
+ entries = (SFEntry *) XtMalloc(sizeof(SFEntry));
+ SFlogins = (SFLogin *) XtMalloc(sizeof(SFLogin));
+ entries[0].real = XtMalloc(3);
+ (void) strcpy(entries[0].real, "~");
+ entries[0].shown = entries[0].real;
+ entries[0].statDone = 1;
+ SFlogins[0].name = "";
+ pw = getpwuid((int) getuid());
+ SFstrdup(&SFlogins[0].dir, pw ? pw->pw_dir : "/");
+ maxChars = 0;
+ }
+
+ (void) setpwent();
+
+ while ((pw = getpwent()) && (*(pw->pw_name))) {
+ if (i >= alloc) {
+ alloc *= 2;
+ entries = (SFEntry *) XtRealloc(
+ (char *) entries,
+ (unsigned) (alloc * sizeof(SFEntry))
+ );
+ SFlogins = (SFLogin *) XtRealloc(
+ (char *) SFlogins,
+ (unsigned) (alloc * sizeof(SFLogin))
+ );
+ }
+ len = strlen(pw->pw_name);
+ entries[i].real = XtMalloc((unsigned) (len + 3));
+ (void) strcat(strcpy(entries[i].real, "~"),
+ pw->pw_name);
+ entries[i].shown = entries[i].real;
+ entries[i].statDone = 1;
+ if (len > maxChars) {
+ maxChars = len;
+ }
+ SFstrdup(&SFlogins[i].name, pw->pw_name);
+ SFstrdup(&SFlogins[i].dir, pw->pw_dir);
+ i++;
+ }
+
+ SFhomeDir.dir = XtMalloc(1) ;
+ SFhomeDir.dir[0] = 0 ;
+ SFhomeDir.path = SFcurrentPath ;
+ SFhomeDir.entries = entries ;
+ SFhomeDir.nEntries = i ;
+ SFhomeDir.vOrigin = 0 ; /* :-) */
+ SFhomeDir.nChars = maxChars + 2 ;
+ SFhomeDir.hOrigin = 0 ;
+ SFhomeDir.changed = 1 ;
+ SFhomeDir.beginSelection = -1 ;
+ SFhomeDir.endSelection = -1 ;
+
+#if defined(SVR4) || defined(SYSV) || defined(USG)
+ qsort((char *) entries, (unsigned)i, sizeof(SFEntry), SFcompareEntries);
+ qsort((char *) SFlogins, (unsigned)i, sizeof(SFLogin), SFcompareLogins);
+#else /* defined(SVR4) || defined(SYSV) || defined(USG) */
+ qsort((char *) entries, i, sizeof(SFEntry), SFcompareEntries);
+ qsort((char *) SFlogins, i, sizeof(SFLogin), SFcompareLogins);
+#endif /* defined(SVR4) || defined(SYSV) || defined(USG) */
+
+ for (i--; i >= 0; i--) {
+ (void) strcat(entries[i].real, "/");
+ }
+}
+
+static int
+SFfindHomeDir(begin, end)
+ char *begin, *end;
+{
+ char save;
+ char *theRest;
+ int i;
+
+ save = *end;
+ *end = 0;
+
+ for (i = SFhomeDir.nEntries - 1; i >= 0; i--) {
+ if (!strcmp(SFhomeDir.entries[i].real, begin)) {
+ *end = save;
+ SFstrdup(&theRest, end);
+ (void) strcat(strcat(strcpy(SFcurrentPath,
+ SFlogins[i].dir), "/"), theRest);
+ XtFree(theRest);
+ SFsetText(SFcurrentPath);
+ SFtextChanged();
+ return 1;
+ }
+ }
+
+ *end = save;
+
+ return 0;
+}
+
+SFupdatePath()
+{
+ static int alloc;
+ static int wasTwiddle = 0;
+ char *begin, *end;
+ int i, j;
+ int prevChange;
+ int SFdirPtrSave, SFdirEndSave;
+ SFDir *dir;
+
+ if (!SFdirs) {
+ SFdirs = (SFDir *) XtMalloc((alloc = 10) * sizeof(SFDir));
+ dir = &(SFdirs[0]);
+ SFstrdup(&dir->dir, "/");
+ (void) SFchdir("/");
+ (void) SFgetDir(dir);
+ for (j = 1; j < alloc; j++) {
+ SFdirs[j].dir = NULL;
+ }
+ dir->path = SFcurrentPath + 1;
+ dir->vOrigin = 0;
+ dir->hOrigin = 0;
+ dir->changed = 1;
+ dir->beginSelection = -1;
+ dir->endSelection = -1;
+ SFhomeDir.dir = NULL;
+ }
+
+ SFdirEndSave = SFdirEnd;
+ SFdirEnd = 1;
+
+ SFdirPtrSave = SFdirPtr;
+ SFdirPtr = 0;
+
+ begin = NULL;
+
+ if (SFcurrentPath[0] == '~') {
+ if (!SFtwiddle) {
+ SFtwiddle = 1;
+ dir = &(SFdirs[0]);
+ SFrootDir = *dir;
+ if (!SFhomeDir.dir) {
+ SFgetHomeDirs();
+ }
+ *dir = SFhomeDir;
+ dir->changed = 1;
+ }
+ end = SFcurrentPath;
+ SFdoNotTouchDirPtr = 1;
+ wasTwiddle = 1;
+ } else {
+ if (SFtwiddle) {
+ SFtwiddle = 0;
+ dir = &(SFdirs[0]);
+ *dir = SFrootDir;
+ dir->changed = 1;
+ }
+ end = SFcurrentPath + 1;
+ }
+
+ i = 0;
+
+ prevChange = 0;
+
+ while (*end) {
+ while (*end++ == '/') {
+ ;
+ }
+ end--;
+ begin = end;
+ while ((*end) && (*end++ != '/')) {
+ ;
+ }
+ if ((end - SFcurrentPath <= SFtextPos) && (*(end - 1) == '/')) {
+ SFdirPtr = i - 1;
+ if (SFdirPtr < 0) {
+ SFdirPtr = 0;
+ }
+ }
+ if (*begin) {
+ if (*(end - 1) == '/') {
+ char save = *end;
+
+ if (SFtwiddle) {
+ if (SFfindHomeDir(begin, end)) {
+ return;
+ }
+ }
+ *end = 0;
+ i++;
+ SFdirEnd++;
+ if (i >= alloc) {
+ SFdirs = (SFDir *) XtRealloc(
+ (char *) SFdirs,
+ (unsigned) ((alloc *= 2) *
+ sizeof(SFDir))
+ );
+ for (j = alloc / 2; j < alloc; j++) {
+ SFdirs[j].dir = NULL;
+ }
+ }
+ dir = &(SFdirs[i]);
+ if (
+ (!(dir->dir)) ||
+ prevChange ||
+ strcmp(dir->dir, begin)
+ ) {
+ if (dir->dir) {
+ SFfree(i);
+ }
+ prevChange = 1;
+ SFstrdup(&dir->dir, begin);
+ dir->path = end;
+ dir->vOrigin = 0;
+ dir->hOrigin = 0;
+ dir->changed = 1;
+ dir->beginSelection = -1;
+ dir->endSelection = -1;
+ (void) SFfindFile(dir - 1, begin);
+ if (
+ SFchdir(SFcurrentPath) ||
+ SFgetDir(dir)
+ ) {
+ SFunreadableDir(dir);
+ break;
+ }
+ }
+ *end = save;
+ if (!save) {
+ SFunselect();
+ }
+ } else {
+ if (SFfindFile(&(SFdirs[SFdirEnd-1]), begin)) {
+ return;
+ }
+ }
+ } else {
+ SFunselect();
+ }
+ }
+
+ if ((end == SFcurrentPath + 1) && (!SFtwiddle)) {
+ SFunselect();
+ }
+
+ for (i = SFdirEnd; i < alloc; i++) {
+ if (SFdirs[i].dir) {
+ SFfree(i);
+ }
+ }
+
+ if (SFdoNotTouchDirPtr) {
+ if (wasTwiddle) {
+ wasTwiddle = 0;
+ SFdirPtr = SFdirEnd - 2;
+ if (SFdirPtr < 0) {
+ SFdirPtr = 0;
+ }
+ } else {
+ SFdirPtr = SFdirPtrSave;
+ }
+ SFdoNotTouchDirPtr = 0;
+ }
+
+ if ((SFdirPtr != SFdirPtrSave) || (SFdirEnd != SFdirEndSave)) {
+ XawScrollbarSetThumb(
+ selFileHScroll,
+ (float) (((double) SFdirPtr) / SFdirEnd),
+ (float) (((double) ((SFdirEnd < 3) ? SFdirEnd : 3)) /
+ SFdirEnd)
+ );
+ }
+
+ if (SFdirPtr != SFdirPtrSave) {
+ SFdrawLists(SF_DO_SCROLL);
+ } else {
+ for (i = 0; i < 3; i++) {
+ if (SFdirPtr + i < SFdirEnd) {
+ if (SFdirs[SFdirPtr + i].changed) {
+ SFdirs[SFdirPtr + i].changed = 0;
+ SFdrawList(i, SF_DO_SCROLL);
+ }
+ } else {
+ SFclearList(i, SF_DO_SCROLL);
+ }
+ }
+ }
+}
+
+SFsetText(path)
+ char *path;
+{
+ XawTextBlock text;
+
+ text.firstPos = 0;
+ text.length = strlen(path);
+ text.ptr = path;
+ text.format = FMT8BIT;
+
+ XawTextReplace(selFileField, 0, strlen(SFtextBuffer), &text);
+ XawTextSetInsertionPoint(selFileField, strlen(SFtextBuffer));
+}
+
+/* ARGSUSED */
+void
+SFbuttonPressList(w, n, event)
+ Widget w;
+ int n;
+ XButtonPressedEvent *event;
+{
+ SFbuttonPressed = 1;
+}
+
+/* ARGSUSED */
+void
+SFbuttonReleaseList(w, n, event)
+ Widget w;
+ int n;
+ XButtonReleasedEvent *event;
+{
+ SFDir *dir;
+
+ SFbuttonPressed = 0;
+
+ if (SFcurrentInvert[n] != -1) {
+ if (n < 2) {
+ SFdoNotTouchDirPtr = 1;
+ }
+ SFdoNotTouchVorigin = 1;
+ dir = &(SFdirs[SFdirPtr + n]);
+ SFreplaceText(
+ dir,
+ dir->entries[dir->vOrigin + SFcurrentInvert[n]].shown
+ );
+ SFmotionList(w, n, event);
+ }
+}
+
+static int
+SFcheckDir(n, dir)
+ int n;
+ SFDir *dir;
+{
+ struct stat statBuf;
+ int i;
+
+ if (
+ (!stat(".", &statBuf)) &&
+ (statBuf.st_mtime != dir->mtime)
+ ) {
+
+ /*
+ * If the pointer is currently in the window that we are about
+ * to update, we must warp it to prevent the user from
+ * accidentally selecting the wrong file.
+ */
+ if (SFcurrentInvert[n] != -1) {
+ XWarpPointer(
+ SFdisplay,
+ None,
+ XtWindow(selFileLists[n]),
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ );
+ }
+
+ for (i = dir->nEntries - 1; i >= 0; i--) {
+ if (dir->entries[i].shown != dir->entries[i].real) {
+ XtFree(dir->entries[i].shown);
+ }
+ XtFree(dir->entries[i].real);
+ }
+ XtFree((char *) dir->entries);
+ if (SFgetDir(dir)) {
+ SFunreadableDir(dir);
+ }
+ if (dir->vOrigin > dir->nEntries - SFlistSize) {
+ dir->vOrigin = dir->nEntries - SFlistSize;
+ }
+ if (dir->vOrigin < 0) {
+ dir->vOrigin = 0;
+ }
+ if (dir->hOrigin > dir->nChars - SFcharsPerEntry) {
+ dir->hOrigin = dir->nChars - SFcharsPerEntry;
+ }
+ if (dir->hOrigin < 0) {
+ dir->hOrigin = 0;
+ }
+ dir->beginSelection = -1;
+ dir->endSelection = -1;
+ SFdoNotTouchVorigin = 1;
+ if ((dir + 1)->dir) {
+ (void) SFfindFile(dir, (dir + 1)->dir);
+ } else {
+ (void) SFfindFile(dir, dir->path);
+ }
+
+ if (!SFworkProcAdded) {
+ (void) XtAppAddWorkProc(SFapp, SFworkProc, NULL);
+ SFworkProcAdded = 1;
+ }
+
+ return 1;
+ }
+
+ return 0;
+}
+
+static int
+SFcheckFiles(dir)
+ SFDir *dir;
+{
+ int from, to;
+ int result;
+ char old, new;
+ int i;
+ char *str;
+ int last;
+ struct stat statBuf;
+
+ result = 0;
+
+ from = dir->vOrigin;
+ to = dir->vOrigin + SFlistSize;
+ if (to > dir->nEntries) {
+ to = dir->nEntries;
+ }
+
+ for (i = from; i < to; i++) {
+ str = dir->entries[i].real;
+ last = strlen(str) - 1;
+ old = str[last];
+ str[last] = 0;
+ if (stat(str, &statBuf)) {
+ new = ' ';
+ } else {
+ new = SFstatChar(&statBuf);
+ }
+ str[last] = new;
+ if (new != old) {
+ result = 1;
+ }
+ }
+
+ return result;
+}
+
+void
+SFdirModTimer(cl, id)
+ XtPointer cl;
+ XtIntervalId *id;
+{
+ static int n = -1;
+ static int f = 0;
+ char save;
+ SFDir *dir;
+
+ if ((!SFtwiddle) && (SFdirPtr < SFdirEnd)) {
+ n++;
+ if ((n > 2) || (SFdirPtr + n >= SFdirEnd)) {
+ n = 0;
+ f++;
+ if ((f > 2) || (SFdirPtr + f >= SFdirEnd)) {
+ f = 0;
+ }
+ }
+ dir = &(SFdirs[SFdirPtr + n]);
+ save = *(dir->path);
+ *(dir->path) = 0;
+ if (SFchdir(SFcurrentPath)) {
+ *(dir->path) = save;
+
+ /*
+ * force a re-read
+ */
+ *(dir->dir) = 0;
+
+ SFupdatePath();
+ } else {
+ *(dir->path) = save;
+ if (
+ SFcheckDir(n, dir) ||
+ ((f == n) && SFcheckFiles(dir))
+ ) {
+ SFdrawList(n, SF_DO_SCROLL);
+ }
+ }
+ }
+
+ SFdirModTimerId = XtAppAddTimeOut(SFapp, (unsigned long) 1000,
+ SFdirModTimer, (XtPointer) NULL);
+}
+
+/* Return a single character describing what kind of file STATBUF is. */
+
+char
+SFstatChar (statBuf)
+ struct stat *statBuf;
+{
+ if (S_ISDIR (statBuf->st_mode)) {
+ return '/';
+ } else if (S_ISREG (statBuf->st_mode)) {
+ return S_ISXXX (statBuf->st_mode) ? '*' : ' ';
+#ifdef S_ISSOCK
+ } else if (S_ISSOCK (statBuf->st_mode)) {
+ return '=';
+#endif /* S_ISSOCK */
+ } else {
+ return ' ';
+ }
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/README b/support/hypertex/tanmoy/ghostview-1.5-hacked/README
new file mode 100644
index 0000000000..05c1deb63d
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/README
@@ -0,0 +1,177 @@
+/* This file is part of the hacked version of the ghostview package */
+/* which is distributed under the terms of the gnu license. The */
+/* modification referred to above is by Tanmoy Bhattacharya, */
+/* <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification, */
+/* nor the original program provides any warranty. */
+
+/* Last Modification: Dec 1 1994, 10:47 */
+
+ Ghostview -- An X11 user interface for ghostscript.
+
+Ghostview is full function user interface for ghostscript 2.4 and
+later. This distribution is modified to support the pdfmark operator.
+
+Brief list of features:
+ - Ghostview parses any known version of Adobe's Document Structuring
+ Conventions.
+ - Page size is automatically determined from the Document Structuring
+ Comments. The user is able to override the values from the comments.
+ - Window size is set to the bounding box for Encapsulated PostScript figures.
+ - Default page size is Letter and can be changed via Xresources or
+ application defaults file to A4 (or any other valid size) for our
+ European friends.
+ - Scrollbars appear when necessary.
+ - Page orientation is automatically determined from the Document Structuring
+ Comments. The user is able to override the values from the comments.
+ - Ability to view at 4 orientations: Portrait, Landscape, Upside-down,
+ and Seascape (for those who rotate landscape the other direction).
+ - Ability to restrict rendering to grayscale or monochrome. (Requires
+ ghostscript 2.6.1.)
+ - Ability to mark pages for printing, or saving. (Good for people that
+ printed a 100 page document and lost page 59 due to a printer jam.)
+ - Can popup zoom windows at printer resolution
+ (1 display dot = 1 printer dot).
+ - Handles pdfmark operator. (alpha release)
+
+ The Ghostview distribution includes a Ghostview Widget that people
+ are encouraged to use in other programs.
+
+ Original (without pdfmark support) Ghostview-1.5 is available via
+ anonymous ftp from:
+ prep.ai.mit.edu:/pub/gnu/ghostview-1.5.tar.gz
+ ftp.cs.wisc.edu:/pub/X/ghostview-1.5.tar.gz
+ Modified ghostview-1.5 (this release) available from
+ http://nqcd.lanl.gov/people/tanmoy/hypertex/ghostview-1.5-hacked.tar.gz
+
+ 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.
+
+Building ghostview:
+
+ Set the ghostscript inputs directory in Imakefile.
+ If you have xmkmf, type "xmkmf", and then "make".
+ If not, manually edit the Makefile.
+
+
+The following is unchanged from what came with the original
+Ghostview. Please notice that the pdfmark project has been spliced in
+by tanmoy@qcd.lanl.gov. Please do not bother Tim Theisen about
+problems relating to that.
+
+--------------- original ---------------
+Feedback
+
+ I welcome any feedback that you care to give. Of course, I am interested
+ in your success stories. I will also try to help you if you have problems.
+ However, I cannot make any promise of support.
+
+ Please send all feedback to ghostview@cs.wisc.edu.<SEE MODS> This is a spare time
+ project and all the mail regarding ghostview must be directed to a
+ separate mail box otherwise your mail may very well get lost in the cracks.
+
+Frequently asked questions:
+
+ 1. Why does half the functionality of ghostview seem to be missing?
+ I cannot skip around in the document. I cannot select pages to
+ print. There are no page numbers in the table of contents.
+
+ The problem is that the document does not have the document
+ structuring comments. Without them, ghostview cannot tell where
+ pages start and end. Also, when reading from stdin there is no
+ capability to skip around.
+
+ 2. Whenever I ask ghostview to display a page, a separate ghostscript
+ window pops up and disappears when ghostscript is done rendering
+ the page. How to I get ghostscript to write on the ghostview window?
+
+ You must be running ghostscript 2.4 or later for ghostview to work
+ properly. You can pick up the current copy of ghostscript from
+ the same place you got ghostview.
+
+ 3. When I start ghostview, the information window pops up with:
+ "Warning: Could not allocate backing pixmap in main window."
+ What does this mean?
+
+ Ghostscript draws into a backing pixmap and copies from the
+ pixmap to the window. Some X servers have limited resources for
+ pixmaps. Creating the backing pixmap failed. Ghostview will then
+ request backing store on the window. If the backing store request
+ is not honored, obscured portions of the window will be lost.
+
+ You might also request a smaller window by setting a smaller
+ magstep or setting a smaller resolution.
+
+ 4. When I start ghostview, sometimes I get this error:
+ "Error: SmeBSB Object: Left Bitmap of entry "0" is not one bit deep.."
+ Other times it works. What is going wrong?
+
+ The only time this problem occurs is when an OpenWindows X server
+ is the display. It is likely a server problem. I have placed a
+ work around in ghostview that turns off all use of bitmaps. The
+ -openwindows option enables this work around. However, with it
+ enabled the current magstep, orientation, and media cannot be
+ marked in the popup menus.
+
+ 5. Sometimes ghostview produces an endless stream of this message:
+ "Warning: Select failed; error code 9".
+
+ Users have reported that this occurs on machines with a SYSV
+ and BSD library. The problem went away when they linked with the
+ BSD library rather than the default SYSV library.
+
+ This also occurs on some SPARCS running SunOS. This does not happen
+ for me and must be due to some differences in libraries or environment.
+ I have placed a SPARC executable (compiled on SunOS 4.1 with X11R5pl10
+ libraries statically linked in) on ftp.cs.wisc.edu for people
+ in this situation.
+
+ 6. When using ncdwm, sometimes the window shrinks to an extremely
+ small size.
+
+ Either use the -ncdwm option to work around the problem, or apply
+ fix-10 to X11R5.
+
+ 7. Ghostview pops up the information window with the message
+ "Exec of gs failed". It never displays anything in the main
+ viewport. What went wrong?
+
+ Either ghostscript is not installed or it cannot be found in
+ your PATH. Please pick up the latest copy of ghostcript from
+ the same place you got ghostview and install it.
+
+Acknowledgements
+
+ I really should put down the names of all the people who have given
+ me suggestions and encouragement. (But I don't want to hold up the
+ release any longer. :-)
+
+ I do want to thank a few people.
+
+ - Karl Berry, for getting me into this mess :-) by soliciting for
+ volunteers.
+ - L. Peter Deutsch, for making ghostscript the good interpreter that
+ it is and for working with me to include modifications in support of
+ ghostview.
+ - Erik M. van der Poel, for writing a good publicly available file
+ selection widget that I was able incorporate into ghostview.
+ - Terry Poot, for porting ghostview to VMS.
+
+NOTE: PLEASE send all ghostview related mail to ghostview@cs.wisc.edu.<SEE MODS>
+
+...Tim
+
+ Tim Theisen Associate Researcher
+Internet: ghostview@cs.wisc.edu Department of Computer Sciences
+ UUCP: uwvax!ghostview University of Wisconsin-Madison
+ Phone: (608)262-0438 1210 West Dayton Street
+ FAX: (608)262-9777 Madison, WI 53706-1685
+-----------
+
+Send mail about pdfmark support to tanmoy@qcd.lanl.gov.
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/README.VMS b/support/hypertex/tanmoy/ghostview-1.5-hacked/README.VMS
new file mode 100644
index 0000000000..6fd76050b0
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/README.VMS
@@ -0,0 +1,215 @@
+Release notes for VMS changes to Ghostview
+8/18/92, Terry Poot <tp@mccall.com>
+
+Introduction
+------------
+
+I've gotten Ghostview version 1.4 working on VMS 5.5, compiled with VAX C
+v3.2, and using Ghostscript 2.4.1 and George Carrette's
+<gjc@mitech.com> port of the R5 Athena widgets.
+
+Ghostscript availablility is, I believe, mentioned in the Ghostview readme
+files.
+
+George's kit for building the Athena widgets is available from
+vmsnet.sources archive sites, including FTP from white.cerritos.edu
+[130.150.200.22] and acfcluster.nyu.edu , and mailserver access from
+MAILSERV@Cerritos.edu. (Send a message with 'help' in the body for
+instructions.) You will also need the directories mit/lib/Xmu and
+mit/lib/Xaw from the MIT X11r5 source kit. I think you can get them from
+export.ai.mit.edu. I don't know of any non-FTP way other than finding a
+friend who can send them to you (that's what I did).
+
+There's nothing I can think of in the changes to require any of these
+specific versions. I suspect it will work on VMS 5.0 or later, possibly
+even 4.7. I don't have any of these systems to test on, however. Also, any
+Ghostscript supported by Ghostview should work, as NO changes were made to
+Ghostscript to support Ghostview on VMS.
+
+I did this port specifically because I required a Postscript previewer for
+my current project, to preview files created by my applications. It is
+likely that anything I don't use hasn't been tested much, if at all.
+However, the relatively small number of changes is encouraging, and the
+changes themselves have all been tested.
+
+The 2 large areas of changes are processing of print requests, and the
+communications between Ghostview and Ghostscript. The changes to the print
+code are in the routine print_file in misc.c, and changes to the resources
+used by that code are in main.c. Changes to the communications code are all
+in the ghostview widget, which is in ghostview.c, with changes to the
+widget structure in ghostviewp.h. Most other changes were simple things
+like dealing with different include files to get the program to compile.
+
+Building
+--------
+
+There are 2 build procedures provided. If you have MMS, you can use the
+DESCRIP.MMS description file. If not, there is a DCL procedure name
+VMS_BUILD.COM. The command procedure builds everything, whereas MMS will
+only build the things that have changed.
+
+VMS POSIX is used to convert the application defaults file to a C include
+file for use as fallback resources. The include file is provided for the
+shipped version of the application defaults file, but if you don't have
+POSIX installed, you won't be able to automatically update the include file
+to match changes you make to the application defaults file. Note that the
+data in the include file is used only if you do NOT install the application
+defaults file on your system (see the Installation section below).
+
+(If you have a unix system available, you can move files back and forth
+manually and run ad2c on that machine to create an updated app-defaults.h.)
+
+If you have MMS:
+
+First, edit DESCRIP.MMS. Change the second line to show the proper location
+on your system for the command procedure that defines the Athena logical
+names (this is the LOGICALS.COM procedure that came with George Carrette's
+Athena widget kit). Also, if you don't have VMS POSIX 1.0 installed on your
+system, delete the line that starts:
+
+source:app-defaults.h : source:Ghostview.ad
+
+and the following action lines, or just add a "!" before the POSIX/RUN
+command.
+
+Once you've made these changes, just type "MMS" and it should build.
+
+If you don't have MMS:
+
+First, edit VMS_BUILD.COM. Change the first line to show the proper
+location on your system for the command procedure that defines the Athena
+logical names (this is the LOGICALS.COM procedure that came with George
+Carrette's Athena widget kit). Also, if you don't have VMS POSIX 1.0
+installed on your system, delete or comment out the line that contains the
+command POSIX/RUN. Then simply type in "@VMS_BUILD".
+
+You might notice that we don't use all the source files. The ones not part
+of the VMS build procedure aren't needed for VMS. This includes setenv.c,
+getenv.c, and all source files for the select file widget. The file
+vms_types.h is new, and is used to define VMS data structures in
+ghostview.c. This file was written by Jym Dyer in 1989, so I don't know if
+the email address in the file is still good. I added a definition to it
+(IOSB_GET_T). It was already Copyright'ed under the GPL, so there's no
+conflict including it here.
+
+Installation
+------------
+
+To run Ghostview, you must define a foreign command for it. This can be
+done in a user's login.com, or in the system wide sylogin.com for
+convenience. The command to do this is:
+
+$ gv :==$dev:[dir]gv.exe
+
+Fill in the device and directory for your site. Note the "$" after the
+":==". It's important that it be there.
+
+You can call this something other than gv, but DON'T call it ghostview!!!
+Repeat: DON'T CALL IT GHOSTVIEW!!! If you do, Ghostscript will no longer
+work on your system, except (maybe) when called by Ghostview. The reason,
+for the curious, is that Ghostscript expects the environment variable
+GHOSTVIEW, if it exists, to be the window id of the window it should draw
+on. That's how Ghostview gets Ghostscript to use a Ghostview window for
+output. Symbols, including foreign command symbols, will be seen as
+environment variables, so Ghostscript will try to use your command
+definition as a window id, and choke and die.
+
+Speaking of Ghostscript, the default resource setup expects it to be
+defined as a foreign command named gs. If you choose to call the
+Ghostscript command something else, you'll need to change the interpreter
+resource of Ghostview to the command needed to run Ghostscript (or supply
+the -interpreter command line option). It MUST be defined as a foreign
+command so that Ghostview can set some command line options.
+
+The application defaults file can be installed system-wide by copying it to
+DECW$SYSTEM_DEFAULTS:GHOSTVIEW.DAT (you have to have privileges to do
+that). Alternately, each Ghostview user can copy it to
+DECW$USER_DEFAULTS:GHOSTVIEW.DAT. (DECW$USER_DEFAULTS usually points to the
+user's login directory.) If that file is not found, the compiled in values
+will be used. Therefore, if you install the application defaults file, you
+don't really have to worry about keeping app-defaults.h up to date, as it
+is only used if the app defaults file isn't found. You will especially want
+to install the file if you don't have VMS POSIX available to maintain the
+include file that is derived from it.
+
+Notes for application users
+---------------------------
+
+There aren't too many differences to worry about.
+
+No attempt has been made to port the select file widget. Any prompt for a
+file name will simply pop up a dialog box into which you type the file
+name. I'd have tried to integrate the DECwindows file selection widget, but
+this is an Athena program, and I figured the hassle to get it all to work
+together wouldn't be worth the trouble. Besides, in my application, I
+didn't need it. :-)
+
+Also the print related resources have been changed a bit.
+
+The printCommand resource must be a command that takes a filename argument.
+The default for printCommand is "Print_dcl/Delete". The "_dcl" suffix is to
+avoid any symbol redefinitions of the print command.
+
+The printerVariable resource is the name of a logical name that may contain
+qualifiers to the print command. The logical name has been changed from
+PRINTER to GV_PRINT_QUAL to make it a little bit safer to set system wide,
+for instance with a /QUEUE=xxx qualifier to point to the queue serving your
+postscript printer. The printPrompt resource has been changed to "Print
+Qualifiers: " to reflect this usage.
+
+defaultPrinter defaults to NULL, but it will be set the the equivalence
+string for GV_PRINT_QUAL at application startup if that logical is set (or
+whatever logical might be named in printerVariable if you change it). Thus
+you can default the print queue either with a logical name or by putting it
+in Ghostview's application defaults file.
+
+Any print command can be used, but bear in mind that it must take one
+argument, which is a temporary file name. The print command must delete
+this file or it will be left lying around. printerVariable may be used to
+pass any qualifiers to the command. It can be used to select a print queue,
+form, etc. This is the item that is prompted for when you tell it to print.
+(printPrompt has been changed from "Printer Name:" to "Print Qualifiers:").
+If you define a logical name or symbol named GV_PRINT_QUAL (or some other
+name if you change printerVariable) it will be used as the
+default response for this prompt.
+
+The command executed in any print request is the value of printComand,
+followed by a space and then by the print qualifiers specified by the user
+(which default to defaultPrinter, see above) followed by another space and
+then the temp file name. You can fill in these 2 resources to suit
+your needs. Just remember the user can over-ride the second one at run
+time. (That's why the /DELETE is part of the print command as distributed,
+rather than included as a default in defaultPrinter.)
+
+This would make a bit more sense if I'd renamed the resources, but that
+would have created a lot of VMS specific code for little actual gain. If it
+helps you keep track of them, here's a brief summary table:
+
+resource VMS Value What it is
+-------- --------- ----------
+printCommand PRINT_DCL/DELETE The print command
+printerVariable GV_PRINT_QUAL logical name to hold default qualifiers
+defaultPrinter <empty> Default qualifiers, over-ridden by
+ GV_PRINT_QUAL if set
+printPrompt "Print Qualifiers:" Just a prompt string
+
+Notes for widget users
+----------------------
+
+See the notes for application users for differences in resources.
+
+The widget uses VMS Event Flag number 23. You can change the event flag
+number by changing the define for XtEFN in ghostview.c. Ghostview can
+tolerate other modules in the program setting the flag, as it always checks
+for actual I/O completion using IOSB's. However, if you clear the flag, Xt
+may miss an I/O completion and your program could hang. Best to simply
+avoid it.
+
+I've made changes to the definitions of the widget data in ghostviewp.h.
+I've ifdef'ed out data items not used in the VMS version and added a few
+that I needed under VMS. I might have missed a few of the former kind, but
+if so, they should just sit around unused and not bother anyone.
+--
+Terry Poot <tp@mccall.com> The McCall Pattern Company
+(uucp: ...!rutgers!depot!mccall!tp) 615 McCall Road
+(800)255-2762, in KS (913)776-4041 Manhattan, KS 66502, USA
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/README.pdfmark b/support/hypertex/tanmoy/ghostview-1.5-hacked/README.pdfmark
new file mode 100644
index 0000000000..3697c3ceef
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/README.pdfmark
@@ -0,0 +1,62 @@
+Last modification: Dec 1 1994, 10:47
+
+PDF (Portable Document Format) is a format defined by Adobe and
+describes a page description language that supports hyperlinks. The
+adobe product `distill' can create PDF documents from postscript ones
+by translating the page description. In addition, it allows the
+postscript file to specify the hyperlinks through a new postscript
+operator, pdfmark.
+
+This alpha release of the changed version of ghostview is a first
+attempt to make ghostview pdfmark aware. It recognizes the pdfmark
+operator, and tries to cretae `hotlinks' on the display. A key click
+on the link follows the link.
+
+The companion products, the modifications to dvips by Mark Doyle and
+the set of macros comprising hypertex (as described at
+http://xxx.lanl.gov/hypertex) facilitates the generation of these ps
+files from TeX documents. The modified dvips actually uses a
+postscript procedure pdfm (which translates to an appropriate call to
+pdfmark if pdfm is undefined) to describe the linkage structure. As
+the translation of pdfm to pdfmark is lossy, ghostview should ideally
+understand pdfm directly: see the TODO list.
+
+All keys work as in the standard release of ghostscript: except
+
+ 1) any key-click inside a link follows link instead of magnifying
+ it.
+ 2) b or B goes back in link history if history is non-null: goes to
+ previous page (default behaviour) otherwise. (delete, backspace
+ etc. are still bound to previous_page) does nothing on first page
+ if link history empty.
+ 3) page menu has an extra entry for back which works as in (2).
+
+Here is what it never plans to do:
+
+ 1) Support SRCPAGE option of pdfmark.
+ 2) Support pdfmarks in non-DSC structured documents.
+
+Here is the TODO list. (can also be considered BUG list)
+
+1) Handle pdfmarks of kinds other than /LNK (/ANNOT etc. should be
+ very easy) (Currently ignores them)
+2) Handle pdfmarks called in non-default coordinate system.
+3) Handle /LNK to other documents.
+4) Look at target view specification as well (currently it only looks
+ at target page)
+5) Check if communication with ghostscript possible through means
+ other than the stdout.
+6) Do a proper job of parsing pdfmark parameters.(easy but tedious)
+7) Use the rx and ry parameters of the /Border specification of
+ pdfmark. (easy)
+8) Support forward/backward navigation or menu-oriented navigation in
+ link history.
+
+Here is the TODO list for processing pdfm (in addition to pdfmark).
+
+1) Allow initial jump to arbitrary target.
+2) Allow user specified jump to arbitrary target.
+3) Take into account target coordinate.
+4) Allow network URL's.
+5) Make middle click open a smaller window with the target properly
+ centered.
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/README.selfile b/support/hypertex/tanmoy/ghostview-1.5-hacked/README.selfile
new file mode 100644
index 0000000000..e0929e07c4
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/README.selfile
@@ -0,0 +1,83 @@
+
+
+
+ XsraSelFile File Selection Dialog Package
+
+
+
+This directory contains the XsraSelFile file selection dialog package. This
+package allows an application to obtain a filename from a user. The filename is
+selected by typing in a text widget or by browsing with the mouse in directory
+listings.
+
+The following is a brief description of the available features.
+
+* filename completion
+
+ When the user types a filename in the Text widget, SelFile shows the
+ possible completions in the directory listings. The user can hit the space
+ bar to complete the filename.
+
+* fast directory reading
+
+ When a directory is opened, the entries are read and sorted. Then the stats
+ of only the first screenful of entries are taken, and these entries are
+ displayed. The stats of the other entries are taken upon demand (i.e. when
+ the user wishes to see them by scrolling, etc.) or in the background. The
+ Xt work procedure facility is used to do background work. The idea here is
+ to give the user some feedback as soon as possible.
+
+ "It's just an illu--sion" :-)
+
+* Xaw and/or Xw widgets
+
+ SelFile can be linked with Xaw (Athena) and/or Xw (Hewlett-Packard)
+ widgets. Normally, SelFile is linked with the R3 or a later version of the
+ Xt Intrinsics, but it can be linked with the R2 Xt. See the Imakefile for
+ details.
+
+* automatic display update after directory modification
+
+ Every now and then SelFile looks at the directories being displayed to see
+ if they have been updated, and updates the display accordingly. Similarly,
+ file modes are checked (but not as often).
+
+* tilde (~) for home directories
+
+ When the user types a tilde at the beginning of the Text widget, SelFile
+ shows the home directories.
+
+-------------------------------------------------------------------------------
+
+This work is loosely based on (and the name comes from) an earlier X10 SelFile
+by Michiharu `NinjaTerm' Ariza.
+
+Admittedly, this X11 SelFile also looks a bit like the directory browser on the
+NeXT machine.
+
+-------------------------------------------------------------------------------
+
+If you have any
+
+ porting problems
+
+ bug reports
+
+ comments (particularly about ideas in the TODO file)
+
+ or any other type of feedback
+
+please send mail to
+
+ erik@sra.co.jp
+ OR
+ erik%sra.co.jp@uunet.uu.net
+ OR
+ erik%sra.co.jp@mcvax.uucp
+ OR
+ try junet instead of co.jp
+ OR
+ Erik M. van der Poel
+ Software Research Associates, Inc.
+ 1-1-1 Hirakawa-cho, Chiyoda-ku
+ Tokyo 102 Japan. TEL +81-3-234-2692
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/SFinternal.h b/support/hypertex/tanmoy/ghostview-1.5-hacked/SFinternal.h
new file mode 100644
index 0000000000..d651817d4e
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/SFinternal.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright 1989 Software Research Associates, Inc., Tokyo, Japan
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Software Research Associates not be used
+ * in advertising or publicity pertaining to distribution of the software
+ * without specific, written prior permission. Software Research Associates
+ * makes no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * SOFTWARE RESEARCH ASSOCIATES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Erik M. van der Poel
+ * Software Research Associates, Inc., Tokyo, Japan
+ * erik@sra.co.jp
+ */
+
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include <X11/Xos.h>
+#include <X11/Xaw/Text.h>
+#include <X11/Xaw/AsciiText.h>
+
+#define SEL_FILE_CANCEL -1
+#define SEL_FILE_OK 0
+#define SEL_FILE_NULL 1
+#define SEL_FILE_TEXT 2
+
+#define SF_DO_SCROLL 1
+#define SF_DO_NOT_SCROLL 0
+
+typedef struct {
+ int statDone;
+ char *real;
+ char *shown;
+} SFEntry;
+
+typedef struct {
+ char *dir;
+ char *path;
+ SFEntry *entries;
+ int nEntries;
+ int vOrigin;
+ int nChars;
+ int hOrigin;
+ int changed;
+ int beginSelection;
+ int endSelection;
+ time_t mtime;
+} SFDir;
+
+extern int SFstatus;
+
+extern char SFcurrentPath[], SFstartDir[], SFcurrentDir[];
+
+extern Widget
+ selFile,
+ selFileCancel,
+ selFileField,
+ selFileForm,
+ selFileHScroll,
+ selFileHScrolls[],
+ selFileLists[],
+ selFileOK,
+ selFilePrompt,
+ selFileVScrolls[];
+
+extern Display *SFdisplay;
+
+extern int SFcharWidth, SFcharHeight, SFcharAscent;
+
+extern SFDir *SFdirs;
+
+extern int SFdirEnd, SFdirPtr;
+
+extern Pixel SFfore, SFback;
+
+extern Atom SFwmDeleteWindow;
+
+extern XSegment SFsegs[], SFcompletionSegs[];
+
+extern XawTextPosition SFtextPos;
+
+extern void
+ SFenterList(),
+ SFleaveList(),
+ SFmotionList(),
+ SFbuttonPressList(),
+ SFbuttonReleaseList();
+
+extern void
+ SFvSliderMovedCallback(),
+ SFvFloatSliderMovedCallback(),
+ SFhSliderMovedCallback(),
+ SFpathSliderMovedCallback(),
+ SFvAreaSelectedCallback(),
+ SFhAreaSelectedCallback(),
+ SFpathAreaSelectedCallback();
+
+extern int SFupperX, SFlowerY, SFupperY;
+
+extern int SFtextX, SFtextYoffset;
+
+extern int SFentryWidth, SFentryHeight;
+
+extern int SFlineToTextH, SFlineToTextV;
+
+extern int SFbesideText, SFaboveAndBelowText;
+
+extern int SFcharsPerEntry;
+
+extern int SFlistSize;
+
+extern int SFcurrentInvert[];
+
+extern int SFworkProcAdded;
+
+extern Boolean SFworkProc();
+
+extern XtAppContext SFapp;
+
+extern int SFpathScrollWidth, SFvScrollHeight, SFhScrollWidth;
+
+extern char SFtextBuffer[];
+
+extern int SFbuttonPressed;
+
+extern int SFcompareEntries();
+
+extern void SFdirModTimer();
+
+extern char SFstatChar();
+
+extern XtIntervalId SFdirModTimerId;
+
+extern int (*SFfunc)();
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/SelFile.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/SelFile.c
new file mode 100644
index 0000000000..f722af4196
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/SelFile.c
@@ -0,0 +1,753 @@
+/*
+ * Copyright 1989 Software Research Associates, Inc., Tokyo, Japan
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Software Research Associates not be used
+ * in advertising or publicity pertaining to distribution of the software
+ * without specific, written prior permission. Software Research Associates
+ * makes no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * SOFTWARE RESEARCH ASSOCIATES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Erik M. van der Poel
+ * Software Research Associates, Inc., Tokyo, Japan
+ * erik@sra.co.jp
+ */
+
+/*
+ * Author's address:
+ *
+ * erik@sra.co.jp
+ * OR
+ * erik%sra.co.jp@uunet.uu.net
+ * OR
+ * erik%sra.co.jp@mcvax.uucp
+ * OR
+ * try junet instead of co.jp
+ * OR
+ * Erik M. van der Poel
+ * Software Research Associates, Inc.
+ * 1-1-1 Hirakawa-cho, Chiyoda-ku
+ * Tokyo 102 Japan. TEL +81-3-234-2692
+ */
+
+#include <stdio.h>
+#include <errno.h>
+/* BSD 4.3 errno.h does not declare errno */
+extern int errno;
+extern int sys_nerr;
+extern char *sys_errlist[];
+
+#include <sys/param.h>
+#include <X11/cursorfont.h>
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include <X11/Composite.h>
+#include <X11/Shell.h>
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/Command.h>
+#include <X11/Xaw/Scrollbar.h>
+#include <X11/Xaw/Label.h>
+#include <X11/Xaw/Cardinals.h>
+
+#include "SFinternal.h"
+
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 1024
+#endif /* ndef MAXPATHLEN */
+
+#if !defined(SVR4) && !defined(SYSV) && !defined(USG)
+extern char *getwd();
+#endif /* !defined(SVR4) && !defined(SYSV) && !defined(USG) */
+
+int SFstatus = SEL_FILE_NULL;
+
+char
+ SFstartDir[MAXPATHLEN],
+ SFcurrentPath[MAXPATHLEN],
+ SFcurrentDir[MAXPATHLEN];
+
+Widget
+ selFile,
+ selFileCancel,
+ selFileField,
+ selFileForm,
+ selFileHScroll,
+ selFileHScrolls[3],
+ selFileLists[3],
+ selFileOK,
+ selFilePrompt,
+ selFileVScrolls[3];
+
+Display *SFdisplay;
+
+Pixel SFfore, SFback;
+
+Atom SFwmDeleteWindow;
+
+XSegment SFsegs[2], SFcompletionSegs[2];
+
+XawTextPosition SFtextPos;
+
+int SFupperX, SFlowerY, SFupperY;
+
+int SFtextX, SFtextYoffset;
+
+int SFentryWidth, SFentryHeight;
+
+int SFlineToTextH = 3;
+
+int SFlineToTextV = 3;
+
+int SFbesideText = 3;
+
+int SFaboveAndBelowText = 2;
+
+int SFcharsPerEntry = 15;
+
+int SFlistSize = 10;
+
+int SFworkProcAdded = 0;
+
+XtAppContext SFapp;
+
+int SFpathScrollWidth, SFvScrollHeight, SFhScrollWidth;
+
+char SFtextBuffer[MAXPATHLEN];
+
+XtIntervalId SFdirModTimerId;
+
+int (*SFfunc)();
+
+static char *oneLineTextEditTranslations = "\
+ <Key>Return: redraw-display()\n\
+ Ctrl<Key>M: redraw-display()\n\
+";
+
+/* ARGSUSED */
+static void
+SFexposeList(w, n, event, cont)
+ Widget w;
+ XtPointer n;
+ XEvent *event;
+ Boolean *cont;
+{
+ if ((event->type == NoExpose) || event->xexpose.count) {
+ return;
+ }
+
+ SFdrawList(n, SF_DO_NOT_SCROLL);
+}
+
+/* ARGSUSED */
+static void
+SFmodVerifyCallback(w, client_data, event, cont)
+ Widget w;
+ XtPointer client_data;
+ XEvent *event;
+ Boolean *cont;
+{
+ char buf[2];
+
+ if (
+ (XLookupString(&(event->xkey), buf, 2, NULL, NULL) == 1) &&
+ ((*buf) == '\r')
+ ) {
+ SFstatus = SEL_FILE_OK;
+ } else {
+ SFstatus = SEL_FILE_TEXT;
+ }
+}
+
+/* ARGSUSED */
+static void
+SFokCallback(w, cl, cd)
+ Widget w;
+ XtPointer cl, cd;
+{
+ SFstatus = SEL_FILE_OK;
+}
+
+static XtCallbackRec SFokSelect[] = {
+ { SFokCallback, (XtPointer) NULL },
+ { NULL, (XtPointer) NULL },
+};
+
+/* ARGSUSED */
+static void
+SFcancelCallback(w, cl, cd)
+ Widget w;
+ XtPointer cl, cd;
+{
+ SFstatus = SEL_FILE_CANCEL;
+}
+
+static XtCallbackRec SFcancelSelect[] = {
+ { SFcancelCallback, (XtPointer) NULL },
+ { NULL, (XtPointer) NULL },
+};
+
+/* ARGSUSED */
+static void
+SFdismissAction(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ if (event->type == ClientMessage &&
+ event->xclient.data.l[0] != SFwmDeleteWindow) return;
+
+ SFstatus = SEL_FILE_CANCEL;
+}
+
+static char *wmDeleteWindowTranslation = "\
+ <Message>WM_PROTOCOLS: SelFileDismiss()\n\
+";
+
+static XtActionsRec actions[] = {
+ {"SelFileDismiss", SFdismissAction},
+};
+
+static void
+SFcreateWidgets(toplevel, prompt, ok, cancel)
+ Widget toplevel;
+ char *prompt;
+ char *ok;
+ char *cancel;
+{
+ Cardinal i, n;
+ int listWidth, listHeight;
+ int listSpacing = 10;
+ int scrollThickness = 15;
+ int hScrollX, hScrollY;
+ int vScrollX, vScrollY;
+ Cursor
+ xtermCursor,
+ sbRightArrowCursor,
+ dotCursor;
+ Arg arglist[20];
+
+ i = 0;
+ XtSetArg(arglist[i], XtNtransientFor, toplevel); i++;
+
+ selFile = XtAppCreateShell("selFile", "SelFile",
+ transientShellWidgetClass, SFdisplay, arglist, i);
+
+ /* Add WM_DELETE_WINDOW protocol */
+ XtAppAddActions(XtWidgetToApplicationContext(selFile),
+ actions, XtNumber(actions));
+ XtOverrideTranslations(selFile,
+ XtParseTranslationTable(wmDeleteWindowTranslation));
+
+ i = 0;
+ XtSetArg(arglist[i], XtNdefaultDistance, 30); i++;
+ selFileForm = XtCreateManagedWidget("selFileForm",
+ formWidgetClass, selFile, arglist, i);
+
+ i = 0;
+ XtSetArg(arglist[i], XtNlabel, prompt); i++;
+ XtSetArg(arglist[i], XtNresizable, True); i++;
+ XtSetArg(arglist[i], XtNtop, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNbottom, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNleft, XtChainLeft); i++;
+ XtSetArg(arglist[i], XtNright, XtChainLeft); i++;
+ XtSetArg(arglist[i], XtNborderWidth, 0); i++;
+ selFilePrompt = XtCreateManagedWidget("selFilePrompt",
+ labelWidgetClass, selFileForm, arglist, i);
+
+ i = 0;
+ XtSetArg(arglist[i], XtNforeground, &SFfore); i++;
+ XtSetArg(arglist[i], XtNbackground, &SFback); i++;
+ XtGetValues(selFilePrompt, arglist, i);
+
+ SFinitFont();
+
+ SFentryWidth = SFbesideText + SFcharsPerEntry * SFcharWidth +
+ SFbesideText;
+ SFentryHeight = SFaboveAndBelowText + SFcharHeight +
+ SFaboveAndBelowText;
+
+ listWidth = SFlineToTextH + SFentryWidth + SFlineToTextH + 1 +
+ scrollThickness;
+ listHeight = SFlineToTextV + SFentryHeight + SFlineToTextV + 1 +
+ SFlineToTextV + SFlistSize * SFentryHeight +
+ SFlineToTextV + 1 + scrollThickness;
+
+ SFpathScrollWidth = 3 * listWidth + 2 * listSpacing + 4;
+
+ hScrollX = -1;
+ hScrollY = SFlineToTextV + SFentryHeight + SFlineToTextV + 1 +
+ SFlineToTextV + SFlistSize * SFentryHeight +
+ SFlineToTextV;
+ SFhScrollWidth = SFlineToTextH + SFentryWidth + SFlineToTextH;
+
+ vScrollX = SFlineToTextH + SFentryWidth + SFlineToTextH;
+ vScrollY = SFlineToTextV + SFentryHeight + SFlineToTextV;
+ SFvScrollHeight = SFlineToTextV + SFlistSize * SFentryHeight +
+ SFlineToTextV;
+
+ SFupperX = SFlineToTextH + SFentryWidth + SFlineToTextH - 1;
+ SFlowerY = SFlineToTextV + SFentryHeight + SFlineToTextV + 1 +
+ SFlineToTextV;
+ SFupperY = SFlineToTextV + SFentryHeight + SFlineToTextV + 1 +
+ SFlineToTextV + SFlistSize * SFentryHeight - 1;
+
+ SFtextX = SFlineToTextH + SFbesideText;
+ SFtextYoffset = SFlowerY + SFaboveAndBelowText + SFcharAscent;
+
+ SFsegs[0].x1 = 0;
+ SFsegs[0].y1 = vScrollY;
+ SFsegs[0].x2 = vScrollX - 1;
+ SFsegs[0].y2 = vScrollY;
+ SFsegs[1].x1 = vScrollX;
+ SFsegs[1].y1 = 0;
+ SFsegs[1].x2 = vScrollX;
+ SFsegs[1].y2 = vScrollY - 1;
+
+ SFcompletionSegs[0].x1 = SFcompletionSegs[0].x2 = SFlineToTextH;
+ SFcompletionSegs[1].x1 = SFcompletionSegs[1].x2 =
+ SFlineToTextH + SFentryWidth - 1;
+
+ i = 0;
+ XtSetArg(arglist[i], XtNwidth, 3 * listWidth + 2 * listSpacing + 4);
+ i++;
+ XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
+
+ XtSetArg(arglist[i], XtNfromVert, selFilePrompt); i++;
+ XtSetArg(arglist[i], XtNvertDistance, 10); i++;
+ XtSetArg(arglist[i], XtNresizable, True); i++;
+ XtSetArg(arglist[i], XtNtop, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNbottom, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNleft, XtChainLeft); i++;
+ XtSetArg(arglist[i], XtNright, XtChainLeft); i++;
+ XtSetArg(arglist[i], XtNstring, SFtextBuffer); i++;
+ XtSetArg(arglist[i], XtNlength, MAXPATHLEN); i++;
+ XtSetArg(arglist[i], XtNeditType, XawtextEdit); i++;
+ XtSetArg(arglist[i], XtNwrap, XawtextWrapWord); i++;
+ XtSetArg(arglist[i], XtNresize, XawtextResizeHeight); i++;
+ XtSetArg(arglist[i], XtNuseStringInPlace, True); i++;
+ selFileField = XtCreateManagedWidget("selFileField",
+ asciiTextWidgetClass, selFileForm, arglist, i);
+
+ XtOverrideTranslations(selFileField,
+ XtParseTranslationTable(oneLineTextEditTranslations));
+ XtSetKeyboardFocus(selFileForm, selFileField);
+
+ i = 0;
+ XtSetArg(arglist[i], XtNorientation, XtorientHorizontal); i++;
+ XtSetArg(arglist[i], XtNwidth, SFpathScrollWidth); i++;
+ XtSetArg(arglist[i], XtNheight, scrollThickness); i++;
+ XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
+ XtSetArg(arglist[i], XtNfromVert, selFileField); i++;
+ XtSetArg(arglist[i], XtNvertDistance, 30); i++;
+ XtSetArg(arglist[i], XtNtop, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNbottom, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNleft, XtChainLeft); i++;
+ XtSetArg(arglist[i], XtNright, XtChainLeft); i++;
+ selFileHScroll = XtCreateManagedWidget("selFileHScroll",
+ scrollbarWidgetClass, selFileForm, arglist, i);
+
+ XtAddCallback(selFileHScroll, XtNjumpProc,
+ SFpathSliderMovedCallback, (XtPointer) NULL);
+ XtAddCallback(selFileHScroll, XtNscrollProc,
+ SFpathAreaSelectedCallback, (XtPointer) NULL);
+
+ i = 0;
+ XtSetArg(arglist[i], XtNwidth, listWidth); i++;
+ XtSetArg(arglist[i], XtNheight, listHeight); i++;
+ XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
+ XtSetArg(arglist[i], XtNfromVert, selFileHScroll); i++;
+ XtSetArg(arglist[i], XtNvertDistance, 10); i++;
+ XtSetArg(arglist[i], XtNtop, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNbottom, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNleft, XtChainLeft); i++;
+ XtSetArg(arglist[i], XtNright, XtChainLeft); i++;
+ selFileLists[0] = XtCreateManagedWidget("selFileList1",
+ compositeWidgetClass, selFileForm, arglist, i);
+
+ i = 0;
+ XtSetArg(arglist[i], XtNwidth, listWidth); i++;
+ XtSetArg(arglist[i], XtNheight, listHeight); i++;
+ XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
+ XtSetArg(arglist[i], XtNfromHoriz, selFileLists[0]); i++;
+ XtSetArg(arglist[i], XtNfromVert, selFileHScroll); i++;
+ XtSetArg(arglist[i], XtNhorizDistance, listSpacing); i++;
+ XtSetArg(arglist[i], XtNvertDistance, 10); i++;
+ XtSetArg(arglist[i], XtNtop, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNbottom, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNleft, XtChainLeft); i++;
+ XtSetArg(arglist[i], XtNright, XtChainLeft); i++;
+ selFileLists[1] = XtCreateManagedWidget("selFileList2",
+ compositeWidgetClass, selFileForm, arglist, i);
+
+ i = 0;
+ XtSetArg(arglist[i], XtNwidth, listWidth); i++;
+ XtSetArg(arglist[i], XtNheight, listHeight); i++;
+ XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
+ XtSetArg(arglist[i], XtNfromHoriz, selFileLists[1]); i++;
+ XtSetArg(arglist[i], XtNfromVert, selFileHScroll); i++;
+ XtSetArg(arglist[i], XtNhorizDistance, listSpacing); i++;
+ XtSetArg(arglist[i], XtNvertDistance, 10); i++;
+ XtSetArg(arglist[i], XtNtop, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNbottom, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNleft, XtChainLeft); i++;
+ XtSetArg(arglist[i], XtNright, XtChainLeft); i++;
+ selFileLists[2] = XtCreateManagedWidget("selFileList3",
+ compositeWidgetClass, selFileForm, arglist, i);
+
+ for (n = 0; n < 3; n++) {
+
+ i = 0;
+ XtSetArg(arglist[i], XtNx, vScrollX); i++;
+ XtSetArg(arglist[i], XtNy, vScrollY); i++;
+ XtSetArg(arglist[i], XtNwidth, scrollThickness); i++;
+ XtSetArg(arglist[i], XtNheight, SFvScrollHeight); i++;
+ XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
+ selFileVScrolls[n] = XtCreateManagedWidget("selFileVScroll",
+ scrollbarWidgetClass, selFileLists[n], arglist, i);
+
+ XtAddCallback(selFileVScrolls[n], XtNjumpProc,
+ SFvFloatSliderMovedCallback, (XtPointer) n);
+ XtAddCallback(selFileVScrolls[n], XtNscrollProc,
+ SFvAreaSelectedCallback, (XtPointer) n);
+
+ i = 0;
+
+ XtSetArg(arglist[i], XtNorientation, XtorientHorizontal);
+ i++;
+ XtSetArg(arglist[i], XtNx, hScrollX); i++;
+ XtSetArg(arglist[i], XtNy, hScrollY); i++;
+ XtSetArg(arglist[i], XtNwidth, SFhScrollWidth); i++;
+ XtSetArg(arglist[i], XtNheight, scrollThickness); i++;
+ XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
+ selFileHScrolls[n] = XtCreateManagedWidget("selFileHScroll",
+ scrollbarWidgetClass, selFileLists[n], arglist, i);
+
+ XtAddCallback(selFileHScrolls[n], XtNjumpProc,
+ SFhSliderMovedCallback, (XtPointer) n);
+ XtAddCallback(selFileHScrolls[n], XtNscrollProc,
+ SFhAreaSelectedCallback, (XtPointer) n);
+ }
+
+ i = 0;
+ XtSetArg(arglist[i], XtNlabel, ok); i++;
+ XtSetArg(arglist[i], XtNresizable, True); i++;
+ XtSetArg(arglist[i], XtNcallback, SFokSelect); i++;
+ XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
+ XtSetArg(arglist[i], XtNfromVert, selFileLists[0]); i++;
+ XtSetArg(arglist[i], XtNvertDistance, 30); i++;
+ XtSetArg(arglist[i], XtNtop, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNbottom, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNleft, XtChainLeft); i++;
+ XtSetArg(arglist[i], XtNright, XtChainLeft); i++;
+ selFileOK = XtCreateManagedWidget("selFileOK", commandWidgetClass,
+ selFileForm, arglist, i);
+
+ i = 0;
+ XtSetArg(arglist[i], XtNlabel, cancel); i++;
+ XtSetArg(arglist[i], XtNresizable, True); i++;
+ XtSetArg(arglist[i], XtNcallback, SFcancelSelect); i++;
+ XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
+ XtSetArg(arglist[i], XtNfromHoriz, selFileOK); i++;
+ XtSetArg(arglist[i], XtNfromVert, selFileLists[0]); i++;
+ XtSetArg(arglist[i], XtNhorizDistance, 30); i++;
+ XtSetArg(arglist[i], XtNvertDistance, 30); i++;
+ XtSetArg(arglist[i], XtNtop, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNbottom, XtChainTop); i++;
+ XtSetArg(arglist[i], XtNleft, XtChainLeft); i++;
+ XtSetArg(arglist[i], XtNright, XtChainLeft); i++;
+ selFileCancel = XtCreateManagedWidget("selFileCancel",
+ commandWidgetClass, selFileForm, arglist, i);
+
+ XtSetMappedWhenManaged(selFile, False);
+ XtRealizeWidget(selFile);
+
+ /* Add WM_DELETE_WINDOW protocol */
+ SFwmDeleteWindow = XInternAtom(SFdisplay, "WM_DELETE_WINDOW", False);
+ XSetWMProtocols(SFdisplay, XtWindow(selFile), &SFwmDeleteWindow, 1);
+
+ SFcreateGC();
+
+ xtermCursor = XCreateFontCursor(SFdisplay, XC_xterm);
+
+ sbRightArrowCursor = XCreateFontCursor(SFdisplay, XC_sb_right_arrow);
+ dotCursor = XCreateFontCursor(SFdisplay, XC_dot);
+
+ XDefineCursor(SFdisplay, XtWindow(selFileForm), xtermCursor);
+ XDefineCursor(SFdisplay, XtWindow(selFileField), xtermCursor);
+
+ for (n = 0; n < 3; n++) {
+ XDefineCursor(SFdisplay, XtWindow(selFileLists[n]),
+ sbRightArrowCursor);
+ }
+ XDefineCursor(SFdisplay, XtWindow(selFileOK), dotCursor);
+ XDefineCursor(SFdisplay, XtWindow(selFileCancel), dotCursor);
+
+ for (n = 0; n < 3; n++) {
+ XtAddEventHandler(selFileLists[n], ExposureMask, True,
+ SFexposeList, (XtPointer) n);
+ XtAddEventHandler(selFileLists[n], EnterWindowMask, False,
+ SFenterList, (XtPointer) n);
+ XtAddEventHandler(selFileLists[n], LeaveWindowMask, False,
+ SFleaveList, (XtPointer) n);
+ XtAddEventHandler(selFileLists[n], PointerMotionMask, False,
+ SFmotionList, (XtPointer) n);
+ XtAddEventHandler(selFileLists[n], ButtonPressMask, False,
+ SFbuttonPressList, (XtPointer) n);
+ XtAddEventHandler(selFileLists[n], ButtonReleaseMask, False,
+ SFbuttonReleaseList, (XtPointer) n);
+ }
+
+ XtAddEventHandler(selFileField, KeyPressMask, False,
+ SFmodVerifyCallback, (XtPointer) NULL);
+
+ SFapp = XtWidgetToApplicationContext(selFile);
+
+}
+
+/* position widget under the cursor */
+void
+SFpositionWidget(w)
+ Widget w;
+{
+ Arg args[3];
+ Cardinal num_args;
+ Dimension width, height, b_width;
+ int x, y, max_x, max_y;
+ Window root, child;
+ int dummyx, dummyy;
+ unsigned int dummymask;
+
+ XQueryPointer(XtDisplay(w), XtWindow(w), &root, &child, &x, &y,
+ &dummyx, &dummyy, &dummymask);
+ num_args = 0;
+ XtSetArg(args[num_args], XtNwidth, &width); num_args++;
+ XtSetArg(args[num_args], XtNheight, &height); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, &b_width); num_args++;
+ XtGetValues(w, args, num_args);
+
+ width += 2 * b_width;
+ height += 2 * b_width;
+
+ x -= ( (Position) width/2 );
+ if (x < 0) x = 0;
+ if ( x > (max_x = (Position) (XtScreen(w)->width - width)) ) x = max_x;
+
+ y -= ( (Position) height/2 );
+ if (y < 0) y = 0;
+ if ( y > (max_y = (Position) (XtScreen(w)->height - height)) ) y = max_y;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNx, x); num_args++;
+ XtSetArg(args[num_args], XtNy, y); num_args++;
+ XtSetValues(w, args, num_args);
+}
+
+FILE *
+SFopenFile(name, mode, prompt, failed)
+ char *name;
+ char *mode;
+ char *prompt;
+ char *failed;
+{
+ Arg args[1];
+ FILE *fp;
+
+ SFchdir(SFstartDir);
+ if ((fp = fopen(name, mode)) == NULL) {
+ char *buf;
+ if (errno <= sys_nerr) {
+ buf = XtMalloc(strlen(failed) + strlen(sys_errlist[errno]) +
+ strlen(prompt) + 2);
+ strcpy(buf, failed);
+ strcat(buf, sys_errlist[errno]);
+ strcat(buf, "\n");
+ strcat(buf, prompt);
+ } else {
+ buf = XtMalloc(strlen(failed) + strlen(prompt) + 2);
+ strcpy(buf, failed);
+ strcat(buf, "\n");
+ strcat(buf, prompt);
+ }
+ XtSetArg(args[0], XtNlabel, buf);
+ XtSetValues(selFilePrompt, args, ONE);
+ XtFree(buf);
+ return NULL;
+ }
+ return fp;
+}
+
+SFtextChanged()
+{
+
+ if ((SFtextBuffer[0] == '/') || (SFtextBuffer[0] == '~')) {
+ (void) strcpy(SFcurrentPath, SFtextBuffer);
+
+ SFtextPos = XawTextGetInsertionPoint(selFileField);
+ } else {
+ (void) strcat(strcpy(SFcurrentPath, SFstartDir), SFtextBuffer);
+
+ SFtextPos = XawTextGetInsertionPoint(selFileField) +
+ strlen(SFstartDir);
+ }
+
+ if (!SFworkProcAdded) {
+ (void) XtAppAddWorkProc(SFapp, SFworkProc, NULL);
+ SFworkProcAdded = 1;
+ }
+
+ SFupdatePath();
+}
+
+static char *
+SFgetText()
+{
+ return strcpy(XtMalloc((unsigned) (strlen(SFtextBuffer) + 1)),
+ SFtextBuffer);
+}
+
+static
+SFprepareToReturn()
+{
+ SFstatus = SEL_FILE_NULL;
+ XtRemoveGrab(selFile);
+ XtUnmapWidget(selFile);
+ XtRemoveTimeOut(SFdirModTimerId);
+ if (SFchdir(SFstartDir)) {
+ XtAppError(
+ SFapp,
+ "XsraSelFile: can't return to current directory"
+ );
+ }
+}
+
+FILE *
+XsraSelFile(toplevel, prompt, ok, cancel, failed,
+ init_path, mode, show_entry, name_return)
+ Widget toplevel;
+ char *prompt;
+ char *ok;
+ char *cancel;
+ char *failed;
+ char *init_path;
+ char *mode;
+ int (*show_entry)();
+ char **name_return;
+{
+ static int firstTime = 1;
+ Cardinal i;
+ Arg arglist[20];
+ XEvent event;
+ FILE *fp;
+
+ if (!prompt) {
+ prompt = "Pathname:";
+ }
+
+ if (!ok) {
+ ok = "OK";
+ }
+
+ if (!cancel) {
+ cancel = "Cancel";
+ }
+
+ if (firstTime) {
+ firstTime = 0;
+ SFdisplay = XtDisplay(toplevel);
+ SFcreateWidgets(toplevel, prompt, ok, cancel);
+ } else {
+ i = 0;
+
+ XtSetArg(arglist[i], XtNlabel, prompt); i++;
+ XtSetValues(selFilePrompt, arglist, i);
+
+ i = 0;
+ XtSetArg(arglist[i], XtNlabel, ok); i++;
+ XtSetValues(selFileOK, arglist, i);
+
+ i = 0;
+ XtSetArg(arglist[i], XtNlabel, cancel); i++;
+ XtSetValues(selFileCancel, arglist, i);
+ }
+
+ SFpositionWidget(selFile);
+ XtMapWidget(selFile);
+
+#if defined(SVR4) || defined(SYSV) || defined(USG)
+ if (!getcwd(SFstartDir, MAXPATHLEN)) {
+#else /* defined(SVR4) || defined(SYSV) || defined(USG) */
+ if (!getwd(SFstartDir)) {
+#endif /* defined(SVR4) || defined(SYSV) || defined(USG) */
+
+ XtAppError(SFapp, "XsraSelFile: can't get current directory");
+ }
+ (void) strcat(SFstartDir, "/");
+ (void) strcpy(SFcurrentDir, SFstartDir);
+
+ if (init_path) {
+ if (init_path[0] == '/') {
+ (void) strcpy(SFcurrentPath, init_path);
+ if (strncmp(
+ SFcurrentPath,
+ SFstartDir,
+ strlen(SFstartDir)
+ )) {
+ SFsetText(SFcurrentPath);
+ } else {
+ SFsetText(&(SFcurrentPath[strlen(SFstartDir)]));
+ }
+ } else {
+ (void) strcat(strcpy(SFcurrentPath, SFstartDir),
+ init_path);
+ SFsetText(&(SFcurrentPath[strlen(SFstartDir)]));
+ }
+ } else {
+ (void) strcpy(SFcurrentPath, SFstartDir);
+ }
+
+ SFfunc = show_entry;
+
+ SFtextChanged();
+
+ XtAddGrab(selFile, True, True);
+
+ SFdirModTimerId = XtAppAddTimeOut(SFapp, (unsigned long) 1000,
+ SFdirModTimer, (XtPointer) NULL);
+
+ while (1) {
+ XtAppNextEvent(SFapp, &event);
+ XtDispatchEvent(&event);
+ switch (SFstatus) {
+ case SEL_FILE_TEXT:
+ SFstatus = SEL_FILE_NULL;
+ SFtextChanged();
+ break;
+ case SEL_FILE_OK:
+ *name_return = SFgetText();
+ if (fp = SFopenFile(*name_return, mode,
+ prompt, failed)) {
+ SFprepareToReturn();
+ return fp;
+ }
+ SFstatus = SEL_FILE_NULL;
+ break;
+ case SEL_FILE_CANCEL:
+ SFprepareToReturn();
+ return NULL;
+ case SEL_FILE_NULL:
+ break;
+ }
+ }
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/actions.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/actions.c
new file mode 100644
index 0000000000..1cdf1af728
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/actions.c
@@ -0,0 +1,512 @@
+/*
+ * actions.c -- X11 actions for ghostview.
+ * Copyright (C) 1992 Timothy O. Theisen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Tim Theisen Systems Programmer
+ * Internet: tim@cs.wisc.edu Department of Computer Sciences
+ * UUCP: uwvax!tim University of Wisconsin-Madison
+ * Phone: (608)262-0438 1210 West Dayton Street
+ * FAX: (608)262-9777 Madison, WI 53706
+ */
+/* This file is part of the hacked version of the ghostview package */
+/* which is distributed under the terms of the gnu license. The */
+/* modification referred to above is by Tanmoy Bhattacharya, */
+/* <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification, */
+/* nor the original program provides any warranty. */
+
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/Scrollbar.h>
+#include "gv.h"
+#include "ps.h"
+
+/* Popup the copyright window */
+void
+gv_copyright(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ popup(w, (XtPointer)copyrightpopup, NULL);
+}
+
+/* Call the quit callback to stop ghostview */
+void
+gv_quit(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ quit_ghostview(w, NULL, NULL);
+}
+
+/* Popup the open file dialog box. */
+void
+gv_open(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ popup_dialog(w, (XtPointer)OPEN, NULL);
+}
+
+/* Popup the open file dialog box. */
+void
+gv_reopen(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ if (!XtIsSensitive(reopenbutton)) return;
+ reopen_file(w, NULL, NULL);
+}
+
+/* Popup the save file dialog box. */
+void
+gv_save(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ if (!XtIsSensitive(savebutton)) return;
+ popup_dialog(w, (XtPointer)SAVE, NULL);
+}
+
+/* Popup the print file dialog box. */
+void
+gv_print_whole(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ if (!XtIsSensitive(printwholebutton)) return;
+ popup_dialog(w, (XtPointer)PRINT_WHOLE, NULL);
+}
+
+/* Popup the print file dialog box. */
+void
+gv_print_marked(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ if (!XtIsSensitive(printmarkedbutton)) return;
+ popup_dialog(w, (XtPointer)PRINT_MARKED, NULL);
+}
+
+/* Call the prev_page callback */
+void
+gv_prev(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ if (!XtIsSensitive(prevbutton)) return;
+ prev_page(w, NULL, NULL);
+}
+
+/* Call the this_page callback */
+void
+gv_show(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ if (!XtIsSensitive(showbutton)) return;
+ this_page(w, NULL, NULL);
+}
+
+/* Call the next_page callback */
+void
+gv_next(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ if (!XtIsSensitive(nextbutton)) return;
+ next_page(w, NULL, NULL);
+}
+
+/* Call the center_page callback */
+void
+gv_center(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ if (!XtIsSensitive(centerbutton)) return;
+ center_page(w, NULL, NULL);
+}
+
+/* Call the mark_page callback */
+void
+gv_mark(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ if (!XtIsSensitive(markbutton)) return;
+ mark_page(w, NULL, NULL);
+}
+
+/* Call the unmark_page callback */
+void
+gv_unmark(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ if (!XtIsSensitive(unmarkbutton)) return;
+ unmark_page(w, NULL, NULL);
+}
+
+/* Get the magstep from the parameter string and
+ * call the set_magstep callback with that magstep */
+void
+gv_set_magstep(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ int i;
+
+ if (*num_params < 1) return;
+ i = atoi(params[0]);
+ set_magstep(w, (XtPointer)i, NULL);
+}
+
+/* Increment the magstep and
+ * call the set_magstep callback with that magstep */
+void
+gv_increase_magstep(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ int i;
+
+ i = app_res.magstep + 1;
+ if (i <= app_res.maximum_magstep)
+ set_magstep(w, (XtPointer)i, NULL);
+}
+
+/* Decrement the magstep and
+ * call the set_magstep callback with that magstep */
+void
+gv_decrease_magstep(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ int i;
+
+ i = app_res.magstep - 1;
+ if (i >= app_res.minimum_magstep)
+ set_magstep(w, (XtPointer)i, NULL);
+}
+
+/* Set orientation action routine. Converts text parameter
+ * to XtPageOrientation and all set_orientation callback */
+void
+gv_set_orientation(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ XrmValue from, to;
+ XtPageOrientation orient;
+
+ if (*num_params < 1) return;
+ from.size = sizeof(String);
+ from.addr = params[0];
+ to.size = 0;
+ to.addr = NULL;
+ if (XmuCvtStringToPageOrientation(XtDisplay(w), NULL, ZERO,
+ &from, &to, NULL)) {
+ orient = *(XtPageOrientation *)(to.addr);
+ set_orientation(w, (XtPointer)orient, NULL);
+ }
+}
+
+/* Call the swap_landscape callback */
+void
+gv_swap_landscape(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ swap_landscape(w, NULL, NULL);
+}
+
+/* Set pagemedia action routine. Converts text parameter
+ * to index into the pagemedia widgets and calls the set_pagemedia
+ * callback. */
+void
+gv_set_pagemedia(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ int i;
+
+ if (*num_params < 1) return;
+
+ /* First check pagemedia defined within the document */
+ if (doc && doc->nummedia) {
+ for (i = 0; i < doc->nummedia; i++) {
+ if (!strcmp(params[0], doc->media[i].name)) {
+ set_pagemedia(w, (XtPointer)i, NULL);
+ break;
+ }
+ }
+ }
+
+ /* Then check the standard ones */
+ for (i = 0; papersizes[i].name; i++) {
+ if (!strcmp(params[0], papersizes[i].name)) {
+ set_pagemedia(w, (XtPointer)(base_papersize+i), NULL);
+ break;
+ }
+ }
+}
+
+
+/* Reset the force flag. */
+/* (force flag is checked when setting orientaion and pagemedia) */
+void
+gv_default(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ force_setting = False;
+}
+
+/* Set the force flag. */
+/* (force flag is checked when setting orientaion and pagemedia) */
+void
+gv_force(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ force_setting = True;
+}
+
+/* Implement WM_DELETE_WINDOW protocol */
+void
+gv_delete_window(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ if (event->type == ClientMessage &&
+ event->xclient.data.l[0] != wm_delete_window) return;
+ XtDestroyWidget(w);
+}
+
+
+/* Destroy popup zoom window */
+void
+gv_delete_zoom(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ XtDestroyWidget(XtParent(w));
+}
+
+/* dismiss a popup window */
+void
+gv_dismiss(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ XtPopdown(w);
+ if (w == infopopup) info_up = False;
+}
+
+/* scroll main viewport up */
+void
+gv_scroll_up(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ Arg args[2];
+ Widget scroll;
+ float top, shown;
+
+ scroll = XtNameToWidget(pageview, "vertical");
+ if (scroll) {
+ XtSetArg(args[0], XtNshown, &shown);
+ XtSetArg(args[1], XtNtopOfThumb, &top);
+ XtGetValues(scroll, args, TWO);
+
+ top = top - shown;
+ if (top < 0.0) top = 0.0;
+ XtCallCallbacks(scroll, XtNjumpProc, &top);
+ }
+}
+
+/* scroll main viewport down */
+void
+gv_scroll_down(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ Arg args[2];
+ Widget scroll;
+ float top, shown;
+
+ scroll = XtNameToWidget(pageview, "vertical");
+ if (scroll) {
+ XtSetArg(args[0], XtNshown, &shown);
+ XtSetArg(args[1], XtNtopOfThumb, &top);
+ XtGetValues(scroll, args, TWO);
+
+ top = top + shown;
+ if (top > (1.0 - shown)) top = (1.0 - shown);
+ XtCallCallbacks(scroll, XtNjumpProc, &top);
+ }
+}
+
+/* scroll main viewport left */
+void
+gv_scroll_left(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ Arg args[2];
+ Widget scroll;
+ float top, shown;
+
+ scroll = XtNameToWidget(pageview, "horizontal");
+ if (scroll) {
+ XtSetArg(args[0], XtNshown, &shown);
+ XtSetArg(args[1], XtNtopOfThumb, &top);
+ XtGetValues(scroll, args, TWO);
+
+ top = top - shown;
+ if (top < 0.0) top = 0.0;
+ XtCallCallbacks(scroll, XtNjumpProc, &top);
+ }
+}
+
+/* scroll main viewport right */
+void
+gv_scroll_right(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ Arg args[2];
+ Widget scroll;
+ float top, shown;
+
+ scroll = XtNameToWidget(pageview, "horizontal");
+ if (scroll) {
+ XtSetArg(args[0], XtNshown, &shown);
+ XtSetArg(args[1], XtNtopOfThumb, &top);
+ XtGetValues(scroll, args, TWO);
+
+ top = top + shown;
+ if (top > (1.0 - shown)) top = (1.0 - shown);
+ XtCallCallbacks(scroll, XtNjumpProc, &top);
+ }
+}
+
+/* Pop down locator window */
+void
+gv_erase_locator(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ Arg args[1];
+
+ if (!app_res.show_locator) return;
+ XtSetArg(args[0], XtNlabel, "");
+ XtSetValues(locator, args, ONE);
+}
+
+/* Check to see if file was updated */
+void
+gv_check_file(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ struct stat sbuf;
+
+ if (psfile) {
+ if (!stat(filename, &sbuf) && mtime != sbuf.st_mtime) {
+ show_page(current_page);
+ }
+ }
+}
+
+void
+gv_back(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params;
+ Cardinal *num_params;
+{
+ extern int pagehistory[], pageindex;
+ if (pageindex>0)
+ show_page(pagehistory[--pageindex]);
+ else
+ gv_prev(w, event, params, num_params);
+
+ XtSetSensitive(backbutton, pageindex>0);
+ return;
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/ad2c b/support/hypertex/tanmoy/ghostview-1.5-hacked/ad2c
new file mode 100644
index 0000000000..1435e554c0
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/ad2c
@@ -0,0 +1,38 @@
+#!/bin/sh
+#
+# ad2c : Convert app-defaults file to C strings decls.
+#
+# George Ferguson, ferguson@cs.rcohester.edu, 12 Nov 1990.
+# 19 Mar 1991 : gf
+# Made it self-contained.
+# 6 Jan 1992 : mycroft@gnu.ai.mit.edu (Charles Hannum)
+# Removed use of "-n" and ":read" label since Gnu and
+# IBM sed print pattern space on "n" command. Still works
+# with Sun sed, of course.
+# 7 Jan 1992: matthew@sunpix.East.Sun.COM (Matthew Stier)
+# Escape quotes after escaping backslashes.
+#
+
+sed '
+/^!/d
+/^$/d
+s/\\/\\\\/g
+s/\\$//g
+s/"/\\"/g
+s/^/"/
+: test
+/\\$/b slash
+s/$/",/
+p
+d
+: slash
+n
+/^!/d
+/^$/d
+s/"/\\"/g
+s/\\\\/\\/g
+s/\\n/\\\\n/g
+s/\\t/\\\\t/g
+s/\\f/\\\\f/g
+s/\\b/\\\\b/g
+b test' "$@"
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/callbacks.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/callbacks.c
new file mode 100644
index 0000000000..11b6fd4ca4
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/callbacks.c
@@ -0,0 +1,749 @@
+/*
+ * callbacks.c -- X11 callbacks for ghostview.
+ * Copyright (C) 1992 Timothy O. Theisen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Tim Theisen Systems Programmer
+ * Internet: tim@cs.wisc.edu Department of Computer Sciences
+ * UUCP: uwvax!tim University of Wisconsin-Madison
+ * Phone: (608)262-0438 1210 West Dayton Street
+ * FAX: (608)262-9777 Madison, WI 53706
+ */
+
+/* This file is part of the hacked version of the ghostview package */
+/* which is distributed under the terms of the gnu license. The */
+/* modification referred to above is by Tanmoy Bhattacharya, */
+/* <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification, */
+/* nor the original program provides any warranty. */
+
+#include <stdio.h>
+#ifndef BUFSIZ
+#define BUFSIZ 1024
+#endif
+
+#ifdef VMS
+#define getenv _getenv
+#endif
+
+extern char *getenv();
+
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include <X11/Shell.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/AsciiText.h>
+#include <X11/Xaw/Scrollbar.h>
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/Command.h>
+
+#include "Ghostview.h"
+#include "gv.h"
+#include "ps.h"
+#include "pdf.h"
+
+int pagehistory[1024], pageindex=0;
+
+/* Start application folding up by Destroying the top level widget. */
+/* The application exits when the last interpreter is killed during */
+/* a destroy callback from ghostview widgets. */
+void
+quit_ghostview(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ XtDestroyWidget(toplevel);
+}
+
+/* Popup a window. */
+void
+popup(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ positionpopup((Widget)client_data);
+ XtPopup((Widget)client_data, XtGrabNone);
+ XRaiseWindow(XtDisplay((Widget)client_data), XtWindow((Widget)client_data));
+}
+
+/* Popup a dialog box. */
+void
+popup_dialog(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+#ifdef SELFILE
+ Widget button;
+ String okay, cancel;
+ String name, init_path;
+ Arg args[1];
+ FILE* fp;
+ struct stat sbuf;
+ extern FILE *XsraSelFile();
+
+ button = XtNameToWidget(dialog, "cancel");
+ if (button) {
+ XtSetArg(args[0], XtNlabel, &cancel);
+ XtGetValues(button, args, ONE);
+ }
+ button = XtNameToWidget(dialog, "okay");
+ if (button) {
+ XtSetArg(args[0], XtNlabel, &okay);
+ XtGetValues(button, args, ONE);
+ }
+#endif
+
+ mode = (int) client_data;
+ switch (mode) {
+ case PRINT_WHOLE:
+ case PRINT_MARKED:
+ SetDialogPrompt(dialog, app_res.print_prompt);
+ if (app_res.default_printer)
+ SetDialogResponse(dialog, app_res.default_printer);
+ else
+ ClearDialogResponse(dialog);
+ popup(w, (XtPointer)dialogpopup, call_data);
+ break;
+ case OPEN:
+#ifdef SELFILE
+ if (filename && strcmp(filename, "-")) init_path = filename;
+ else init_path = NULL;
+ fp = XsraSelFile(toplevel, app_res.open_prompt, okay, cancel,
+ app_res.open_fail, init_path, "r", NULL, &name);
+ if (fp == NULL) break;
+ if (oldfilename) XtFree(oldfilename);
+ oldfilename = filename;
+ filename = name;
+ if (psfile) fclose(psfile);
+ psfile = fp;
+ stat(filename, &sbuf);
+ mtime = sbuf.st_mtime;
+ new_file(0);
+ show_page(0);
+#else
+ SetDialogPrompt(dialog, app_res.open_prompt);
+ if (filename && strcmp(filename, "-"))
+ SetDialogResponse(dialog, filename);
+ else
+ ClearDialogResponse(dialog);
+ popup(w, dialogpopup, call_data);
+#endif
+ break;
+ case SAVE:
+#ifdef SELFILE
+ fp = XsraSelFile(toplevel, app_res.save_prompt, okay, cancel,
+ app_res.save_fail, "", "w", NULL, &name);
+ if (fp == NULL) break;
+ pscopydoc(fp);
+ fclose(fp);
+ XtFree(name);
+#else
+ SetDialogPrompt(dialog, app_res.save_prompt);
+ ClearDialogResponse(dialog);
+ popup(w, dialogpopup, call_data);
+#endif
+ break;
+ }
+}
+
+/* Explicitly reopen the file. */
+void
+reopen_file(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ extern int pagehistory[], pageindex;
+ struct stat sbuf;
+ int number = current_page;
+
+ pdf_clear();
+ fclose(psfile);
+ pageindex=0;
+ XtSetSensitive(backbutton, False);
+ psfile = fopen(filename, "r");
+ mtime = sbuf.st_mtime;
+ if (oldfilename) XtFree(oldfilename);
+ oldfilename = XtNewString(filename);
+ new_file(number);
+ show_page(number);
+}
+
+/* Get the selection, if no selection, get the insertion point. */
+/* If the new_page is different from the current page show it. */
+/* If not at the first page, show the previous page. */
+void
+prev_page(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ XawTextPosition pos, end;
+ int new_page;
+
+ XawTextGetSelectionPos(toc, &pos, &end);
+ if (pos == end) { /* Nothing selected */
+ pos = XawTextGetInsertionPoint(toc);
+ }
+ if ((new_page = pos/toc_entry_length) == current_page) {
+ new_page = current_page - 1;
+ }
+ if (new_page < 0) return;
+ show_page(new_page);
+}
+
+void
+back_page(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ extern int pagehistory[], pageindex;
+ if (pageindex>0)
+ show_page(pagehistory[--pageindex]);
+ else
+ prev_page(w, client_data, call_data);
+
+ XtSetSensitive(backbutton, pageindex>0);
+ return;
+}
+
+/* Get the selection, if no selection, get the insertion point. */
+/* Show this page. */
+void
+this_page(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ if (toc_text) {
+ XawTextPosition pos, end;
+ int new_page;
+
+ XawTextGetSelectionPos(toc, &pos, &end);
+ if (pos == end) { /* Nothing selected */
+ pos = XawTextGetInsertionPoint(toc);
+ }
+ new_page = pos/toc_entry_length;
+ show_page(new_page);
+ } else {
+ GhostviewDisableInterpreter(page);
+ show_page(0);
+ }
+}
+
+/* Get the selection, if no selection, get the insertion point. */
+/* If the new_page is different from the current page show it. */
+/* If not at the last page, show the next page. */
+void
+next_page(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ XawTextPosition pos, end;
+ int new_page = 0;
+
+ if (toc_text) {
+ XawTextGetSelectionPos(toc, &pos, &end);
+ if (pos == end) { /* Nothing selected */
+ pos = XawTextGetInsertionPoint(toc);
+ }
+ if ((new_page = pos/toc_entry_length) == current_page) {
+ new_page = current_page + 1;
+ }
+ if (new_page >= doc->numpages) return;
+ }
+ show_page(new_page);
+}
+
+/* Center the viewport over the page */
+void
+center_page(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ Arg args[2];
+ Widget scroll;
+ float top, shown;
+
+ scroll = XtNameToWidget(pageview, "vertical");
+ if (scroll) {
+ XtSetArg(args[0], XtNshown, &shown);
+ XtSetArg(args[1], XtNtopOfThumb, &top);
+ XtGetValues(scroll, args, TWO);
+
+ top = (1.0 - shown) / 2.0;
+ XtCallCallbacks(scroll, XtNjumpProc, &top);
+ }
+
+ scroll = XtNameToWidget(pageview, "horizontal");
+ if (scroll) {
+ XtSetArg(args[0], XtNshown, &shown);
+ XtSetArg(args[1], XtNtopOfThumb, &top);
+ XtGetValues(scroll, args, TWO);
+
+ top = (1.0 - shown) / 2.0;
+ XtCallCallbacks(scroll, XtNjumpProc, &top);
+ }
+}
+
+/* Get the selection, if no selection, get the insertion point. */
+/* Mark all pages in range, and cause toc to update. */
+void
+mark_page(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ XawTextPosition begin, end;
+ int i;
+
+ XawTextGetSelectionPos(toc, &begin, &end);
+ if (begin == end) { /* Nothing selected */
+ begin = end = XawTextGetInsertionPoint(toc);
+ } else {
+ end--; /* Sometimes end spills onto next line */
+ }
+ for (i = begin/toc_entry_length; i <= end/toc_entry_length; i++) {
+ toc_text[i*toc_entry_length] = '*';
+ XawTextInvalidate(toc, i*toc_entry_length, i*toc_entry_length+1);
+ }
+}
+
+/* Get the selection, if no selection, get the insertion point. */
+/* Unmark all pages in range, and cause toc to update. */
+void
+unmark_page(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ XawTextPosition begin, end;
+ int i;
+
+ XawTextGetSelectionPos(toc, &begin, &end);
+ if (begin == end) { /* Nothing selected */
+ begin = end = XawTextGetInsertionPoint(toc);
+ } else {
+ end--; /* Sometimes end spills onto next line */
+ }
+ for (i = begin/toc_entry_length; i <= end/toc_entry_length; i++) {
+ toc_text[i*toc_entry_length] = ' ';
+ XawTextInvalidate(toc, i*toc_entry_length, i*toc_entry_length+1);
+ }
+}
+
+/* Set new magstep. Reshow the current page if magstep changed. */
+void
+set_magstep(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ app_res.magstep = (int)client_data;
+ if (set_new_magstep()) {
+ layout_ghostview();
+ show_page(current_page);
+ }
+}
+
+/* Set new orientation. Reshow the current page if orientation changed. */
+void
+set_orientation(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ app_res.force_orientation = force_setting;
+ app_res.orientation = (XtPageOrientation) client_data;
+ if (set_new_orientation(current_page)) {
+ layout_ghostview();
+ show_page(current_page);
+ }
+}
+
+/* Swap the landscape labels and change the flag. */
+void
+swap_landscape(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ Arg args[1];
+ String s1, s2;
+
+ app_res.swap_landscape = !app_res.swap_landscape;
+
+ XtSetArg(args[0], XtNlabel, &s1);
+ XtGetValues(landscapebutton, args, ONE);
+ s1 = XtNewString(s1);
+ XtSetArg(args[0], XtNlabel, &s2);
+ XtGetValues(seascapebutton, args, ONE);
+ s2 = XtNewString(s2);
+ XtSetArg(args[0], XtNlabel, s2);
+ XtSetValues(landscapebutton, args, ONE);
+ XtSetArg(args[0], XtNlabel, s1);
+ XtSetValues(seascapebutton, args, ONE);
+ XtFree(s1);
+ XtFree(s2);
+
+ if (set_new_orientation(current_page)) {
+ layout_ghostview();
+ show_page(current_page);
+ }
+}
+
+/* Set new page media. If new page media is different, update app_resources */
+/* and redisplay page. */
+void
+set_pagemedia(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ int new_pagemedia = (int) client_data;
+ if (new_pagemedia >= base_papersize) {
+ default_pagemedia = new_pagemedia;
+ app_res.force_pagemedia = force_setting;
+ } else {
+ document_media = new_pagemedia;
+ force_document_media = force_setting;
+ }
+ if (set_new_pagemedia(current_page)) {
+ layout_ghostview();
+ show_page(current_page);
+ }
+}
+
+/* track mouse pointer and popup zoom window */
+void
+track_and_zoom(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ Arg args[20];
+ Cardinal num_args;
+ Dimension width, height;
+ Widget zoom;
+ Widget zoomform;
+ Widget zoompage;
+ Widget zoomdismiss;
+ FILE *zoomfile;
+ struct stat sbuf;
+ GhostviewReturnStruct *p = (GhostviewReturnStruct *)call_data;
+ int llx;
+ int lly;
+ int urx;
+ int ury;
+ int bottom_margin;
+ int left_margin;
+ int right_margin;
+ int top_margin;
+ int i;
+ int gotopage;
+
+ /* locator events have zero width and height */
+ if ((p->width == 0) || (p->height == 0)) {
+ char buf[32];
+ if (!app_res.show_locator) return;
+ sprintf(buf, "(%d, %d)", p->psx, p->psy);
+ XtSetArg(args[0], XtNlabel, buf);
+ XtSetValues(locator, args, ONE);
+ return;
+ }
+
+ /* If no file, nothing to zoom. */
+ if (!psfile) return;
+
+ /* If in an anchor jump to instead */
+ if ((gotopage=pdf_page(p->psx,p->psy))>=0) {
+ if(pageindex<sizeof(pagehistory)/sizeof(*pagehistory)-1)
+ pagehistory[pageindex++] = current_page;
+ XtSetSensitive(backbutton, True);
+ show_page(gotopage); return;
+ }
+
+ /* If the file changed, cannot zoom */
+ stat(filename, &sbuf);
+ if (mtime != sbuf.st_mtime) return;
+ zoom = XtCreatePopupShell("zoom", topLevelShellWidgetClass,
+ toplevel, NULL, ZERO);
+
+ zoomform = XtCreateManagedWidget("form", formWidgetClass,
+ zoom, NULL, ZERO);
+
+ llx = p->psx - p->width/2;
+ lly = p->psy - p->height/2;
+ urx = p->psx + p->width/2;
+ ury = p->psy + p->height/2;
+
+ /* Make sure zoom window doesn't go off the edge of the page */
+ if (llx < current_llx) {
+ llx = current_llx;
+ urx = llx + p->width;
+ }
+ if (lly < current_lly) {
+ lly = current_lly;
+ ury = lly + p->height;
+ }
+ if (urx > current_urx) {
+ urx = current_urx;
+ llx = urx - p->width;
+ }
+ if (ury > current_ury) {
+ ury = current_ury;
+ lly = ury - p->height;
+ }
+ if (llx < current_llx) {
+ llx = current_llx;
+ }
+ if (lly < current_lly) {
+ lly = current_lly;
+ }
+ bottom_margin = lly - current_lly;
+ left_margin = llx - current_llx;
+ right_margin = current_urx - urx;
+ top_margin = current_ury - ury;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ XtSetArg(args[num_args], XtNorientation, current_orientation);
+ num_args++;
+ XtSetArg(args[num_args], XtNllx, llx); num_args++;
+ XtSetArg(args[num_args], XtNlly, lly); num_args++;
+ XtSetArg(args[num_args], XtNurx, urx); num_args++;
+ XtSetArg(args[num_args], XtNury, ury); num_args++;
+ XtSetArg(args[num_args], XtNbottomMargin, bottom_margin);
+ num_args++;
+ XtSetArg(args[num_args], XtNleftMargin, left_margin);
+ num_args++;
+ XtSetArg(args[num_args], XtNrightMargin, right_margin);
+ num_args++;
+ XtSetArg(args[num_args], XtNtopMargin, top_margin); num_args++;
+ XtSetArg(args[num_args], XtNbottomMargin, bottom_margin);
+ num_args++;
+ XtSetFloatArg(args[num_args], XtNxdpi, p->xdpi); num_args++;
+ XtSetFloatArg(args[num_args], XtNydpi, p->ydpi); num_args++;
+ if (!toc_text) {
+ XtSetArg(args[num_args], XtNfilename, filename); num_args++;
+ }
+ zoompage = XtCreateManagedWidget("page", ghostviewWidgetClass,
+ zoomform, args, num_args);
+ num_ghosts++;
+ XtAddCallback(zoompage, XtNcallback, track_and_zoom, (XtPointer)0);
+ XtAddCallback(zoompage, XtNmessageCallback, message, (XtPointer)zoompage);
+ XtAddCallback(zoompage, XtNdestroyCallback, destroy_ghost,
+ (XtPointer)zoompage);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, zoompage); num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ zoomdismiss = XtCreateManagedWidget("dismiss", commandWidgetClass,
+ zoomform, args, num_args);
+ XtAddCallback(zoomdismiss, XtNcallback, destroy, (XtPointer)zoom);
+
+ XtSetArg(args[0], XtNwidth, &width);
+ XtGetValues(zoompage, args, ONE);
+ XtSetArg(args[0], XtNwidth, width);
+ XtSetValues(zoomdismiss, args, ONE);
+
+ XtRealizeWidget(zoom);
+ positionpopup(zoom);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNwidth, &width); num_args++;
+ XtSetArg(args[num_args], XtNheight, &height); num_args++;
+ XtGetValues(zoom, args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNminWidth, width); num_args++;
+ XtSetArg(args[num_args], XtNminHeight, height); num_args++;
+ XtSetArg(args[num_args], XtNmaxWidth, width); num_args++;
+ XtSetArg(args[num_args], XtNmaxHeight, height); num_args++;
+ XtSetValues(zoom, args, num_args);
+ XSetWMProtocols(XtDisplay(zoom), XtWindow(zoom), &wm_delete_window, 1);
+ XtPopup(zoom, XtGrabNone);
+
+ if (toc_text) {
+ zoomfile = fopen(filename, "r");
+ if (zoomfile == NULL) return;
+ GhostviewSendPS(zoompage, zoomfile, doc->beginprolog,
+ doc->lenprolog, False);
+ GhostviewSendPS(zoompage, zoomfile, doc->beginsetup,
+ doc->lensetup, False);
+ if (doc->pageorder == DESCEND)
+ i = (doc->numpages - 1) - current_page;
+ else
+ i = current_page;
+ GhostviewSendPS(zoompage, zoomfile, doc->pages[i].begin,
+ doc->pages[i].len, True);
+ }
+}
+
+/* Process messages from ghostscript */
+/* Refresh occurs when window was resized unexpectedly */
+void
+message(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ int i;
+ char *error;
+
+ if (!strcmp((char *) call_data, "Failed")) {
+ if ((Widget)client_data == page) {
+ error = "Error: PostScript interpreter failed in main window.\n\n";
+ } else {
+ error = "Error: PostScript interpreter failed in zoom window.\n\n";
+ }
+ output(w, NULL, error);
+ } else if (!strcmp((char *) call_data, "BadAlloc")) {
+ if ((Widget)client_data == page) {
+ error =
+ "Warning: Could not allocate backing pixmap in main window.\n\n";
+ } else {
+ error =
+ "Warning: Could not allocate backing pixmap in zoom window.\n\n";
+ }
+ output(w, NULL, error);
+ } else if (!strcmp((char *) call_data, "Refresh")) {
+ if (toc_text) {
+ GhostviewSendPS(w, psfile, doc->beginprolog,
+ doc->lenprolog, False);
+ GhostviewSendPS(w, psfile, doc->beginsetup,
+ doc->lensetup, False);
+ if (doc->pageorder == DESCEND)
+ i = (doc->numpages - 1) - current_page;
+ else
+ i = current_page;
+ GhostviewSendPS(w, psfile, doc->pages[i].begin,
+ doc->pages[i].len, False);
+ }
+ }
+}
+
+/* Take output from ghostscript and display it in the infotext popup window */
+void
+output(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ Arg args[2];
+ XawTextBlock message_block;
+
+ message_block.firstPos = 0;
+ message_block.length = strlen(call_data);
+ message_block.ptr = call_data;
+ message_block.format = FMT8BIT;
+
+ XawTextDisableRedisplay(infotext);
+
+ XtSetArg(args[0], XtNeditType, XawtextAppend);
+ XtSetValues(infotext, args, ONE);
+ XawTextReplace(infotext, info_length, info_length, &message_block);
+ info_length = info_length + message_block.length;
+
+ XtSetArg(args[0], XtNeditType, XawtextRead);
+ XtSetArg(args[1], XtNinsertPosition, info_length);
+ XtSetValues(infotext, args, TWO);
+ XawTextEnableRedisplay(infotext);
+ if (!info_up) XtPopup(infopopup, XtGrabNone);
+ info_up = True;
+}
+
+/* Dismiss popup dialog */
+void
+okay(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ String name, error;
+ Widget dialog;
+
+ dialog = (Widget)client_data;
+ name = GetDialogResponse(dialog);
+ switch (mode) {
+ case PRINT_WHOLE:
+ case PRINT_MARKED:
+ if (error = print_file(name, (mode == PRINT_WHOLE))) {
+ char *buf = XtMalloc(strlen(error) +
+ strlen(app_res.print_prompt) + 2);
+ sprintf(buf, "%s\n%s", error, app_res.print_prompt);
+ SetDialogPrompt(dialog, buf);
+ XtFree(error);
+ XtFree(buf);
+ } else {
+ XtPopdown(XtParent(dialog));
+ }
+ break;
+ case OPEN:
+ if (error = open_file(name)) {
+ char *buf = XtMalloc(strlen(error) +
+ strlen(app_res.open_prompt) + 2);
+ sprintf(buf, "%s\n%s", error, app_res.open_prompt);
+ SetDialogPrompt(dialog, buf);
+ XtFree(error);
+ XtFree(buf);
+ } else {
+ XtPopdown(XtParent(dialog));
+ }
+ break;
+ case SAVE:
+ if (error = save_file(name)) {
+ char *buf = XtMalloc(strlen(error) +
+ strlen(app_res.save_prompt) + 2);
+ sprintf(buf, "%s\n%s", error, app_res.save_prompt);
+ SetDialogPrompt(dialog, buf);
+ XtFree(error);
+ XtFree(buf);
+ } else {
+ XtPopdown(XtParent(dialog));
+ }
+ break;
+ }
+ XtFree(name);
+}
+
+/* Dismiss popup window */
+void
+dismiss(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ XtPopdown((Widget)client_data);
+ if ((Widget)client_data == infopopup) info_up = False;
+}
+
+/* Destroy popup window */
+void
+destroy(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ XtDestroyWidget((Widget)client_data);
+}
+
+/* destroy callback for Ghostview widgets. */
+/* The disable interpreter call ensures that ghostscript is killed. */
+/* One the count goes to 0, we are sure that all forked processes have */
+/* been killed and that we can safely exit. */
+void
+destroy_ghost(w, client_data, call_data)
+ Widget w;
+ XtPointer client_data, call_data;
+{
+ GhostviewDisableInterpreter((Widget) client_data);
+ num_ghosts--;
+ if (num_ghosts) return;
+ if (dying) old_Xerror(XtDisplay(w), &bomb);
+ XtDestroyApplicationContext(app_con);
+ exit(0);
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/comments.doc b/support/hypertex/tanmoy/ghostview-1.5-hacked/comments.doc
new file mode 100644
index 0000000000..422d12e9c0
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/comments.doc
@@ -0,0 +1,71 @@
+Comments recognized by ghostview
+================================
+
+%!PS-Adobe-<real> [EPSF-<real>]
+%%BoundingBox: <int> <int> <int> <int>|(atend)
+%%CreationDate: <textline>
+%%Orientation: Portrait|Landscape|(atend)
+%%Pages: <uint>|(atend)
+%%PageOrder: Ascend|Descend|Special|(atend)
+%%Title: <textline>
+%%DocumentMedia: <text> <real> <real> <real> <text> <text>
+%%DocumentPageSizes: <text>
+%%EndComments
+
+%%BeginPreview
+%%EndPreview
+
+%%BeginDefaults
+%%PageBoundingBox: <int> <int> <int> <int>|(atend)
+%%PageOrientation: Portrait|Landscape
+%%PageMedia: <text>
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+%%PageBoundingBox: <int> <int> <int> <int>|(atend)
+%%PageOrientation: Portrait|Landscape
+%%PaperSize: <text>
+%%EndSetup
+
+%%Page: <text> <uint>
+%%PageBoundingBox: <int> <int> <int> <int>|(atend)
+%%PageOrientation: Portrait|Landscape
+%%PageMedia: <text>
+%%PaperSize: <text>
+
+%%Trailer
+%%EOF
+
+%%BeginDocument: <text> [<real>[<text>]]
+%%EndDocument
+
+%%BeginBinary: <uint>
+%%EndBinary
+
+%%BeginData: <uint> [Hex|Binary|ASCII[Bytes|Lines]]
+%%EndData
+
+
+Paper Keywords and paper size in points
+=======================================
+
+Letter 612x792
+LetterSmall 612x792
+Tabloid 792x1224
+Ledger 1224x792
+Legal 612x1008
+Statement 396x612
+Executive 540x720
+A3 842x1190
+A4 595x842
+A4Small 595x842
+A5 420x595
+B4 729x1032
+B5 516x729
+Envelope ???x???
+Folio 612x936
+Quarto 610x780
+10x14 720x1008
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/descrip.mms b/support/hypertex/tanmoy/ghostview-1.5-hacked/descrip.mms
new file mode 100644
index 0000000000..d9d628db3d
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/descrip.mms
@@ -0,0 +1,65 @@
+.first
+ @lsrc:[x11]logicals.com !<<< change for your system!
+ copy/log x11_xmu:xmushr.psects,x11_xaw:xawshr.psects,x11_xaw:user.opt -
+ gv.opt
+GV.EXE : GV.OLB XMUSHR XAWSHR
+ $(link) $(linkflags) /exe=gv.exe gv.olb/include=main/library,gv.opt/opt
+GV.OLB : GV.OLB(MAIN=MAIN.OBJ) GV.OLB(MISC=MISC.OBJ) GV.OLB(CALLBACKS=CALLBACKS.OBJ) -
+ GV.OLB(ACTIONS=ACTIONS.OBJ) GV.OLB(DIALOGS=DIALOGS.OBJ) GV.OLB(GHOSTVIEW=GHOSTVIEW.OBJ) -
+ GV.OLB(PS=PS.OBJ) GV.OLB(STRCASECMP=STRCASECMP.OBJ)
+ @ continue
+GV.OLB(MAIN=MAIN.OBJ) : MAIN.OBJ
+ If "''F$Search("$@")'" .EQS. "" Then $(LIBR)/Create $@
+ $(LIBR)$(LIBRFLAGS) $@ MAIN.OBJ
+MAIN.OBJ : MAIN.C GHOSTVIEW.H GV.H -
+ PS.H APP-DEFAULTS.H
+ $(CC) $(CFLAGS) MAIN.C
+APP-DEFAULTS.H : GHOSTVIEW.AD
+ get_run = 0
+ get_ad2c = 0
+ if f$search("run-ad2c.").eqs."" then get_run = 1
+ if f$search("ad2c.").eqs."" then get_ad2c = 1
+ - if get_run then cms fetch run-ad2c.
+ - if get_ad2c then cms fetch ad2c.
+ - posix/run posix$bin:sh. run-ad2c
+ if get_run then delete run-ad2c.;*
+ if get_ad2c then delete ad2c.;*
+GV.OLB(MISC=MISC.OBJ) : MISC.OBJ
+ If "''F$Search("$@")'" .EQS. "" Then $(LIBR)/Create $@
+ $(LIBR)$(LIBRFLAGS) $@ MISC.OBJ
+MISC.OBJ : MISC.C GHOSTVIEW.H GV.H -
+ PS.H
+ $(CC) $(CFLAGS) MISC.C
+GV.OLB(CALLBACKS=CALLBACKS.OBJ) : CALLBACKS.OBJ
+ If "''F$Search("$@")'" .EQS. "" Then $(LIBR)/Create $@
+ $(LIBR)$(LIBRFLAGS) $@ CALLBACKS.OBJ
+CALLBACKS.OBJ : CALLBACKS.C GHOSTVIEW.H GV.H -
+ PS.H
+ $(CC) $(CFLAGS) CALLBACKS.C
+GV.OLB(ACTIONS=ACTIONS.OBJ) : ACTIONS.OBJ
+ If "''F$Search("$@")'" .EQS. "" Then $(LIBR)/Create $@
+ $(LIBR)$(LIBRFLAGS) $@ ACTIONS.OBJ
+ACTIONS.OBJ : ACTIONS.C GV.H GHOSTVIEW.H -
+ PS.H
+ $(CC) $(CFLAGS) ACTIONS.C
+GV.OLB(DIALOGS=DIALOGS.OBJ) : DIALOGS.OBJ
+ If "''F$Search("$@")'" .EQS. "" Then $(LIBR)/Create $@
+ $(LIBR)$(LIBRFLAGS) $@ DIALOGS.OBJ
+DIALOGS.OBJ : DIALOGS.C GV.H GHOSTVIEW.H
+ $(CC) $(CFLAGS) DIALOGS.C
+GV.OLB(GHOSTVIEW=GHOSTVIEW.OBJ) : GHOSTVIEW.OBJ
+ If "''F$Search("$@")'" .EQS. "" Then $(LIBR)/Create $@
+ $(LIBR)$(LIBRFLAGS) $@ GHOSTVIEW.OBJ
+GHOSTVIEW.OBJ : GHOSTVIEW.C GHOSTVIEWP.H GHOSTVIEW.H -
+ VMS_TYPES.H
+ $(CC) $(CFLAGS) GHOSTVIEW.C
+GV.OLB(PS=PS.OBJ) : PS.OBJ
+ If "''F$Search("$@")'" .EQS. "" Then $(LIBR)/Create $@
+ $(LIBR)$(LIBRFLAGS) $@ PS.OBJ
+PS.OBJ : PS.C PS.H
+ $(CC) $(CFLAGS) PS.C
+GV.OLB(STRCASECMP=STRCASECMP.OBJ) : STRCASECMP.OBJ
+ If "''F$Search("$@")'" .EQS. "" Then $(LIBR)/Create $@
+ $(LIBR)$(LIBRFLAGS) $@ STRCASECMP.OBJ
+STRCASECMP.OBJ : STRCASECMP.C STDC.H
+ $(CC) $(CFLAGS) STRCASECMP.C
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/dialogs.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/dialogs.c
new file mode 100644
index 0000000000..2dbc5d1b59
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/dialogs.c
@@ -0,0 +1,195 @@
+/*
+ * dialogs.c -- Dialog box for ghostview.
+ * Copyright (C) 1992 Timothy O. Theisen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Tim Theisen Systems Programmer
+ * Internet: tim@cs.wisc.edu Department of Computer Sciences
+ * UUCP: uwvax!tim University of Wisconsin-Madison
+ * Phone: (608)262-0438 1210 West Dayton Street
+ * FAX: (608)262-9777 Madison, WI 53706
+ */
+
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include <X11/Xos.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/Label.h>
+#include <X11/Xaw/AsciiText.h>
+#include <X11/Xaw/Command.h>
+#include "gv.h"
+
+static String okay_accelerators =
+ "#override\n\
+ <Key>Return: set() notify() unset()\n";
+
+/* Create a dialog widget */
+/* It is just a form widget with
+ * a label prompt
+ * a text response
+ * an oky button
+ * a cancel button */
+Widget
+CreateDialog(parent, name, okay_callback, cancel_callback)
+ Widget parent;
+ String name;
+ XtCallbackProc okay_callback;
+ XtCallbackProc cancel_callback;
+{
+ Widget form, prompt, response, okay, cancel;
+ Arg args[20];
+ Cardinal num_args;
+
+ form = XtCreateManagedWidget(name, formWidgetClass, parent, NULL, ZERO);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
+ prompt = XtCreateManagedWidget("prompt", labelWidgetClass,
+ form, args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, prompt); num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNeditType, XawtextEdit); num_args++;
+ XtSetArg(args[num_args], XtNresize, XawtextResizeWidth); num_args++;
+ XtSetArg(args[num_args], XtNstring, ""); num_args++;
+ response = XtCreateManagedWidget("response", asciiTextWidgetClass,
+ form, args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, response); num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNaccelerators,
+ XtParseAcceleratorTable(okay_accelerators)); num_args++;
+ okay = XtCreateManagedWidget("okay", commandWidgetClass,
+ form, args, num_args);
+ XtAddCallback(okay, XtNcallback, okay_callback, form);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, response); num_args++;
+ XtSetArg(args[num_args], XtNfromHoriz, okay); num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ cancel = XtCreateManagedWidget("cancel", commandWidgetClass,
+ form, args, num_args);
+ XtAddCallback(cancel, XtNcallback, cancel_callback, parent);
+
+ XtInstallAccelerators(response, okay);
+ XtSetKeyboardFocus(form, response);
+
+ return form;
+}
+
+/* get the prompt from the dialog box. Used a startup time to
+ * save away the initial prompt */
+String
+GetDialogPrompt(w)
+ Widget w;
+{
+ Arg args[1];
+ Widget label;
+ String s;
+
+ label = XtNameToWidget(w, "prompt");
+ XtSetArg(args[0], XtNlabel, &s);
+ XtGetValues(label, args, ONE);
+ return XtNewString(s);
+}
+
+/* set the prompt. This is used to put error information in the prompt */
+void
+SetDialogPrompt(w, newprompt)
+ Widget w;
+ String newprompt;
+{
+ Arg args[1];
+ Widget label;
+
+ label = XtNameToWidget(w, "prompt");
+ XtSetArg(args[0], XtNlabel, newprompt);
+ XtSetValues(label, args, ONE);
+}
+
+/* get what the user typed */
+String
+GetDialogResponse(w)
+ Widget w;
+{
+ Arg args[1];
+ Widget response;
+ String s;
+
+ response = XtNameToWidget(w, "response");
+ XtSetArg(args[0], XtNstring, &s);
+ XtGetValues(response, args, ONE);
+ return XtNewString(s);
+}
+
+/* set the default reponse */
+void
+SetDialogResponse(w, s)
+ Widget w;
+ String s;
+{
+ Arg args[3];
+ Widget response;
+ XFontStruct *font;
+ Dimension width, leftMargin, rightMargin;
+
+ response = XtNameToWidget(w, "response");
+ XtSetArg(args[0], XtNfont, &font);
+ XtSetArg(args[1], XtNleftMargin, &leftMargin);
+ XtSetArg(args[2], XtNrightMargin, &rightMargin);
+ XtGetValues(response, args, THREE);
+ width = font->max_bounds.width * strlen(s) + leftMargin + rightMargin;
+
+ XtSetArg(args[0], XtNstring, s);
+ XtSetArg(args[1], XtNwidth, width);
+ XtSetValues(response, args, TWO);
+ XawTextSetInsertionPoint(response, strlen(s));
+
+}
+
+/* clear the response */
+void
+ClearDialogResponse(w)
+ Widget w;
+{
+ Arg args[2];
+ Widget response;
+
+ response = XtNameToWidget(w, "response");
+ XtSetArg(args[0], XtNstring, "");
+ XtSetArg(args[1], XtNwidth, 100);
+ XtSetValues(response, args, TWO);
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/getenv.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/getenv.c
new file mode 100644
index 0000000000..c823e7c269
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/getenv.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1987 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that: (1) source distributions retain this entire copyright
+ * notice and comment, and (2) distributions including binaries display
+ * the following acknowledgement: ``This product includes software
+ * developed by the University of California, Berkeley and its contributors''
+ * in the documentation or other materials provided with the distribution
+ * and in all advertising materials mentioning features or use of this
+ * software. Neither the name of the University nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)getenv.c 5.7 (Berkeley) 6/1/90";
+#endif /* LIBC_SCCS and not lint */
+
+#include <stdio.h>
+
+/*
+ * getenv --
+ * Returns ptr to value associated with name, if any, else NULL.
+ */
+char *
+getenv(name)
+ char *name;
+{
+ int offset;
+ char *_findenv();
+
+ return(_findenv(name, &offset));
+}
+
+/*
+ * _findenv --
+ * Returns pointer to value associated with name, if any, else NULL.
+ * Sets offset to be the offset of the name/value combination in the
+ * environmental array, for use by setenv(3) and unsetenv(3).
+ * Explicitly removes '=' in argument name.
+ *
+ * This routine *should* be a static; don't use it.
+ */
+char *
+_findenv(name, offset)
+ register char *name;
+ int *offset;
+{
+ extern char **environ;
+ register int len;
+ register char **P, *C;
+
+ for (C = name, len = 0; *C && *C != '='; ++C, ++len);
+ for (P = environ; *P; ++P)
+ if (!strncmp(*P, name, len))
+ if (*(C = *P + len) == '=') {
+ *offset = P - environ;
+ return(++C);
+ }
+ return(NULL);
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/ghostview.man b/support/hypertex/tanmoy/ghostview-1.5-hacked/ghostview.man
new file mode 100644
index 0000000000..de7027b5cd
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/ghostview.man
@@ -0,0 +1,905 @@
+.\" ghostview.man -- Man page for ghostview application
+.\" Copyright (C) 1992 Timothy O. Theisen
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\" This program is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program; if not, write to the Free Software
+.\" Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+.\"
+.\" Author: Tim Theisen Systems Programmer
+.\" Internet: tim@cs.wisc.edu Department of Computer Sciences
+.\" UUCP: uwvax!tim University of Wisconsin-Madison
+.\" Phone: (608)262-0438 1210 West Dayton Street
+.\" FAX: (608)262-9777 Madison, WI 53706
+.if t .ds Te T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Te TeX
+.TH GHOSTVIEW 1
+.SH NAME
+\fIghostview\fR \- View PostScript documents using ghostscript
+.SH SYNOPSIS
+.B ghostview
+[filename]
+.br
+or
+.br
+.B ghostview
+[\-monochrome] [\-grayscale] [\-color]
+[\-[no]title] [\-[no]date] [\-[no]locator] [\-[no]labels]
+[\-resolution\ \fIdpi\fP] [\-dpi\ \fIdpi\fP]
+[\-xdpi\ \fIdpi\fP] [\-ydpi\ \fIdpi\fP] [\-magstep\ \fIn\fP]
+[\-[no]safer] [\-[no]quiet] [\-arguments\ \fIarguments\fP]
+[\-[no]center]
+[\-portrait] [\-landscape] [\-upsidedown] [\-seascape] [\-[no]swap]
+[\-letter] [\-tabloid] [\-ledger] [\-legal] [\-statement]
+[\-executive] [\-a3] [\-a4] [\-a5] [\-b4] [\-b5]
+[\-folio] [\-quarto] [\-10x14]
+[\-force] [\-forceorientation] [\-forcemedia]
+[\-[no]openwindows] [\-[no]ncdwm]
+[\-page \fIlabel\fP] [\-\fItoolkitoption\fR\ ...]
+[filename]
+.SH DESCRIPTION
+The \fIghostview\fP program provides an X11 user interface for
+the \fIghostscript\fP interpreter.
+\fIGhostview\fP and \fIghostscript\fP function as two cooperating programs.
+\fIGhostview\fP creates the viewing window and \fIghostscript\fP draws in it.
+.PP
+Don't be alarmed by the number of options.
+Generally, one invokes \fIghostview\fP with just one parameter, the name of
+the file to be previewed. If the filename is ``-'', \fIghostview\fP will read
+from ``stdin''.
+The options provide a way to set X resources from
+the command line for a single invocation of \fIghostview\fP. For that reason,
+discussion of the options is delayed until after the X resources are discussed.
+.SH MAIN WINDOW
+The main viewport is on the right side of the main window.
+If the page is larger than the viewport, there will be scroll bars along the
+bottom and right edges of the viewport.
+To the left of the viewport is the table of contents.
+If the PostScript file has document structuring convention (DSC) comments,
+the table of context will display the page labels (i.e. usually page numbers).
+To the left of the table of contents is the menu box.
+Each push button brings up a popup menu.
+Over the menu box and table of contents there are three optional labels
+that contain the title, date, and locator.
+The title label contains the document title found in the DSC comments.
+If no title can be found, the filename is used in its place.
+The date label contains the document date found in the DSC comments.
+If no date can be found, the last modified date of the file is
+used in its place.
+Since the title and date labels may be clipped by the main viewport,
+the date and title labels are push buttons that bring up a popup window
+with the title or date.
+These popup windows also show the ``document'' icon when the displayed string
+comes from the DSC comments.
+The locator shows the location of the cursor in the viewport.
+The location is expressed in the default user coordinate system.
+The locator is useful for measuring bounding boxes.
+.PP
+Within the main viewport the mouse cursor is a ``target'' when
+\fIghostscript\fP is doing work.
+The cursor is a ``cross hair'' when \fIghostscript\fP is idle.
+When moving to another page in a document, it is generally best to wait
+for \fIghostscript\fP to become idle. Otherwise, the current \fIghostscript\fP process
+must be killed and the overhead of reading the prologue is incurred again.
+.PP
+\fIGhostview\fP will check to see if the file has been modified just before
+it displays a page or when the application is deiconified.
+If the file has changed, it will reopen the file.
+.PP
+Clicking anywhere within the viewport will popup a zoom window.
+The window is centered about the location that was clicked.
+Clicking with the first mouse button pops up a low resolution zoom window.
+Clicking with the second mouse button pops up a medium resolution zoom window.
+Clicking with the third mouse button pops up a high resolution zoom window.
+The cursor in the zoom window will display a ``target'' or ``cross hair''
+depending on the state of \fIghostscript\fP.
+The locator reports the position of the cursor in the zoom windows
+as well as the main viewport.
+.PP
+In the table of contents, the first and third mouse button function exactly
+as they do in a Text widget.
+That is the first mouse button selects text and the third mouse button
+extends selections.
+However, clicking on a page label with the second mouse button will cause
+that page to be shown.
+The page being displayed is marked with a '<' in the right margin of
+the table of contents.
+.SH POPUP WINDOWS
+There are several additional windows that may appear.
+The \fIcopyright\fP window will appear whenever copyright information is
+requested.
+The \fIinformation\fP window appears whenever the \fIghostscript\fP process
+writes to ``stdout'' or ``stderr''.
+Whenever there is an error in the PostScript program, the stack trace will
+appear in this window.
+When \fIghostscript\fP is invoked without the quiet option, informational message
+regarding the state of \fIghostscript\fP will appear in the \fIinformation\fP window.
+The \fIcopyright\fP and \fIinformation\fP windows can be dismissed by pushing
+the ``Dismiss'' button.
+.PP
+The \fISelect File\fP dialog widget will appear when you wish to open or save
+a file.
+The
+.I Select File
+dialog widget
+allows an X11 user to select a file by typing the path or by browsing in
+directory listings and selecting entries with the mouse.
+.PP
+The space bar can be pressed to complete filenames, and tilde is used for home
+directories.
+All the usual key bindings can be used in the text widget, except for Return
+and Control\-M, which are equivalent to pressing the OK button.
+The path can be scrolled using the large horizontal scroll bar, or by moving
+the insertion cursor in the text widget.
+The directory entries can be scrolled using the vertical scroll bars, or by
+holding a mouse button down and moving out of the listing.
+The scrolling speed varies with the distance from the listing.
+.PP
+The directory entries are terminated with special characters that show the
+type of entry, similar to the
+.I \-F
+option of
+.IR ls (1).
+.PP
+The
+.I Select File
+dialog widget is in total control until is pops down.
+No other controls in \fIghostview\fP will be active during this time.
+.SH MENUS
+There are five buttons in the menu box. They are the
+\fBFile\fP, \fBPage\fP, \fBMagstep\fP, \fBOrientation\fP, and \fBMedia\fP
+buttons.
+There are keyboard accelerators for most of the popup menus. Be sure
+to read the keyboard accelerator section.
+.IP \fBFile\fB 1i
+This popup menu controls file access:
+.RS 1i
+.IP "\fBOpen...\fP" 1i
+Pops up the Select File window in preparation to open a file.
+The Select File widget is in total control until it pops down.
+Opens the file for viewing.
+.IP "\fBReopen\fP" 1i
+Reopens the current file.
+.IP "\fBPrint...\fP" 1i
+Pops up a dialog widget to ask for the printer name.
+Sends the whole document to the printer.
+.IP "\fBPrint marked pages...\fP" 1i
+Pops up a dialog widget to ask for the printer name.
+Sends the marked pages to the printer.
+If no pages have been marked, the mark procedure is called before
+printing and then the unmark procedure is called after printing.
+.IP "\fBSave marked pages...\fP" 1i
+Pops up the Select File window in preparation to save a file.
+The Select File widget is in total control until it pops down.
+Saves the marked pages in the selected file.
+If no pages have been marked, the mark procedure is called before
+saving and then the unmark procedure is called after saving.
+.IP "\fBCopyright...\fP" 1i
+Pops up the \fIcopyright\fP window.
+.IP "\fBQuit\fP" 1i
+Causes \fIghostview\fP to exit.
+.RS -1i
+.IP \fBPage\fP 1i
+This popup menu controls page access:
+.RS 1i
+.IP "\fBNext\fP" 1i
+Display the next page.
+.IP "\fBRedisplay\fP" 1i
+Display the current page.
+.IP "\fBPrevious\fP" 1i
+Display the previous page.
+.IP "\fBCenter\fP" 1i
+Center the page in the viewport.
+.IP "\fBMark\fP" 1i
+Mark the pages that have been selected in the table of contents.
+If no pages have been selected, mark the current page.
+.IP "\fBUnmark\fP" 1i
+Unmark the pages that have been selected in the table of contents.
+If no pages have been selected, unmark the current page.
+.RS -1i
+.IP \fBMagstep\fP 1i
+The Magstep menu controls the magnification at which the document is
+viewed.
+The default magstep of 0 implies no magnification (i.e. the size on
+the screen should match the size on paper).
+\fIGhostview\fP borrows the notion of magstep from \*(Te\&. The magnification
+is defined to be 1.2**magstep. At magstep 1, the document is magnified
+by 1.2. At magstep -1, the document is reduced by 1.2.
+The Magstep menu lists values from -5 to 5.
+.IP \fBOrientation\fP 1i
+The Orientation menu controls the display orientation.
+A ``dot'' appears in front of the current orientation.
+The first mouse button sets the default orientation.
+The DSC comments may specify an orientation of Portrait or Landscape that
+overrides the default.
+In this case, a "document" appears in front of the current orientation.
+The second mouse button can be used to ``force'' the orientation on
+a document to override the DSC comments.
+If an orientation is being forced, then a ``tie fighter'' will appear in
+front of the current orientation.
+.RS 1i
+.IP "\fBPortrait\fP" 1i
+Set the orientation to Portrait. This implies no rotation.
+A portrait orientation indicates that the longest edge of the paper
+is parallel to the vertical (y) axis.
+.IP "\fBLandscape\fP" 1i
+Set the orientation to Landscape. This implies a clockwise rotation of the
+paper by 90 degrees.
+A landscape orientation indicates that the longest edge of the paper
+is parallel to the horizontal (x) axis.
+.IP "\fBUpside\-down\fP" 1i
+Set the orientation to Upside\-Down.
+.IP "\fBSeascape\fP" 1i
+Set the orientation to Seascape. This implies a counterclockwise rotation
+of the paper by 90 degrees.
+.IP "\fBSwap Landscape\fP" 1i
+Swap the meaning of Landscape and Seascape. Most of the Landscape documents
+that I have encountered require a 90 clockwise rotation of the paper to
+view. However, there is no standard and some documents need to be rotated
+the other way. The swap landscape button allows \fIghostview\fP to automatically
+rotate the document the right way in response to the \fB%%Orientation\fP comment
+in the PostScript file.
+.RS -1i
+.IP \fBMedia\fP 1i
+The entries on the Media menu set the page media.
+Media defined in the document appear at the beginning of the menu
+separated by a line from the standard media.
+A ``dot'' appears in front of the current media.
+The first mouse button sets the default media.
+The DSC comments may specify the page media that overrides the default.
+In this case, a "document" appears in front of the current media.
+The second mouse button can be used to ``force'' the media on
+a document to override the DSC comments.
+Forcing the media on an EPSF figure will override the Bounding Box.
+This makes is easy to view a figure with an incorrect \fB%%BoundingBox\fP comment.
+If a media is being forced, then a ``tie fighter'' will appear in
+front of the current media.
+.sp
+Here are the standard media names and their sizes.
+The size is given as the width and height in PostScript points.
+.ta 1.5i 3.0i
+.RS 1i
+.nf
+\fBLetter\fP 612 x 792 (8.5 x 11 in.)
+\fBTabloid\fP 792 x 1224 (11 x 17 in.)
+\fBLedger\fP 1224 x 792 (17 x 11 in.)
+\fBLegal\fP 612 x 1008 (8.5 x 14 in.)
+\fBStatement\fP 396 x 612 (5.5 x 8.5 in.)
+\fBExecutive\fP 540 x 720 (7.5 x 10 in.)
+\fBA3\fP 842 x 1190
+\fBA4\fP 595 x 842
+\fBA5\fP 420 x 595
+\fBB4\fP 729 x 1032
+\fBB5\fP 516 x 729
+\fBFolio\fP 612 x 936 (8.5 x 13 in.)
+\fBQuarto\fP 610 x 780
+\fB10x14\fP 720 x 1008 (10 x 14 in.)
+.fi
+.SH KEYBOARD ACCELERATORS
+Most of the popup menu commands have an equivalent action that can be
+invoked from the keyboard. The popup menu entry must be sensitive (i.e. not grayed
+out) for the action to have effect. Here is the default keyboard binding:
+.IP \fBQ\fP 1i
+Bound to \fBGhostviewQuit()\fP which is
+equivalent to pushing the \fBQuit\fP menu button on the \fBGhostview\fP menu.
+.IP \fBO\fP 1i
+Bound to \fBGhostviewOpen()\fP which is
+equivalent to pushing the \fBOpen...\fP menu button on the \fBFile\fP menu.
+.IP \fBR\fP 1i
+Bound to \fBGhostviewReopen()\fP which is
+equivalent to pushing the \fBReopen\fP menu button on the \fBFile\fP menu.
+.IP \fBS\fP 1i
+Bound to \fBGhostviewSave()\fP which is
+equivalent to pushing the \fBSave marked pages...\fP menu button on the \fBFile\fP menu.
+.IP \fBP\fP 1i
+Bound to \fBGhostviewPrintMarked()\fP which is
+equivalent to pushing the \fBPrint marked pages...\fP menu button on the \fBFile\fP menu.
+.IP \fBShift\-P\fP 1i
+Bound to \fBGhostviewPrintWhole()\fP which is
+equivalent to pushing the \fBPrint...\fP menu button on the \fBFile\fP menu.
+.IP "\fBBackSpace\fP, \fBDelete\fP, \fBPrior\fP, \fBB\fP" 1i
+Bound to \fBGhostviewPrevious()\fP which is
+equivalent to pushing the \fBPrevious\fP menu button on the \fBPage\fP menu.
+.IP "\fBspace\fP, \fBReturn\fP, \fBNext\fP, \fBF\fP" 1i
+Bound to \fBGhostviewNext()\fP which is
+equivalent to pushing the \fBNext\fP menu button on the \fBPage\fP menu.
+.IP "\fBperiod\fP, \fBCtrl\-L\fP" 1i
+Bound to \fBGhostviewShow()\fP which is
+equivalent to pushing the \fBRedisplay\fP menu button on the \fBPage\fP menu.
+.IP \fBM\fP 1i
+Bound to \fBGhostviewMark()\fP which is
+equivalent to pushing the \fBMark\fP menu button on the \fBPage\fP menu.
+.IP \fBN\fP 1i
+Bound to \fBGhostviewUnMark()\fP which is
+equivalent to pushing the \fBUnmark\fP menu button on the \fBPage\fP menu.
+.IP \fB0\fP 1i
+Bound to \fBGhostviewMagstep(0)\fP which is
+equivalent to pushing the \fB0\fP menu button on the \fBMagstep\fP menu.
+.IP \fB1\fP 1i
+Bound to \fBGhostviewMagstep(1)\fP which is
+equivalent to pushing the \fB1\fP menu button on the \fBMagstep\fP menu.
+.IP \fB2\fP 1i
+Bound to \fBGhostviewMagstep(2)\fP which is
+equivalent to pushing the \fB2\fP menu button on the \fBMagstep\fP menu.
+.IP \fB3\fP 1i
+Bound to \fBGhostviewMagstep(3)\fP which is
+equivalent to pushing the \fB3\fP menu button on the \fBMagstep\fP menu.
+.IP \fB4\fP 1i
+Bound to \fBGhostviewMagstep(4)\fP which is
+equivalent to pushing the \fB4\fP menu button on the \fBMagstep\fP menu.
+.IP \fB5\fP 1i
+Bound to \fBGhostviewMagstep(5)\fP which is
+equivalent to pushing the \fB5\fP menu button on the \fBMagstep\fP menu.
+.IP \fB+\fP 1i
+Bound to \fBGhostviewIncreaseMagstep()\fP which increases the magstep by 1.
+.IP \fB-\fP 1i
+Bound to \fBGhostviewDecreaseMagstep()\fP which decreases the magstep by 1.
+.IP \fBU\fP 1i
+Bound to \fBGhostviewUp()\fP which scrolls the main viewport up.
+.IP \fBD\fP 1i
+Bound to \fBGhostviewDown()\fP which scrolls the main viewport down.
+.IP \fBH\fP 1i
+Bound to \fBGhostviewLeft()\fP which scrolls the main viewport left.
+.IP \fBJ\fP 1i
+Bound to \fBGhostviewDown()\fP which scrolls the main viewport down.
+.IP \fBK\fP 1i
+Bound to \fBGhostviewUp()\fP which scrolls the main viewport up.
+.IP \fBL\fP 1i
+Bound to \fBGhostviewRight()\fP which scrolls the main viewport right.
+.IP "\fBUp\fP (arrow)" 1i
+Bound to \fBGhostviewDefault() GhostviewSetOrientation(portrait)\fP which is
+equivalent to pushing \fBPortrait\fP with the first mouse button on the
+\fBOrientation\fP menu.
+.IP "\fBRight\fP (arrow)" 1i
+Bound to \fBGhostviewDefault() GhostviewSetOrientation(landscape)\fP which is
+equivalent to pushing \fBLandscape\fP with the first mouse button on the
+\fBOrientation\fP menu.
+.IP "\fBDown\fP (arrow)" 1i
+Bound to \fBGhostviewDefault() GhostviewSetOrientation(upside\-down)\fP which is
+equivalent to pushing \fBUpside\-down\fP with the first mouse button on the
+\fBOrientation\fP menu.
+.IP "\fBLeft\fP (arrow)" 1i
+Bound to \fBGhostviewDefault() GhostviewSetOrientation(seascape)\fP which is
+equivalent to pushing \fBSeascape\fP with the first mouse button on the
+\fBOrientation\fP menu.
+.IP "\fBShift\-Up\fP (arrow)" 1i
+Bound to \fBGhostviewForce() GhostviewSetOrientation(portrait)\fP which is
+equivalent to pushing \fBPortrait\fP with the second mouse button on the
+\fBOrientation\fP menu.
+.IP "\fBShift\-Right\fP (arrow)" 1i
+Bound to \fBGhostviewForce() GhostviewSetOrientation(landscape)\fP which is
+equivalent to pushing \fBLandscape\fP with the second mouse button on the
+\fBOrientation\fP menu.
+.IP "\fBShift\-Down\fP (arrow)" 1i
+Bound to \fBGhostviewForce() GhostviewSetOrientation(upside\-down)\fP which is
+equivalent to pushing \fBUpside\-down\fP with the second mouse button on the
+\fBOrientation\fP menu.
+.IP "\fBShift\-Left\fP (arrow)" 1i
+Bound to \fBGhostviewForce() GhostviewSetOrientation(seascape)\fP which is
+equivalent to pushing \fBSeascape\fP with the second mouse button on the
+\fBOrientation\fP menu.
+.SH ACTIONS
+Most of the popup menu commands have an equivalent action that can be
+used in a translation. The popup menu entry must be sensitive (i.e. not grayed
+out) for the action to have effect. Here is the list of actions:
+.IP \fBGhostviewCopyright()\fP 1i
+Equivalent to pushing the \fBCopyright...\fP menu button on the \fBGhostview\fP menu.
+.IP \fBGhostviewQuit()\fP 1i
+Equivalent to pushing the \fBQuit\fP menu button on the \fBGhostview\fP menu.
+.IP \fBGhostviewOpen()\fP 1i
+Equivalent to pushing the \fBOpen...\fP menu button on the \fBFile\fP menu.
+.IP \fBGhostviewReopen()\fP 1i
+Equivalent to pushing the \fBReopen\fP menu button on the \fBFile\fP menu.
+.IP \fBGhostviewSave()\fP 1i
+Equivalent to pushing the \fBSave marked pages...\fP menu button on the \fBFile\fP menu.
+.IP \fBGhostviewPrintWhole()\fP 1i
+Equivalent to pushing the \fBPrint...\fP menu button on the \fBFile\fP menu.
+.IP \fBGhostviewPrintMarked()\fP 1i
+Equivalent to pushing the \fBPrint marked pages...\fP menu button on the \fBFile\fP menu.
+.IP \fBGhostviewPrevious()\fP 1i
+Equivalent to pushing the \fBPrevious\fP menu button on the \fBPage\fP menu.
+.IP \fBGhostviewShow()\fP 1i
+Equivalent to pushing the \fBRedisplay\fP menu button on the \fBPage\fP menu.
+.IP \fBGhostviewNext()\fP 1i
+Equivalent to pushing the \fBNext\fP menu button on the \fBPage\fP menu.
+.IP \fBGhostviewCenter()\fP 1i
+Equivalent to pushing the \fBCenter\fP menu button on the \fBPage\fP menu.
+.IP \fBGhostviewMark()\fP 1i
+Equivalent to pushing the \fBMark\fP menu button on the \fBPage\fP menu.
+.IP \fBGhostviewUnmark()\fP 1i
+Equivalent to pushing the \fBUnmark\fP menu button on the \fBPage\fP menu.
+.IP \fBGhostviewSetMagstep(magstep)\fP 1i
+Sets the magstep. The parameter must be an integer.
+.IP \fBGhostviewIncreaseMagstep()\fP 1i
+Increases magstep by one.
+.IP \fBGhostviewDecreaseMagstep()\fP 1i
+Decreases magstep by one.
+.IP \fBGhostviewSetOrientation(orientation)\fP 1i
+Set the orientation to the passed parameter. The parameter must be
+\fBportrait\fP, \fBlandscape\fP, \fBupside\-down\fP, or \fBseascape\fP.
+.IP \fBGhostviewSwapLandscape()\fP 1i
+Equivalent to pushing the \fBSwap Landscape\fP menu button on the \fBOrientation\fP menu.
+.IP \fBGhostviewSetPageMedia(media\-name)\fP 1i
+Sets the media. The parameter should be either a media defined in the
+document or a standard media.
+.IP \fBGhostviewDefault()\fP 1i
+The orientation or media being set is not forced on the document.
+This action is called before the action that sets the orientation
+or media.
+.IP \fBGhostviewForce()\fP 1i
+The orientation or media being set is forced on the document.
+This action is called before the action that sets the orientation
+or media.
+.IP \fBGhostviewDeleteWindow()\fP 1i
+Destroy the current window. This provides a way to implement the Delete Window
+protocol for window managers.
+.IP \fBGhostviewDismiss()\fP 1i
+Pop down the current window. This provides a way to implement the Delete Window
+protocol for window managers.
+.IP \fBGhostviewScrollUp()\fP 1i
+Scroll the main viewport up.
+.IP \fBGhostviewScrollDown()\fP 1i
+Scroll the main viewport down.
+.IP \fBGhostviewScrollLeft()\fP 1i
+Scroll the main viewport left.
+.IP \fBGhostviewScrollRight()\fP 1i
+Scroll the main viewport right.
+.IP \fBGhostviewEraseLocator()\fP 1i
+Used to erase the locator when leaving a Ghostview widget.
+.IP \fBGhostviewCheckFile()\fP 1i
+Checks to see if the file changed and refreshes the screen if necessary.
+.SH APPLICATION RESOURCES
+The following application resources may be set to
+control the default behavior of \fIghostview\fP.
+.IP "\fBshowTitle (\fPclass\fB Labels)\fP" 1i
+Tells whether to display the \fB%%Title\fP comment.
+The default is ``true''.
+.IP "\fBshowDate (\fPclass\fB Labels)\fP" 1i
+Tells whether to display the \fB%%Data\fP comment.
+The default is ``true''.
+.IP "\fBshowLocator (\fPclass\fB Labels)\fP" 1i
+Tells whether to display the locator.
+The default is ``true''.
+.IP "\fBautoCenter (\fPclass\fB AutoCenter)\fP" 1i
+Tells whether to center the page within the viewport whenever the page size
+changes.
+The default is ``true''.
+.IP "\fBhorizonalMargin (\fPclass\fB Margin)\fP" 1i
+Tells how many pixels ghostview should reserve for window decorations
+in the horizontal direction.
+The default value is ``20''.
+.IP "\fBverticalMargin (\fPclass\fB Margin)\fP" 1i
+Tells how many pixels ghostview should reserve for window decorations
+in the vertical direction.
+The default value is ``44''.
+.IP "\fBminimumMagstep (\fPclass\fB Magstep)\fP" 1i
+Tells the smallest magstep to display.
+The default is ``-5''.
+.IP "\fBmaximumMagstep (\fPclass\fB Magstep)\fP" 1i
+Tells the largest magstep to display.
+The default is ``5''.
+.IP "\fBmagstep (\fPclass\fB Magstep)\fP" 1i
+Sets the default magstep.
+The default is ``0''.
+.IP "\fBorientation (\fPclass\fB Orientation)\fP" 1i
+Sets the default orientation.
+The default is ``Portrait''.
+.IP "\fBpage (\fPclass\fB Page)\fP" 1i
+Gives the initial page to display. This resource only affects the display
+of the file listed on the command line.
+The default is NULL.
+.IP "\fBpageMedia (\fPclass\fB PageMedia)\fP" 1i
+Sets the default page media.
+The default is ``Letter''.
+.IP "\fBforceOrientation (\fPclass\fB Force)\fP" 1i
+Tells whether to force the orientation on the document.
+The default is ``false''.
+.IP "\fBforcePageMedia (\fPclass\fB Force)\fP" 1i
+Tells whether to force the page media on the document.
+The default is ``false''.
+.IP "\fBswapLandscape (\fPclass\fB SwapLandscape)\fP" 1i
+Tells whether to swap the meaning of Landscape and Seascape.
+The default is ``false''.
+.IP "\fBprintCommand (\fPclass\fB PrintCommand)\fP" 1i
+Sets the command used for printing.
+The printer environment variable is set to the desired printer
+and then this command is executed using popen. This command should
+read from ``stdin'' and send the file to the appropriate printer.
+The default value is ``lpr'' for BSD and ``lp'' for System V.
+.IP "\fBprinterVariable (\fPclass\fB PrinterVariable)\fP" 1i
+Gives the name of the printer environment variable.
+The default value is ``PRINTER'' for BSD and ``LPDEST'' for System V.
+.IP "\fBdefaultPrinter (\fPclass\fB DefaultPrinter)\fP" 1i
+Gives the printer name to use when the printer environment variable is not set.
+The default value is NULL.
+.IP "\fBprintPrompt (\fPclass\fB PrintPrompt)\fP" 1i
+Sets the prompt used to ask for the printer name.
+The default value is ``Printer\ Name:\ ''.
+.IP "\fBprintFail (\fPclass\fB printFail)\fP" 1i
+Sets the string used to inform the user that the printer command failed.
+The default is ``"lpr"\ command\ failed.''.
+.IP "\fBopenPrompt (\fPclass\fB OpenPrompt)\fP" 1i
+Sets the prompt used to ask for a file name to open.
+The default value is ``Open\ File:\ ''.
+.IP "\fBopenFail (\fPclass\fB OpenFail)\fP" 1i
+Sets the string used to inform the user that the open failed.
+The default value is ``Cannot\ open\ file:\ ''.
+.IP "\fBsavePrompt (\fPclass\fB SavePrompt)\fP" 1i
+Sets the prompt used to ask for a file name to save.
+The default value is ``Save\ File:\ ''.
+.IP "\fBsaveFail (\fPclass\fB SaveFail)\fP" 1i
+Sets the string used to inform the user that the save failed.
+The default value is ``Cannot\ save\ file:\ ''.
+.IP "\fBopenWindows (\fPclass\fB OpenWindows)\fP" 1i
+OpenWindows servers sometimes cause error messages about bitmaps not being
+1 bit deep. Turning on this resource avoids the problem by not using any
+bitmaps. You lose the functionality of having the current magstep,
+orientation and media marked on the popup menus.
+The default value is ``false''.
+.IP "\fBncdwm (\fPclass\fB Ncdwm)\fP" 1i
+The Xt Intrinsics has a bug that causes bogus information in
+the window manager size hints. \fINcdwm\fP and possibly other window managers
+get confused by the bogus information and make the window extremely small.
+\fITwm\fP and \fImwm\fP ignore the bogus information. Turning on the resource avoids
+the problem with \fIncdwm\fP by doing things slightly differently. However, this
+can confuse other window managers such as \fImwm\fP. This bug is fixed in X11R5
+fix-10.
+You should only set this resource if you have the problem.
+The default value is ``false''.
+.SH GHOSTVIEW WIDGET RESOURCES
+Certain resources in the Ghostview widget may be set by the user.
+These selected resources are presented below.
+.IP "\fBarguments (\fPclass\fB Arguments)\fP" 1i
+Additional arguments passed to the interpreter.
+It is convenient to name files that preload fonts here for PostScript programs
+that continually reload fonts while rendering a page.
+The default is no additional arguments.
+.IP "\fBbusyCursor (\fPclass\fB Cursor)\fP" 1i
+The cursor shown when \fIghostscript\fP is rendering to the window.
+The busy cursor is set to the ``target'' by the application defaults.
+.IP "\fBcursor (\fPclass\fB Cursor)\fP" 1i
+The cursor shown when \fIghostscript\fP is idle.
+The default cursor is the ``crosshair''.
+.IP "\fBinterpreter (\fPclass\fB Interpreter)\fP" 1i
+The name of the executable to call to render the PostScript.
+It is convenient to set this resource to the path of an alternate
+version of ghostscript for testing.
+The default value is ``gs''.
+.IP "\fBpalette (\fPclass\fB Palette)\fP" 1i
+Tells \fIghostscript\fP how to restrict the palette used when rendering.
+The possible values are ``color'', ``grayscale'', and ``monochrome''.
+The default value is ``color''.
+.IP "\fBquiet (\fPclass\fB Quiet)\fP" 1i
+Tells \fIghostscript\fP whether to supress informational messages.
+The default value is ``true''.
+.IP "\fBsafer (\fPclass\fB Safer)\fP" 1i
+Tells \fIghostscript\fP whether to run in ``safer'' mode.
+The default value is ``true''.
+.IP "\fBuseBackingPixmap (\fPclass\fB UseBackingPixmap)\fP" 1i
+Tells whether to use a backing pixmap. If this resource
+is false, backing store is requested on the Ghostview window.
+Some X servers have limited resources for large pixmaps.
+Also, some X servers' backing store is much faster
+than using a backing pixmap. You should reset this resource if your
+X server is one of the server types mentioned.
+The default value is ``true''.
+.IP "\fBxdpi (\fPclass\fB Resolution)\fP" 1i
+Sets the X resolution of the window in dots per inch.
+You can use this resource to affect the main window.
+Zoom windows have their X dpi set explicitly in the program.
+The default value is calculated from the screen metrics.
+.IP "\fBydpi (\fPclass\fB Resolution)\fP" 1i
+Sets the Y resolution of the window in dots per inch.
+You can use this resource to affect the main window.
+Zoom windows have their Y dpi set explicitly in the program.
+The default value is calculated from the screen metrics.
+.SH GHOSTVIEW WIDGET ACTIONS
+.IP "\fBnotify(width height xdpi ydpi)\fP" 1i
+The notify event is used by the ghostview application for the locator
+and popup zoom windows.
+If the width and height are 0, the event is user for the locator.
+Otherwise, it triggers a popup zoom window.
+The default width and height are 72.
+The default xdpi and ydpi are 300.
+The height will default to the width if the height is omitted.
+The xdpi will default to the xdpi if the ydpi is omitted.
+.SH OPTIONS
+.IP \fB\-monochrome\fP 1i
+Equivalent to setting ``*Ghostview.palette: Monochrome''.
+.IP \fB\-grayscale\fP 1i
+Equivalent to setting ``*Ghostview.palette: GrayScale''.
+.IP \fB\-color\fP 1i
+Equivalent to setting ``*Ghostview.palette: Color''.
+.IP \fB\-title\fP 1i
+Equivalent to setting ``Ghostview.showTitle: True''.
+.IP \fB\-notitle\fP 1i
+Equivalent to setting ``Ghostview.showTitle: False''.
+.IP \fB\-date\fP 1i
+Equivalent to setting ``Ghostview.showDate: True''.
+.IP \fB\-nodate\fP 1i
+Equivalent to setting ``Ghostview.showDate: False''.
+.IP \fB\-locator\fP 1i
+Equivalent to setting ``Ghostview.showLocator: True''.
+.IP \fB\-nolocator\fP 1i
+Equivalent to setting ``Ghostview.showLocator: False''.
+.IP \fB\-labels\fP 1i
+Equivalent to setting ``Ghostview.Labels: True''.
+.IP \fB\-nolabels\fP 1i
+Equivalent to setting ``Ghostview.Labels: False''.
+.IP "\fB\-resolution\fP \fIdpi\fP" 1i
+Equivalent to setting ``*Ghostview.Resolution: \fIdpi\fP''.
+.IP "\fB\-dpi\fP \fIdpi\fP" 1i
+Equivalent to setting ``*Ghostview.Resolution: \fIdpi\fP''.
+.IP "\fB\-xdpi\fP \fIdpi\fP" 1i
+Equivalent to setting ``*Ghostview.xdpi: \fIdpi\fP''.
+.IP "\fB\-ydpi\fP \fIdpi\fP" 1i
+Equivalent to setting ``*Ghostview.ydpi: \fIdpi\fP''.
+.IP "\fB\-magstep\fP \fImagstep\fP" 1i
+Equivalent to setting ``Ghostview.magstep: \fImagstep\fP''.
+.IP \fB\-safer\fP 1i
+Equivalent to setting ``*Ghostview.safer: True''.
+.IP \fB\-nosafer\fP 1i
+Equivalent to setting ``*Ghostview.safer: False''.
+.IP \fB\-quiet\fP 1i
+Equivalent to setting ``*Ghostview.quiet: True''.
+.IP \fB\-noquiet\fP 1i
+Equivalent to setting ``*Ghostview.quiet: False''.
+.IP "\fB\-arguments\fP \fIarguments\fP" 1i
+Equivalent to setting ``*Ghostview.arguments: \fIarguments\fP''.
+.IP \fB\-center\fP 1i
+Equivalent to setting ``Ghostview.autoCenter: True''.
+.IP \fB\-nocenter\fP 1i
+Equivalent to setting ``Ghostview.autoCenter: False''.
+.IP \fB\-portrait\fP 1i
+Equivalent to setting ``Ghostview.orientation: Portrait''.
+.IP \fB\-landscape\fP 1i
+Equivalent to setting ``Ghostview.orientation: Landscape''.
+.IP \fB\-upsidedown\fP 1i
+Equivalent to setting ``Ghostview.orientation: Upside\-down''.
+.IP \fB\-seascape\fP 1i
+Equivalent to setting ``Ghostview.orientation: Seascape''.
+.IP \fB\-swap\fP 1i
+Equivalent to setting ``Ghostview.swapLandscape: True''.
+.IP \fB\-noswap\fP 1i
+Equivalent to setting ``Ghostview.swapLandscape: False''.
+.IP \fB\-letter\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: Letter''.
+.IP \fB\-tabloid\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: Tabloid''.
+.IP \fB\-ledger\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: Ledger''.
+.IP \fB\-legal\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: Legal''.
+.IP \fB\-statement\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: Statement''.
+.IP \fB\-executive\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: Executive''.
+.IP \fB\-a3\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: A3''.
+.IP \fB\-a4\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: A4''.
+.IP \fB\-a5\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: A5''.
+.IP \fB\-b4\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: B4''.
+.IP \fB\-b5\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: B5''.
+.IP \fB\-folio\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: Folio''.
+.IP \fB\-quarto\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: Quarto''.
+.IP \fB\-10x14\fP 1i
+Equivalent to setting ``Ghostview.pageMedia: 10x14''.
+.IP \fB\-force\fP 1i
+Equivalent to setting ``Ghostview.Force: True''.
+.IP \fB\-forceorientation\fP 1i
+Equivalent to setting ``Ghostview.forceOrientation: True''.
+.IP \fB\-forcemedia\fP 1i
+Equivalent to setting ``Ghostview.forcePageMedia: True''.
+.IP \fB\-openwindows\fP 1i
+Equivalent to setting ``Ghostview.openWindows: True''.
+.IP \fB\-noopenwindows\fP 1i
+Equivalent to setting ``Ghostview.openWindows: False''.
+.IP \fB\-ncdwm\fP 1i
+Equivalent to setting ``Ghostview.ncdwm: True''.
+.IP \fB\-noncdwm\fP 1i
+Equivalent to setting ``Ghostview.ncdwm: False''.
+.IP "\fB\-page\fP \fIlabel\fP" 1i
+Equivalent to setting ``Ghostview.page: \fIlabel\fP''.
+.SH WIDGET HIERARCHY
+.nf
+\fIThe hierarchy of the ghostview application:\fR
+.sp
+.DT
+Ghostview ghostview
+ Form form
+ MenuButton titleButton
+ SimpleMenu menu
+ SmeBSB title
+ MenuButton dateButton
+ SimpleMenu menu
+ SmeBSB date
+ Label locator
+ Box box
+ MenuButton fileButton
+ SimpleMenu menu
+ SmeBSB open
+ SmeBSB reopen
+ SmeBSB printwhole
+ SmeBSB printmarked
+ SmeBSB save
+ SmeLine line
+ SmeBSB copyright
+ SmeBSB quit
+ MenuButton pageButton
+ SimpleMenu menu
+ SmeBSB next
+ SmeBSB show
+ SmeBSB prev
+ SmeLine line
+ SmeBSB center
+ SmeLine line
+ SmeBSB mark
+ SmeBSB unmark
+ MenuButton magstepButton
+ SimpleMenu menu
+ SmeBSB -5
+ SmeBSB -4
+ SmeBSB -3
+ SmeBSB -2
+ SmeBSB -1
+ SmeBSB 0
+ SmeBSB 1
+ SmeBSB 2
+ SmeBSB 3
+ SmeBSB 4
+ SmeBSB 5
+ MenuButton orientationButton
+ SimpleMenu menu
+ SmeBSB portrait
+ SmeBSB landscape
+ SmeBSB upsidedown
+ SmeBSB seascape
+ SmeLine line
+ SmeBSB swap
+ MenuButton pagemediaButton
+ SimpleMenu menu
+ SmeBSB Letter
+ SmeBSB Tabloid
+ SmeBSB Ledger
+ SmeBSB Legal
+ SmeBSB Statement
+ SmeBSB Executive
+ SmeBSB A3
+ SmeBSB A4
+ SmeBSB A5
+ SmeBSB B4
+ SmeBSB B5
+ SmeBSB Folio
+ SmeBSB Quarto
+ SmeBSB 10x14
+ Text toc
+ Viewport pageview
+ Core clip
+ Ghostview page
+ Scrollbar horizontal
+ Scrollbar vertical
+ TopLevelShell information
+ Form form
+ Text text
+ Command dismiss
+ TopLevelShell copyright
+ Form form
+ Text text
+ Command dismiss
+ TransientShell popup
+ Form dialog
+ Label prompt
+ Text response
+ Command okay
+ Command cancel
+ TopLevelShell zoom
+ Form form
+ Ghostview page
+ Command dismiss
+.sp
+\fIThe hierarchy of the Select File dialog box:\fR
+.sp
+TransientShell selFile
+ Form selFileForm
+ Label selFilePrompt
+ Text selFileField
+ Scrollbar selFileHScroll
+ Composite selFileList1
+ Scrollbar selFileVScroll
+ Scrollbar selFileHScroll
+ Composite selFileList2
+ Scrollbar selFileVScroll
+ Scrollbar selFileHScroll
+ Composite selFileList3
+ Scrollbar selFileVScroll
+ Scrollbar selFileHScroll
+ Command selFileOK
+ Command selFileCancel
+.fi
+.SH ENVIRONMENT
+.IP \fBLPDEST\fP 1i
+The LPDEST environment variable gives the default printer destination
+on System V.
+.IP \fBPRINTER\fP 1i
+The PRINTER environment variable gives the default printer destination
+on BSD.
+.SH LIMITATIONS
+If the document does not begin with ``%!PS\-Adobe\-'', it does not
+claim conformance to the document structuring convention.
+When these documents are encountered, the functionality of \fIghostview\fP
+is limited to giving you scroll bars and a next page capability.
+Because there is no table of contents,
+skipping around the document and marking pages is impossible.
+.PP
+If there is no table of contents for the document, the popup zoom
+window will always show the first page.
+.SH BUGS
+If you find a bug, please send a bug report to ghostview@cs.wisc.edu.
+.SH AUTHOR
+Copyright (C) 1992 Timothy O. Theisen
+.PP
+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.
+.PP
+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.
+.PP
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+.sp
+.ta 1.0i 3.0i
+.nf
+Author: Tim Theisen Systems Programmer
+Internet: tim@cs.wisc.edu Department of Computer Sciences
+UUCP: uwvax!tim University of Wisconsin\-Madison
+Phone: (608)262\-0438 1210 West Dayton Street
+FAX: (608)262\-9777 Madison, WI 53706
+.fi
+.SH ACKNOWLEDGEMENTS
+The Select File widget contains the following copyright notice:
+.PP
+Copyright 1989 Software Research Associates, Inc., Tokyo, Japan
+.PP
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of Software Research Associates not be used
+in advertising or publicity pertaining to distribution of the software
+without specific, written prior permission. Software Research Associates
+makes no representations about the suitability of this software for any
+purpose. It is provided "as is" without express or implied warranty.
+.PP
+SOFTWARE RESEARCH ASSOCIATES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY SPECIAL,
+INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+.sp
+.nf
+Author: Erik M. van der Poel
+ Software Research Associates, Inc., Tokyo, Japan
+ erik@sra.co.jp
+.fi
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/ghostview.ps b/support/hypertex/tanmoy/ghostview-1.5-hacked/ghostview.ps
new file mode 100644
index 0000000000..2ff22b126e
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/ghostview.ps
@@ -0,0 +1,7017 @@
+%!PS-Adobe-3.0
+%%Creator: psdit
+%%For: appenzell:tim (Tim Theisen,3375C,20438,2219620)
+%%Title: stdin (ditroff)
+%%CreationDate: Sun Jul 25 08:46:43 1993
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: DIThacks
+%%Pages: (atend)
+%%Orientation: Portrait
+%%DocumentMedia: Letter 612 792 75 white ()
+%%EndComments
+% psdit.pro -- prolog for ditroff translator
+% Copyright (c) 1985,1987,1992 Adobe Systems Incorporated. All Rights
+% Reserved.
+% GOVERNMENT END USERS: See Notice file in TranScript library directory
+% -- probably /usr/lib/ps/Notice
+% RCS: $Header: /src/misc/transcript4/lib/RCS/psdit.pro,v 1.2 1993/03/16 22:43:47 tim Exp $
+/$DITroff 180 dict def $DITroff begin
+
+/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap
+currentlinejoin currentdash currentgray currentmiterlimit ] cvx def
+
+%% Psfig additions
+/startFig {
+ /SavedState save def
+ userdict maxlength dict begin
+ currentpoint transform
+
+ DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap
+ setlinewidth setmatrix
+
+ itransform moveto
+
+ /ury exch def
+ /urx exch def
+ /lly exch def
+ /llx exch def
+ /y exch 72 mul resolution div def
+ /x exch 72 mul resolution div def
+
+ currentpoint /cy exch def /cx exch def
+
+ /sx x urx llx sub div def % scaling for x
+ /sy y ury lly sub div def % scaling for y
+
+ sx sy scale % scale by (sx,sy)
+
+ cx sx div llx sub
+ cy sy div ury sub translate
+
+ /DefFigCTM matrix currentmatrix def
+
+ /initmatrix {
+ DefFigCTM setmatrix
+ } def
+ /defaultmatrix {
+ DefFigCTM exch copy
+ } def
+
+ /initgraphics {
+ DocumentInitState setmiterlimit setgray setdash
+ setlinejoin setlinecap setlinewidth setmatrix
+ DefFigCTM setmatrix
+ } def
+
+ /showpage {
+ initgraphics
+ } def
+
+} def
+% Args are llx lly urx ury (in figure coordinates)
+/clipFig {
+ currentpoint 6 2 roll
+ newpath 4 copy
+ 4 2 roll moveto
+ 6 -1 roll exch lineto
+ exch lineto
+ exch lineto
+ closepath clip
+ newpath
+ moveto
+} def
+% doclip, if called, will always be just after a `startfig'
+/doclip { llx lly urx ury clipFig } def
+/endFig {
+ end SavedState restore
+} def
+/globalstart {
+ % Push details about the enviornment on the stack.
+ fontnum fontsize fontslant fontheight
+ % firstpage
+ mh my resolution slotno currentpoint
+ pagesave restore gsave
+} def
+/globalend {
+ grestore moveto
+ /slotno exch def /resolution exch def /my exch def
+ /mh exch def
+ % /firstpage exch def
+ /fontheight exch def
+ /fontslant exch def /fontsize exch def /fontnum exch def
+ F
+ /pagesave save def
+} def
+
+%% end XMOD additions
+
+/fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def
+/xi {/fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F
+ }def
+/ps {/pagesave save def 72 mul 0 exch translate 72 resolution div dup neg
+ scale 0 0 moveto } def
+/psL {/pagesave save def 90 rotate 72 resolution div dup neg
+ scale 0 0 moveto } def
+/PB{save /psv exch def currentpoint translate
+ resolution 72 div dup neg scale 0 0 moveto}def
+/PE{psv restore}def
+/m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def
+/tan{dup sin exch cos div}bind def
+/point{resolution 72 div mul}bind def
+/dround {transform round exch round exch itransform}bind def
+/xT{/devname exch def}def
+/xr{/mh exch def /my exch def /resolution exch def}def
+/xp{}def
+/xs{docsave restore end}def
+/xt{}def
+/xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not
+ {fonts slotno fontname findfont put fontnames slotno fontname put}if}def
+/xH{/fontheight exch def F}bind def
+/xS{/fontslant exch def F}bind def
+/s{/fontsize exch def /fontheight fontsize def F}bind def
+/f{/fontnum exch def F}bind def
+/F{fontheight 0 le {/fontheight fontsize def}if
+ fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore
+ fontslant 0 ne{1 0 fontslant neg tan 1 0 0 m2 astore m3 concatmatrix}if
+ makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def
+/X{exch currentpoint exch pop moveto show}bind def
+/N{3 1 roll moveto show}bind def
+/Y{exch currentpoint pop exch moveto show}bind def
+/S /show load def
+/ditpush{}def/ditpop{}def
+/AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def
+/AN{4 2 roll moveto 0 exch ashow}bind def
+/AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def
+/AS{0 exch ashow}bind def
+/MX{currentpoint exch pop moveto}bind def
+/MY{currentpoint pop exch moveto}bind def
+/MXY /moveto load def
+/cb{pop}def % action on unknown char -- nothing for now
+/n{}def/w{}def
+/p{pop pagesave restore showpage}def
+/abspoint{currentpoint exch pop add exch currentpoint pop add exch}def
+/dstroke{currentpoint stroke moveto}bind def
+/Dg{gsave}def
+/Dgi{rlineto}def
+/Dgl{stroke grestore moveto}def
+/Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def
+/arcellipse{oldmat currentmatrix pop
+ currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def
+ rad 0 rad -180 180 arc oldmat setmatrix}def
+/Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke
+ grestore diamh 0 rmoveto}def
+/De{gsave /diamv exch def /diamh exch def arcellipse dstroke
+ grestore diamh 0 rmoveto}def
+/Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def
+ /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def
+ /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add
+ 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def
+/Barray 200 array def % 200 values in a wiggle
+/D~{mark}def
+/D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop
+ /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and
+ {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def
+ Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put
+ Bcontrol Blen 2 sub 2 copy get 2 mul put
+ Bcontrol Blen 1 sub 2 copy get 2 mul put
+ /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub
+ {/i exch def
+ Bcontrol i get 3 div Bcontrol i 1 add get 3 div
+ Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div
+ Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div
+ /Xbi Xcont Bcontrol i 2 add get 2 div add def
+ /Ybi Ycont Bcontrol i 3 add get 2 div add def
+ /Xcont Xcont Bcontrol i 2 add get add def
+ /Ycont Ycont Bcontrol i 3 add get add def
+ Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto
+ }for dstroke}if}def
+end
+/ditstart{$DITroff begin
+ /nfonts 60 def % NFONTS makedev/ditroff dependent!
+ /fonts[nfonts{0}repeat]def
+ /fontnames[nfonts{()}repeat]def
+/docsave save def
+}def
+
+% character outcalls
+/oc {/pswid exch def /cc exch def /name exch def
+ /ditwid pswid fontsize mul resolution mul 72000 div def
+ /ditsiz fontsize resolution mul 72 div def
+ ocprocs name known{ocprocs name get exec}{name cb}
+ ifelse}def
+/fractm [.65 0 0 .6 0 0] def
+/fraction
+ {/fden exch def /fnum exch def gsave /cf currentfont def
+ cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto
+ fnum show rmoveto currentfont cf setfont(\244)show setfont fden show
+ grestore ditwid 0 rmoveto} def
+/oce {grestore ditwid 0 rmoveto}def
+/dm {ditsiz mul}def
+/ocprocs 50 dict def ocprocs begin
+(14){(1)(4)fraction}def
+(12){(1)(2)fraction}def
+(34){(3)(4)fraction}def
+(13){(1)(3)fraction}def
+(23){(2)(3)fraction}def
+(18){(1)(8)fraction}def
+(38){(3)(8)fraction}def
+(58){(5)(8)fraction}def
+(78){(7)(8)fraction}def
+(sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def
+(is){gsave 0 .15 dm rmoveto(\362)show oce}def
+(->){gsave 0 .02 dm rmoveto(\256)show oce}def
+(<-){gsave 0 .02 dm rmoveto(\254)show oce}def
+(==){gsave 0 .05 dm rmoveto(\272)show oce}def
+end
+%%BeginResource: font DIThacks
+% DIThacks fonts for some special chars
+50 dict dup begin
+/FontType 3 def
+/FontName /DIThacks def
+/FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def
+/FontBBox [-220 -280 900 900] def% a lie but ...
+/Encoding 256 array def
+0 1 255{Encoding exch /.notdef put}for
+Encoding
+ dup 8#040/space put %space
+ dup 8#110/rc put %right ceil
+ dup 8#111/lt put %left top curl
+ dup 8#112/bv put %bold vert
+ dup 8#113/lk put %left mid curl
+ dup 8#114/lb put %left bot curl
+ dup 8#115/rt put %right top curl
+ dup 8#116/rk put %right mid curl
+ dup 8#117/rb put %right bot curl
+ dup 8#120/rf put %right floor
+ dup 8#121/lf put %left floor
+ dup 8#122/lc put %left ceil
+ dup 8#140/sq put %square
+ dup 8#141/bx put %box
+ dup 8#142/ci put %circle
+ dup 8#143/br put %box rule
+ dup 8#144/rn put %root extender
+ dup 8#145/vr put %vertical rule
+ dup 8#146/ob put %outline bullet
+ dup 8#147/bu put %bullet
+ dup 8#150/ru put %rule
+ dup 8#151/ul put %underline
+ pop
+/DITfd 100 dict def
+/BuildChar{0 begin
+ /cc exch def /fd exch def
+ /charname fd /Encoding get cc get def
+ /charwid fd /Metrics get charname get def
+ /charproc fd /CharProcs get charname get def
+ charwid 0 fd /FontBBox get aload pop setcachedevice
+ 40 setlinewidth
+ newpath 0 0 moveto gsave charproc grestore
+ end}def
+/BuildChar load 0 DITfd put
+%/UniqueID 5 def
+/CharProcs 50 dict def
+CharProcs begin
+/space{}def
+/.notdef{}def
+/ru{500 0 rls}def
+/rn{0 750 moveto 500 0 rls}def
+/vr{20 800 moveto 0 -770 rls}def
+/bv{20 800 moveto 0 -1000 rls}def
+/br{20 770 moveto 0 -1040 rls}def
+/ul{0 -250 moveto 500 0 rls}def
+/ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def
+/bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def
+/sq{80 0 rmoveto currentpoint dround newpath moveto
+ 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def
+/bx{80 0 rmoveto currentpoint dround newpath moveto
+ 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def
+/ci{355 333 rmoveto currentpoint newpath 333 0 360 arc
+ 50 setlinewidth stroke}def
+
+/lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def
+/lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def
+/rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def
+/rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def
+/lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub
+ currentpoint stroke moveto
+ 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def
+/rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub
+ currentpoint stroke moveto
+ 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def
+/lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def
+/rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def
+/lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def
+/rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def
+end
+
+/Metrics 50 dict def Metrics begin
+/.notdef 0 def
+/space 500 def
+/ru 500 def
+/br 0 def
+/lt 250 def
+/lb 250 def
+/rt 250 def
+/rb 250 def
+/lk 250 def
+/rk 250 def
+/rc 250 def
+/lc 250 def
+/rf 250 def
+/lf 250 def
+/bv 250 def
+/ob 350 def
+/bu 350 def
+/ci 750 def
+/bx 750 def
+/sq 750 def
+/rn 500 def
+/ul 500 def
+/vr 0 def
+end
+
+DITfd begin
+/s2 500 def /s4 250 def /s3 333 def
+/a4p{arcto pop pop pop pop}def
+/2cx{2 copy exch}def
+/rls{rlineto stroke}def
+/currx{currentpoint pop}def
+/dround{transform round exch round exch itransform} def
+end
+end
+/DIThacks exch definefont pop
+%%EndResource
+%%EndProlog
+%%BeginSetup
+ditstart
+(psc)xT
+576 1 1 xr
+%%IncludeResource: font Times-Roman
+1(Times-Roman)xf 1 f
+%%IncludeResource: font Times-Italic
+2(Times-Italic)xf 2 f
+%%IncludeResource: font Times-Bold
+3(Times-Bold)xf 3 f
+%%IncludeResource: font Times-BoldItalic
+4(Times-BoldItalic)xf 4 f
+%%IncludeResource: font Helvetica
+5(Helvetica)xf 5 f
+%%IncludeResource: font Helvetica-Bold
+6(Helvetica-Bold)xf 6 f
+%%IncludeResource: font Courier
+7(Courier)xf 7 f
+%%IncludeResource: font Courier-Bold
+8(Courier-Bold)xf 8 f
+%%IncludeResource: font Symbol
+9(Symbol)xf 9 f
+10(DIThacks)xf 10 f
+10 s
+1 f
+xi
+%%EndSetup
+
+%%Page: 1 1
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+3 f
+9 s
+576 768(NAME)N
+2 f
+10 s
+864 864(ghostview)N
+1 f
+9 f
+1204(-)X
+1 f
+1268(View)X
+1462(PostScript)X
+1810(documents)X
+2177(using)X
+2370(ghostscript)X
+3 f
+9 s
+576 998(SYNOPSIS)N
+10 s
+864 1094(ghostview)N
+1 f
+1222([\256lename])X
+864 1190(or)N
+3 f
+864 1286(ghostview)N
+1 f
+1250([)X
+9 f
+1277(-)X
+1 f
+1321(monochrome])X
+1819([)X
+9 f
+1846(-)X
+1 f
+1890(grayscale])X
+2269([)X
+9 f
+2296(-)X
+1 f
+2340(color])X
+2580([)X
+9 f
+2607(-)X
+1 f
+2651([no]title])X
+2984([)X
+9 f
+3011(-)X
+1 f
+3055([no]date])X
+3398([)X
+9 f
+3425(-)X
+1 f
+3469([no]locator])X
+3901([)X
+9 f
+3928(-)X
+1 f
+3972([no]labels])X
+864 1382([)N
+9 f
+891(-)X
+1 f
+935(resolution)X
+2 f
+1275(dpi)X
+1 f
+1377(])X
+1515([)X
+9 f
+1542(-)X
+1 f
+1586(dpi)X
+2 f
+1708(dpi)X
+1 f
+1810(])X
+1948([)X
+9 f
+1975(-)X
+1 f
+2019(xdpi)X
+2 f
+2181(dpi)X
+1 f
+2283(])X
+2421([)X
+9 f
+2448(-)X
+1 f
+2492(ydpi)X
+2 f
+2654(dpi)X
+1 f
+2756(])X
+2894([)X
+9 f
+2921(-)X
+1 f
+2965(magstep)X
+2 f
+3252(n)X
+1 f
+(])S
+3429([)X
+9 f
+3456(-)X
+1 f
+3500([no]safer])X
+3928([)X
+9 f
+3955(-)X
+1 f
+3999([no]quiet])X
+864 1478([)N
+9 f
+891(-)X
+1 f
+935(arguments)X
+2 f
+1289(arguments)X
+1 f
+1627(])X
+1691([)X
+9 f
+1718(-)X
+1 f
+1762([no]center])X
+2157([)X
+9 f
+2184(-)X
+1 f
+2228(portrait])X
+2529([)X
+9 f
+2556(-)X
+1 f
+2600(landscape])X
+2982([)X
+9 f
+3009(-)X
+1 f
+3053(upsidedown])X
+3505([)X
+9 f
+3532(-)X
+1 f
+3576(seascape])X
+3923([)X
+9 f
+3950(-)X
+1 f
+3994([no]swap])X
+864 1574([)N
+9 f
+891(-)X
+1 f
+935(letter])X
+1162([)X
+9 f
+1189(-)X
+1 f
+1233(tabloid])X
+1517([)X
+9 f
+1544(-)X
+1 f
+1588(ledger])X
+1851([)X
+9 f
+1878(-)X
+1 f
+1922(legal])X
+2140([)X
+9 f
+2167(-)X
+1 f
+2211(statement])X
+2580([)X
+9 f
+2607(-)X
+1 f
+2651(executive])X
+3021([)X
+9 f
+3048(-)X
+1 f
+3092(a3])X
+3230([)X
+9 f
+3257(-)X
+1 f
+3301(a4])X
+3439([)X
+9 f
+3466(-)X
+1 f
+3510(a5])X
+3647([)X
+9 f
+3674(-)X
+1 f
+3718(b4])X
+3859([)X
+9 f
+3886(-)X
+1 f
+3930(b5])X
+4071([)X
+9 f
+4098(-)X
+1 f
+4142(folio])X
+864 1670([)N
+9 f
+891(-)X
+1 f
+935(quarto])X
+1188([)X
+9 f
+1215(-)X
+1 f
+1259(10x14])X
+1507([)X
+9 f
+1534(-)X
+1 f
+1578(force])X
+1793([)X
+9 f
+1820(-)X
+1 f
+1864(forceorientation])X
+2426([)X
+9 f
+2453(-)X
+1 f
+2497(forcemedia])X
+2908([)X
+9 f
+2935(-)X
+1 f
+2979([no]openwindows])X
+3607([)X
+9 f
+3634(-)X
+1 f
+3678([no]ncdwm])X
+4097([)X
+9 f
+4124(-)X
+1 f
+4168(page)X
+2 f
+864 1766(label)N
+1 f
+(])S
+1071([)X
+9 f
+1098(-)X
+2 f
+1142(toolkitoption)X
+1 f
+1570(...])X
+1697([\256lename])X
+3 f
+9 s
+576 1900(DESCRIPTION)N
+1 f
+10 s
+864 1996(The)N
+2 f
+1024(ghostview)X
+1 f
+1379(program)X
+1686(provides)X
+1997(an)X
+2108(X11)X
+2281(user)X
+2450(interface)X
+2767(for)X
+2896(the)X
+2 f
+3029(ghostscript)X
+1 f
+3419(interpreter.)X
+2 f
+3830(Ghostview)X
+1 f
+4204(and)X
+2 f
+864 2092(ghostscript)N
+1 f
+1243(function)X
+1534(as)X
+1624(two)X
+1767(cooperating)X
+2169(programs.)X
+2 f
+2535(Ghostview)X
+1 f
+2896(creates)X
+3143(the)X
+3264(viewing)X
+3545(window)X
+3826(and)X
+2 f
+3965(ghostscript)X
+1 f
+864 2188(draws)N
+1076(in)X
+1158(it.)X
+864 2322(Don't)N
+1071(be)X
+1167(alarmed)X
+1447(by)X
+1548(the)X
+1667(number)X
+1933(of)X
+2021(options.)X
+2317(Generally,)X
+2675(one)X
+2812(invokes)X
+2 f
+3082(ghostview)X
+1 f
+3423(with)X
+3586(just)X
+3722(one)X
+3859(parameter,)X
+4222(the)X
+864 2418(name)N
+1064(of)X
+1157(the)X
+1281(\256le)X
+1409(to)X
+1497(be)X
+1599(previewed.)X
+2000(If)X
+2080(the)X
+2204(\256lename)X
+2506(is)X
+2585(``-'',)X
+2 f
+2766(ghostview)X
+1 f
+3112(will)X
+3262(read)X
+3426(from)X
+3607(``stdin''.)X
+3935(The)X
+4085(options)X
+864 2514(provide)N
+1129(a)X
+1185(way)X
+1339(to)X
+1421(set)X
+1531(X)X
+1610(resources)X
+1935(from)X
+2112(the)X
+2231(command)X
+2568(line)X
+2709(for)X
+2824(a)X
+2881(single)X
+3093(invocation)X
+3452(of)X
+2 f
+3540(ghostview)X
+1 f
+(.)S
+3921(For)X
+4053(that)X
+4194(rea-)X
+864 2610(son,)N
+1015(discussion)X
+1368(of)X
+1455(the)X
+1573(options)X
+1828(is)X
+1901(delayed)X
+2171(until)X
+2337(after)X
+2505(the)X
+2623(X)X
+2701(resources)X
+3025(are)X
+3144(discussed.)X
+3 f
+9 s
+576 2744(MAIN)N
+806(WINDOW)X
+1 f
+10 s
+864 2840(The)N
+1014(main)X
+1199(viewport)X
+1509(is)X
+1587(on)X
+1692(the)X
+1815(right)X
+1991(side)X
+2145(of)X
+2237(the)X
+2360(main)X
+2545(window.)X
+2868(If)X
+2947(the)X
+3070(page)X
+3247(is)X
+3326(larger)X
+3540(than)X
+3704(the)X
+3828(viewport,)X
+4159(there)X
+864 2936(will)N
+1010(be)X
+1108(scroll)X
+1308(bars)X
+1464(along)X
+1664(the)X
+1784(bottom)X
+2032(and)X
+2170(right)X
+2343(edges)X
+2548(of)X
+2636(the)X
+2755(viewport.)X
+3101(To)X
+3211(the)X
+3330(left)X
+3458(of)X
+3546(the)X
+3665(viewport)X
+3971(is)X
+4045(the)X
+4164(table)X
+864 3032(of)N
+954(contents.)X
+1284(If)X
+1361(the)X
+1482(PostScript)X
+1833(\256le)X
+1958(has)X
+2088(document)X
+2427(structuring)X
+2798(convention)X
+3178(\(DSC\))X
+3411(comments,)X
+3784(the)X
+3906(table)X
+4086(of)X
+4177(con-)X
+864 3128(text)N
+1005(will)X
+1150(display)X
+1402(the)X
+1521(page)X
+1694(labels)X
+1902(\(i.e.)X
+2048(usually)X
+2300(page)X
+2473(numbers\).)X
+2837(To)X
+2947(the)X
+3066(left)X
+3194(of)X
+3282(the)X
+3401(table)X
+3577(of)X
+3664(contents)X
+3951(is)X
+4024(the)X
+4142(menu)X
+864 3224(box.)N
+1048(Each)X
+1233(push)X
+1408(button)X
+1636(brings)X
+1860(up)X
+1964(a)X
+2024(popup)X
+2248(menu.)X
+2490(Over)X
+2675(the)X
+2797(menu)X
+2999(box)X
+3143(and)X
+3284(table)X
+3465(of)X
+3557(contents)X
+3849(there)X
+4035(are)X
+4159(three)X
+864 3320(optional)N
+1151(labels)X
+1363(that)X
+1508(contain)X
+1769(the)X
+1892(title,)X
+2061(date,)X
+2240(and)X
+2381(locator.)X
+2669(The)X
+2818(title)X
+2966(label)X
+3146(contains)X
+3437(the)X
+3559(document)X
+3899(title)X
+4047(found)X
+4258(in)X
+864 3416(the)N
+986(DSC)X
+1165(comments.)X
+1558(If)X
+1636(no)X
+1740(title)X
+1888(can)X
+2024(be)X
+2124(found,)X
+2355(the)X
+2477(\256lename)X
+2777(is)X
+2854(used)X
+3025(in)X
+3111(its)X
+3210(place.)X
+3444(The)X
+3593(date)X
+3751(label)X
+3931(contains)X
+4222(the)X
+864 3512(document)N
+1207(date)X
+1368(found)X
+1582(in)X
+1671(the)X
+1796(DSC)X
+1977(comments.)X
+2372(If)X
+2452(no)X
+2558(date)X
+2718(can)X
+2856(be)X
+2958(found,)X
+3191(the)X
+3315(last)X
+3452(modi\256ed)X
+3762(date)X
+3922(of)X
+4015(the)X
+4139(\256le)X
+4267(is)X
+864 3608(used)N
+1039(in)X
+1129(its)X
+1232(place.)X
+1470(Since)X
+1676(the)X
+1802(title)X
+1954(and)X
+2098(date)X
+2260(labels)X
+2475(may)X
+2641(be)X
+2745(clipped)X
+3009(by)X
+3117(the)X
+3243(main)X
+3431(viewport,)X
+3764(the)X
+3890(date)X
+4052(and)X
+4196(title)X
+864 3704(labels)N
+1080(are)X
+1208(push)X
+1387(buttons)X
+1650(that)X
+1798(bring)X
+1995(up)X
+2103(a)X
+2167(popup)X
+2395(window)X
+2681(with)X
+2851(the)X
+2977(title)X
+3129(or)X
+3224(date.)X
+3426(These)X
+3646(popup)X
+3874(windows)X
+4191(also)X
+864 3800(show)N
+1055(the)X
+1175(``document'')X
+1621(icon)X
+1781(when)X
+1977(the)X
+2097(displayed)X
+2426(string)X
+2630(comes)X
+2857(from)X
+3035(the)X
+3156(DSC)X
+3334(comments.)X
+3726(The)X
+3874(locator)X
+4120(shows)X
+864 3896(the)N
+986(location)X
+1268(of)X
+1359(the)X
+1481(cursor)X
+1706(in)X
+1792(the)X
+1914(viewport.)X
+2262(The)X
+2410(location)X
+2691(is)X
+2767(expressed)X
+3107(in)X
+3192(the)X
+3313(default)X
+3559(user)X
+3716(coordinate)X
+4078(system.)X
+864 3992(The)N
+1009(locator)X
+1252(is)X
+1325(useful)X
+1541(for)X
+1655(measuring)X
+2009(bounding)X
+2331(boxes.)X
+864 4126(Within)N
+1109(the)X
+1230(main)X
+1413(viewport)X
+1721(the)X
+1842(mouse)X
+2074(cursor)X
+2298(is)X
+2374(a)X
+2433(``target'')X
+2747(when)X
+2 f
+2944(ghostscript)X
+1 f
+3322(is)X
+3398(doing)X
+3604(work.)X
+3833(The)X
+3982(cursor)X
+4207(is)X
+4284(a)X
+864 4222(``cross)N
+1106(hair'')X
+1308(when)X
+2 f
+1505(ghostscript)X
+1 f
+1883(is)X
+1959(idle.)X
+2142(When)X
+2357(moving)X
+2624(to)X
+2708(another)X
+2971(page)X
+3145(in)X
+3229(a)X
+3287(document,)X
+3645(it)X
+3711(is)X
+3786(generally)X
+4107(best)X
+4258(to)X
+864 4318(wait)N
+1022(for)X
+2 f
+1136(ghostscript)X
+1 f
+1511(to)X
+1593(become)X
+1863(idle.)X
+2043(Otherwise,)X
+2413(the)X
+2531(current)X
+2 f
+2780(ghostscript)X
+1 f
+3156(process)X
+3418(must)X
+3594(be)X
+3691(killed)X
+3894(and)X
+4031(the)X
+4150(over-)X
+864 4414(head)N
+1036(of)X
+1123(reading)X
+1384(the)X
+1502(prologue)X
+1807(is)X
+1880(incurred)X
+2168(again.)X
+2 f
+864 4548(Ghostview)N
+1 f
+1223(will)X
+1368(check)X
+1577(to)X
+1660(see)X
+1785(if)X
+1856(the)X
+1976(\256le)X
+2100(has)X
+2229(been)X
+2403(modi\256ed)X
+2709(just)X
+2846(before)X
+3074(it)X
+3140(displays)X
+3424(a)X
+3482(page)X
+3656(or)X
+3745(when)X
+3941(the)X
+4061(applica-)X
+864 4644(tion)N
+1008(is)X
+1081(deiconi\256ed.)X
+1497(If)X
+1571(the)X
+1689(\256le)X
+1811(has)X
+1938(changed,)X
+2246(it)X
+2310(will)X
+2454(reopen)X
+2693(the)X
+2811(\256le.)X
+864 4778(Clicking)N
+1169(anywhere)X
+1512(within)X
+1746(the)X
+1874(viewport)X
+2189(will)X
+2344(popup)X
+2575(a)X
+2642(zoom)X
+2851(window.)X
+3180(The)X
+3336(window)X
+3625(is)X
+3709(centered)X
+4013(about)X
+4222(the)X
+864 4874(location)N
+1152(that)X
+1302(was)X
+1456(clicked.)X
+1757(Clicking)X
+2061(with)X
+2232(the)X
+2359(\256rst)X
+2512(mouse)X
+2750(button)X
+2983(pops)X
+3163(up)X
+3272(a)X
+3337(low)X
+3486(resolution)X
+3835(zoom)X
+4042(window.)X
+864 4970(Clicking)N
+1170(with)X
+1343(the)X
+1472(second)X
+1726(mouse)X
+1966(button)X
+2201(pops)X
+2383(up)X
+2494(a)X
+2561(medium)X
+2854(resolution)X
+3205(zoom)X
+3414(window.)X
+3743(Clicking)X
+4049(with)X
+4222(the)X
+864 5066(third)N
+1036(mouse)X
+1266(button)X
+1491(pops)X
+1663(up)X
+1764(a)X
+1821(high)X
+1984(resolution)X
+2325(zoom)X
+2524(window.)X
+2843(The)X
+2989(cursor)X
+3211(in)X
+3294(the)X
+3413(zoom)X
+3611(window)X
+3889(will)X
+4033(display)X
+4284(a)X
+864 5162(``target'')N
+1176(or)X
+1264(``cross)X
+1504(hair'')X
+1704(depending)X
+2059(on)X
+2160(the)X
+2279(state)X
+2447(of)X
+2 f
+2535(ghostscript)X
+1 f
+2890(.)X
+2951(The)X
+3097(locator)X
+3341(reports)X
+3585(the)X
+3704(position)X
+3982(of)X
+4070(the)X
+4190(cur-)X
+864 5258(sor)N
+982(in)X
+1064(the)X
+1182(zoom)X
+1380(windows)X
+1689(as)X
+1776(well)X
+1934(as)X
+2021(the)X
+2139(main)X
+2319(viewport.)X
+864 5392(In)N
+953(the)X
+1073(table)X
+1251(of)X
+1340(contents,)X
+1649(the)X
+1769(\256rst)X
+1915(and)X
+2053(third)X
+2226(mouse)X
+2457(button)X
+2683(function)X
+2972(exactly)X
+3226(as)X
+3315(they)X
+3475(do)X
+3578(in)X
+3663(a)X
+3722(Text)X
+3892(widget.)X
+4173(That)X
+864 5488(is)N
+939(the)X
+1059(\256rst)X
+1205(mouse)X
+1436(button)X
+1662(selects)X
+1898(text)X
+2040(and)X
+2178(the)X
+2298(third)X
+2470(mouse)X
+2700(button)X
+2925(extends)X
+3191(selections.)X
+3568(However,)X
+3904(clicking)X
+4183(on)X
+4284(a)X
+864 5584(page)N
+1043(label)X
+1226(with)X
+1395(the)X
+1520(second)X
+1770(mouse)X
+2006(button)X
+2237(will)X
+2388(cause)X
+2594(that)X
+2742(page)X
+2922(to)X
+3012(be)X
+3116(shown.)X
+3393(The)X
+3546(page)X
+3726(being)X
+3932(displayed)X
+4267(is)X
+864 5680(marked)N
+1125(with)X
+1287(a)X
+1343('<')X
+1462(in)X
+1544(the)X
+1662(right)X
+1833(margin)X
+2080(of)X
+2167(the)X
+2285(table)X
+2461(of)X
+2548(contents.)X
+576 6144(7th)N
+698(Edition)X
+4280(1)X
+
+2 p
+%%Page: 2 2
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+3 f
+9 s
+576 768(POPUP)N
+846(WINDOWS)X
+1 f
+10 s
+864 864(There)N
+1073(are)X
+1193(several)X
+1442(additional)X
+1783(windows)X
+2093(that)X
+2234(may)X
+2393(appear.)X
+2669(The)X
+2 f
+2815(copyright)X
+1 f
+3143(window)X
+3422(will)X
+3567(appear)X
+3803(whenever)X
+4137(copy-)X
+864 960(right)N
+1042(information)X
+1447(is)X
+1527(requested.)X
+1902(The)X
+2 f
+2054(information)X
+1 f
+2457(window)X
+2741(appears)X
+3013(whenever)X
+3352(the)X
+2 f
+3476(ghostscript)X
+1 f
+3857(process)X
+4124(writes)X
+864 1056(to)N
+948(``stdout'')X
+1273(or)X
+1362(``stderr''.)X
+1715(Whenever)X
+2068(there)X
+2251(is)X
+2326(an)X
+2424(error)X
+2603(in)X
+2687(the)X
+2807(PostScript)X
+3157(program,)X
+3471(the)X
+3591(stack)X
+3778(trace)X
+3958(will)X
+4105(appear)X
+864 1152(in)N
+947(this)X
+1083(window.)X
+1402(When)X
+2 f
+1614(ghostscript)X
+1 f
+1989(is)X
+2062(invoked)X
+2340(without)X
+2604(the)X
+2722(quiet)X
+2902(option,)X
+3146(informational)X
+3602(message)X
+3894(regarding)X
+4222(the)X
+864 1248(state)N
+1031(of)X
+2 f
+1118(ghostscript)X
+1 f
+1493(will)X
+1637(appear)X
+1873(in)X
+1956(the)X
+2 f
+2075(information)X
+1 f
+2473(window.)X
+2792(The)X
+2 f
+2938(copyright)X
+1 f
+3266(and)X
+2 f
+3403(information)X
+1 f
+3801(windows)X
+4111(can)X
+4244(be)X
+864 1344(dismissed)N
+1199(by)X
+1299(pushing)X
+1572(the)X
+1690(``Dismiss'')X
+2075(button.)X
+864 1478(The)N
+2 f
+1018(Select)X
+1239(File)X
+1 f
+1397(dialog)X
+1626(widget)X
+1873(will)X
+2026(appear)X
+2270(when)X
+2473(you)X
+2622(wish)X
+2802(to)X
+2893(open)X
+3078(or)X
+3174(save)X
+3346(a)X
+3412(\256le.)X
+3584(The)X
+2 f
+3739(Select)X
+3961(File)X
+1 f
+4120(dialog)X
+864 1574(widget)N
+1104(allows)X
+1335(an)X
+1433(X11)X
+1593(user)X
+1749(to)X
+1832(select)X
+2036(a)X
+2093(\256le)X
+2216(by)X
+2317(typing)X
+2542(the)X
+2661(path)X
+2820(or)X
+2908(by)X
+3009(browsing)X
+3328(in)X
+3411(directory)X
+3722(listings)X
+3973(and)X
+4110(select-)X
+864 1670(ing)N
+986(entries)X
+1220(with)X
+1382(the)X
+1500(mouse.)X
+864 1804(The)N
+1014(space)X
+1218(bar)X
+1346(can)X
+1483(be)X
+1584(pressed)X
+1850(to)X
+1937(complete)X
+2256(\256lenames,)X
+2608(and)X
+2750(tilde)X
+2918(is)X
+2997(used)X
+3170(for)X
+3290(home)X
+3494(directories.)X
+3899(All)X
+4027(the)X
+4151(usual)X
+864 1900(key)N
+1010(bindings)X
+1315(can)X
+1457(be)X
+1563(used)X
+1740(in)X
+1832(the)X
+1960(text)X
+2110(widget,)X
+2378(except)X
+2618(for)X
+2742(Return)X
+2989(and)X
+3134(Control)X
+9 f
+3378(-)X
+1 f
+3422(M,)X
+3542(which)X
+3767(are)X
+3895(equivalent)X
+4258(to)X
+864 1996(pressing)N
+1157(the)X
+1281(OK)X
+1423(button.)X
+1693(The)X
+1844(path)X
+2008(can)X
+2146(be)X
+2249(scrolled)X
+2530(using)X
+2730(the)X
+2855(large)X
+3043(horizontal)X
+3395(scroll)X
+3600(bar,)X
+3750(or)X
+3844(by)X
+3951(moving)X
+4222(the)X
+864 2092(insertion)N
+1165(cursor)X
+1387(in)X
+1470(the)X
+1589(text)X
+1730(widget.)X
+2009(The)X
+2155(directory)X
+2466(entries)X
+2701(can)X
+2834(be)X
+2931(scrolled)X
+3206(using)X
+3400(the)X
+3519(vertical)X
+3781(scroll)X
+3979(bars,)X
+4153(or)X
+4240(by)X
+864 2188(holding)N
+1133(a)X
+1194(mouse)X
+1428(button)X
+1657(down)X
+1860(and)X
+2001(moving)X
+2271(out)X
+2399(of)X
+2492(the)X
+2616(listing.)X
+2881(The)X
+3032(scrolling)X
+3338(speed)X
+3547(varies)X
+3765(with)X
+3933(the)X
+4057(distance)X
+864 2284(from)N
+1040(the)X
+1158(listing.)X
+864 2418(The)N
+1014(directory)X
+1330(entries)X
+1570(are)X
+1695(terminated)X
+2064(with)X
+2232(special)X
+2481(characters)X
+2834(that)X
+2980(show)X
+3175(the)X
+3299(type)X
+3463(of)X
+3556(entry,)X
+3767(similar)X
+4015(to)X
+4103(the)X
+2 f
+9 f
+4227(-)X
+2 f
+4271(F)X
+1 f
+864 2514(option)N
+1088(of)X
+2 f
+1175(ls)X
+1 f
+1234(\(1\).)X
+864 2648(The)N
+2 f
+1012(Select)X
+1227(File)X
+1 f
+1379(dialog)X
+1602(widget)X
+1843(is)X
+1919(in)X
+2004(total)X
+2169(control)X
+2419(until)X
+2588(is)X
+2664(pops)X
+2838(down.)X
+3079(No)X
+3200(other)X
+3388(controls)X
+3669(in)X
+2 f
+3754(ghostview)X
+1 f
+4097(will)X
+4244(be)X
+864 2744(active)N
+1076(during)X
+1305(this)X
+1440(time.)X
+3 f
+9 s
+576 2878(MENUS)N
+1 f
+10 s
+864 2974(There)N
+1076(are)X
+1199(\256ve)X
+1344(buttons)X
+1604(in)X
+1691(the)X
+1814(menu)X
+2017(box.)X
+2202(They)X
+2392(are)X
+2516(the)X
+3 f
+2639(File)X
+1 f
+2768(,)X
+3 f
+2813(Page)X
+1 f
+2978(,)X
+3 f
+3023(Magstep)X
+1 f
+3317(,)X
+3 f
+3362(Orientation)X
+1 f
+(,)S
+3807(and)X
+3 f
+3948(Media)X
+1 f
+4191(but-)X
+864 3070(tons.)N
+1077(There)X
+1305(are)X
+1444(keyboard)X
+1783 0.2841(accelerators)AX
+2207(for)X
+2340(most)X
+2534(of)X
+2640(the)X
+2777(popup)X
+3016(menus.)X
+3304(Be)X
+3432(sure)X
+3605(to)X
+3706(read)X
+3884(the)X
+4021(keyboard)X
+864 3166 0.3250(accelerator)AN
+1238(section.)X
+3 f
+864 3300(File)N
+1 f
+1440(This)X
+1602(popup)X
+1822(menu)X
+2020(controls)X
+2298(\256le)X
+2420(access:)X
+3 f
+1440 3434(Open...)N
+1 f
+2016(Pops)X
+2208(up)X
+2325(the)X
+2460(Select)X
+2693(File)X
+2854(window)X
+3149(in)X
+3248(preparation)X
+3651(to)X
+3750(open)X
+3943(a)X
+4016(\256le.)X
+4195(The)X
+2016 3530(Select)N
+2237(File)X
+2386(widget)X
+2629(is)X
+2707(in)X
+2794(total)X
+2961(control)X
+3212(until)X
+3382(it)X
+3450(pops)X
+3625(down.)X
+3867(Opens)X
+4096(the)X
+4218(\256le)X
+2016 3626(for)N
+2130(viewing.)X
+3 f
+1440 3760(Reopen)N
+1 f
+2016(Reopens)X
+2312(the)X
+2430(current)X
+2678(\256le.)X
+3 f
+1440 3894(Print...)N
+1 f
+2016(Pops)X
+2197(up)X
+2303(a)X
+2365(dialog)X
+2591(widget)X
+2835(to)X
+2923(ask)X
+3056(for)X
+3176(the)X
+3300(printer)X
+3540(name.)X
+3781(Sends)X
+3999(the)X
+4124(whole)X
+2016 3990(document)N
+2352(to)X
+2434(the)X
+2552(printer.)X
+3 f
+1440 4124(Print)N
+1638(marked)X
+1925(pages...)X
+1 f
+2016 4220(Pops)N
+2193(up)X
+2295(a)X
+2353(dialog)X
+2576(widget)X
+2817(to)X
+2902(ask)X
+3032(for)X
+3149(the)X
+3270(printer)X
+3507(name.)X
+3744(Sends)X
+3958(the)X
+4079(marked)X
+2016 4316(pages)N
+2219(to)X
+2301(the)X
+2419(printer.)X
+2693(If)X
+2767(no)X
+2867(pages)X
+3070(have)X
+3242(been)X
+3414(marked,)X
+3695(the)X
+3813(mark)X
+3998(procedure)X
+2016 4412(is)N
+2095(called)X
+2313(before)X
+2545(printing)X
+2824(and)X
+2966(then)X
+3130(the)X
+3254(unmark)X
+3525(procedure)X
+3873(is)X
+3953(called)X
+4172(after)X
+2016 4508(printing.)N
+3 f
+1440 4642(Save)N
+1620(marked)X
+1907(pages...)X
+1 f
+2016 4738(Pops)N
+2191(up)X
+2291(the)X
+2409(Select)X
+2625(File)X
+2769(window)X
+3047(in)X
+3129(preparation)X
+3515(to)X
+3597(save)X
+3760(a)X
+3816(\256le.)X
+3978(The)X
+4124(Select)X
+2016 4834(File)N
+2173(widget)X
+2424(is)X
+2510(in)X
+2605(total)X
+2780(control)X
+3040(until)X
+3219(it)X
+3296(pops)X
+3480(down.)X
+3730(Saves)X
+3949(the)X
+4079(marked)X
+2016 4930(pages)N
+2220(in)X
+2303(the)X
+2422(selected)X
+2702(\256le.)X
+2865(If)X
+2941(no)X
+3043(pages)X
+3248(have)X
+3422(been)X
+3596(marked,)X
+3879(the)X
+3999(mark)X
+4186(pro-)X
+2016 5026(cedure)N
+2256(is)X
+2333(called)X
+2549(before)X
+2779(saving)X
+3012(and)X
+3152(then)X
+3314(the)X
+3436(unmark)X
+3705(procedure)X
+4051(is)X
+4128(called)X
+2016 5122(after)N
+2184(saving.)X
+3 f
+1440 5256(Copyright...)N
+1 f
+2016(Pops)X
+2191(up)X
+2291(the)X
+2 f
+2409(copyright)X
+1 f
+2736(window.)X
+3 f
+1440 5390(Quit)N
+1 f
+2016(Causes)X
+2 f
+2263(ghostview)X
+1 f
+2603(to)X
+2685(exit.)X
+3 f
+864 5524(Page)N
+1 f
+1440(This)X
+1602(popup)X
+1822(menu)X
+2020(controls)X
+2298(page)X
+2470(access:)X
+3 f
+1440 5658(Next)N
+1 f
+2016(Display)X
+2285(the)X
+2403(next)X
+2561(page.)X
+576 6144(7th)N
+698(Edition)X
+4280(2)X
+
+3 p
+%%Page: 3 3
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+3 f
+1440 768(Redisplay)N
+1 f
+2016(Display)X
+2285(the)X
+2403(current)X
+2651(page.)X
+3 f
+1440 902(Previous)N
+1 f
+2016(Display)X
+2285(the)X
+2403(previous)X
+2699(page.)X
+3 f
+1440 1036(Center)N
+1 f
+2016(Center)X
+2250(the)X
+2368(page)X
+2540(in)X
+2622(the)X
+2740(viewport.)X
+3 f
+1440 1170(Mark)N
+1 f
+2016(Mark)X
+2216(the)X
+2340(pages)X
+2549(that)X
+2695(have)X
+2873(been)X
+3051(selected)X
+3336(in)X
+3424(the)X
+3548(table)X
+3731(of)X
+3825(contents.)X
+4159(If)X
+4240(no)X
+2016 1266(pages)N
+2219(have)X
+2391(been)X
+2563(selected,)X
+2862(mark)X
+3047(the)X
+3165(current)X
+3413(page.)X
+3 f
+1440 1400(Unmark)N
+1 f
+2016(Unmark)X
+2306(the)X
+2431(pages)X
+2641(that)X
+2789(have)X
+2969(been)X
+3149(selected)X
+3436(in)X
+3526(the)X
+3652(table)X
+3836(of)X
+3931(contents.)X
+4266(If)X
+2016 1496(no)N
+2116(pages)X
+2319(have)X
+2491(been)X
+2663(selected,)X
+2962(unmark)X
+3227(the)X
+3345(current)X
+3593(page.)X
+3 f
+864 1630(Magstep)N
+1 f
+1440(The)X
+1597(Magstep)X
+1905(menu)X
+2115(controls)X
+2405(the)X
+2535(magni\256cation)X
+3007(at)X
+3097(which)X
+3325(the)X
+3455(document)X
+3804(is)X
+3890(viewed.)X
+4195(The)X
+1440 1726(default)N
+1691(magstep)X
+1986(of)X
+2081(0)X
+2149(implies)X
+2412(no)X
+2520(magni\256cation)X
+2988(\(i.e.)X
+3141(the)X
+3267(size)X
+3419(on)X
+3526(the)X
+3651(screen)X
+3884(should)X
+4124(match)X
+1440 1822(the)N
+1591(size)X
+1769(on)X
+1902(paper\).)X
+2 f
+2201(Ghostview)X
+1 f
+2592(borrows)X
+2908(the)X
+3059(notion)X
+3316(of)X
+3437(magstep)X
+3758(from)X
+3968(T)X
+4004 1841(E)N
+4043 1822(X.)N
+4195(The)X
+1440 1918(magni\256cation)N
+1908(is)X
+1989(de\256ned)X
+2253(to)X
+2343(be)X
+2447(1.2)X
+9 f
+(**)S
+1 f
+(magstep.)S
+2962(At)X
+3070(magstep)X
+3365(1,)X
+3452(the)X
+3577(document)X
+3920(is)X
+4000(magni\256ed)X
+1440 2014(by)N
+1544(1.2.)X
+1708(At)X
+1812(magstep)X
+2104(-1,)X
+2216(the)X
+2339(document)X
+2680(is)X
+2758(reduced)X
+3038(by)X
+3143(1.2.)X
+3308(The)X
+3458(Magstep)X
+3759(menu)X
+3962(lists)X
+4115(values)X
+1440 2110(from)N
+1616(-5)X
+1703(to)X
+1785(5.)X
+3 f
+864 2244(Orientation)N
+1 f
+1440(The)X
+1591(Orientation)X
+1982(menu)X
+2186(controls)X
+2470(the)X
+2594(display)X
+2851(orientation.)X
+3264(A)X
+3348(``dot'')X
+3584(appears)X
+3856(in)X
+3945(front)X
+4128(of)X
+4222(the)X
+1440 2340(current)N
+1696(orientation.)X
+2111(The)X
+2264(\256rst)X
+2416(mouse)X
+2653(button)X
+2885(sets)X
+3032(the)X
+3157(default)X
+3407(orientation.)X
+3821(The)X
+3973(DSC)X
+4155(com-)X
+1440 2436(ments)N
+1656(may)X
+1819(specify)X
+2076(an)X
+2177(orientation)X
+2549(of)X
+2641(Portrait)X
+2906(or)X
+2999(Landscape)X
+3369(that)X
+3515(overrides)X
+3840(the)X
+3964(default.)X
+4253(In)X
+1440 2532(this)N
+1585(case,)X
+1774(a)X
+1840("document")X
+2252(appears)X
+2528(in)X
+2620(front)X
+2806(of)X
+2903(the)X
+3031(current)X
+3289(orientation.)X
+3705(The)X
+3859(second)X
+4111(mouse)X
+1440 2628(button)N
+1669(can)X
+1806(be)X
+1907(used)X
+2079(to)X
+2166 0.4062(``force'')AX
+2465(the)X
+2588(orientation)X
+2960(on)X
+3065(a)X
+3126(document)X
+3468(to)X
+3556(override)X
+3850(the)X
+3974(DSC)X
+4155(com-)X
+1440 2724(ments.)N
+1698(If)X
+1779(an)X
+1882(orientation)X
+2256(is)X
+2336(being)X
+2541(forced,)X
+2793(then)X
+2957(a)X
+3019(``tie)X
+3179(\256ghter'')X
+3468(will)X
+3618(appear)X
+3859(in)X
+3947(front)X
+4129(of)X
+4222(the)X
+1440 2820(current)N
+1688(orientation.)X
+3 f
+1440 2954(Portrait)N
+1 f
+2016(Set)X
+2157(the)X
+2294(orientation)X
+2680(to)X
+2781(Portrait.)X
+3080(This)X
+3262(implies)X
+3537(no)X
+3657(rotation.)X
+3986(A)X
+4084(portrait)X
+2016 3050(orientation)N
+2386(indicates)X
+2694(that)X
+2837(the)X
+2958(longest)X
+3212(edge)X
+3387(of)X
+3477(the)X
+3598(paper)X
+3800(is)X
+3875(parallel)X
+4138(to)X
+4222(the)X
+2016 3146(vertical)N
+2277(\(y\))X
+2391(axis.)X
+3 f
+1440 3280(Landscape)N
+1 f
+2016(Set)X
+2144(the)X
+2268(orientation)X
+2641(to)X
+2729(Landscape.)X
+3139(This)X
+3307(implies)X
+3568(a)X
+3630(clockwise)X
+3977(rotation)X
+4253(of)X
+2016 3376(the)N
+2150(paper)X
+2365(by)X
+2481(90)X
+2597(degrees.)X
+2919(A)X
+3013(landscape)X
+3365(orientation)X
+3747(indicates)X
+4067(that)X
+4222(the)X
+2016 3472(longest)N
+2267(edge)X
+2439(of)X
+2526(the)X
+2644(paper)X
+2843(is)X
+2916(parallel)X
+3177(to)X
+3259(the)X
+3377(horizontal)X
+3722(\(x\))X
+3836(axis.)X
+3 f
+1440 3606(Upside)N
+9 f
+1675(-)X
+1677(-)X
+3 f
+1721(down)X
+1 f
+2016(Set)X
+2138(the)X
+2256(orientation)X
+2623(to)X
+2705(Upside)X
+9 f
+2932(-)X
+1 f
+2976(Down.)X
+3 f
+1440 3740(Seascape)N
+1 f
+2016(Set)X
+2143(the)X
+2267(orientation)X
+2640(to)X
+2728(Seascape.)X
+3089(This)X
+3257(implies)X
+3518(a)X
+3580(counterclockwise)X
+4168(rota-)X
+2016 3836(tion)N
+2160(of)X
+2247(the)X
+2365(paper)X
+2564(by)X
+2664(90)X
+2764(degrees.)X
+3 f
+1440 3970(Swap)N
+1646(Landscape)X
+1 f
+2016 4066(Swap)N
+2215(the)X
+2334(meaning)X
+2631(of)X
+2720(Landscape)X
+3086(and)X
+3224(Seascape.)X
+3581(Most)X
+3767(of)X
+3856(the)X
+3976(Landscape)X
+2016 4162(documents)N
+2392(that)X
+2541(I)X
+2597(have)X
+2778(encountered)X
+3199(require)X
+3455(a)X
+3519(90)X
+3627(clockwise)X
+3976(rotation)X
+4253(of)X
+2016 4258(the)N
+2135(paper)X
+2335(to)X
+2418(view.)X
+2655(However,)X
+2991(there)X
+3173(is)X
+3248(no)X
+3350(standard)X
+3644(and)X
+3782(some)X
+3973(documents)X
+2016 4354(need)N
+2199(to)X
+2292(be)X
+2399(rotated)X
+2653(the)X
+2781(other)X
+2976(way.)X
+3180(The)X
+3335(swap)X
+3530(landscape)X
+3877(button)X
+4111(allows)X
+2 f
+2016 4450(ghostview)N
+1 f
+2385(to)X
+2496(automatically)X
+2981(rotate)X
+3213(the)X
+3360(document)X
+3725(the)X
+3873(right)X
+4074(way)X
+4258(in)X
+2016 4546(response)N
+2317(to)X
+2399(the)X
+3 f
+2517(%%Orientation)X
+1 f
+3097(comment)X
+3415(in)X
+3497(the)X
+3615(PostScript)X
+3963(\256le.)X
+3 f
+864 4680(Media)N
+1 f
+1440(The)X
+1599(entries)X
+1847(on)X
+1962(the)X
+2095(Media)X
+2335(menu)X
+2548(set)X
+2672(the)X
+2805(page)X
+2992(media.)X
+3263(Media)X
+3503(de\256ned)X
+3774(in)X
+3871(the)X
+4004(document)X
+1440 4776(appear)N
+1688(at)X
+1779(the)X
+1910(beginning)X
+2263(of)X
+2363(the)X
+2494(menu)X
+2704(separated)X
+3040(by)X
+3152(a)X
+3220(line)X
+3372(from)X
+3560(the)X
+3690(standard)X
+3994(media.)X
+4262(A)X
+1440 4872(``dot'')N
+1683(appears)X
+1962(in)X
+2058(front)X
+2248(of)X
+2349(the)X
+2481(current)X
+2743(media.)X
+3013(The)X
+3172(\256rst)X
+3330(mouse)X
+3573(button)X
+3811(sets)X
+3965(the)X
+4097(default)X
+1440 4968(media.)N
+1705(The)X
+1859(DSC)X
+2043(comments)X
+2401(may)X
+2568(specify)X
+2829(the)X
+2956(page)X
+3137(media)X
+3361(that)X
+3509(overrides)X
+3836(the)X
+3962(default.)X
+4253(In)X
+1440 5064(this)N
+1578(case,)X
+1760(a)X
+1820("document")X
+2226(appears)X
+2496(in)X
+2582(front)X
+2762(of)X
+2853(the)X
+2975(current)X
+3227(media.)X
+3487(The)X
+3636(second)X
+3883(mouse)X
+4116(button)X
+1440 5160(can)N
+1576(be)X
+1676(used)X
+1847(to)X
+1933 0.4062(``force'')AX
+2231(the)X
+2353(media)X
+2573(on)X
+2677(a)X
+2737(document)X
+3077(to)X
+3163(override)X
+3455(the)X
+3576(DSC)X
+3754(comments.)X
+4146(Forc-)X
+1440 5256(ing)N
+1565(the)X
+1686(media)X
+1905(on)X
+2008(an)X
+2107(EPSF)X
+2311(\256gure)X
+2521(will)X
+2669(override)X
+2961(the)X
+3083(Bounding)X
+3422(Box.)X
+3619(This)X
+3785(makes)X
+4014(is)X
+4091(easy)X
+4258(to)X
+1440 5352(view)N
+1619(a)X
+1678(\256gure)X
+1888(with)X
+2053(an)X
+2152(incorrect)X
+3 f
+2461(%%BoundingBox)X
+1 f
+3107(comment.)X
+3467(If)X
+3543(a)X
+3601(media)X
+3819(is)X
+3894(being)X
+4094(forced,)X
+1440 5448(then)N
+1598(a)X
+1654(``tie)X
+1808(\256ghter'')X
+2091(will)X
+2235(appear)X
+2470(in)X
+2552(front)X
+2728(of)X
+2815(the)X
+2933(current)X
+3181(media.)X
+1440 5640(Here)N
+1625(are)X
+1752(the)X
+1878(standard)X
+2178(media)X
+2402(names)X
+2635(and)X
+2779(their)X
+2954(sizes.)X
+3178(The)X
+3331(size)X
+3484(is)X
+3565(given)X
+3771(as)X
+3866(the)X
+3993(width)X
+4204(and)X
+1440 5736(height)N
+1660(in)X
+1742(PostScript)X
+2090(points.)X
+3 f
+1440 5832(Letter)N
+1 f
+2324(612)X
+2464(x)X
+2544(792)X
+3168(\(8.5)X
+3315(x)X
+3375(11)X
+3495(in.\))X
+576 6216(7th)N
+698(Edition)X
+4280(3)X
+
+4 p
+%%Page: 4 4
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+3 f
+1440 768(Tabloid)N
+1 f
+2324(792)X
+2464(x)X
+2524(1224)X
+3168(\(11)X
+3315(x)X
+3375(17)X
+3495(in.\))X
+3 f
+1440 864(Ledger)N
+1 f
+2304(1224)X
+2484(x)X
+2564(792)X
+3168(\(17)X
+3315(x)X
+3375(11)X
+3495(in.\))X
+3 f
+1440 960(Legal)N
+1 f
+2324(612)X
+2464(x)X
+2524(1008)X
+3168(\(8.5)X
+3315(x)X
+3375(14)X
+3495(in.\))X
+3 f
+1440 1056(Statement)N
+1 f
+2324(396)X
+2464(x)X
+2544(612)X
+3168(\(5.5)X
+3315(x)X
+3375(8.5)X
+3495(in.\))X
+3 f
+1440 1152(Executive)N
+1 f
+2324(540)X
+2464(x)X
+2544(720)X
+3168(\(7.5)X
+3315(x)X
+3375(10)X
+3495(in.\))X
+3 f
+1440 1248(A3)N
+1 f
+2324(842)X
+2464(x)X
+2524(1190)X
+3 f
+1440 1344(A4)N
+1 f
+2324(595)X
+2464(x)X
+2544(842)X
+3 f
+1440 1440(A5)N
+1 f
+2324(420)X
+2464(x)X
+2544(595)X
+3 f
+1440 1536(B4)N
+1 f
+2324(729)X
+2464(x)X
+2524(1032)X
+3 f
+1440 1632(B5)N
+1 f
+2324(516)X
+2464(x)X
+2544(729)X
+3 f
+1440 1728(Folio)N
+1 f
+2324(612)X
+2464(x)X
+2544(936)X
+3168(\(8.5)X
+3315(x)X
+3375(13)X
+3495(in.\))X
+3 f
+1440 1824(Quarto)N
+1 f
+2324(610)X
+2464(x)X
+2544(780)X
+3 f
+1440 1920(10x14)N
+1 f
+2324(720)X
+2464(x)X
+2524(1008)X
+3168(\(10)X
+3315(x)X
+3375(14)X
+3495(in.\))X
+3 f
+9 s
+576 2054(KEYBOARD)N
+1022(ACCELERATORS)X
+1 f
+10 s
+864 2150(Most)N
+1049(of)X
+1137(the)X
+1256(popup)X
+1477(menu)X
+1676(commands)X
+2044(have)X
+2217(an)X
+2314(equivalent)X
+2669(action)X
+2886(that)X
+3027(can)X
+3160(be)X
+3257(invoked)X
+3536(from)X
+3714(the)X
+3834(keyboard.)X
+4195(The)X
+864 2246(popup)N
+1089(menu)X
+1292(entry)X
+1482(must)X
+1662(be)X
+1763(sensitive)X
+2068(\(i.e.)X
+2218(not)X
+2345(grayed)X
+2589(out\))X
+2743(for)X
+2862(the)X
+2985(action)X
+3206(to)X
+3293(have)X
+3469(effect.)X
+3717(Here)X
+3898(is)X
+3975(the)X
+4097(default)X
+864 2342(keyboard)N
+1183(binding:)X
+3 f
+864 2476(Q)N
+1 f
+1440(Bound)X
+1678(to)X
+3 f
+1765(GhostviewQuit\(\))X
+1 f
+2359(which)X
+2580(is)X
+2658(equivalent)X
+3017(to)X
+3104(pushing)X
+3382(the)X
+3 f
+3505(Quit)X
+1 f
+3685(menu)X
+3888(button)X
+4117(on)X
+4222(the)X
+3 f
+1440 2572(Ghostview)N
+1 f
+1820(menu.)X
+3 f
+864 2706(O)N
+1 f
+1440(Bound)X
+1678(to)X
+3 f
+1765(GhostviewOpen\(\))X
+1 f
+2390(which)X
+2611(is)X
+2689(equivalent)X
+3048(to)X
+3135(pushing)X
+3413(the)X
+3 f
+3536(Open...)X
+1 f
+3807(menu)X
+4010(button)X
+4240(on)X
+1440 2802(the)N
+3 f
+1558(File)X
+1 f
+1707(menu.)X
+3 f
+864 2936(R)N
+1 f
+1440(Bound)X
+1680(to)X
+3 f
+1769(GhostviewReopen\(\))X
+1 f
+2468(which)X
+2691(is)X
+2771(equivalent)X
+3132(to)X
+3221(pushing)X
+3501(the)X
+3 f
+3626(Reopen)X
+1 f
+3911(menu)X
+4116(button)X
+1440 3032(on)N
+1540(the)X
+3 f
+1658(File)X
+1 f
+1807(menu.)X
+3 f
+864 3166(S)N
+1 f
+1440(Bound)X
+1685(to)X
+3 f
+1779(GhostviewSave\(\))X
+1 f
+2385(which)X
+2613(is)X
+2698(equivalent)X
+3064(to)X
+3159(pushing)X
+3445(the)X
+3 f
+3576(Save)X
+3769(marked)X
+4069(pages...)X
+1 f
+1440 3262(menu)N
+1638(button)X
+1862(on)X
+1962(the)X
+3 f
+2080(File)X
+1 f
+2229(menu.)X
+3 f
+864 3396(P)N
+1 f
+1440(Bound)X
+1682(to)X
+3 f
+1773(GhostviewPrintMarked\(\))X
+1 f
+2670(which)X
+2895(is)X
+2978(equivalent)X
+3342(to)X
+3434(pushing)X
+3717(the)X
+3 f
+3845(Print)X
+4053(marked)X
+1440 3492(pages...)N
+1 f
+1711(menu)X
+1909(button)X
+2133(on)X
+2233(the)X
+3 f
+2351(File)X
+1 f
+2500(menu.)X
+3 f
+864 3626(Shift)N
+9 f
+1028(-)X
+1030(-)X
+3 f
+1074(P)X
+1 f
+1440(Bound)X
+1675(to)X
+3 f
+1759(GhostviewPrintWhole\(\))X
+1 f
+2595(which)X
+2814(is)X
+2890(equivalent)X
+3247(to)X
+3332(pushing)X
+3608(the)X
+3 f
+3729(Print...)X
+1 f
+3990(menu)X
+4191(but-)X
+1440 3722(ton)N
+1562(on)X
+1662(the)X
+3 f
+1780(File)X
+1 f
+1929(menu.)X
+3 f
+864 3856(BackSpace)N
+1 f
+1237(,)X
+3 f
+1277(Delete)X
+1 f
+1492(,)X
+3 f
+1532(Prior)X
+1 f
+1715(,)X
+3 f
+1755(B)X
+1 f
+1440 3952(Bound)N
+1679(to)X
+3 f
+1767(GhostviewPrevious\(\))X
+1 f
+2505(which)X
+2727(is)X
+2806(equivalent)X
+3167(to)X
+3256(pushing)X
+3536(the)X
+3 f
+3661(Previous)X
+1 f
+3986(menu)X
+4191(but-)X
+1440 4048(ton)N
+1562(on)X
+1662(the)X
+3 f
+1780(Page)X
+1 f
+1965(menu.)X
+3 f
+864 4182(space)N
+1 f
+1051(,)X
+3 f
+1091(Return)X
+1 f
+1336(,)X
+3 f
+1376(Next)X
+1 f
+1537(,)X
+3 f
+1577(F)X
+1 f
+1440 4278(Bound)N
+1677(to)X
+3 f
+1763(GhostviewNext\(\))X
+1 f
+2362(which)X
+2582(is)X
+2659(equivalent)X
+3017(to)X
+3103(pushing)X
+3380(the)X
+3 f
+3502(Next)X
+1 f
+3687(menu)X
+3889(button)X
+4117(on)X
+4222(the)X
+3 f
+1440 4374(Page)N
+1 f
+1625(menu.)X
+3 f
+864 4508(period)N
+1 f
+1086(,)X
+3 f
+1126(Ctrl)X
+9 f
+1269(-)X
+1271(-)X
+3 f
+1315(L)X
+1 f
+1440(Bound)X
+1679(to)X
+3 f
+1767(GhostviewShow\(\))X
+1 f
+2393(which)X
+2615(is)X
+2694(equivalent)X
+3054(to)X
+3142(pushing)X
+3422(the)X
+3 f
+3547(Redisplay)X
+1 f
+3911(menu)X
+4116(button)X
+1440 4604(on)N
+1540(the)X
+3 f
+1658(Page)X
+1 f
+1843(menu.)X
+3 f
+864 4738(M)N
+1 f
+1440(Bound)X
+1681(to)X
+3 f
+1771(GhostviewMark\(\))X
+1 f
+2409(which)X
+2633(is)X
+2714(equivalent)X
+3076(to)X
+3166(pushing)X
+3448(the)X
+3 f
+3575(Mark)X
+1 f
+3800(menu)X
+4007(button)X
+4240(on)X
+1440 4834(the)N
+3 f
+1558(Page)X
+1 f
+1743(menu.)X
+3 f
+864 4968(N)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewUnMark\(\))X
+1 f
+2487(which)X
+2703(is)X
+2776(equivalent)X
+3131(to)X
+3214(pushing)X
+3488(the)X
+3 f
+3607(Unmark)X
+1 f
+3917(menu)X
+4116(button)X
+1440 5064(on)N
+1540(the)X
+3 f
+1658(Page)X
+1 f
+1843(menu.)X
+3 f
+864 5198(0)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewMagstep\(0\))X
+1 f
+2523(which)X
+2739(is)X
+2812(equivalent)X
+3166(to)X
+3248(pushing)X
+3521(the)X
+3 f
+3639(0)X
+1 f
+3699(menu)X
+3897(button)X
+4121(on)X
+4222(the)X
+3 f
+1440 5294(Magstep)N
+1 f
+1754(menu.)X
+3 f
+864 5428(1)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewMagstep\(1\))X
+1 f
+2523(which)X
+2739(is)X
+2812(equivalent)X
+3166(to)X
+3248(pushing)X
+3521(the)X
+3 f
+3639(1)X
+1 f
+3699(menu)X
+3897(button)X
+4121(on)X
+4222(the)X
+3 f
+1440 5524(Magstep)N
+1 f
+1754(menu.)X
+3 f
+864 5658(2)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewMagstep\(2\))X
+1 f
+2523(which)X
+2739(is)X
+2812(equivalent)X
+3166(to)X
+3248(pushing)X
+3521(the)X
+3 f
+3639(2)X
+1 f
+3699(menu)X
+3897(button)X
+4121(on)X
+4222(the)X
+3 f
+1440 5754(Magstep)N
+1 f
+1754(menu.)X
+576 6144(7th)N
+698(Edition)X
+4280(4)X
+
+5 p
+%%Page: 5 5
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+3 f
+864 768(3)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewMagstep\(3\))X
+1 f
+2523(which)X
+2739(is)X
+2812(equivalent)X
+3166(to)X
+3248(pushing)X
+3521(the)X
+3 f
+3639(3)X
+1 f
+3699(menu)X
+3897(button)X
+4121(on)X
+4222(the)X
+3 f
+1440 864(Magstep)N
+1 f
+1754(menu.)X
+3 f
+864 998(4)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewMagstep\(4\))X
+1 f
+2523(which)X
+2739(is)X
+2812(equivalent)X
+3166(to)X
+3248(pushing)X
+3521(the)X
+3 f
+3639(4)X
+1 f
+3699(menu)X
+3897(button)X
+4121(on)X
+4222(the)X
+3 f
+1440 1094(Magstep)N
+1 f
+1754(menu.)X
+3 f
+864 1228(5)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewMagstep\(5\))X
+1 f
+2523(which)X
+2739(is)X
+2812(equivalent)X
+3166(to)X
+3248(pushing)X
+3521(the)X
+3 f
+3639(5)X
+1 f
+3699(menu)X
+3897(button)X
+4121(on)X
+4222(the)X
+3 f
+1440 1324(Magstep)N
+1 f
+1754(menu.)X
+3 f
+864 1458(+)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewIncreaseMagstep\(\))X
+1 f
+2773(which)X
+2989(increases)X
+3304(the)X
+3422(magstep)X
+3709(by)X
+3809(1.)X
+3 f
+864 1592(-)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755 0.1650(GhostviewDecreaseMagstep\(\))AX
+1 f
+2792(which)X
+3008(decreases)X
+3337(the)X
+3455(magstep)X
+3742(by)X
+3842(1.)X
+3 f
+864 1726(U)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewUp\(\))X
+1 f
+2291(which)X
+2507(scrolls)X
+2736(the)X
+2854(main)X
+3034(viewport)X
+3339(up.)X
+3 f
+864 1860(D)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewDown\(\))X
+1 f
+2389(which)X
+2605(scrolls)X
+2834(the)X
+2952(main)X
+3132(viewport)X
+3437(down.)X
+3 f
+864 1994(H)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewLeft\(\))X
+1 f
+2332(which)X
+2548(scrolls)X
+2777(the)X
+2895(main)X
+3075(viewport)X
+3380(left.)X
+3 f
+864 2128(J)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewDown\(\))X
+1 f
+2389(which)X
+2605(scrolls)X
+2834(the)X
+2952(main)X
+3132(viewport)X
+3437(down.)X
+3 f
+864 2262(K)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewUp\(\))X
+1 f
+2291(which)X
+2507(scrolls)X
+2736(the)X
+2854(main)X
+3034(viewport)X
+3339(up.)X
+3 f
+864 2396(L)N
+1 f
+1440(Bound)X
+1673(to)X
+3 f
+1755(GhostviewRight\(\))X
+1 f
+2380(which)X
+2596(scrolls)X
+2825(the)X
+2943(main)X
+3123(viewport)X
+3428(right.)X
+3 f
+864 2530(Up)N
+1 f
+986(\(arrow\))X
+1440(Bound)X
+1679(to)X
+3 f
+1768(GhostviewDefault\(\))X
+2463(GhostviewSetOrientation\(portrait\))X
+1 f
+3683(which)X
+3906(is)X
+3986(equivalent)X
+1440 2626(to)N
+1522(pushing)X
+3 f
+1795(Portrait)X
+1 f
+2092(with)X
+2254(the)X
+2372(\256rst)X
+2516(mouse)X
+2745(button)X
+2969(on)X
+3069(the)X
+3 f
+3187(Orientation)X
+1 f
+3607(menu.)X
+3 f
+864 2760(Right)N
+1 f
+1075(\(arrow\))X
+1440(Bound)X
+1739(to)X
+3 f
+1887(GhostviewDefault\(\))X
+2641(GhostviewSetOrientation\(landscape\))X
+1 f
+3985(which)X
+4267(is)X
+1440 2856(equivalent)N
+1794(to)X
+1876(pushing)X
+3 f
+2149(Landscape)X
+1 f
+2537(with)X
+2699(the)X
+2817(\256rst)X
+2961(mouse)X
+3190(button)X
+3414(on)X
+3514(the)X
+3 f
+3632(Orientation)X
+1 f
+4052(menu.)X
+3 f
+864 2990(Down)N
+1 f
+1084(\(arrow\))X
+1440(Bound)X
+1715(to)X
+3 f
+1840(GhostviewDefault\(\))X
+2571(GhostviewSetOrientation\(upside)X
+9 f
+3686(-)X
+3688(-)X
+3 f
+3732(down\))X
+1 f
+4008(which)X
+4267(is)X
+1440 3086(equivalent)N
+1812(to)X
+1912(pushing)X
+3 f
+2202(Upside)X
+9 f
+2437(-)X
+2439(-)X
+3 f
+2483(down)X
+1 f
+2706(with)X
+2885(the)X
+3020(\256rst)X
+3181(mouse)X
+3427(button)X
+3668(on)X
+3785(the)X
+3 f
+3920(Orientation)X
+1 f
+1440 3182(menu.)N
+3 f
+864 3316(Left)N
+1 f
+1027(\(arrow\))X
+1440(Bound)X
+1676(to)X
+3 f
+1761(GhostviewDefault\(\))X
+2452(GhostviewSetOrientation\(seascape\))X
+1 f
+3690(which)X
+3909(is)X
+3986(equivalent)X
+1440 3412(to)N
+1522(pushing)X
+3 f
+1795(Seascape)X
+1 f
+2122(with)X
+2284(the)X
+2402(\256rst)X
+2546(mouse)X
+2775(button)X
+2999(on)X
+3099(the)X
+3 f
+3217(Orientation)X
+1 f
+3637(menu.)X
+3 f
+864 3546(Shift)N
+9 f
+1028(-)X
+1030(-)X
+3 f
+1074(Up)X
+1 f
+1196(\(arrow\))X
+1440 3642(Bound)N
+1675(to)X
+3 f
+1759(GhostviewForce\(\))X
+2392(GhostviewSetOrientation\(portrait\))X
+1 f
+3607(which)X
+3825(is)X
+3901(equivalent)X
+4258(to)X
+1440 3738(pushing)N
+3 f
+1713(Portrait)X
+1 f
+2010(with)X
+2172(the)X
+2290(second)X
+2533(mouse)X
+2762(button)X
+2986(on)X
+3086(the)X
+3 f
+3204(Orientation)X
+1 f
+3624(menu.)X
+3 f
+864 3872(Shift)N
+9 f
+1028(-)X
+1030(-)X
+3 f
+1074(Right)X
+1 f
+1285(\(arrow\))X
+1440 3968(Bound)N
+1678(to)X
+3 f
+1765(GhostviewForce\(\))X
+2401(GhostviewSetOrientation\(landscape\))X
+1 f
+3685(which)X
+3907(is)X
+3986(equivalent)X
+1440 4064(to)N
+1522(pushing)X
+3 f
+1795(Landscape)X
+1 f
+2183(with)X
+2345(the)X
+2463(second)X
+2706(mouse)X
+2935(button)X
+3159(on)X
+3259(the)X
+3 f
+3377(Orientation)X
+1 f
+3797(menu.)X
+3 f
+864 4198(Shift)N
+9 f
+1028(-)X
+1030(-)X
+3 f
+1074(Down)X
+1 f
+1294(\(arrow\))X
+1440 4294(Bound)N
+1727(to)X
+3 f
+1863(GhostviewForce\(\))X
+2548(GhostviewSetOrientation\(upside)X
+9 f
+3663(-)X
+3665(-)X
+3 f
+3709(down\))X
+1 f
+3996(which)X
+4267(is)X
+1440 4390(equivalent)N
+1803(to)X
+1894(pushing)X
+3 f
+2175(Upside)X
+9 f
+2410(-)X
+2412(-)X
+3 f
+2456(down)X
+1 f
+2670(with)X
+2840(the)X
+2966(second)X
+3217(mouse)X
+3454(button)X
+3686(on)X
+3794(the)X
+3 f
+3920(Orientation)X
+1 f
+1440 4486(menu.)N
+3 f
+864 4620(Shift)N
+9 f
+1028(-)X
+1030(-)X
+3 f
+1074(Left)X
+1 f
+1237(\(arrow\))X
+1440 4716(Bound)N
+1685(to)X
+3 f
+1779(GhostviewForce\(\))X
+2423(GhostviewSetOrientation\(seascape\))X
+1 f
+3671(which)X
+3900(is)X
+3986(equivalent)X
+1440 4812(to)N
+1522(pushing)X
+3 f
+1795(Seascape)X
+1 f
+2122(with)X
+2284(the)X
+2402(second)X
+2645(mouse)X
+2874(button)X
+3098(on)X
+3198(the)X
+3 f
+3316(Orientation)X
+1 f
+3736(menu.)X
+3 f
+9 s
+576 4946(ACTIONS)N
+1 f
+10 s
+864 5042(Most)N
+1049(of)X
+1137(the)X
+1256(popup)X
+1477(menu)X
+1676(commands)X
+2044(have)X
+2217(an)X
+2314(equivalent)X
+2670(action)X
+2888(that)X
+3030(can)X
+3164(be)X
+3262(used)X
+3431(in)X
+3515(a)X
+3573(translation.)X
+3973(The)X
+4120(popup)X
+864 5138(menu)N
+1062(entry)X
+1247(must)X
+1422(be)X
+1518(sensitive)X
+1818(\(i.e.)X
+1963(not)X
+2085(grayed)X
+2324(out\))X
+2473(for)X
+2587(the)X
+2705(action)X
+2921(to)X
+3003(have)X
+3175(effect.)X
+3419(Here)X
+3596(is)X
+3669(the)X
+3787(list)X
+3904(of)X
+3991(actions:)X
+3 f
+864 5272(GhostviewCopyright\(\))N
+1 f
+1440 5368(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Copyright...)X
+1 f
+2711(menu)X
+2909(button)X
+3133(on)X
+3233(the)X
+3 f
+3351(Ghostview)X
+1 f
+3731(menu.)X
+3 f
+864 5502(GhostviewQuit\(\))N
+1 f
+1440 5598(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Quit)X
+1 f
+2455(menu)X
+2653(button)X
+2877(on)X
+2977(the)X
+3 f
+3095(Ghostview)X
+1 f
+3475(menu.)X
+3 f
+864 5732(GhostviewOpen\(\))N
+1 f
+1440 5828(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Open...)X
+1 f
+2546(menu)X
+2744(button)X
+2968(on)X
+3068(the)X
+3 f
+3186(File)X
+1 f
+3335(menu.)X
+576 6212(7th)N
+698(Edition)X
+4280(5)X
+
+6 p
+%%Page: 6 6
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+3 f
+864 768(GhostviewReopen\(\))N
+1 f
+1440 864(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Reopen)X
+1 f
+2558(menu)X
+2756(button)X
+2980(on)X
+3080(the)X
+3 f
+3198(File)X
+1 f
+3347(menu.)X
+3 f
+864 998(GhostviewSave\(\))N
+1 f
+1440 1094(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Save)X
+2460(marked)X
+2747(pages...)X
+1 f
+3018(menu)X
+3216(button)X
+3440(on)X
+3540(the)X
+3 f
+3658(File)X
+1 f
+3807(menu.)X
+3 f
+864 1228(GhostviewPrintWhole\(\))N
+1 f
+1440 1324(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Print...)X
+1 f
+2538(menu)X
+2736(button)X
+2960(on)X
+3060(the)X
+3 f
+3178(File)X
+1 f
+3327(menu.)X
+3 f
+864 1458(GhostviewPrintMarked\(\))N
+1 f
+1440 1554(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Print)X
+2478(marked)X
+2765(pages...)X
+1 f
+3036(menu)X
+3234(button)X
+3458(on)X
+3558(the)X
+3 f
+3676(File)X
+1 f
+3825(menu.)X
+3 f
+864 1688(GhostviewPrevious\(\))N
+1 f
+1440 1784(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Previous)X
+1 f
+2598(menu)X
+2796(button)X
+3020(on)X
+3120(the)X
+3 f
+3238(Page)X
+1 f
+3423(menu.)X
+3 f
+864 1918(GhostviewShow\(\))N
+1 f
+1440 2014(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Redisplay)X
+1 f
+2637(menu)X
+2835(button)X
+3059(on)X
+3159(the)X
+3 f
+3277(Page)X
+1 f
+3462(menu.)X
+3 f
+864 2148(GhostviewNext\(\))N
+1 f
+1440 2244(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Next)X
+1 f
+2461(menu)X
+2659(button)X
+2883(on)X
+2983(the)X
+3 f
+3101(Page)X
+1 f
+3286(menu.)X
+3 f
+864 2378(GhostviewCenter\(\))N
+1 f
+1440 2474(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Center)X
+1 f
+2537(menu)X
+2735(button)X
+2959(on)X
+3059(the)X
+3 f
+3177(Page)X
+1 f
+3362(menu.)X
+3 f
+864 2608(GhostviewMark\(\))N
+1 f
+1440 2704(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Mark)X
+1 f
+2496(menu)X
+2694(button)X
+2918(on)X
+3018(the)X
+3 f
+3136(Page)X
+1 f
+3321(menu.)X
+3 f
+864 2838(GhostviewUnmark\(\))N
+1 f
+1440 2934(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Unmark)X
+1 f
+2589(menu)X
+2787(button)X
+3011(on)X
+3111(the)X
+3 f
+3229(Page)X
+1 f
+3414(menu.)X
+3 f
+864 3068(GhostviewSetMagstep\(magstep\))N
+1 f
+1440 3164(Sets)N
+1593(the)X
+1711(magstep.)X
+2038(The)X
+2183(parameter)X
+2525(must)X
+2700(be)X
+2796(an)X
+2892(integer.)X
+3 f
+864 3298(GhostviewIncreaseMagstep\(\))N
+1 f
+1440 3394(Increases)N
+1760(magstep)X
+2047(by)X
+2147(one.)X
+3 f
+864 3528 0.1650(GhostviewDecreaseMagstep\(\))AN
+1 f
+1440 3624(Decreases)N
+1787(magstep)X
+2074(by)X
+2174(one.)X
+3 f
+864 3758(GhostviewSetOrientation\(orientation\))N
+1 f
+1440 3854(Set)N
+1564(the)X
+1684(orientation)X
+2053(to)X
+2137(the)X
+2257(passed)X
+2493(parameter.)X
+2878(The)X
+3026(parameter)X
+3371(must)X
+3549(be)X
+3 f
+3648(portrait)X
+1 f
+3920(,)X
+3 f
+3963(landscape)X
+1 f
+4300(,)X
+3 f
+1440 3950(upside)N
+9 f
+1661(-)X
+1663(-)X
+3 f
+1707(down)X
+1 f
+1893(,)X
+1933(or)X
+3 f
+2020(seascape)X
+1 f
+2314(.)X
+3 f
+864 4084(GhostviewSwapLandscape\(\))N
+1 f
+1440 4180(Equivalent)N
+1807(to)X
+1889(pushing)X
+2162(the)X
+3 f
+2280(Swap)X
+2486(Landscape)X
+1 f
+2874(menu)X
+3072(button)X
+3296(on)X
+3396(the)X
+3 f
+3514(Orientation)X
+1 f
+3934(menu.)X
+3 f
+864 4314(GhostviewSetPageMedia\(media)N
+9 f
+1950(-)X
+1952(-)X
+3 f
+1996(name\))X
+1 f
+1440 4410(Sets)N
+1602(the)X
+1729(media.)X
+1994(The)X
+2149(parameter)X
+2501(should)X
+2744(be)X
+2850(either)X
+3063(a)X
+3129(media)X
+3355(de\256ned)X
+3621(in)X
+3713(the)X
+3841(document)X
+4187(or)X
+4284(a)X
+1440 4506(standard)N
+1732(media.)X
+3 f
+864 4640(GhostviewDefault\(\))N
+1 f
+1440 4736(The)N
+1591(orientation)X
+1964(or)X
+2057(media)X
+2279(being)X
+2483(set)X
+2599(is)X
+2679(not)X
+2808(forced)X
+3041(on)X
+3148(the)X
+3273(document.)X
+3656(This)X
+3825(action)X
+4048(is)X
+4128(called)X
+1440 4832(before)N
+1666(the)X
+1784(action)X
+2000(that)X
+2140(sets)X
+2280(the)X
+2398(orientation)X
+2765(or)X
+2852(media.)X
+3 f
+864 4966(GhostviewForce\(\))N
+1 f
+1440 5062(The)N
+1600(orientation)X
+1982(or)X
+2085(media)X
+2317(being)X
+2531(set)X
+2656(is)X
+2745(forced)X
+2987(on)X
+3103(the)X
+3237(document.)X
+3629(This)X
+3807(action)X
+4039(is)X
+4128(called)X
+1440 5158(before)N
+1666(the)X
+1784(action)X
+2000(that)X
+2140(sets)X
+2280(the)X
+2398(orientation)X
+2765(or)X
+2852(media.)X
+3 f
+864 5292(GhostviewDeleteWindow\(\))N
+1 f
+1440 5388(Destroy)N
+1716(the)X
+1836(current)X
+2086(window.)X
+2406(This)X
+2570(provides)X
+2868(a)X
+2926(way)X
+3083(to)X
+3168(implement)X
+3533(the)X
+3654(Delete)X
+3887(Window)X
+4186(pro-)X
+1440 5484(tocol)N
+1620(for)X
+1734(window)X
+2012(managers.)X
+3 f
+864 5618(GhostviewDismiss\(\))N
+1 f
+1440 5714(Pop)N
+1593(down)X
+1800(the)X
+1927(current)X
+2184(window.)X
+2511(This)X
+2682(provides)X
+2987(a)X
+3052(way)X
+3215(to)X
+3306(implement)X
+3677(the)X
+3804(Delete)X
+4044(Window)X
+1440 5810(protocol)N
+1727(for)X
+1841(window)X
+2119(managers.)X
+576 6194(7th)N
+698(Edition)X
+4280(6)X
+
+7 p
+%%Page: 7 7
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+3 f
+864 768(GhostviewScrollUp\(\))N
+1 f
+1440 864(Scroll)N
+1651(the)X
+1769(main)X
+1949(viewport)X
+2254(up.)X
+3 f
+864 998(GhostviewScrollDown\(\))N
+1 f
+1440 1094(Scroll)N
+1651(the)X
+1769(main)X
+1949(viewport)X
+2254(down.)X
+3 f
+864 1228(GhostviewScrollLeft\(\))N
+1 f
+1440 1324(Scroll)N
+1651(the)X
+1769(main)X
+1949(viewport)X
+2254(left.)X
+3 f
+864 1458(GhostviewScrollRight\(\))N
+1 f
+1440 1554(Scroll)N
+1651(the)X
+1769(main)X
+1949(viewport)X
+2254(right.)X
+3 f
+864 1688(GhostviewEraseLocator\(\))N
+1 f
+1440 1784(Used)N
+1625(to)X
+1707(erase)X
+1893(the)X
+2011(locator)X
+2254(when)X
+2448(leaving)X
+2704(a)X
+2760(Ghostview)X
+3127(widget.)X
+3 f
+864 1918(GhostviewCheckFile\(\))N
+1 f
+1440 2014(Checks)N
+1696(to)X
+1778(see)X
+1901(if)X
+1970(the)X
+2088(\256le)X
+2210(changed)X
+2498(and)X
+2634(refreshes)X
+2945(the)X
+3063(screen)X
+3289(if)X
+3358(necessary.)X
+3 f
+9 s
+576 2148(APPLICATION)N
+1110(RESOURCES)X
+1 f
+10 s
+864 2244(The)N
+1009(following)X
+1340(application)X
+1716(resources)X
+2040(may)X
+2198(be)X
+2294(set)X
+2403(to)X
+2485(control)X
+2732(the)X
+2850(default)X
+3093(behavior)X
+3394(of)X
+2 f
+3481(ghostview)X
+1 f
+(.)S
+3 f
+864 2378(showTitle)N
+1217(\()X
+1 f
+1244(class)X
+3 f
+1420(Labels\))X
+1 f
+1440 2474(Tells)N
+1620(whether)X
+1899(to)X
+1981(display)X
+2232(the)X
+3 f
+2350(%%Title)X
+1 f
+2690(comment.)X
+3048(The)X
+3193(default)X
+3436(is)X
+3509(``true''.)X
+3 f
+864 2608(showDate)N
+1218(\()X
+1 f
+1245(class)X
+3 f
+1421(Labels\))X
+1 f
+1440 2704(Tells)N
+1620(whether)X
+1899(to)X
+1981(display)X
+2232(the)X
+3 f
+2350(%%Data)X
+1 f
+2695(comment.)X
+3053(The)X
+3198(default)X
+3441(is)X
+3514(``true''.)X
+3 f
+864 2838(showLocator)N
+1329(\()X
+1 f
+1356(class)X
+3 f
+1532(Labels\))X
+1 f
+1440 2934(Tells)N
+1620(whether)X
+1899(to)X
+1981(display)X
+2232(the)X
+2350(locator.)X
+2633(The)X
+2778(default)X
+3021(is)X
+3094(``true''.)X
+3 f
+864 3068(autoCenter)N
+1272(\()X
+1 f
+1299(class)X
+3 f
+1475(AutoCenter\))X
+1 f
+1440 3164(Tells)N
+1630(whether)X
+1919(to)X
+2011(center)X
+2238(the)X
+2366(page)X
+2549(within)X
+2784(the)X
+2913(viewport)X
+3229(whenever)X
+3573(the)X
+3702(page)X
+3885(size)X
+4041(changes.)X
+1440 3260(The)N
+1585(default)X
+1828(is)X
+1901(``true''.)X
+3 f
+864 3394(horizonalMargin)N
+1466(\()X
+1 f
+1493(class)X
+3 f
+1669(Margin\))X
+1 f
+1440 3490(Tells)N
+1623(how)X
+1784(many)X
+1985(pixels)X
+2199(ghostview)X
+2552(should)X
+2789(reserve)X
+3046(for)X
+3164(window)X
+3446(decorations)X
+3840(in)X
+3926(the)X
+4048(horizon-)X
+1440 3586(tal)N
+1540(direction.)X
+1885(The)X
+2030(default)X
+2273(value)X
+2467(is)X
+2540(``20''.)X
+3 f
+864 3720(verticalMargin)N
+1401(\()X
+1 f
+1428(class)X
+3 f
+1604(Margin\))X
+1 f
+1440 3816(Tells)N
+1626(how)X
+1790(many)X
+1994(pixels)X
+2211(ghostview)X
+2566(should)X
+2805(reserve)X
+3064(for)X
+3184(window)X
+3468(decorations)X
+3865(in)X
+3954(the)X
+4079(vertical)X
+1440 3912(direction.)N
+1785(The)X
+1930(default)X
+2173(value)X
+2367(is)X
+2440(``44''.)X
+3 f
+864 4046(minimumMagstep)N
+1511(\()X
+1 f
+1538(class)X
+3 f
+1714(Magstep\))X
+1 f
+1440 4142(Tells)N
+1620(the)X
+1738(smallest)X
+2020(magstep)X
+2307(to)X
+2389(display.)X
+2680(The)X
+2825(default)X
+3068(is)X
+3141(``-5''.)X
+3 f
+864 4276(maximumMagstep)N
+1525(\()X
+1 f
+1552(class)X
+3 f
+1728(Magstep\))X
+1 f
+1440 4372(Tells)N
+1620(the)X
+1738(largest)X
+1972(magstep)X
+2259(to)X
+2341(display.)X
+2632(The)X
+2777(default)X
+3020(is)X
+3093(``5''.)X
+3 f
+864 4506(magstep)N
+1169(\()X
+1 f
+1196(class)X
+3 f
+1372(Magstep\))X
+1 f
+1440 4602(Sets)N
+1593(the)X
+1711(default)X
+1954(magstep.)X
+2281(The)X
+2426(default)X
+2669(is)X
+2742(``0''.)X
+3 f
+864 4736(orientation)N
+1262(\()X
+1 f
+1289(class)X
+3 f
+1465(Orientation\))X
+1 f
+1440 4832(Sets)N
+1593(the)X
+1711(default)X
+1954(orientation.)X
+2361(The)X
+2506(default)X
+2749(is)X
+2822(``Portrait''.)X
+3 f
+864 4966(page)N
+1044(\()X
+1 f
+1071(class)X
+3 f
+1247(Page\))X
+1 f
+1440 5062(Gives)N
+1652(the)X
+1775(initial)X
+1986(page)X
+2163(to)X
+2250(display.)X
+2546(This)X
+2713(resource)X
+3012(only)X
+3180(affects)X
+3421(the)X
+3545(display)X
+3802(of)X
+3895(the)X
+4019(\256le)X
+4147(listed)X
+1440 5158(on)N
+1540(the)X
+1658(command)X
+1994(line.)X
+2174(The)X
+2319(default)X
+2562(is)X
+2635(NULL.)X
+3 f
+864 5292(pageMedia)N
+1262(\()X
+1 f
+1289(class)X
+3 f
+1465(PageMedia\))X
+1 f
+1440 5388(Sets)N
+1593(the)X
+1711(default)X
+1954(page)X
+2126(media.)X
+2382(The)X
+2527(default)X
+2770(is)X
+2843(``Letter''.)X
+3 f
+864 5522(forceOrientation)N
+1459(\()X
+1 f
+1486(class)X
+3 f
+1662(Force\))X
+1 f
+1440 5618(Tells)N
+1620(whether)X
+1899(to)X
+1981(force)X
+2167(the)X
+2285(orientation)X
+2652(on)X
+2752(the)X
+2870(document.)X
+3246(The)X
+3391(default)X
+3634(is)X
+3707(``false''.)X
+576 6144(7th)N
+698(Edition)X
+4280(7)X
+
+8 p
+%%Page: 8 8
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+3 f
+864 768(forcePageMedia)N
+1442(\()X
+1 f
+1469(class)X
+3 f
+1645(Force\))X
+1 f
+1440 864(Tells)N
+1620(whether)X
+1899(to)X
+1981(force)X
+2167(the)X
+2285(page)X
+2457(media)X
+2673(on)X
+2773(the)X
+2891(document.)X
+3267(The)X
+3412(default)X
+3655(is)X
+3728(``false''.)X
+3 f
+864 998(swapLandscape)N
+1425(\()X
+1 f
+1452(class)X
+3 f
+1628(SwapLandscape\))X
+1 f
+1440 1094(Tells)N
+1620(whether)X
+1899(to)X
+1981(swap)X
+2166(the)X
+2284(meaning)X
+2580(of)X
+2667(Landscape)X
+3031(and)X
+3167(Seascape.)X
+3522(The)X
+3667(default)X
+3910(is)X
+3983(``false''.)X
+3 f
+864 1228(printCommand)N
+1417(\()X
+1 f
+1444(class)X
+3 f
+1620(PrintCommand\))X
+1 f
+1440 1324(Sets)N
+1611(the)X
+1747(command)X
+2101(used)X
+2286(for)X
+2418(printing.)X
+2749(The)X
+2912(printer)X
+3164(environment)X
+3607(variable)X
+3904(is)X
+3995(set)X
+4122(to)X
+4222(the)X
+1440 1420(desired)N
+1700(printer)X
+1942(and)X
+2086(then)X
+2252(this)X
+2395(command)X
+2739(is)X
+2819(executed)X
+3132(using)X
+3332(popen.)X
+3595(This)X
+3764(command)X
+4107(should)X
+1440 1516(read)N
+1599(from)X
+1775(``stdin'')X
+2058(and)X
+2194(send)X
+2361(the)X
+2479(\256le)X
+2601(to)X
+2683(the)X
+2802(appropriate)X
+3189(printer.)X
+3464(The)X
+3610(default)X
+3854(value)X
+4049(is)X
+4123(``lpr'')X
+1440 1612(for)N
+1554(BSD)X
+1729(and)X
+1865(``lp'')X
+2055(for)X
+2169(System)X
+2424(V.)X
+3 f
+864 1746(printerVariable)N
+1427(\()X
+1 f
+1454(class)X
+3 f
+1630(PrinterVariable\))X
+1 f
+1440 1842(Gives)N
+1653(the)X
+1777(name)X
+1978(of)X
+2072(the)X
+2197(printer)X
+2438(environment)X
+2870(variable.)X
+3196(The)X
+3348(default)X
+3598(value)X
+3799(is)X
+3879(``PRINTER'')X
+1440 1938(for)N
+1554(BSD)X
+1729(and)X
+1865(``LPDEST'')X
+2286(for)X
+2400(System)X
+2655(V.)X
+3 f
+864 2072(defaultPrinter)N
+1374(\()X
+1 f
+1401(class)X
+3 f
+1577(DefaultPrinter\))X
+1 f
+1440 2168(Gives)N
+1661(the)X
+1793(printer)X
+2041(name)X
+2249(to)X
+2345(use)X
+2486(when)X
+2694(the)X
+2826(printer)X
+3074(environment)X
+3513(variable)X
+3806(is)X
+3894(not)X
+4031(set.)X
+4195(The)X
+1440 2264(default)N
+1683(value)X
+1877(is)X
+1950(NULL.)X
+3 f
+864 2398(printPrompt)N
+1320(\()X
+1 f
+1347(class)X
+3 f
+1523(PrintPrompt\))X
+1 f
+1440 2494(Sets)N
+1593(the)X
+1711(prompt)X
+1962(used)X
+2129(to)X
+2211(ask)X
+2338(for)X
+2452(the)X
+2570(printer)X
+2804(name.)X
+3038(The)X
+3183(default)X
+3426(value)X
+3620(is)X
+3693(``Printer)X
+3985(Name:)X
+4219(''.)X
+3 f
+864 2628(printFail)N
+1190(\()X
+1 f
+1217(class)X
+3 f
+1393(printFail\))X
+1 f
+1440 2724(Sets)N
+1602(the)X
+1729(string)X
+1940(used)X
+2116(to)X
+2207(inform)X
+2454(the)X
+2581(user)X
+2744(that)X
+2893(the)X
+3020(printer)X
+3263(command)X
+3608(failed.)X
+3860(The)X
+4014(default)X
+4267(is)X
+1440 2820(``"lpr")N
+1669(command)X
+2005(failed.''.)X
+3 f
+864 2954(openPrompt)N
+1311(\()X
+1 f
+1338(class)X
+3 f
+1514(OpenPrompt\))X
+1 f
+1440 3050(Sets)N
+1593(the)X
+1711(prompt)X
+1962(used)X
+2129(to)X
+2211(ask)X
+2338(for)X
+2452(a)X
+2508(\256le)X
+2630(name)X
+2824(to)X
+2906(open.)X
+3122(The)X
+3267(default)X
+3510(value)X
+3704(is)X
+3777(``Open)X
+4025(File:)X
+4191(''.)X
+3 f
+864 3184(openFail)N
+1181(\()X
+1 f
+1208(class)X
+3 f
+1384(OpenFail\))X
+1 f
+1440 3280(Sets)N
+1615(the)X
+1755(string)X
+1979(used)X
+2168(to)X
+2272(inform)X
+2532(the)X
+2672(user)X
+2848(that)X
+3010(the)X
+3151(open)X
+3350(failed.)X
+3616(The)X
+3784(default)X
+4050(value)X
+4267(is)X
+1440 3376(``Cannot)N
+1745(open)X
+1921(\256le:)X
+2065(''.)X
+3 f
+864 3510(savePrompt)N
+1294(\()X
+1 f
+1321(class)X
+3 f
+1497(SavePrompt\))X
+1 f
+1440 3606(Sets)N
+1593(the)X
+1711(prompt)X
+1962(used)X
+2129(to)X
+2211(ask)X
+2338(for)X
+2452(a)X
+2508(\256le)X
+2630(name)X
+2824(to)X
+2906(save.)X
+3109(The)X
+3254(default)X
+3497(value)X
+3691(is)X
+3764(``Save)X
+3994(File:)X
+4160(''.)X
+3 f
+864 3740(saveFail)N
+1164(\()X
+1 f
+1191(class)X
+3 f
+1367(SaveFail\))X
+1 f
+1440 3836(Sets)N
+1616(the)X
+1757(string)X
+1982(used)X
+2172(to)X
+2277(inform)X
+2538(the)X
+2679(user)X
+2856(that)X
+3019(the)X
+3160(save)X
+3346(failed.)X
+3613(The)X
+3782(default)X
+4049(value)X
+4267(is)X
+1440 3932(``Cannot)N
+1745(save)X
+1908(\256le:)X
+2052(''.)X
+3 f
+864 4066(openWindows)N
+1367(\()X
+1 f
+1394(class)X
+3 f
+1570(OpenWindows\))X
+1 f
+1440 4162(OpenWindows)N
+1953(servers)X
+2213(sometimes)X
+2587(cause)X
+2798(error)X
+2987(messages)X
+3322(about)X
+3532(bitmaps)X
+3817(not)X
+3952(being)X
+4163(1)X
+4236(bit)X
+1440 4258(deep.)N
+1658(Turning)X
+1942(on)X
+2048(this)X
+2189(resource)X
+2488(avoids)X
+2723(the)X
+2847(problem)X
+3139(by)X
+3244(not)X
+3371(using)X
+3569(any)X
+3710(bitmaps.)X
+4028(You)X
+4191(lose)X
+1440 4354(the)N
+1571(functionality)X
+2013(of)X
+2113(having)X
+2364(the)X
+2495(current)X
+2756(magstep,)X
+3076(orientation)X
+3456(and)X
+3605(media)X
+3834(marked)X
+4108(on)X
+4222(the)X
+1440 4450(popup)N
+1660(menus.)X
+1929(The)X
+2074(default)X
+2317(value)X
+2511(is)X
+2584(``false''.)X
+3 f
+864 4584(ncdwm)N
+1133(\()X
+1 f
+1160(class)X
+3 f
+1336(Ncdwm\))X
+1 f
+1440 4680(The)N
+1593(Xt)X
+1701(Intrinsics)X
+2027(has)X
+2162(a)X
+2226(bug)X
+2374(that)X
+2522(causes)X
+2760(bogus)X
+2979(information)X
+3385(in)X
+3475(the)X
+3602(window)X
+3889(manager)X
+4195(size)X
+1440 4776(hints.)N
+2 f
+1660(Ncdwm)X
+1 f
+1925(and)X
+2066(possibly)X
+2357(other)X
+2547(window)X
+2830(managers)X
+3162(get)X
+3284(confused)X
+3598(by)X
+3702(the)X
+3824(bogus)X
+4039(informa-)X
+1440 4872(tion)N
+1591(and)X
+1734(make)X
+1935(the)X
+2061(window)X
+2347(extremely)X
+2696(small.)X
+2 f
+2937(Twm)X
+1 f
+3120(and)X
+2 f
+3264(mwm)X
+1 f
+3461(ignore)X
+3694(the)X
+3820(bogus)X
+4039(informa-)X
+1440 4968(tion.)N
+1633(Turning)X
+1920(on)X
+2029(the)X
+2156(resource)X
+2457(avoids)X
+2694(the)X
+2820(problem)X
+3115(with)X
+2 f
+3285(ncdwm)X
+1 f
+3540(by)X
+3648(doing)X
+3858(things)X
+4081(slightly)X
+1440 5064(differently.)N
+1843(However,)X
+2182(this)X
+2321(can)X
+2457(confuse)X
+2731(other)X
+2920(window)X
+3202(managers)X
+3535(such)X
+3707(as)X
+2 f
+3799(mwm)X
+1 f
+3968(.)X
+4033(This)X
+4200(bug)X
+1440 5160(is)N
+1514(\256xed)X
+1695(in)X
+1777(X11R5)X
+2028(\256x-10.)X
+2279(You)X
+2437(should)X
+2670(only)X
+2832(set)X
+2941(this)X
+3076(resource)X
+3369(if)X
+3438(you)X
+3578(have)X
+3750(the)X
+3868(problem.)X
+4195(The)X
+1440 5256(default)N
+1683(value)X
+1877(is)X
+1950(``false''.)X
+3 f
+9 s
+576 5390(GHOSTVIEW)N
+1062(WIDGET)X
+1396(RESOURCES)X
+1 f
+10 s
+864 5486(Certain)N
+1123(resources)X
+1450(in)X
+1535(the)X
+1656(Ghostview)X
+2026(widget)X
+2267(may)X
+2428(be)X
+2527(set)X
+2639(by)X
+2742(the)X
+2864(user.)X
+3062(These)X
+3278(selected)X
+3561(resources)X
+3889(are)X
+4012(presented)X
+864 5582(below.)N
+3 f
+864 5716(arguments)N
+1249(\()X
+1 f
+1276(class)X
+3 f
+1452(Arguments\))X
+1 f
+1440 5812(Additional)N
+1802(arguments)X
+2156(passed)X
+2391(to)X
+2474(the)X
+2593(interpreter.)X
+2989(It)X
+3059(is)X
+3133(convenient)X
+3506(to)X
+3589(name)X
+3784(\256les)X
+3938(that)X
+4079(preload)X
+576 6196(7th)N
+698(Edition)X
+4280(8)X
+
+9 p
+%%Page: 9 9
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+1440 768(fonts)N
+1627(here)X
+1793(for)X
+1914(PostScript)X
+2269(programs)X
+2599(that)X
+2746(continually)X
+3133(reload)X
+3361(fonts)X
+3548(while)X
+3752(rendering)X
+4086(a)X
+4148(page.)X
+1440 864(The)N
+1585(default)X
+1828(is)X
+1901(no)X
+2001(additional)X
+2341(arguments.)X
+3 f
+864 998(busyCursor)N
+1288(\()X
+1 f
+1315(class)X
+3 f
+1491(Cursor\))X
+1 f
+1440 1094(The)N
+1586(cursor)X
+1808(shown)X
+2038(when)X
+2 f
+2233(ghostscript)X
+1 f
+2609(is)X
+2683(rendering)X
+3012(to)X
+3095(the)X
+3214(window.)X
+3533(The)X
+3679(busy)X
+3851(cursor)X
+4073(is)X
+4147(set)X
+4258(to)X
+1440 1190(the)N
+1558(``target'')X
+1869(by)X
+1969(the)X
+2087(application)X
+2463(defaults.)X
+3 f
+864 1324(cursor)N
+1107(\()X
+1 f
+1134(class)X
+3 f
+1310(Cursor\))X
+1 f
+1440 1420(The)N
+1585(cursor)X
+1806(shown)X
+2035(when)X
+2 f
+2229(ghostscript)X
+1 f
+2604(is)X
+2677(idle.)X
+2857(The)X
+3002(default)X
+3245(cursor)X
+3466(is)X
+3539(the)X
+3657(``crosshair''.)X
+3 f
+864 1554(interpreter)N
+1264(\()X
+1 f
+1291(class)X
+3 f
+1467(Interpreter\))X
+1 f
+1440 1650(The)N
+1592(name)X
+1793(of)X
+1887(the)X
+2012(executable)X
+2383(to)X
+2472(call)X
+2615(to)X
+2704(render)X
+2938(the)X
+3064(PostScript.)X
+3460(It)X
+3537(is)X
+3618(convenient)X
+3998(to)X
+4088(set)X
+4205(this)X
+1440 1746(resource)N
+1734(to)X
+1817(the)X
+1936(path)X
+2095(of)X
+2183(an)X
+2280(alternate)X
+2578(version)X
+2835(of)X
+2923(ghostscript)X
+3295(for)X
+3410(testing.)X
+3684(The)X
+3830(default)X
+4073(value)X
+4267(is)X
+1440 1842(``gs''.)N
+3 f
+864 1976(palette)N
+1116(\()X
+1 f
+1143(class)X
+3 f
+1319(Palette\))X
+1 f
+1440 2072(Tells)N
+2 f
+1620(ghostscript)X
+1 f
+1995(how)X
+2153(to)X
+2236(restrict)X
+2480(the)X
+2599(palette)X
+2834(used)X
+3002(when)X
+3197(rendering.)X
+3566(The)X
+3712(possible)X
+3995(values)X
+4221(are)X
+1440 2168(``color'',)N
+1753 0.2692(``grayscale'',)AX
+2205(and)X
+2341(``monochrome''.)X
+2932(The)X
+3077(default)X
+3320(value)X
+3514(is)X
+3587(``color''.)X
+3 f
+864 2302(quiet)N
+1057(\()X
+1 f
+1084(class)X
+3 f
+1260(Quiet\))X
+1 f
+1440 2398(Tells)N
+2 f
+1645(ghostscript)X
+1 f
+2045(whether)X
+2349(to)X
+2456(supress)X
+2737(informational)X
+3218(messages.)X
+3607(The)X
+3778(default)X
+4047(value)X
+4267(is)X
+1440 2494(``true''.)N
+3 f
+864 2628(safer)N
+1054(\()X
+1 f
+1081(class)X
+3 f
+1257(Safer\))X
+1 f
+1440 2724(Tells)N
+2 f
+1620(ghostscript)X
+1 f
+1995(whether)X
+2274(to)X
+2356(run)X
+2483(in)X
+2565 0.3906(``safer'')AX
+2850(mode.)X
+3088(The)X
+3233(default)X
+3476(value)X
+3670(is)X
+3743(``true''.)X
+3 f
+864 2858(useBackingPixmap)N
+1536(\()X
+1 f
+1563(class)X
+3 f
+1739(UseBackingPixmap\))X
+1 f
+1440 2954(Tells)N
+1642(whether)X
+1943(to)X
+2047(use)X
+2196(a)X
+2274(backing)X
+2570(pixmap.)X
+2892(If)X
+2988(this)X
+3145(resource)X
+3460(is)X
+3556(false,)X
+3771(backing)X
+4068(store)X
+4267(is)X
+1440 3050(requested)N
+1777(on)X
+1886(the)X
+2013(Ghostview)X
+2389(window.)X
+2716(Some)X
+2927(X)X
+3014(servers)X
+3271(have)X
+3451(limited)X
+3705(resources)X
+4037(for)X
+4159(large)X
+1440 3146(pixmaps.)N
+1777(Also,)X
+1974(some)X
+2169(X)X
+2253(servers')X
+2534(backing)X
+2814(store)X
+2996(is)X
+3075(much)X
+3279(faster)X
+3484(than)X
+3648(using)X
+3847(a)X
+3910(backing)X
+4191(pix-)X
+1440 3242(map.)N
+1649(You)X
+1818(should)X
+2062(reset)X
+2245(this)X
+2391(resource)X
+2695(if)X
+2775(your)X
+2953(X)X
+3042(server)X
+3270(is)X
+3354(one)X
+3501(of)X
+3599(the)X
+3728(server)X
+3956(types)X
+4155(men-)X
+1440 3338(tioned.)N
+1700(The)X
+1845(default)X
+2088(value)X
+2282(is)X
+2355(``true''.)X
+3 f
+864 3472(xdpi)N
+1034(\()X
+1 f
+1061(class)X
+3 f
+1237(Resolution\))X
+1 f
+1440 3568(Sets)N
+1595(the)X
+1715(X)X
+1795(resolution)X
+2137(of)X
+2226(the)X
+2346(window)X
+2626(in)X
+2710(dots)X
+2865(per)X
+2990(inch.)X
+3191(You)X
+3352(can)X
+3487(use)X
+3617(this)X
+3755(resource)X
+4051(to)X
+4136(affect)X
+1440 3664(the)N
+1567(main)X
+1756(window.)X
+2083(Zoom)X
+2303(windows)X
+2621(have)X
+2801(their)X
+2976(X)X
+3062(dpi)X
+3192(set)X
+3309(explicitly)X
+3639(in)X
+3729(the)X
+3855(program.)X
+4195(The)X
+1440 3760(default)N
+1683(value)X
+1877(is)X
+1950(calculated)X
+2296(from)X
+2472(the)X
+2590(screen)X
+2816(metrics.)X
+3 f
+864 3894(ydpi)N
+1034(\()X
+1 f
+1061(class)X
+3 f
+1237(Resolution\))X
+1 f
+1440 3990(Sets)N
+1595(the)X
+1715(Y)X
+1795(resolution)X
+2137(of)X
+2226(the)X
+2346(window)X
+2626(in)X
+2710(dots)X
+2865(per)X
+2990(inch.)X
+3191(You)X
+3352(can)X
+3487(use)X
+3617(this)X
+3755(resource)X
+4051(to)X
+4136(affect)X
+1440 4086(the)N
+1567(main)X
+1756(window.)X
+2083(Zoom)X
+2303(windows)X
+2621(have)X
+2801(their)X
+2976(Y)X
+3062(dpi)X
+3192(set)X
+3309(explicitly)X
+3639(in)X
+3729(the)X
+3855(program.)X
+4195(The)X
+1440 4182(default)N
+1683(value)X
+1877(is)X
+1950(calculated)X
+2296(from)X
+2472(the)X
+2590(screen)X
+2816(metrics.)X
+3 f
+9 s
+576 4316(GHOSTVIEW)N
+1062(WIDGET)X
+1396(ACTIONS)X
+10 s
+864 4412(notify\(width)N
+1306(height)X
+1539(xdpi)X
+1709(ydpi\))X
+1 f
+1440 4508(The)N
+1594(notify)X
+1814(event)X
+2018(is)X
+2101(used)X
+2278(by)X
+2388(the)X
+2516(ghostview)X
+2875(application)X
+3261(for)X
+3385(the)X
+3513(locator)X
+3766(and)X
+3912(popup)X
+4142(zoom)X
+1440 4604(windows.)N
+1797(If)X
+1879(the)X
+2004(width)X
+2213(and)X
+2356(height)X
+2583(are)X
+2709(0,)X
+2796(the)X
+2921(event)X
+3122(is)X
+3202(user)X
+3363(for)X
+3484(the)X
+3609(locator.)X
+3899(Otherwise,)X
+4276(it)X
+1440 4700(triggers)N
+1711(a)X
+1773(popup)X
+1999(zoom)X
+2203(window.)X
+2527(The)X
+2678(default)X
+2927(width)X
+3135(and)X
+3277(height)X
+3503(are)X
+3629(72.)X
+3776(The)X
+3928(default)X
+4178(xdpi)X
+1440 4796(and)N
+1580(ydpi)X
+1746(are)X
+1869(300.)X
+2053(The)X
+2202(height)X
+2426(will)X
+2574(default)X
+2820(to)X
+2905(the)X
+3026(width)X
+3231(if)X
+3303(the)X
+3424(height)X
+3647(is)X
+3723(omitted.)X
+4030(The)X
+4178(xdpi)X
+1440 4892(will)N
+1584(default)X
+1827(to)X
+1909(the)X
+2027(xdpi)X
+2189(if)X
+2258(the)X
+2376(ydpi)X
+2538(is)X
+2611(omitted.)X
+3 f
+9 s
+576 5026(OPTIONS)N
+10 s
+9 f
+864 5122(-)N
+866(-)X
+3 f
+910(monochrome)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``)X
+9 f
+2176(*)X
+1 f
+(Ghostview.palette:)S
+2839(Monochrome''.)X
+3 f
+9 f
+864 5256(-)N
+866(-)X
+3 f
+910(grayscale)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``)X
+9 f
+2176(*)X
+1 f
+(Ghostview.palette:)S
+2839(GrayScale''.)X
+3 f
+9 f
+864 5390(-)N
+866(-)X
+3 f
+910(color)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``)X
+9 f
+2176(*)X
+1 f
+(Ghostview.palette:)S
+2839(Color''.)X
+3 f
+9 f
+864 5524(-)N
+866(-)X
+3 f
+910(title)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.showTitle:)X
+2905(True''.)X
+3 f
+9 f
+864 5658(-)N
+866(-)X
+3 f
+910(notitle)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.showTitle:)X
+2905(False''.)X
+576 6144(7th)N
+698(Edition)X
+4280(9)X
+
+10 p
+%%Page: 10 10
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+3 f
+9 f
+864 768(-)N
+866(-)X
+3 f
+910(date)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.showDate:)X
+2906(True''.)X
+3 f
+9 f
+864 902(-)N
+866(-)X
+3 f
+910(nodate)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.showDate:)X
+2906(False''.)X
+3 f
+9 f
+864 1036(-)N
+866(-)X
+3 f
+910(locator)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.showLocator:)X
+3004(True''.)X
+3 f
+9 f
+864 1170(-)N
+866(-)X
+3 f
+910(nolocator)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.showLocator:)X
+3004(False''.)X
+3 f
+9 f
+864 1304(-)N
+866(-)X
+3 f
+910(labels)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.Labels:)X
+2799(True''.)X
+3 f
+9 f
+864 1438(-)N
+866(-)X
+3 f
+910(nolabels)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.Labels:)X
+2799(False''.)X
+3 f
+9 f
+864 1572(-)N
+866(-)X
+3 f
+910(resolution)X
+2 f
+1272(dpi)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``)X
+9 f
+2176(*)X
+1 f
+(Ghostview.Resolution:)S
+2 f
+2971(dpi)X
+1 f
+3073(''.)X
+3 f
+9 f
+864 1706(-)N
+866(-)X
+3 f
+910(dpi)X
+2 f
+1040(dpi)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``)X
+9 f
+2176(*)X
+1 f
+(Ghostview.Resolution:)S
+2 f
+2971(dpi)X
+1 f
+3073(''.)X
+3 f
+9 f
+864 1840(-)N
+866(-)X
+3 f
+910(xdpi)X
+2 f
+1080(dpi)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``)X
+9 f
+2176(*)X
+1 f
+(Ghostview.xdpi:)S
+2 f
+2767(dpi)X
+1 f
+2869(''.)X
+3 f
+9 f
+864 1974(-)N
+866(-)X
+3 f
+910(ydpi)X
+2 f
+1080(dpi)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``)X
+9 f
+2176(*)X
+1 f
+(Ghostview.ydpi:)S
+2 f
+2767(dpi)X
+1 f
+2869(''.)X
+3 f
+9 f
+864 2108(-)N
+866(-)X
+3 f
+910(magstep)X
+2 f
+1215(magstep)X
+1 f
+1440 2204(Equivalent)N
+1807(to)X
+1889(setting)X
+2122(``Ghostview.magstep:)X
+2 f
+2852(magstep)X
+1 f
+3119(''.)X
+3 f
+9 f
+864 2338(-)N
+866(-)X
+3 f
+910(safer)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``)X
+9 f
+2176(*)X
+1 f
+(Ghostview.safer:)S
+2782(True''.)X
+3 f
+9 f
+864 2472(-)N
+866(-)X
+3 f
+910(nosafer)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``)X
+9 f
+2176(*)X
+1 f
+(Ghostview.safer:)S
+2782(False''.)X
+3 f
+9 f
+864 2606(-)N
+866(-)X
+3 f
+910(quiet)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``)X
+9 f
+2176(*)X
+1 f
+(Ghostview.quiet:)S
+2785(True''.)X
+3 f
+9 f
+864 2740(-)N
+866(-)X
+3 f
+910(noquiet)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``)X
+9 f
+2176(*)X
+1 f
+(Ghostview.quiet:)S
+2785(False''.)X
+3 f
+9 f
+864 2874(-)N
+866(-)X
+3 f
+910(arguments)X
+2 f
+1295(arguments)X
+1 f
+1440 2970(Equivalent)N
+1807(to)X
+1889(setting)X
+2122(``)X
+9 f
+2176(*)X
+1 f
+(Ghostview.arguments:)S
+2 f
+2959(arguments)X
+1 f
+3297(''.)X
+3 f
+9 f
+864 3104(-)N
+866(-)X
+3 f
+910(center)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.autoCenter:)X
+2937(True''.)X
+3 f
+9 f
+864 3238(-)N
+866(-)X
+3 f
+910(nocenter)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.autoCenter:)X
+2937(False''.)X
+3 f
+9 f
+864 3372(-)N
+866(-)X
+3 f
+910(portrait)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.orientation:)X
+2932(Portrait''.)X
+3 f
+9 f
+864 3506(-)N
+866(-)X
+3 f
+910(landscape)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.orientation:)X
+2932(Landscape''.)X
+3 f
+9 f
+864 3640(-)N
+866(-)X
+3 f
+910(upsidedown)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.orientation:)X
+2932(Upside)X
+9 f
+3159(-)X
+1 f
+3203(down''.)X
+3 f
+9 f
+864 3774(-)N
+866(-)X
+3 f
+910(seascape)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.orientation:)X
+2932(Seascape''.)X
+3 f
+9 f
+864 3908(-)N
+866(-)X
+3 f
+910(swap)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122 0.1400(``Ghostview.swapLandscape:)AX
+3094(True''.)X
+3 f
+9 f
+864 4042(-)N
+866(-)X
+3 f
+910(noswap)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122 0.1400(``Ghostview.swapLandscape:)AX
+3094(False''.)X
+3 f
+9 f
+864 4176(-)N
+866(-)X
+3 f
+910(letter)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(Letter''.)X
+3 f
+9 f
+864 4310(-)N
+866(-)X
+3 f
+910(tabloid)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(Tabloid''.)X
+3 f
+9 f
+864 4444(-)N
+866(-)X
+3 f
+910(ledger)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(Ledger''.)X
+3 f
+9 f
+864 4578(-)N
+866(-)X
+3 f
+910(legal)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(Legal''.)X
+3 f
+9 f
+864 4712(-)N
+866(-)X
+3 f
+910(statement)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(Statement''.)X
+3 f
+9 f
+864 4846(-)N
+866(-)X
+3 f
+910(executive)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(Executive''.)X
+3 f
+9 f
+864 4980(-)N
+866(-)X
+3 f
+910(a3)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(A3''.)X
+3 f
+9 f
+864 5114(-)N
+866(-)X
+3 f
+910(a4)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(A4''.)X
+3 f
+9 f
+864 5248(-)N
+866(-)X
+3 f
+910(a5)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(A5''.)X
+3 f
+9 f
+864 5382(-)N
+866(-)X
+3 f
+910(b4)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(B4''.)X
+3 f
+9 f
+864 5516(-)N
+866(-)X
+3 f
+910(b5)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(B5''.)X
+3 f
+9 f
+864 5650(-)N
+866(-)X
+3 f
+910(folio)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(Folio''.)X
+576 6144(7th)N
+698(Edition)X
+4240(10)X
+
+11 p
+%%Page: 11 11
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+3 f
+9 f
+864 768(-)N
+866(-)X
+3 f
+910(quarto)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(Quarto''.)X
+3 f
+9 f
+864 902(-)N
+866(-)X
+3 f
+910(10x14)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.pageMedia:)X
+2942(10x14''.)X
+3 f
+9 f
+864 1036(-)N
+866(-)X
+3 f
+910(force)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.Force:)X
+2768(True''.)X
+3 f
+9 f
+864 1170(-)N
+866(-)X
+3 f
+910(forceorientation)X
+1 f
+1440 1266(Equivalent)N
+1807(to)X
+1889(setting)X
+2122 0.1161(``Ghostview.forceOrientation:)AX
+3116(True''.)X
+3 f
+9 f
+864 1400(-)N
+866(-)X
+3 f
+910(forcemedia)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122 0.1442(``Ghostview.forcePageMedia:)AX
+3112(True''.)X
+3 f
+9 f
+864 1534(-)N
+866(-)X
+3 f
+910(openwindows)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.openWindows:)X
+3048(True''.)X
+3 f
+9 f
+864 1668(-)N
+866(-)X
+3 f
+910(noopenwindows)X
+1 f
+1440 1764(Equivalent)N
+1807(to)X
+1889(setting)X
+2122(``Ghostview.openWindows:)X
+3048(False''.)X
+3 f
+9 f
+864 1898(-)N
+866(-)X
+3 f
+910(ncdwm)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.ncdwm:)X
+2821(True''.)X
+3 f
+9 f
+864 2032(-)N
+866(-)X
+3 f
+910(noncdwm)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.ncdwm:)X
+2821(False''.)X
+3 f
+9 f
+864 2166(-)N
+866(-)X
+3 f
+910(page)X
+2 f
+1090(label)X
+1 f
+1440(Equivalent)X
+1807(to)X
+1889(setting)X
+2122(``Ghostview.page:)X
+2 f
+2737(label)X
+1 f
+(''.)S
+3 f
+9 s
+576 2300(WIDGET)N
+910(HIERARCHY)X
+2 f
+10 s
+864 2396(The)N
+1004(hierarchy)X
+1336(of)X
+1418(the)X
+1536(ghostview)X
+1876(application:)X
+1 f
+864 2588(Ghostview)N
+1251(ghostview)X
+1152 2684(Form)N
+1365(form)X
+1440 2780(MenuButton)N
+1884(titleButton)X
+1728 2876(SimpleMenu)N
+2181(menu)X
+2016 2972(SmeBSB)N
+2348(title)X
+1440 3068(MenuButton)N
+1884(dateButton)X
+1728 3164(SimpleMenu)N
+2181(menu)X
+2016 3260(SmeBSB)N
+2348(date)X
+1440 3356(Label)N
+1663(locator)X
+1440 3452(Box)N
+1613(box)X
+1728 3548(MenuButton)N
+2172(\256leButton)X
+2016 3644(SimpleMenu)N
+2469(menu)X
+2304 3740(SmeBSB)N
+2636(open)X
+2304 3836(SmeBSB)N
+2636(reopen)X
+2304 3932(SmeBSB)N
+2636(printwhole)X
+2304 4028(SmeBSB)N
+2636(printmarked)X
+2304 4124(SmeBSB)N
+2636(save)X
+2304 4220(SmeLine)N
+2633(line)X
+2304 4316(SmeBSB)N
+2636(copyright)X
+2304 4412(SmeBSB)N
+2636(quit)X
+1728 4508(MenuButton)N
+2172(pageButton)X
+2016 4604(SimpleMenu)N
+2469(menu)X
+2304 4700(SmeBSB)N
+2636(next)X
+2304 4796(SmeBSB)N
+2636(show)X
+2304 4892(SmeBSB)N
+2636(prev)X
+2304 4988(SmeLine)N
+2633(line)X
+2304 5084(SmeBSB)N
+2636(center)X
+2304 5180(SmeLine)N
+2633(line)X
+2304 5276(SmeBSB)N
+2636(mark)X
+2304 5372(SmeBSB)N
+2636(unmark)X
+1728 5468(MenuButton)N
+2172(magstepButton)X
+2016 5564(SimpleMenu)N
+2469(menu)X
+2304 5660(SmeBSB)N
+2636(-5)X
+2304 5756(SmeBSB)N
+2636(-4)X
+2304 5852(SmeBSB)N
+2636(-3)X
+576 6236(7th)N
+698(Edition)X
+4240(11)X
+
+12 p
+%%Page: 12 12
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+2304 768(SmeBSB)N
+2636(-2)X
+2304 864(SmeBSB)N
+2636(-1)X
+2304 960(SmeBSB)N
+2636(0)X
+2304 1056(SmeBSB)N
+2636(1)X
+2304 1152(SmeBSB)N
+2636(2)X
+2304 1248(SmeBSB)N
+2636(3)X
+2304 1344(SmeBSB)N
+2636(4)X
+2304 1440(SmeBSB)N
+2636(5)X
+1728 1536(MenuButton)N
+2172(orientationButton)X
+2016 1632(SimpleMenu)N
+2469(menu)X
+2304 1728(SmeBSB)N
+2636(portrait)X
+2304 1824(SmeBSB)N
+2636(landscape)X
+2304 1920(SmeBSB)N
+2636(upsidedown)X
+2304 2016(SmeBSB)N
+2636(seascape)X
+2304 2112(SmeLine)N
+2633(line)X
+2304 2208(SmeBSB)N
+2636(swap)X
+1728 2304(MenuButton)N
+2172(pagemediaButton)X
+2016 2400(SimpleMenu)N
+2469(menu)X
+2304 2496(SmeBSB)N
+2636(Letter)X
+2304 2592(SmeBSB)N
+2636(Tabloid)X
+2304 2688(SmeBSB)N
+2636(Ledger)X
+2304 2784(SmeBSB)N
+2636(Legal)X
+2304 2880(SmeBSB)N
+2636(Statement)X
+2304 2976(SmeBSB)N
+2636(Executive)X
+2304 3072(SmeBSB)N
+2636(A3)X
+2304 3168(SmeBSB)N
+2636(A4)X
+2304 3264(SmeBSB)N
+2636(A5)X
+2304 3360(SmeBSB)N
+2636(B4)X
+2304 3456(SmeBSB)N
+2636(B5)X
+2304 3552(SmeBSB)N
+2636(Folio)X
+2304 3648(SmeBSB)N
+2636(Quarto)X
+2304 3744(SmeBSB)N
+2636(10x14)X
+1440 3840(Text)N
+1627(toc)X
+1440 3936(Viewport)N
+1783(pageview)X
+1728 4032(Core)N
+1924(clip)X
+1728 4128(Ghostview)N
+2115(page)X
+1728 4224(Scrollbar)N
+2062(horizontal)X
+1728 4320(Scrollbar)N
+2062(vertical)X
+1152 4416(TopLevelShell)N
+1668(information)X
+1440 4512(Form)N
+1653(form)X
+1728 4608(Text)N
+1915(text)X
+1728 4704(Command)N
+2101(dismiss)X
+1152 4800(TopLevelShell)N
+1668(copyright)X
+1440 4896(Form)N
+1653(form)X
+1728 4992(Text)N
+1915(text)X
+1728 5088(Command)N
+2101(dismiss)X
+1152 5184(TransientShell)N
+1659(popup)X
+1440 5280(Form)N
+1653(dialog)X
+1728 5376(Label)N
+1951(prompt)X
+1728 5472(Text)N
+1915(response)X
+1728 5568(Command)N
+2101(okay)X
+1728 5664(Command)N
+2101(cancel)X
+1152 5760(TopLevelShell)N
+1668(zoom)X
+576 6144(7th)N
+698(Edition)X
+4240(12)X
+
+13 p
+%%Page: 13 13
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+1440 768(Form)N
+1653(form)X
+1728 864(Ghostview)N
+2115(page)X
+1728 960(Command)N
+2101(dismiss)X
+2 f
+864 1152(The)N
+1004(hierarchy)X
+1336(of)X
+1418(the)X
+1536(Select)X
+1748(File)X
+1897(dialog)X
+2121(box:)X
+1 f
+864 1344(TransientShell)N
+1371(selFile)X
+1152 1440(Form)N
+1365(selFileForm)X
+1440 1536(Label)N
+1663(selFilePrompt)X
+1440 1632(Text)N
+1627(selFileField)X
+1440 1728(Scrollbar)N
+1774(selFileHScroll)X
+1440 1824(Composite)N
+1826(selFileList1)X
+1728 1920(Scrollbar)N
+2062(selFileVScroll)X
+1728 2016(Scrollbar)N
+2062(selFileHScroll)X
+1440 2112(Composite)N
+1826(selFileList2)X
+1728 2208(Scrollbar)N
+2062(selFileVScroll)X
+1728 2304(Scrollbar)N
+2062(selFileHScroll)X
+1440 2400(Composite)N
+1826(selFileList3)X
+1728 2496(Scrollbar)N
+2062(selFileVScroll)X
+1728 2592(Scrollbar)N
+2062(selFileHScroll)X
+1440 2688(Command)N
+1813(selFileOK)X
+1440 2784(Command)N
+1813(selFileCancel)X
+3 f
+9 s
+576 2918(ENVIRONMENT)N
+10 s
+864 3014(LPDEST)N
+1 f
+1440(The)X
+1585(LPDEST)X
+1898(environment)X
+2323(variable)X
+2602(gives)X
+2791(the)X
+2909(default)X
+3152(printer)X
+3386(destination)X
+3757(on)X
+3857(System)X
+4112(V.)X
+3 f
+864 3148(PRINTER)N
+1 f
+1440(The)X
+1585(PRINTER)X
+1938(environment)X
+2363(variable)X
+2642(gives)X
+2831(the)X
+2949(default)X
+3192(printer)X
+3426(destination)X
+3797(on)X
+3897(BSD.)X
+3 f
+9 s
+576 3282(LIMITATIONS)N
+1 f
+10 s
+864 3378(If)N
+947(the)X
+1074(document)X
+1419(does)X
+1595(not)X
+1726(begin)X
+1933(with)X
+2104(``%!PS)X
+9 f
+2340(-)X
+1 f
+2384(Adobe)X
+9 f
+2598(-)X
+1 f
+2642('',)X
+2745(it)X
+2818(does)X
+2994(not)X
+3126(claim)X
+3334(conformance)X
+3784(to)X
+3876(the)X
+4004(document)X
+864 3474(structuring)N
+1232(convention.)X
+1649(When)X
+1861(these)X
+2046(documents)X
+2413(are)X
+2532(encountered,)X
+2965(the)X
+3083(functionality)X
+3512(of)X
+2 f
+3599(ghostview)X
+1 f
+3939(is)X
+4012(limited)X
+4258(to)X
+864 3570(giving)N
+1094(you)X
+1240(scroll)X
+1444(bars)X
+1604(and)X
+1746(a)X
+1808(next)X
+1972(page)X
+2151(capability.)X
+2534(Because)X
+2829(there)X
+3017(is)X
+3097(no)X
+3204(table)X
+3387(of)X
+3481(contents,)X
+3795(skipping)X
+4097(around)X
+864 3666(the)N
+982(document)X
+1318(and)X
+1454(marking)X
+1741(pages)X
+1944(is)X
+2017(impossible.)X
+864 3800(If)N
+938(there)X
+1119(is)X
+1192(no)X
+1292(table)X
+1468(of)X
+1555(contents)X
+1842(for)X
+1956(the)X
+2074(document,)X
+2430(the)X
+2548(popup)X
+2768(zoom)X
+2966(window)X
+3244(will)X
+3388(always)X
+3631(show)X
+3820(the)X
+3938(\256rst)X
+4082(page.)X
+3 f
+9 s
+576 3934(BUGS)N
+1 f
+10 s
+864 4030(If)N
+938(you)X
+1078(\256nd)X
+1222(a)X
+1278(bug,)X
+1438(please)X
+1659(send)X
+1826(a)X
+1882(bug)X
+2022(report)X
+2234(to)X
+2316(ghostview@cs.wisc.edu.)X
+3 f
+9 s
+576 4164(AUTHOR)N
+1 f
+10 s
+864 4260(Copyright)N
+1208(\(C\))X
+1335(1992)X
+1535(Timothy)X
+1830(O.)X
+1928(Theisen)X
+864 4394(This)N
+1027(program)X
+1320(is)X
+1394(free)X
+1541(software;)X
+1861(you)X
+2002(can)X
+2136(redistribute)X
+2523(it)X
+2589(and/or)X
+2816(modify)X
+3069(it)X
+3135(under)X
+3340(the)X
+3460(terms)X
+3660(of)X
+3749(the)X
+3869(GNU)X
+4065(General)X
+864 4490(Public)N
+1094(License)X
+1370(as)X
+1463(published)X
+1800(by)X
+1906(the)X
+2030(Free)X
+2199(Software)X
+2515(Foundation;)X
+2927(either)X
+3135(version)X
+3396(2)X
+3461(of)X
+3553(the)X
+3676(License,)X
+3971(or)X
+4063(\(at)X
+4173(your)X
+864 4586(option\))N
+1115(any)X
+1251(later)X
+1414(version.)X
+864 4720(This)N
+1029(program)X
+1324(is)X
+1400(distributed)X
+1765(in)X
+1850(the)X
+1971(hope)X
+2150(that)X
+2293(it)X
+2360(will)X
+2507(be)X
+2606(useful,)X
+2845(but)X
+2970(WITHOUT)X
+3369(ANY)X
+3567(WARRANTY;)X
+4076(without)X
+864 4816(even)N
+1050(the)X
+1182(implied)X
+1460(warranty)X
+1780(of)X
+1881(MERCHANTABILITY)X
+2685(or)X
+2786(FITNESS)X
+3135(FOR)X
+3324(A)X
+3415(PARTICULAR)X
+3950(PURPOSE.)X
+864 4912(See)N
+1000(the)X
+1118(GNU)X
+1312(General)X
+1587(Public)X
+1811(License)X
+2081(for)X
+2195(more)X
+2380(details.)X
+864 5046(You)N
+1022(should)X
+1255(have)X
+1427(received)X
+1721(a)X
+1778(copy)X
+1955(of)X
+2043(the)X
+2162(GNU)X
+2357(General)X
+2633(Public)X
+2858(License)X
+3129(along)X
+3328(with)X
+3491(this)X
+3627(program;)X
+3942(if)X
+4012(not,)X
+4155(write)X
+864 5142(to)N
+946(the)X
+1064(Free)X
+1227(Software)X
+1537(Foundation,)X
+1941(Inc.,)X
+2104(675)X
+2244(Mass)X
+2433(Ave,)X
+2607(Cambridge,)X
+3003(MA)X
+3152(02139,)X
+3392(USA.)X
+864 5334(Author:)N
+1440(Tim)X
+1593(Theisen)X
+2592(Systems)X
+2878(Programmer)X
+864 5430(Internet:)N
+1440(tim@cs.wisc.edu)X
+2592(Department)X
+2991(of)X
+3078(Computer)X
+3418(Sciences)X
+864 5526(UUCP:)N
+1440(uwvax!tim)X
+2592(University)X
+2950(of)X
+3037(Wisconsin)X
+9 f
+3375(-)X
+1 f
+3419(Madison)X
+864 5622(Phone:)N
+1440(\(608\)262)X
+9 f
+1734(-)X
+1 f
+1778(0438)X
+2592(1210)X
+2772(West)X
+2957(Dayton)X
+3213(Street)X
+864 5718(FAX:)N
+1440(\(608\)262)X
+9 f
+1734(-)X
+1 f
+1778(9777)X
+2592(Madison,)X
+2912(WI)X
+3075(53706)X
+576 6144(7th)N
+698(Edition)X
+4240(13)X
+
+14 p
+%%Page: 14 14
+11.00 ps
+10 s 10 xH 0 xS 1 f
+576 384(GHOSTVIEW)N
+1066(\()X
+1106(1)X
+1159(\))X
+1975(UNIX)X
+2196(Programmer's)X
+2675(Manual)X
+3710(GHOSTVIEW)X
+4200(\()X
+4240(1)X
+4293(\))X
+3 f
+9 s
+576 768(ACKNOWLEDGEMENTS)N
+1 f
+10 s
+864 864(The)N
+1009(Select)X
+1225(File)X
+1369(widget)X
+1607(contains)X
+1894(the)X
+2012(following)X
+2343(copyright)X
+2670(notice:)X
+864 998(Copyright)N
+1208(1989)X
+1388(Software)X
+1698(Research)X
+2013(Associates,)X
+2396(Inc.,)X
+2559(Tokyo,)X
+2808(Japan)X
+864 1132(Permission)N
+1247(to)X
+1337(use,)X
+1492(copy,)X
+1696(modify,)X
+1975(and)X
+2119(distribute)X
+2449(this)X
+2593(software)X
+2899(and)X
+3044(its)X
+3148(documentation)X
+3653(for)X
+3776(any)X
+3921(purpose)X
+4204(and)X
+864 1228(without)N
+1134(fee)X
+1259(is)X
+1338(hereby)X
+1583(granted,)X
+1870(provided)X
+2181(that)X
+2327(the)X
+2451(above)X
+2669(copyright)X
+3002(notice)X
+3224(appear)X
+3465(in)X
+3553(all)X
+3659(copies)X
+3890(and)X
+4032(that)X
+4178(both)X
+864 1324(that)N
+1008(copyright)X
+1339(notice)X
+1559(and)X
+1699(this)X
+1838(permission)X
+2213(notice)X
+2433(appear)X
+2672(in)X
+2758(supporting)X
+3124(documentation,)X
+3645(and)X
+3786(that)X
+3931(the)X
+4054(name)X
+4253(of)X
+864 1420(Software)N
+1191(Research)X
+1523(Associates)X
+1903(not)X
+2042(be)X
+2155(used)X
+2339(in)X
+2438(advertising)X
+2831(or)X
+2935(publicity)X
+3256(pertaining)X
+3617(to)X
+3715(distribution)X
+4119(of)X
+4222(the)X
+864 1516(software)N
+1170(without)X
+1443(speci\256c,)X
+1737(written)X
+1993(prior)X
+2178(permission.)X
+2599(Software)X
+2919(Research)X
+3244(Associates)X
+3617(makes)X
+3852(no)X
+3962(representa-)X
+864 1612(tions)N
+1040(about)X
+1239(the)X
+1358(suitability)X
+1698(of)X
+1786(this)X
+1922(software)X
+2220(for)X
+2335(any)X
+2472(purpose.)X
+2787(It)X
+2857(is)X
+2931(provided)X
+3237("as)X
+3358(is")X
+3464(without)X
+3728(express)X
+3989(or)X
+4076(implied)X
+864 1708(warranty.)N
+864 1842(SOFTWARE)N
+1315(RESEARCH)X
+1753(ASSOCIATES)X
+2258(DISCLAIMS)X
+2710(ALL)X
+2887(WARRANTIES)X
+3433(WITH)X
+3664(REGARD)X
+4014(TO)X
+4142(THIS)X
+864 1938(SOFTWARE,)N
+1337(INCLUDING)X
+1805(ALL)X
+1983(IMPLIED)X
+2330(WARRANTIES)X
+2876(OF)X
+2999(MERCHANTABILITY)X
+3790(AND)X
+3985(FITNESS,)X
+864 2034(IN)N
+980(NO)X
+1127(EVENT)X
+1421(SHALL)X
+1710(SOFTWARE)X
+2172(RESEARCH)X
+2620(ASSOCIATES)X
+3135(BE)X
+3268(LIABLE)X
+3584(FOR)X
+3770(ANY)X
+3976(SPECIAL,)X
+864 2130(INDIRECT)N
+1267(OR)X
+1407(CONSEQUENTIAL)X
+2104(DAMAGES)X
+2529(OR)X
+2669(ANY)X
+2871(DAMAGES)X
+3295(WHATSOEVER)X
+3875(RESULTING)X
+864 2226(FROM)N
+1118(LOSS)X
+1341(OF)X
+1471(USE,)X
+1670(DATA)X
+1921(OR)X
+2061(PROFITS,)X
+2429(WHETHER)X
+2850(IN)X
+2964(AN)X
+3109(ACTION)X
+3441(OF)X
+3572(CONTRACT,)X
+4052(NEGLI-)X
+864 2322(GENCE)N
+1152(OR)X
+1284(OTHER)X
+1572(TORTIOUS)X
+1989(ACTION,)X
+2333(ARISING)X
+2679(OUT)X
+2864(OF)X
+2986(OR)X
+3117(IN)X
+3222(CONNECTION)X
+3763(WITH)X
+3993(THE)X
+4169(USE)X
+864 2418(OR)N
+995(PERFORMANCE)X
+1605(OF)X
+1727(THIS)X
+1925(SOFTWARE.)X
+864 2610(Author:)N
+1440(Erik)X
+1598(M.)X
+1709(van)X
+1845(der)X
+1968(Poel)X
+1440 2706(Software)N
+1750(Research)X
+2065(Associates,)X
+2448(Inc.,)X
+2611(Tokyo,)X
+2860(Japan)X
+1440 2802(erik@sra.co.jp)N
+576 6144(7th)N
+698(Edition)X
+4240(14)X
+
+14 p
+%%Trailer
+xt
+%%Pages: 14
+%%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold
+%%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol
+
+xs
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/gs.interface b/support/hypertex/tanmoy/ghostview-1.5-hacked/gs.interface
new file mode 100644
index 0000000000..2fe3281cf0
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/gs.interface
@@ -0,0 +1,100 @@
+
+Ghostview interface to ghostscript
+
+When the GHOSTVIEW environment variable is set, ghostscript draws on
+an existing drawable rather than creating its own window. Ghostscript
+can be directed to draw on either a window or a pixmap.
+
+Drawing on a Window
+
+The GHOSTVIEW environment variable contains the window id of the target
+window. The window id is an integer. Ghostscript will use the attributes
+of the window to obtain the width, height, colormap, screen, and visual of
+the window. The remainder of the information is gotten from the GHOSTVIEW
+property on that window.
+
+
+Drawing on a Pixmap
+
+The GHOSTVIEW environment variable contains a window id and a pixmap id.
+They are integers separated by white space. Ghostscript will use the
+attributes of the window to obtain the colormap, screen, and visual to use.
+The width and height will be obtained from the pixmap. The remainder of the
+information, is gotten from the GHOSTVIEW property on the window. In this
+case, the property is deleted when read.
+
+The GHOSTVIEW environment variable
+
+parameters: window-id [pixmap-id]
+
+scanf format: "%d %d"
+
+explanation of parameters:
+
+ window-id: tells ghostscript where to
+ - read the GHOSTVIEW property
+ - send events
+ If pixmap-id is not present,
+ ghostscript will draw on this window.
+
+ pixmap-id: If present, tells ghostscript that a pixmap will be used
+ as the final destination for drawing. The window will
+ not be touched for drawing purposes.
+
+The GHOSTVIEW property
+
+type: STRING
+
+parameters:
+
+ bpixmap orient llx lly urx ury xdpi ydpi [left bottom top right]
+
+scanf format: "%d %d %d %d %d %d %f %f %d %d %d %d"
+
+explanation of parameters:
+
+ bpixmap: pixmap id of the backing pixmap for the window. If no
+ pixmap is to be used, this parameter should be zero. This
+ parameter must be zero when drawing on a pixmap.
+
+ orient: orientation of the page. The number represents clockwise
+ rotation of the paper in degrees. Permitted values are
+ 0, 90, 180, 270.
+
+ llx, lly, urx, ury: Bounding box of the drawable. The bounding box
+ is specified in PostScript points in default user coordinates.
+
+ xdpi, ydpi: Resolution of window. (This can be derived from the
+ other parameters, but not without roundoff error. These
+ values are included to avoid this error.)
+
+ left, bottom, top, right: (optional)
+ Margins around the window. The margins extend the imageable
+ area beyond the boundaries of the window. This is primarily
+ used for popup zoom windows. I have encountered several
+ instances of PostScript program that position themselves
+ with respect to the imageable area. The margins are specified
+ in PostScript points. If omitted, the margins are assumed to
+ be 0.
+
+Events from ghostscript
+
+If the final destination is a pixmap, the client will get a property notify
+event when ghostscript reads the GHOSTVIEW property causing it to be deleted.
+
+Ghostscript sends events to the window where it read the GHOSTVIEW property.
+These events are of type ClientMessage. The message_type is set to
+either PAGE or DONE. The first long data value gives the window to be used
+to send replies to ghostscript. The second long data value gives the primary
+drawable. If rendering to a pixmap, it is the primary drawable. If rendering
+to a window, the backing pixmap is the primary drawable. If no backing pixmap
+is employed, then the window is the primary drawable. This field is necessary
+to distinguish multiple ghostscripts rendering to separate pixmaps where the
+GHOSTVIEW property was placed on the same window.
+
+The PAGE message indicates that a "page" has completed. Ghostscript will
+wait until it receives a ClientMessage whose message_type is NEXT before
+continuing.
+
+The DONE message indicates that ghostscript has finished processing.
+
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/gv.h b/support/hypertex/tanmoy/ghostview-1.5-hacked/gv.h
new file mode 100644
index 0000000000..134517ab28
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/gv.h
@@ -0,0 +1,255 @@
+/*
+ * gv.h -- Main include file for ghostview.
+ * Copyright (C) 1992 Timothy O. Theisen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Tim Theisen Systems Programmer
+ * Internet: tim@cs.wisc.edu Department of Computer Sciences
+ * UUCP: uwvax!tim University of Wisconsin-Madison
+ * Phone: (608)262-0438 1210 West Dayton Street
+ * FAX: (608)262-9777 Madison, WI 53706
+ */
+
+/* This file is part of the hacked version of the ghostview package */
+/* which is distributed under the terms of the gnu license. The */
+/* modification referred to above is by Tanmoy Bhattacharya, */
+/* <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification, */
+/* nor the original program provides any warranty. */
+
+#include <stdio.h>
+#include <X11/Xos.h>
+#include <sys/stat.h>
+#include <X11/Intrinsic.h>
+#define XtSetFloatArg(arg, n, d) \
+ if (sizeof(float) > sizeof(XtArgVal)) { \
+ XtSetArg(arg, n, &(d)); \
+ } else { \
+ XtArgVal *ld = (XtArgVal *)&(d); \
+ XtSetArg(arg, n, *ld); \
+ }
+#include "Ghostview.h"
+
+/* Application resources */
+typedef struct _AppResources {
+ Boolean show_title; /* whether to show title */
+ Boolean show_date; /* whether to show date */
+ Boolean show_locator; /* whether to show locator */
+ Boolean auto_center; /* whether to automatically center the page */
+ int wm_horiz_margin; /* Space taken by window manager */
+ int wm_vert_margin; /* Space taken by window manager */
+ int minimum_magstep; /* smallest magstep allowed */
+ int maximum_magstep; /* largest magstep allowed */
+ int magstep; /* default magstep */
+ XtPageOrientation orientation; /* default orientation */
+ String page; /* first page to show */
+ String pagemedia; /* default page media */
+ Boolean force_orientation; /* use default to override document comments */
+ Boolean force_pagemedia; /* use default to override document comments */
+ Boolean swap_landscape; /* Landscape comment maps to Seascape */
+ String print_command; /* command used to print doc, usually "lpr" */
+ String printer_variable; /* env varaible to use, usually "PRINTER" */
+ String default_printer; /* printer to use if no PRINTER is not set*/
+ String print_prompt; /* string to prompt user for printer name */
+ String print_fail; /* string to inform user that print failed */
+ String open_prompt; /* string to prompt for file name to open */
+ String open_fail; /* string to inform user that open failed */
+ String save_prompt; /* string to prompt for file name to save */
+ String save_fail; /* string to inform user that save failed */
+ /* Work arounds for others' bugs */
+ Boolean openwindows; /* whether to work around openwindow bug */
+ Boolean ncdwm; /* whether to work around ncdwm bug */
+} AppResources;
+
+extern float default_xdpi;
+extern float default_ydpi;
+
+extern int num_ghosts;
+extern FILE *psfile;
+extern String filename;
+extern String oldfilename;
+extern int current_page;
+extern int current_magstep;
+extern XtPageOrientation current_orientation;
+extern int default_pagemedia;
+extern int current_pagemedia;
+extern Boolean force_document_media;
+extern int document_media;
+extern int current_llx;
+extern int current_lly;
+extern int current_urx;
+extern int current_ury;
+extern int base_papersize;
+extern Boolean info_up;
+extern int force_setting;
+extern Pixmap dot_bitmap;
+extern Pixmap menu16_bitmap;
+extern Pixmap tie_fighter_bitmap;
+extern String toc_text;
+extern int toc_length;
+extern int toc_entry_length;
+extern int info_length;
+extern time_t mtime;
+extern struct document *doc;
+extern struct document *olddoc;
+extern Atom wm_delete_window;
+extern int catch_Xerror();
+extern XErrorHandler old_Xerror;
+extern Boolean dying;
+extern XErrorEvent bomb;
+
+enum {OPEN, PRINT_WHOLE, PRINT_MARKED, SAVE};
+extern int mode;
+
+extern XtAppContext app_con;
+extern AppResources app_res;
+
+/* Widgets */
+extern Widget toplevel;
+extern Widget form;
+extern Widget titlebutton;
+extern Widget titlemenu;
+extern Widget datebutton;
+extern Widget datemenu;
+extern Widget locator;
+extern Widget box;
+extern Widget filebutton;
+extern Widget filemenu;
+extern Widget openbutton;
+extern Widget reopenbutton;
+extern Widget printwholebutton;
+extern Widget printmarkedbutton;
+extern Widget savebutton;
+extern Widget copyrightbutton;
+extern Widget quitbutton;
+extern Widget pagebutton;
+extern Widget pagemenu;
+extern Widget nextbutton;
+extern Widget showbutton;
+extern Widget prevbutton;
+extern Widget backbutton;
+extern Widget centerbutton;
+extern Widget markbutton;
+extern Widget unmarkbutton;
+extern Widget magstepbutton;
+extern Widget magstepmenu;
+extern Widget *magstepentry;
+extern Widget orientationbutton;
+extern Widget orientationmenu;
+extern Widget portraitbutton;
+extern Widget landscapebutton;
+extern Widget upsidedownbutton;
+extern Widget seascapebutton;
+extern Widget swapbutton;
+extern Widget pagemediabutton;
+extern Widget pagemediamenu;
+extern Widget *pagemediaentry;
+extern Widget toc;
+extern Widget pageview;
+extern Widget page;
+
+/* Popup widgets */
+extern Widget infopopup;
+extern Widget infoform;
+extern Widget infotext;
+extern Widget infobutton;
+extern Widget copyrightpopup;
+extern Widget copyrightform;
+extern Widget copyrighttext;
+extern Widget copyrightbutton;
+extern Widget dialogpopup;
+extern Widget dialog;
+
+/* Dialogs */
+extern Widget CreateDialog();
+extern String GetDialogPrompt();
+extern void SetDialogPrompt();
+extern String GetDialogResponse();
+extern void SetDialogResponse();
+extern void ClearDialogResponse();
+
+/* Callbacks */
+extern void quit_ghostview();
+extern void popup();
+extern void popup_dialog();
+extern void reopen_file();
+extern void prev_page();
+extern void back_page();
+extern void this_page();
+extern void next_page();
+extern void center_page();
+extern void mark_page();
+extern void unmark_page();
+extern void set_magstep();
+extern void set_orientation();
+extern void swap_landscape();
+extern void set_pagemedia();
+extern void track_and_zoom();
+extern void message();
+extern void output();
+extern void okay();
+extern void dismiss();
+extern void destroy();
+extern void destroy_ghost();
+
+/* Actions */
+extern void gv_copyright();
+extern void gv_quit();
+extern void gv_open();
+extern void gv_reopen();
+extern void gv_save();
+extern void gv_print_whole();
+extern void gv_print_marked();
+extern void gv_prev();
+extern void gv_show();
+extern void gv_next();
+extern void gv_center();
+extern void gv_mark();
+extern void gv_unmark();
+extern void gv_set_magstep();
+extern void gv_increase_magstep();
+extern void gv_decrease_magstep();
+extern void gv_set_orientation();
+extern void gv_swap_landscape();
+extern void gv_set_pagemedia();
+extern void gv_default();
+extern void gv_force();
+extern void gv_delete_window();
+extern void gv_delete_zoom();
+extern void gv_dismiss();
+extern void gv_scroll_up();
+extern void gv_scroll_down();
+extern void gv_scroll_left();
+extern void gv_scroll_right();
+extern void gv_erase_locator();
+extern void gv_check_file();
+extern void gv_back();
+
+/* Misc */
+extern void show_page();
+extern Boolean setup_ghostview();
+extern void layout_ghostview();
+extern void magnify();
+extern String open_file();
+extern String save_file();
+extern String print_file();
+extern void pscopydoc();
+extern void positionpopup();
+extern Boolean set_new_magstep();
+extern Boolean set_new_orientation();
+extern Boolean set_new_pagemedia();
+extern void build_pagemedia_menu();
+extern Widget build_label_menu();
+extern void new_file();
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/gvpdf.pro b/support/hypertex/tanmoy/ghostview-1.5-hacked/gvpdf.pro
new file mode 100644
index 0000000000..33550fc2dd
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/gvpdf.pro
@@ -0,0 +1,78 @@
+% This file is part of the hacked version of the ghostview package
+% which is distributed under the terms of the gnu license. The
+% modification referred to above is by Tanmoy Bhattacharya,
+% <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification,
+% nor the original program provides any warranty.
+100 dict dup begin
+/setcorner {pop pop} bind def
+/oval {3 index 3 index moveto
+ 3 index 1 index lineto
+ 1 index 1 index lineto
+ 1 index 3 index lineto
+ closepath 4 {pop} repeat} bind def
+/mymatrix matrix defaultmatrix def
+/pdfmark{
+ ] dup length dict dup 3 -1 roll false exch
+ {exch{put dup false}{true}ifelse}forall pop exch pop
+ exch % type dict
+ dup /Border known % type dict bool
+ {dup /Border get
+ dup length
+ dup 3 eq % type dict Border length bool
+ {pop aload pop
+ dup 0 eq % type dict cx cy w bool
+ {pop pop pop false} % type dict false
+ {gsave mymatrix setmatrix
+ setlinewidth setcorner true} % type dict true
+ ifelse} %type dict bool
+ {4 eq % type dict Border bool
+ {aload pop
+ 1 index 0 eq % type dict cx cy w str bool
+ {pop pop pop pop false} % type dict false
+ {gsave mymatrix setmatrix
+ 0 setdash setlinewidth setcorner true}
+ % type dict true
+ ifelse} %type dict bool
+ {pop gsave mymatrix setmatrix % type dict
+ [] 0 setstroke
+ 0 setlinewidth
+ 0 0 setcorner
+ true} % type dict true
+ ifelse} % type dict bool
+ ifelse} % type dict bool
+ {gsave mymatrix setmatrix
+ [] 0 setstroke
+ 0 setlinewidth
+ 0 0 setcorner
+ true} % type dict true
+ ifelse % type dict bool
+ {dup /Color known % type dict bool
+ {dup /Color get
+ dup length
+ dup 3 eq % type dict Color length bool
+ {pop aload pop setrgbcolor} % type dict
+ {4 eq % type dict Color bool
+ {aload pop setcmykcolor} % type dict
+ {pop} % type dict
+ ifelse} % type dict
+ ifelse} % type dict
+ if % type dict
+ dup /Rect known
+ {dup /Rect get
+ dup length
+ 4 eq % type dict Rect bool
+ {aload pop newpath
+ oval stroke} % type dict
+ {pop} % type dict
+ ifelse} % type dict
+ if
+ grestore} % type dict
+ if
+ (\012\045\045[pdfinfo:\012) print
+ [ 3 1 roll
+ {} forall
+ ] ==
+ (\045\045]\012) print
+ flush
+}bind def
+end /gvpdf exch def gvpdf begin
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/main.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/main.c
new file mode 100644
index 0000000000..1d2ed92d83
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/main.c
@@ -0,0 +1,937 @@
+/*
+ * main.c -- Main routine for ghostview.
+ * Copyright (C) 1992 Timothy O. Theisen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Tim Theisen Systems Programmer
+ * Internet: tim@cs.wisc.edu Department of Computer Sciences
+ * UUCP: uwvax!tim University of Wisconsin-Madison
+ * Phone: (608)262-0438 1210 West Dayton Street
+ * FAX: (608)262-9777 Madison, WI 53706
+ */
+/* This file is part of the hacked version of the ghostview package */
+/* which is distributed under the terms of the gnu license. The */
+/* modification referred to above is by Tanmoy Bhattacharya, */
+/* <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification, */
+/* nor the original program provides any warranty. */
+
+#include <X11/Intrinsic.h>
+#include <X11/cursorfont.h>
+#include <X11/StringDefs.h>
+#include <X11/Shell.h>
+#ifdef VMS
+#include <X11/bitmaps/dot.>
+#include <X11/bitmaps/menu16.>
+#include <X11/bitmaps/tie_fighter.>
+#else
+#include <X11/bitmaps/dot>
+#include <X11/bitmaps/menu16>
+#include <X11/bitmaps/tie_fighter>
+#endif
+
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/Viewport.h>
+#include <X11/Xaw/Box.h>
+#include <X11/Xaw/MenuButton.h>
+#include <X11/Xaw/SimpleMenu.h>
+#include <X11/Xaw/SmeBSB.h>
+#include <X11/Xaw/SmeLine.h>
+#include <X11/Xaw/Label.h>
+#include <X11/Xaw/AsciiText.h>
+#include <X11/Xaw/Command.h>
+
+#include "Ghostview.h"
+#include "gv.h"
+#include "ps.h"
+
+extern char *getenv();
+
+static String version = "Ghostview, version 1.5";
+
+static XtResource resources[] = {
+ {"showTitle", "Labels", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, show_title), XtRImmediate, (XtPointer)True},
+ {"showDate", "Labels", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, show_date), XtRImmediate, (XtPointer)True},
+ {"showLocator", "Labels", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, show_locator), XtRImmediate, (XtPointer)True},
+ {"autoCenter", "AutoCenter", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, auto_center), XtRImmediate, (XtPointer)True},
+ {"horizontalMargin", "Margin", XtRInt, sizeof(int),
+ XtOffsetOf(AppResources, wm_horiz_margin), XtRImmediate, (XtPointer)20},
+ {"verticalMargin", "Margin", XtRInt, sizeof(int),
+ XtOffsetOf(AppResources, wm_vert_margin), XtRImmediate, (XtPointer)44},
+ {"minimumMagstep", "Magstep", XtRInt, sizeof(int),
+ XtOffsetOf(AppResources, minimum_magstep), XtRImmediate, (XtPointer)-5},
+ {"maximumMagstep", "Magstep", XtRInt, sizeof(int),
+ XtOffsetOf(AppResources, maximum_magstep), XtRImmediate, (XtPointer)5},
+ {"magstep", "Magstep", XtRInt, sizeof(int),
+ XtOffsetOf(AppResources, magstep), XtRImmediate, (XtPointer)0},
+ {"orientation", "Orientation", XtRPageOrientation,
+ sizeof(XtPageOrientation), XtOffsetOf(AppResources, orientation),
+ XtRImmediate, (XtPointer) XtPageOrientationPortrait},
+ {"page", "Page", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, page), XtRImmediate, NULL},
+ {"pageMedia", "PageMedia", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, pagemedia), XtRImmediate, "Letter"},
+ {"forceOrientation", "Force", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, force_orientation), XtRImmediate,
+ (XtPointer)False},
+ {"forcePageMedia", "Force", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, force_pagemedia), XtRImmediate, (XtPointer)False},
+ {"swapLandscape", "SwapLandscape", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, swap_landscape), XtRImmediate, (XtPointer)False},
+#ifndef VMS
+#if defined(SVR4) || defined(SYSV) || defined(USG)
+ {"printCommand", "PrintCommand", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, print_command), XtRImmediate, "lp"},
+ {"printerVariable", "PrinterVariable", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, printer_variable), XtRImmediate, "LPDEST"},
+#else
+ {"printCommand", "PrintCommand", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, print_command), XtRImmediate, "lpr"},
+ {"printerVariable", "PrinterVariable", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, printer_variable), XtRImmediate, "PRINTER"},
+#endif
+ {"printPrompt", "PrintPrompt", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, print_prompt), XtRImmediate, "Printer Name:"},
+#else /* VMS */
+ {"printCommand", "PrintCommand", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, print_command), XtRImmediate, "Print_dcl/Delete"},
+ {"printerVariable", "PrinterVariable", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, printer_variable), XtRImmediate, "GV_PRINT_QUAL"},
+ {"printPrompt", "PrintPrompt", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, print_prompt), XtRImmediate, "Print Qualifiers:"},
+#endif /* VMS */
+ {"defaultPrinter", "DefaultPrinter", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, default_printer), XtRImmediate, NULL},
+ {"printFail", "printFail", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, print_fail), XtRImmediate,
+ "\"%s\" command failed."},
+ {"openPrompt", "OpenPrompt", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, open_prompt), XtRImmediate, "Open File:"},
+ {"openFail", "OpenFail", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, open_fail), XtRImmediate, "Cannot open file: "},
+ {"savePrompt", "SavePrompt", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, save_prompt), XtRImmediate, "Save File:"},
+ {"saveFail", "SaveFail", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, save_fail), XtRImmediate, "Cannot save file: "},
+ {"openWindows", "OpenWindows", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, openwindows), XtRImmediate, (XtPointer)False},
+ {"ncdwm", "Ncdwm", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, ncdwm), XtRImmediate, (XtPointer)False},
+};
+
+static XrmOptionDescRec options[] = {
+ {"-monochrome", "*Ghostview.palette", XrmoptionNoArg, "Monochrome"},
+ {"-grayscale", "*Ghostview.palette", XrmoptionNoArg, "Grayscale"},
+ {"-color", "*Ghostview.palette", XrmoptionNoArg, "Color"},
+ {"-page", ".page", XrmoptionSepArg, NULL},
+ {"-title", ".showTitle", XrmoptionNoArg, "True"},
+ {"-notitle", ".showTitle", XrmoptionNoArg, "False"},
+ {"-date", ".showDate", XrmoptionNoArg, "True"},
+ {"-nodate", ".showDate", XrmoptionNoArg, "False"},
+ {"-locator", ".showLocator", XrmoptionNoArg, "True"},
+ {"-nolocator", ".showLocator", XrmoptionNoArg, "False"},
+ {"-center", ".autoCenter", XrmoptionNoArg, "True"},
+ {"-nocenter", ".autoCenter", XrmoptionNoArg, "False"},
+ {"-labels", ".Labels", XrmoptionNoArg, "True"},
+ {"-nolabels", ".Labels", XrmoptionNoArg, "False"},
+ {"-quiet", "*Ghostview.quiet", XrmoptionNoArg, "True"},
+ {"-noquiet", "*Ghostview.quiet", XrmoptionNoArg, "False"},
+ {"-safer", "*Ghostview.safer", XrmoptionNoArg, "True"},
+ {"-nosafer", "*Ghostview.safer", XrmoptionNoArg, "False"},
+ {"-arguments", "*Ghostview.arguments", XrmoptionSepArg, NULL},
+ {"-xdpi", "*Ghostview.xdpi", XrmoptionSepArg, NULL},
+ {"-ydpi", "*Ghostview.ydpi", XrmoptionSepArg, NULL},
+ {"-dpi", "*Ghostview.Resolution", XrmoptionSepArg, NULL},
+ {"-resolution", "*Ghostview.Resolution", XrmoptionSepArg, NULL},
+ {"-magstep", ".magstep", XrmoptionSepArg, NULL},
+ {"-portrait", ".orientation", XrmoptionNoArg, "Portrait"},
+ {"-landscape", ".orientation", XrmoptionNoArg, "Landscape"},
+ {"-upsidedown", ".orientation", XrmoptionNoArg, "Upside-down"},
+ {"-seascape", ".orientation", XrmoptionNoArg, "Seascape"},
+ {"-forceorientation", ".forceOrientation", XrmoptionNoArg, "True"},
+ {"-letter", ".pageMedia", XrmoptionNoArg, "Letter"},
+ {"-tabloid", ".pageMedia", XrmoptionNoArg, "Tabloid"},
+ {"-ledger", ".pageMedia", XrmoptionNoArg, "Ledger"},
+ {"-legal", ".pageMedia", XrmoptionNoArg, "Legal"},
+ {"-statement", ".pageMedia", XrmoptionNoArg, "Statement"},
+ {"-executive", ".pageMedia", XrmoptionNoArg, "Executive"},
+ {"-a3", ".pageMedia", XrmoptionNoArg, "A3"},
+ {"-a4", ".pageMedia", XrmoptionNoArg, "A4"},
+ {"-a5", ".pageMedia", XrmoptionNoArg, "A5"},
+ {"-b4", ".pageMedia", XrmoptionNoArg, "B4"},
+ {"-b5", ".pageMedia", XrmoptionNoArg, "B5"},
+ {"-folio", ".pageMedia", XrmoptionNoArg, "Folio"},
+ {"-quarto", ".pageMedia", XrmoptionNoArg, "Quarto"},
+ {"-10x14", ".pageMedia", XrmoptionNoArg, "10x14"},
+ {"-forcemedia", ".forcePageMedia", XrmoptionNoArg, "True"},
+ {"-force", ".Force", XrmoptionNoArg, "True"},
+ {"-swap", ".swapLandscape", XrmoptionNoArg, "True"},
+ {"-noswap", ".swapLandscape", XrmoptionNoArg, "False"},
+ {"-openwindows", ".openWindows", XrmoptionNoArg, "True"},
+ {"-noopenwindows", ".openWindows", XrmoptionNoArg, "False"},
+ {"-ncdwm", ".ncdwm", XrmoptionNoArg, "True"},
+ {"-noncdwm", ".ncdwm", XrmoptionNoArg, "False"},
+};
+
+static XtActionsRec actions[] = {
+ {"GhostviewCopyright", gv_copyright},
+ {"GhostviewQuit", gv_quit},
+ {"GhostviewOpen", gv_open},
+ {"GhostviewReopen", gv_reopen},
+ {"GhostviewSave", gv_save},
+ {"GhostviewPrintWhole", gv_print_whole},
+ {"GhostviewPrintMarked", gv_print_marked},
+ {"GhostviewPrevious", gv_prev},
+ {"GhostviewShow", gv_show},
+ {"GhostviewNext", gv_next},
+ {"GhostviewCenter", gv_center},
+ {"GhostviewMark", gv_mark},
+ {"GhostviewUnmark", gv_unmark},
+ {"GhostviewSetMagstep", gv_set_magstep},
+ {"GhostviewIncreaseMagstep",gv_increase_magstep},
+ {"GhostviewDecreaseMagstep",gv_decrease_magstep},
+ {"GhostviewSetOrientation", gv_set_orientation},
+ {"GhostviewSwapLandscape", gv_swap_landscape},
+ {"GhostviewSetPageMedia", gv_set_pagemedia},
+ {"GhostviewDefault", gv_default},
+ {"GhostviewForce", gv_force},
+ {"GhostviewDeleteWindow", gv_delete_window},
+ {"GhostviewDeleteZoom", gv_delete_zoom},
+ {"GhostviewDismiss", gv_dismiss},
+ {"GhostviewScrollUp", gv_scroll_up},
+ {"GhostviewScrollDown", gv_scroll_down},
+ {"GhostviewScrollLeft", gv_scroll_left},
+ {"GhostviewScrollRight", gv_scroll_right},
+ {"GhostviewEraseLocator", gv_erase_locator},
+ {"GhostviewCheckFile", gv_check_file},
+ {"GhostviewBack", gv_back},
+};
+
+String fallback_resources[] = {
+# include "app-defaults.h"
+ NULL
+};
+
+#define ROWS 22
+#define COLS 68
+static String copyright = "\
+Ghostview -- An X11 user interface for ghostscript.\n\
+Copyright (C) 1992 Timothy O. Theisen\n\
+\n\
+This program is free software; you can redistribute it and/or modify\n\
+it under the terms of the GNU General Public License as published by\n\
+the Free Software Foundation; either version 2 of the License, or\n\
+(at your option) any later version.\n\
+\n\
+This program is distributed in the hope that it will be useful,\n\
+but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
+GNU General Public License for more details.\n\
+\n\
+You should have received a copy of the GNU General Public License\n\
+along with this program; if not, write to the Free Software\n\
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n\
+\n\
+ Author: Tim Theisen Systems Programmer\n\
+Internet: tim@cs.wisc.edu Department of Computer Sciences\n\
+ UUCP: uwvax!tim University of Wisconsin-Madison\n\
+ Phone: (608)262-0438 1210 West Dayton Street\n\
+ FAX: (608)262-9777 Madison, WI 53706";
+
+static void Syntax();
+
+float default_xdpi; /* default xdpi from ghostview widget */
+float default_ydpi; /* default ydpi from ghostview widget */
+
+int num_ghosts; /* number of ghostview widgets active */
+FILE *psfile; /* file to display */
+String filename; /* its filename */
+String oldfilename; /* previous filename */
+int current_page; /* current page being displayed */
+int current_magstep;/* current magnification */
+XtPageOrientation current_orientation; /* current orientation */
+int default_pagemedia; /* index into document media or papersizes */
+int current_pagemedia; /* index into document media or papersizes */
+Boolean force_document_media; /* Whether to force a document media */
+int document_media; /* document media being forced */
+int current_llx; /* current bounding box */
+int current_lly;
+int current_urx;
+int current_ury;
+int base_papersize; /* tells where papersizes begins */
+Boolean info_up; /* tells if information window is up */
+int force_setting; /* tells if new setting override %%comments */
+Pixmap dot_bitmap; /* bitmap used to mark default setting */
+Pixmap menu16_bitmap; /* bitmap used to mark document setting */
+Pixmap tie_fighter_bitmap; /* bitmap used to mark forced setting */
+String toc_text; /* page labels (Table of Contents) */
+int toc_length; /* length of page label text */
+int toc_entry_length; /* length of one entry */
+int info_length; /* number of bytes in infotext window */
+int mode; /* tells what type of popup */
+time_t mtime; /* last modified time of input file */
+struct document *doc; /* document structure */
+struct document *olddoc; /* document structure */
+Atom wm_delete_window; /* Atom sent to destroy a window */
+XErrorHandler old_Xerror; /* standard error handler */
+Boolean dying; /* whether an X error caused our exit */
+XErrorEvent bomb; /* what the error was */
+
+XtAppContext app_con;
+AppResources app_res;
+
+/* Widgets used. Indentation indicates hierarchy */
+ Widget toplevel;
+ Widget form;
+ Widget titlebutton;
+ Widget titlemenu;
+ Widget datebutton;
+ Widget datemenu;
+ Widget locator;
+ Widget box;
+ Widget filebutton;
+ Widget filemenu;
+ Widget openbutton;
+ Widget reopenbutton;
+ Widget printwholebutton;
+ Widget printmarkedbutton;
+ Widget savebutton;
+ Widget copyrightbutton;
+ Widget quitbutton;
+ Widget pagebutton;
+ Widget pagemenu;
+ Widget nextbutton;
+ Widget showbutton;
+ Widget prevbutton;
+ Widget backbutton;
+ Widget centerbutton;
+ Widget markbutton;
+ Widget unmarkbutton;
+ Widget magstepbutton;
+ Widget magstepmenu;
+ Widget *magstepentry;
+ Widget orientationbutton;
+ Widget orientationmenu;
+ Widget portraitbutton;
+ Widget landscapebutton;
+ Widget upsidedownbutton;
+ Widget seascapebutton;
+ Widget swapbutton;
+ Widget pagemediabutton;
+ Widget pagemediamenu;
+ Widget *pagemediaentry;
+ Widget toc;
+ Widget pageview;
+ Widget page;
+
+/* Popup children */
+ Widget infopopup;
+ Widget infoform;
+ Widget infotext;
+ Widget infodismiss;
+ Widget copyrightpopup;
+ Widget copyrightform;
+ Widget copyrighttext;
+ Widget copyrightdismiss;
+ Widget dialogpopup;
+ Widget dialog;
+
+int
+main(argc, argv)
+int argc;
+char *argv[];
+{
+ struct stat sbuf;
+ Display *dpy;
+ Screen *scr;
+ Arg args[20];
+ Cardinal num_args;
+ Widget above_toc;
+ Widget left_of_page;
+ Widget line;
+ int i;
+ Boolean set_vert_dist;
+ String s1, s2;
+ XFontStruct *font;
+ XTextProperty nameprop;
+ Dimension bottomMargin, leftMargin, rightMargin, topMargin;
+ Dimension width, height;
+ Dimension button_width;
+ static String nothing = "";
+ static XawTextSelectType sarry[] =
+ {XawselectLine, XawselectAll, XawselectNull};
+
+ XtToolkitInitialize();
+ XtSetTypeConverter(XtRString, XtRPageOrientation,
+ XmuCvtStringToPageOrientation, NULL, 0,
+ XtCacheAll, NULL);
+ app_con = XtCreateApplicationContext();
+ XtAppAddActions(app_con, actions, XtNumber(actions));
+ XtAppSetFallbackResources(app_con, fallback_resources);
+ dpy = XtOpenDisplay(app_con, NULL, NULL, "Ghostview",
+ options, XtNumber(options), &argc, argv);
+ if (dpy == NULL) {
+ fprintf(stderr, "%s: cannot open DISPLAY.\n", argv[0]);
+ exit(1);
+ }
+ if (argc > 2) Syntax(argv[0]);
+ if (argc == 2) {
+ filename = XtNewString(argv[1]);
+ if (strcmp(filename, "-")) {
+#ifdef VMS
+ if ((psfile = fopen(argv[1], "r", "mbc=100")) == NULL) {
+#else
+ if ((psfile = fopen(argv[1], "r")) == NULL) {
+#endif
+ fprintf(stderr, "Cannot open ");
+ perror(argv[1]);
+ exit(1);
+ }
+ stat(filename, &sbuf);
+ mtime = sbuf.st_mtime;
+ }
+ }
+
+ old_Xerror = XSetErrorHandler(catch_Xerror);
+ scr = DefaultScreenOfDisplay(dpy);
+ wm_delete_window = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
+
+ toplevel = XtAppCreateShell(NULL, "Ghostview", applicationShellWidgetClass,
+ dpy, NULL, ZERO);
+
+ XtGetApplicationResources(toplevel, (XtPointer) &app_res,
+ resources, XtNumber(resources), NULL, ZERO);
+ if (s1 = getenv(app_res.printer_variable)) app_res.default_printer = s1;
+
+ /* Open Windows sometimes hands me a bad bitmap */
+ if (app_res.openwindows) {
+ dot_bitmap = menu16_bitmap = tie_fighter_bitmap = None;
+ } else {
+ dot_bitmap = XCreateBitmapFromData(dpy, RootWindowOfScreen(scr),
+ dot_bits, dot_width, dot_height);
+ menu16_bitmap = XCreateBitmapFromData(dpy, RootWindowOfScreen(scr),
+ menu16_bits, menu16_width,
+ menu16_height);
+ tie_fighter_bitmap = XCreateBitmapFromData(dpy, RootWindowOfScreen(scr),
+ tie_fighter_bits,
+ tie_fighter_width,
+ tie_fighter_height);
+ }
+
+ /* Instantiate Popup children */
+ infopopup = XtCreatePopupShell("information", topLevelShellWidgetClass,
+ toplevel, NULL, ZERO);
+
+ infoform = XtCreateManagedWidget("form", formWidgetClass,
+ infopopup, NULL, ZERO);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ XtSetArg(args[num_args], XtNscrollHorizontal, XawtextScrollWhenNeeded);
+ num_args++;
+ XtSetArg(args[num_args], XtNscrollVertical, XawtextScrollWhenNeeded);
+ num_args++;
+ XtSetArg(args[num_args], XtNdisplayCaret, False); num_args++;
+ infotext = XtCreateManagedWidget("text", asciiTextWidgetClass,
+ infoform, args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, infotext); num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ infodismiss = XtCreateManagedWidget("dismiss", commandWidgetClass,
+ infoform, args, num_args);
+ XtAddCallback(infodismiss, XtNcallback, dismiss, (XtPointer)infopopup);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfont, &font); num_args++;
+ XtSetArg(args[num_args], XtNbottomMargin, &bottomMargin);num_args++;
+ XtSetArg(args[num_args], XtNleftMargin, &leftMargin);num_args++;
+ XtSetArg(args[num_args], XtNrightMargin, &rightMargin);num_args++;
+ XtSetArg(args[num_args], XtNtopMargin, &topMargin); num_args++;
+ XtGetValues(infotext, args, num_args);
+
+ width = font->max_bounds.width * 80 + leftMargin + rightMargin;
+ height = (font->ascent + font->descent) * ROWS + topMargin + bottomMargin;
+
+ XtSetArg(args[0], XtNwidth, width);
+ XtSetArg(args[1], XtNheight, height);
+ XtSetValues(infotext, args, TWO);
+ XtSetValues(infodismiss, args, ONE);
+ XtRealizeWidget(infopopup);
+ XSetWMProtocols(dpy, XtWindow(infopopup), &wm_delete_window, 1);
+
+ copyrightpopup = XtCreatePopupShell("copyright", topLevelShellWidgetClass,
+ toplevel, NULL, ZERO);
+
+ copyrightform = XtCreateManagedWidget("form", formWidgetClass,
+ copyrightpopup, NULL, ZERO);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ XtSetArg(args[num_args], XtNscrollHorizontal, XawtextScrollWhenNeeded);
+ num_args++;
+ XtSetArg(args[num_args], XtNscrollVertical, XawtextScrollWhenNeeded);
+ num_args++;
+ XtSetArg(args[num_args], XtNdisplayCaret, False); num_args++;
+ XtSetArg(args[num_args], XtNuseStringInPlace, True);num_args++;
+ XtSetArg(args[num_args], XtNlength, strlen(copyright));num_args++;
+ XtSetArg(args[num_args], XtNstring, copyright); num_args++;
+ copyrighttext = XtCreateManagedWidget("text", asciiTextWidgetClass,
+ copyrightform, args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, copyrighttext);
+ num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ copyrightdismiss = XtCreateManagedWidget("dismiss", commandWidgetClass,
+ copyrightform, args, num_args);
+ XtAddCallback(copyrightdismiss, XtNcallback, dismiss,
+ (XtPointer)copyrightpopup);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfont, &font); num_args++;
+ XtSetArg(args[num_args], XtNbottomMargin, &bottomMargin);num_args++;
+ XtSetArg(args[num_args], XtNleftMargin, &leftMargin);num_args++;
+ XtSetArg(args[num_args], XtNrightMargin, &rightMargin);num_args++;
+ XtSetArg(args[num_args], XtNtopMargin, &topMargin); num_args++;
+ XtGetValues(copyrighttext, args, num_args);
+
+ width = font->max_bounds.width * COLS + leftMargin + rightMargin;
+ height = (font->ascent + font->descent) * ROWS + topMargin + bottomMargin;
+
+ XtSetArg(args[0], XtNwidth, width);
+ XtSetArg(args[1], XtNheight, height);
+ XtSetValues(copyrighttext, args, TWO);
+ XtSetValues(copyrightdismiss, args, ONE);
+ XtRealizeWidget(copyrightpopup);
+ XSetWMProtocols(dpy, XtWindow(copyrightpopup), &wm_delete_window, 1);
+
+ dialogpopup = XtCreatePopupShell("popup", transientShellWidgetClass,
+ toplevel, NULL, ZERO);
+
+ dialog = CreateDialog(dialogpopup, "dialog", okay, dismiss);
+ XtRealizeWidget(dialogpopup);
+ XSetWMProtocols(dpy, XtWindow(dialogpopup), &wm_delete_window, 1);
+
+
+ /* Instantiate Widgets */
+
+ form = XtCreateManagedWidget("form", formWidgetClass,
+ toplevel, NULL, ZERO);
+
+ above_toc = NULL;
+ left_of_page = NULL;
+ set_vert_dist = False;
+ if (app_res.show_title) {
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, above_toc);num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainTop);num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft);num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
+ XtSetArg(args[num_args], XtNresize, False); num_args++;
+ XtSetArg(args[num_args], XtNlabel, " "); num_args++;
+ titlebutton = XtCreateManagedWidget("titleButton",
+ menuButtonWidgetClass,
+ form, args, num_args);
+ above_toc = titlebutton;
+ if (!left_of_page) left_of_page = titlebutton;
+ set_vert_dist = True;
+ }
+
+ if (app_res.show_date) {
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, above_toc);num_args++;
+ if (set_vert_dist) {
+ XtSetArg(args[num_args], XtNvertDistance, 0);num_args++;
+ }
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainTop);num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft);num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
+ XtSetArg(args[num_args], XtNresize, False); num_args++;
+ XtSetArg(args[num_args], XtNlabel, " "); num_args++;
+ datebutton = XtCreateManagedWidget("dateButton", menuButtonWidgetClass,
+ form, args, num_args);
+ above_toc = datebutton;
+ if (!left_of_page) left_of_page = datebutton;
+ set_vert_dist = True;
+ }
+
+ if (app_res.show_locator) {
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, above_toc);num_args++;
+ if (set_vert_dist) {
+ XtSetArg(args[num_args], XtNvertDistance, 0);num_args++;
+ }
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainTop);num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft);num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
+ XtSetArg(args[num_args], XtNresize, False); num_args++;
+ XtSetArg(args[num_args], XtNlabel, " "); num_args++;
+ locator = XtCreateManagedWidget("locator", labelWidgetClass,
+ form, args, num_args);
+ above_toc = locator;
+ if (!left_of_page) left_of_page = locator;
+ }
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, above_toc); num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNallowVert, True); num_args++;
+ box = XtCreateManagedWidget("box", boxWidgetClass, form, args, num_args);
+
+ XtSetArg(args[0], XtNresize, False);
+ filebutton = XtCreateManagedWidget("fileButton", menuButtonWidgetClass,
+ box, args, ONE);
+
+ filemenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,
+ filebutton, NULL, ZERO);
+
+ openbutton = XtCreateManagedWidget("open", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(openbutton, XtNcallback, popup_dialog, (XtPointer)OPEN);
+
+ reopenbutton = XtCreateManagedWidget("reopen", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(reopenbutton, XtNcallback, reopen_file, (XtPointer)NULL);
+
+ printwholebutton = XtCreateManagedWidget("printwhole", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(printwholebutton, XtNcallback, popup_dialog,
+ (XtPointer)PRINT_WHOLE);
+
+ printmarkedbutton = XtCreateManagedWidget("printmarked", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(printmarkedbutton, XtNcallback, popup_dialog,
+ (XtPointer)PRINT_MARKED);
+
+ savebutton = XtCreateManagedWidget("save", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(savebutton, XtNcallback, popup_dialog, (XtPointer)SAVE);
+
+ line = XtCreateManagedWidget("line", smeLineObjectClass,
+ filemenu, NULL, ZERO);
+
+ copyrightbutton = XtCreateManagedWidget("copyright", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(copyrightbutton, XtNcallback, popup,
+ (XtPointer)copyrightpopup);
+
+ quitbutton = XtCreateManagedWidget("quit", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(quitbutton, XtNcallback, quit_ghostview, (XtPointer)0);
+
+ XtSetArg(args[0], XtNresize, False);
+ pagebutton = XtCreateManagedWidget("pageButton", menuButtonWidgetClass,
+ box, args, 1);
+
+ pagemenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,
+ pagebutton, NULL, ZERO);
+
+ nextbutton = XtCreateManagedWidget("next", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(nextbutton, XtNcallback, next_page, (XtPointer)0);
+
+ showbutton = XtCreateManagedWidget("show", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(showbutton, XtNcallback, this_page, (XtPointer)0);
+
+ prevbutton = XtCreateManagedWidget("prev", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(prevbutton, XtNcallback, prev_page, (XtPointer)0);
+
+ backbutton = XtCreateManagedWidget("back", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(backbutton, XtNcallback, back_page, (XtPointer)0);
+
+ XtSetSensitive(backbutton, False);
+
+ line = XtCreateManagedWidget("line", smeLineObjectClass,
+ pagemenu, NULL, ZERO);
+
+ centerbutton = XtCreateManagedWidget("center", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(centerbutton, XtNcallback, center_page, (XtPointer)0);
+
+ line = XtCreateManagedWidget("line", smeLineObjectClass,
+ pagemenu, NULL, ZERO);
+
+ markbutton = XtCreateManagedWidget("mark", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(markbutton, XtNcallback, mark_page, (XtPointer)0);
+
+ unmarkbutton = XtCreateManagedWidget("unmark", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(unmarkbutton, XtNcallback, unmark_page, (XtPointer)0);
+
+ XtSetArg(args[0], XtNresize, False);
+ magstepbutton = XtCreateManagedWidget("magstepButton",
+ menuButtonWidgetClass,
+ box, args, ONE);
+
+ magstepmenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,
+ magstepbutton, NULL, ZERO);
+
+ magstepentry = (Widget *) XtMalloc(
+ (app_res.maximum_magstep - app_res.minimum_magstep + 1) *
+ sizeof(Widget));
+ XtSetArg(args[0], XtNleftMargin, 20);
+ for (i = app_res.minimum_magstep; i <= app_res.maximum_magstep; i++) {
+ char buf[16];
+ sprintf(buf, "%d", i);
+ magstepentry[i-app_res.minimum_magstep] =
+ XtCreateManagedWidget(buf, smeBSBObjectClass,
+ magstepmenu, args, 1);
+ XtAddCallback(magstepentry[i-app_res.minimum_magstep], XtNcallback,
+ set_magstep, (XtPointer)i);
+ }
+
+ XtSetArg(args[0], XtNresize, False);
+ orientationbutton = XtCreateManagedWidget("orientationButton",
+ menuButtonWidgetClass,
+ box, args, ONE);
+
+ orientationmenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,
+ orientationbutton, NULL, ZERO);
+
+ XtSetArg(args[0], XtNleftMargin, 20);
+ portraitbutton = XtCreateManagedWidget("portrait", smeBSBObjectClass,
+ orientationmenu, args, ONE);
+ XtAddCallback(portraitbutton, XtNcallback,
+ set_orientation, (XtPointer)XtPageOrientationPortrait);
+
+ landscapebutton = XtCreateManagedWidget("landscape", smeBSBObjectClass,
+ orientationmenu, args, ONE);
+ XtAddCallback(landscapebutton, XtNcallback,
+ set_orientation, (XtPointer)XtPageOrientationLandscape);
+
+ upsidedownbutton = XtCreateManagedWidget("upsidedown", smeBSBObjectClass,
+ orientationmenu, args, ONE);
+ XtAddCallback(upsidedownbutton, XtNcallback,
+ set_orientation, (XtPointer)XtPageOrientationUpsideDown);
+
+ seascapebutton = XtCreateManagedWidget("seascape", smeBSBObjectClass,
+ orientationmenu, args, ONE);
+ XtAddCallback(seascapebutton, XtNcallback,
+ set_orientation, (XtPointer)XtPageOrientationSeascape);
+
+ line = XtCreateManagedWidget("line", smeLineObjectClass,
+ orientationmenu, NULL, ZERO);
+
+ swapbutton = XtCreateManagedWidget("swap", smeBSBObjectClass,
+ orientationmenu, args, ONE);
+ XtAddCallback(swapbutton, XtNcallback, swap_landscape, (XtPointer)0);
+
+ if (app_res.swap_landscape) {
+ XtSetArg(args[0], XtNlabel, &s1);
+ XtGetValues(landscapebutton, args, ONE);
+ s1 = XtNewString(s1);
+ XtSetArg(args[0], XtNlabel, &s2);
+ XtGetValues(seascapebutton, args, ONE);
+ s2 = XtNewString(s2);
+ XtSetArg(args[0], XtNlabel, s2);
+ XtSetValues(landscapebutton, args, ONE);
+ XtSetArg(args[0], XtNlabel, s1);
+ XtSetValues(seascapebutton, args, ONE);
+ XtFree(s1);
+ XtFree(s2);
+ }
+
+ XtSetArg(args[0], XtNresize, False);
+ pagemediabutton = XtCreateManagedWidget("pagemediaButton",
+ menuButtonWidgetClass,
+ box, args, ONE);
+
+ default_pagemedia = 0;
+ for (i = 0; papersizes[i].name; i++) {
+ if (!strcmp(app_res.pagemedia, papersizes[i].name)) {
+ default_pagemedia = i;
+ break;
+ }
+ }
+
+#ifndef max
+#define max(a,b) ((a)>(b)?(a):(b))
+#endif
+
+ /* Line up all the menu buttons */
+ XtSetArg(args[0], XtNwidth, &width);
+ XtGetValues(filebutton, args, ONE);
+ button_width = width;
+ XtGetValues(pagebutton, args, ONE);
+ button_width = max(button_width, width);
+ XtGetValues(magstepbutton, args, ONE);
+ button_width = max(button_width, width);
+ XtGetValues(orientationbutton, args, ONE);
+ button_width = max(button_width, width);
+ XtGetValues(pagemediabutton, args, ONE);
+ button_width = max(button_width, width);
+
+ XtSetArg(args[0], XtNwidth, button_width);
+ XtSetValues(filebutton, args, ONE);
+ XtSetValues(pagebutton, args, ONE);
+ XtSetValues(magstepbutton, args, ONE);
+ XtSetValues(orientationbutton, args, ONE);
+ XtSetValues(pagemediabutton, args, ONE);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, above_toc); num_args++;
+ XtSetArg(args[num_args], XtNfromHoriz, box); num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNdisplayCaret, False); num_args++;
+ XtSetArg(args[num_args], XtNuseStringInPlace, True);num_args++;
+ XtSetArg(args[num_args], XtNlength, 0); num_args++;
+ XtSetArg(args[num_args], XtNstring, nothing); num_args++;
+ XtSetArg(args[num_args], XtNselectTypes, sarry); num_args++;
+ XtSetArg(args[num_args], XtNscrollVertical, XawtextScrollAlways);num_args++;
+ toc = XtCreateManagedWidget("toc", asciiTextWidgetClass,
+ form, args, num_args);
+ if (!left_of_page) left_of_page = toc;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromHoriz, left_of_page);num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNallowHoriz, True); num_args++;
+ XtSetArg(args[num_args], XtNallowVert, True); num_args++;
+ pageview = XtCreateManagedWidget("pageview", viewportWidgetClass,
+ form, args, num_args);
+
+ page = XtCreateManagedWidget("page", ghostviewWidgetClass,
+ pageview, NULL, ZERO);
+ num_ghosts++;
+ XtAddCallback(page, XtNcallback, track_and_zoom, (XtPointer)0);
+ XtAddCallback(page, XtNdestroyCallback, destroy_ghost, (XtPointer)page);
+ XtAddCallback(page, XtNmessageCallback, message, (XtPointer)page);
+ XtAddCallback(page, XtNoutputCallback, output, (XtPointer)0);
+ num_args = 0;
+ XtSetArg(args[num_args], XtNxdpi, &default_xdpi); num_args++;
+ XtSetArg(args[num_args], XtNydpi, &default_ydpi); num_args++;
+ XtGetValues(page, args, num_args);
+
+ /* This sets most of the window sizes. This keeps X server traffic
+ * down during realization.
+ */
+ GhostviewDisableInterpreter(page);
+ setup_ghostview();
+ i = find_page(app_res.page);
+
+ /* Coerce page number to fall in range */
+ if (toc_text) {
+ if (i >= doc->numpages) i = doc->numpages - 1;
+ if (i < 0) i = 0;
+ }
+ /* Coerce magstep to fall in range */
+ if (app_res.magstep < app_res.minimum_magstep)
+ app_res.magstep = app_res.minimum_magstep;
+ if (app_res.magstep > app_res.maximum_magstep)
+ app_res.magstep = app_res.maximum_magstep;
+ set_new_magstep();
+ set_new_orientation(i);
+ set_new_pagemedia(i);
+ layout_ghostview();
+
+ XtSetMappedWhenManaged(toplevel, False);
+ XtRealizeWidget(toplevel);
+ XtSetArg(args[0], XtNtransientFor, toplevel);
+ XtSetValues(dialogpopup, args, ONE);
+ XSetWMProtocols(dpy, XtWindow(toplevel), &wm_delete_window, 1);
+ if (XStringListToTextProperty(&version, 1, &nameprop)) {
+ XSetWMName(dpy, XtWindow(toplevel), &nameprop);
+ }
+
+ /* This sets the sizes on widget that were created during the realize. */
+ layout_ghostview();
+ XtMapWidget(toplevel);
+
+ show_page(i);
+ XtAppMainLoop(app_con);
+
+ /* should never get here */
+ return 1;
+}
+
+static void
+Syntax(call)
+char *call;
+{
+ XtDestroyApplicationContext(app_con);
+ fprintf(stderr, "Usage: %s\n", call);
+ fprintf(stderr,
+ " [-monochrome] [-grayscale] [-color]\n");
+ fprintf(stderr,
+ " [-[no]title] [-[no]date] [-[no]locator] [-[no]labels]\n");
+ fprintf(stderr,
+ " [-resolution <dpi>] [-dpi <dpi>]\n");
+ fprintf(stderr,
+ " [-xdpi <dpi>] [-ydpi <dpi>] [-magstep <n>]\n");
+ fprintf(stderr,
+ " [-[no]safer] [-[no]quiet] [-arguments <arguments>]\n");
+ fprintf(stderr,
+ " [-[no]center]\n");
+ fprintf(stderr,
+ " [-portrait] [-landscape] [-upsidedown] [-seascape] [-[no]swap]\n");
+ fprintf(stderr,
+ " [-letter] [-tabloid] [-ledger] [-legal] [-statement]\n");
+ fprintf(stderr,
+ " [-executive] [-a3] [-a4] [-a5] [-b4] [-b5]\n");
+ fprintf(stderr,
+ " [-folio] [-quarto] [-10x14]\n");
+ fprintf(stderr,
+ " [-force] [-forceorientation] [-forcemedia]\n");
+ fprintf(stderr,
+ " [-[no]openwindows] [-[no]ncdwm]\n");
+ fprintf(stderr,
+ " [-page <label>] [toolkitoption]\n");
+ fprintf(stderr,
+ " [filename]\n");
+ exit(1);
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/misc.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/misc.c
new file mode 100644
index 0000000000..6c2d9bccd8
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/misc.c
@@ -0,0 +1,1314 @@
+/*
+ * misc.c -- Everything that isn't a callback or action.
+ * Copyright (C) 1992 Timothy O. Theisen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Tim Theisen Systems Programmer
+ * Internet: tim@cs.wisc.edu Department of Computer Sciences
+ * UUCP: uwvax!tim University of Wisconsin-Madison
+ * Phone: (608)262-0438 1210 West Dayton Street
+ * FAX: (608)262-9777 Madison, WI 53706
+ */
+/* This file is part of the hacked version of the ghostview package */
+/* which is distributed under the terms of the gnu license. The */
+/* modification referred to above is by Tanmoy Bhattacharya, */
+/* <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification, */
+/* nor the original program provides any warranty. */
+
+#include <stdio.h>
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+
+#include <X11/Xos.h>
+#include <signal.h>
+#ifdef SIGNALRETURNSINT
+#define SIGVAL int
+#else
+#define SIGVAL void
+#endif
+
+#include <math.h>
+
+#include <X11/Xatom.h>
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include <X11/Shell.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/SimpleMenu.h>
+#include <X11/Xaw/SmeBSB.h>
+#include <X11/Xaw/SmeLine.h>
+#include <X11/Xaw/Scrollbar.h>
+#include <X11/Xaw/AsciiText.h>
+/* Yuck, cannot get vScrollbar via the usual methods */
+#include <X11/IntrinsicP.h>
+#include <X11/Xaw/TextP.h>
+#include <X11/Xmu/StdCmap.h>
+
+#include <errno.h>
+/* BSD 4.3 errno.h does not declare errno */
+extern int errno;
+#ifdef VMS
+#include <perror.h>
+#else
+extern int sys_nerr;
+extern char *sys_errlist[];
+#endif
+
+#include "Ghostview.h"
+#include "gv.h"
+#include "ps.h"
+#include "pdf.h"
+
+#ifndef max
+#define max(a, b) ((a) > (b) ? (a) : (b))
+#endif
+
+/* Translate orientations defined by the enum in "ps.h" to
+ * XtPageOrientations defined in "Ghostview.h".
+ */
+static XtPageOrientation
+xorient(psorient)
+ int psorient;
+{
+ switch (psorient) {
+ case PORTRAIT: return XtPageOrientationPortrait;
+ case LANDSCAPE:
+ if (app_res.swap_landscape) {
+ return XtPageOrientationSeascape;
+ } else {
+ return XtPageOrientationLandscape;
+ }
+ }
+}
+
+static void
+break_chains()
+{
+ Arg args[2];
+ XtSetArg(args[0], XtNbottom, XtChainTop);
+ XtSetArg(args[1], XtNright, XtChainLeft);
+ XtSetValues(toc, args, ONE);
+ XtSetValues(pageview, args, TWO);
+}
+
+static void
+set_chains()
+{
+ Arg args[2];
+
+ XtSetArg(args[0], XtNbottom, XtChainBottom);
+ XtSetArg(args[1], XtNright, XtChainRight);
+ XtSetValues(toc, args, ONE);
+ XtSetValues(pageview, args, TWO);
+}
+
+static void
+reset_size_hints()
+{
+ Arg args[4];
+ if (app_res.ncdwm) return;
+ XtSetArg(args[0], XtNmaxWidth, XtUnspecifiedShellInt);
+ XtSetArg(args[1], XtNmaxHeight, XtUnspecifiedShellInt);
+ XtSetArg(args[2], XtNminWidth, XtUnspecifiedShellInt);
+ XtSetArg(args[3], XtNminHeight, XtUnspecifiedShellInt);
+ XtSetValues(toplevel, args, FOUR);
+}
+
+static void
+set_size_hints(minw, minh, maxw, maxh)
+ Dimension minw, minh, maxw, maxh;
+{
+ Arg args[4];
+
+ XtSetArg(args[0], XtNminWidth, minw);
+ XtSetArg(args[1], XtNminHeight, minh);
+ XtSetArg(args[2], XtNmaxWidth, maxw);
+ XtSetArg(args[3], XtNmaxHeight, maxh);
+ XtSetValues(toplevel, args, FOUR);
+}
+
+static Boolean horiz_scroll_saved = False;
+static Boolean vert_scroll_saved = False;
+static float horiz_top;
+static float vert_top;
+
+static void
+reset_scroll_bars()
+{
+ Arg args[1];
+ Widget scroll;
+ float zero = 0.0;
+
+ if (horiz_scroll_saved || vert_scroll_saved) return;
+
+ scroll = XtNameToWidget(pageview, "horizontal");
+ if (scroll) {
+ XtSetArg(args[0], XtNtopOfThumb, &horiz_top);
+ XtGetValues(scroll, args, ONE);
+ XtCallCallbacks(scroll, XtNjumpProc, &zero);
+ horiz_scroll_saved = True;
+ }
+
+ scroll = XtNameToWidget(pageview, "vertical");
+ if (scroll) {
+ XtSetArg(args[0], XtNtopOfThumb, &vert_top);
+ XtGetValues(scroll, args, ONE);
+ XtCallCallbacks(scroll, XtNjumpProc, &zero);
+ vert_scroll_saved = True;
+ }
+}
+
+static void
+set_scroll_bars()
+{
+ Arg args[1];
+ Widget scroll;
+ float shown;
+
+ if (horiz_scroll_saved) {
+ scroll = XtNameToWidget(pageview, "horizontal");
+ if (scroll) {
+ XtSetArg(args[0], XtNshown, &shown);
+ XtGetValues(scroll, args, ONE);
+ if (horiz_top > (1.0 - shown)) horiz_top = (1.0 - shown);
+ XtCallCallbacks(scroll, XtNjumpProc, &horiz_top);
+ }
+ }
+
+ if (vert_scroll_saved) {
+ scroll = XtNameToWidget(pageview, "vertical");
+ if (scroll) {
+ XtSetArg(args[0], XtNshown, &shown);
+ XtGetValues(scroll, args, ONE);
+ if (vert_top > (1.0 - shown)) vert_top = (1.0 - shown);
+ XtCallCallbacks(scroll, XtNjumpProc, &vert_top);
+ }
+ }
+
+ horiz_scroll_saved = vert_scroll_saved = False;
+}
+
+/* Start rendering a new page */
+void
+show_page(number)
+ int number;
+{
+ struct stat sbuf;
+ int i;
+
+ if (!filename) return;
+
+ /* Unmark current_page as current */
+ if (toc_text && (current_page >= 0)) {
+ int marker = current_page*toc_entry_length + toc_entry_length-2;
+ toc_text[marker] = ' ';
+ XawTextInvalidate(toc, marker, marker+1);
+ }
+
+ /* If the file has changed, rescan it so that offsets into the file
+ * are still correct. If the file is rescanned, we must setup ghostview
+ * again. Also, force a new copy of ghostscript to start. */
+ if (psfile) {
+ if (!stat(filename, &sbuf) && mtime != sbuf.st_mtime) {
+ fclose(psfile);
+ psfile = fopen(filename, "r");
+ mtime = sbuf.st_mtime;
+ if (oldfilename) XtFree(oldfilename);
+ oldfilename = XtNewString(filename);
+ new_file(number);
+ }
+ }
+
+ /* Coerce page number to fall in range */
+ if (toc_text) {
+ if (number >= doc->numpages) number = doc->numpages - 1;
+ if (number < 0) number = 0;
+ }
+ pdf_clear();
+
+ if (set_new_orientation(number) || set_new_pagemedia(number))
+ layout_ghostview();
+
+ if (toc_text) {
+ int marker;
+ current_page = number;
+ XawTextUnsetSelection(toc);
+ XawTextSetInsertionPoint(toc, current_page * toc_entry_length);
+ marker = current_page*toc_entry_length + toc_entry_length-2;
+ toc_text[marker] = '<';
+ XawTextInvalidate(toc, marker, marker+1);
+ if (GhostviewIsInterpreterReady(page)) {
+ GhostviewNextPage(page);
+ } else {
+ GhostviewEnableInterpreter(page);
+ GhostviewSendPS(page, psfile, doc->beginprolog,
+ doc->lenprolog, False);
+ GhostviewSendPS(page, psfile, doc->beginsetup,
+ doc->lensetup, False);
+ }
+ if (doc->pageorder == DESCEND)
+ i = (doc->numpages - 1) - current_page;
+ else
+ i = current_page;
+ GhostviewSendPS(page, psfile, doc->pages[i].begin,
+ doc->pages[i].len, False);
+ } else {
+ if (!GhostviewIsInterpreterRunning(page))
+ GhostviewEnableInterpreter(page);
+ else if (GhostviewIsInterpreterReady(page))
+ GhostviewNextPage(page);
+ else
+ XBell(XtDisplay(page), 0);
+ }
+
+ if (toc_text) {
+ XtSetSensitive(prevbutton, current_page != 0);
+ XtSetSensitive(nextbutton, current_page != doc->numpages-1);
+ XtSetSensitive(showbutton, True);
+ }
+}
+
+/* setup ghostview. This includes:
+ * scanning the PostScript file,
+ * setting the title and date labels,
+ * building the pagemedia menu,
+ * building the toc (table of contents)
+ * sensitizing the appropriate menu buttons,
+ * popping down and erasing the infotext popup.
+ */
+
+static Boolean useful_page_labels;
+Boolean
+setup_ghostview()
+{
+ Arg args[20];
+ Cardinal num_args;
+ int oldtoc_entry_length;
+ char *tocp;
+ XawTextBlock message_block;
+ static String nothing = "";
+ String label;
+ Pixmap bitmap;
+
+ /* Reset to a known state. */
+ psfree(olddoc);
+ olddoc = doc;
+ doc = NULL;
+ current_page = -1;
+ if (toc_text) XtFree(toc_text);
+ oldtoc_entry_length = toc_entry_length;
+ toc_text = NULL;
+
+ /* Scan document and start setting things up */
+ if (psfile) doc = psscan(psfile);
+
+ if (app_res.show_title) {
+ if (doc && doc->title) {
+ label = doc->title;
+ bitmap = menu16_bitmap;
+ } else {
+ if (filename) {
+ label = filename;
+ } else {
+ label = "";
+ }
+ bitmap = None;
+ }
+ XtSetArg(args[0], XtNlabel, label);
+ XtSetValues(titlebutton, args, ONE);
+ if (titlemenu) XtDestroyWidget(titlemenu);
+ titlemenu = build_label_menu(titlebutton, "title", label, bitmap);
+ }
+
+ if (app_res.show_date) {
+ if (doc && doc->date) {
+ label = doc->date;
+ bitmap = menu16_bitmap;
+ } else {
+ if (psfile) {
+ label = ctime(&mtime);
+ } else {
+ label = "";
+ }
+ bitmap = None;
+ }
+ XtSetArg(args[0], XtNlabel, label);
+ XtSetValues(datebutton, args, ONE);
+ if (datemenu) XtDestroyWidget(datemenu);
+ datemenu = build_label_menu(datebutton, "date", label, bitmap);
+ }
+
+ build_pagemedia_menu();
+
+ /* Reset ghostscript and output messages popup */
+ if (!doc || !olddoc ||
+ strcmp(oldfilename, filename) ||
+ olddoc->beginprolog != doc->beginprolog ||
+ olddoc->endprolog != doc->endprolog ||
+ olddoc->beginsetup != doc->beginsetup ||
+ olddoc->endsetup != doc->endsetup) {
+
+ GhostviewDisableInterpreter(page);
+ XtPopdown(infopopup);
+ info_up = False;
+ XtSetArg(args[0], XtNeditType, XawtextEdit);
+ XtSetArg(args[1], XtNinsertPosition, 0);
+ XtSetValues(infotext, args, TWO);
+ message_block.length = 0;
+ XawTextReplace(infotext, 0, info_length, &message_block);
+ info_length = 0;
+ XtSetArg(args[0], XtNeditType, XawtextRead);
+ XtSetValues(infotext, args, ONE);
+ }
+
+ /* Build table of contents */
+ if (doc && (!doc->epsf && doc->numpages > 0 ||
+ doc->epsf && doc->numpages > 1)) {
+ int maxlen = 0;
+ int i, j;
+ useful_page_labels = False;
+
+ if (doc->numpages == 1) useful_page_labels = True;
+ for (i = 1; i < doc->numpages; i++)
+ if (useful_page_labels = (useful_page_labels ||
+ strcmp(doc->pages[i-1].label, doc->pages[i].label))) break;
+ if (useful_page_labels) {
+ for (i = 0; i < doc->numpages; i++)
+ maxlen = max(maxlen, strlen(doc->pages[i].label));
+ } else {
+ double x;
+ x = doc->numpages;
+ maxlen = log10(x) + 1;
+ }
+ toc_entry_length = maxlen + 3;
+ toc_length = doc->numpages * toc_entry_length - 1;
+ toc_text = XtMalloc(toc_length + 2); /* include final NULL */
+
+ for (i = 0, tocp = toc_text; i < doc->numpages;
+ i++, tocp += toc_entry_length) {
+ if (useful_page_labels) {
+ if (doc->pageorder == DESCEND) {
+ j = (doc->numpages - 1) - i;
+ } else {
+ j = i;
+ }
+ sprintf(tocp, " %*s \n", maxlen, doc->pages[j].label);
+ } else {
+ sprintf(tocp, " %*d \n", maxlen, i+1);
+ }
+ }
+ toc_text[toc_length] = '\0';
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfilename, NULL); num_args++;
+ XtSetValues(page, args, num_args);
+ } else {
+ toc_length = 0;
+ toc_entry_length = 3;
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfilename, filename); num_args++;
+ XtSetValues(page, args, num_args);
+ }
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlength, toc_length); num_args++;
+ if (toc_text) {
+ XtSetArg(args[num_args], XtNstring, toc_text); num_args++;
+ } else {
+ /* Text widget sometime blows up when given a NULL pointer */
+ XtSetArg(args[num_args], XtNstring, nothing); num_args++;
+ }
+ XtSetValues(toc, args, num_args);
+
+ XtSetSensitive(reopenbutton, (psfile != NULL));
+ XtSetSensitive(printwholebutton, (psfile != NULL));
+ XtSetSensitive(printmarkedbutton, (psfile != NULL));
+ XtSetSensitive(savebutton, (toc_text != NULL));
+ XtSetSensitive(nextbutton, (filename != NULL));
+ XtSetSensitive(showbutton, (filename != NULL));
+ XtSetSensitive(prevbutton, (toc_text != NULL));
+ XtSetSensitive(centerbutton, (filename != NULL));
+ XtSetSensitive(markbutton, (toc_text != NULL));
+ XtSetSensitive(unmarkbutton, (toc_text != NULL));
+
+ return oldtoc_entry_length != toc_entry_length;
+}
+
+int
+find_page(label)
+ String label;
+{
+ int i, j;
+
+ if (label == NULL || doc == NULL) return 0;
+
+ if (useful_page_labels) {
+ for (i = 0; i < doc->numpages; i++) {
+ if (doc->pageorder == DESCEND) {
+ j = (doc->numpages - 1) - i;
+ } else {
+ j = i;
+ }
+ if (!strcmp(label, doc->pages[j].label)) return i;
+ }
+ return 0;
+ } else {
+ return atoi(label) - 1;
+ }
+}
+
+/* try_try_again sets the geometry of the form when the form failed
+ * to do it earlier. It uses activity check with exponential backoff
+ * to make sure that the dust has settled before trying again.
+ */
+static unsigned int delay = 125; /* Start with 1/8 second delay */
+
+static void
+try_try_again(client_data, timer)
+ XtPointer client_data;
+ XtIntervalId *timer;
+{
+ XSync(XtDisplay(toplevel), False); /* Push everything out */
+ if (XtAppPending(app_con)) {
+ XtAppAddTimeOut(app_con, delay, try_try_again, NULL);
+ /* fprintf(stderr, "Delaying(%d)...\n",delay); */
+ delay *= 2;
+ } else {
+ /* fprintf(stderr, "Trying again...\n"); */
+ layout_ghostview();
+ }
+}
+
+/* set the dimensions for items in the main form widget. */
+/* set foreground and background color in scrollbars. */
+/* (The scroll bars come and go as size changes.) */
+/* Set window manager hints to keep window manager from causing main */
+/* viewport from growing too large */
+void
+layout_ghostview()
+{
+ Arg args[20];
+ Dimension min_width, min_height;
+ Dimension max_width, max_height;
+ Dimension form_width, form_height;
+ Dimension title_height, title_border;
+ Dimension date_height, date_border;
+ Dimension locator_height, locator_border;
+ Dimension box_width, box_height, box_border;
+ Dimension label_width;
+ Dimension toc_width, toc_height, toc_border;
+ Dimension view_width, view_height, view_border;
+ Dimension page_width, page_height;
+ Dimension leftMargin, rightMargin;
+ Dimension width, height;
+ Boolean correct = True;
+ int distance;
+ int a_label;
+ XFontStruct *font;
+
+ XawFormDoLayout(form, False);
+ reset_size_hints();
+ reset_scroll_bars();
+ break_chains();
+
+ XtSetArg(args[0], XtNdefaultDistance, &distance);
+ XtGetValues(form, args, ONE);
+
+ a_label = 0;
+ if (app_res.show_title) {
+ XtSetArg(args[0], XtNheight, &title_height);
+ XtSetArg(args[1], XtNborderWidth, &title_border);
+ XtGetValues(titlebutton, args, TWO);
+ a_label = 1;
+ } else {
+ title_height = title_border = 0;
+ }
+
+ if (app_res.show_date) {
+ XtSetArg(args[0], XtNheight, &date_height);
+ XtSetArg(args[1], XtNborderWidth, &date_border);
+ XtGetValues(datebutton, args, TWO);
+ a_label = 1;
+ } else {
+ date_height = date_border = 0;
+ }
+
+ if (app_res.show_locator) {
+ XtSetArg(args[0], XtNheight, &locator_height);
+ XtSetArg(args[1], XtNborderWidth, &locator_border);
+ XtGetValues(locator, args, TWO);
+ a_label = 1;
+ } else {
+ locator_height = locator_border = 0;
+ }
+
+ XtSetArg(args[0], XtNwidth, &box_width);
+ XtSetArg(args[1], XtNheight, &box_height);
+ XtSetArg(args[2], XtNborderWidth, &box_border);
+ XtGetValues(box, args, THREE);
+
+ XtSetArg(args[0], XtNfont, &font);
+ XtSetArg(args[1], XtNleftMargin, &leftMargin);
+ XtSetArg(args[2], XtNrightMargin, &rightMargin);
+ XtSetArg(args[3], XtNborderWidth, &toc_border);
+ XtGetValues(toc, args, FOUR);
+ toc_width = font->max_bounds.width * (toc_entry_length - 1) +
+ leftMargin + rightMargin;
+
+ XtSetArg(args[0], XtNwidth, &page_width);
+ XtSetArg(args[1], XtNheight, &page_height);
+ XtGetValues(page, args, TWO);
+
+ XtSetArg(args[0], XtNborderWidth, &view_border);
+ XtGetValues(pageview, args, ONE);
+ view_width = page_width;
+ view_height = page_height;
+
+ min_width = box_width + 2*box_border + toc_width + 2*toc_border +
+ 2*view_border + 4*distance;
+ min_height = title_height + 2*title_border + date_height + 2*date_border +
+ locator_height + 2*locator_border + box_height + 2*box_border +
+ (2+a_label)*distance;
+
+ max_width = WidthOfScreen(XtScreen(toplevel)) - app_res.wm_horiz_margin;
+ max_height = HeightOfScreen(XtScreen(toplevel)) - app_res.wm_vert_margin;
+
+ if (min_width + view_width > max_width)
+ view_width = max_width - min_width;
+ if (2*(view_border + distance) + view_height > max_height)
+ view_height = max_height - 2*(view_border + distance);
+ form_width = view_width + min_width;
+ form_height = max(view_height + 2*(view_border + distance), min_height);
+ toc_height = view_height - (title_height + 2*title_border +
+ date_height + 2*date_border +
+ locator_height + 2*locator_border +
+ a_label*distance);
+
+ label_width = box_width + 2*box_border + distance +
+ toc_width + 2*toc_border;
+
+ XtSetArg(args[0], XtNwidth, form_width);
+ XtSetArg(args[1], XtNheight, form_height);
+ XtSetValues(form, args, TWO);
+
+ XtSetArg(args[0], XtNwidth, label_width);
+ if (app_res.show_title) XtSetValues(titlebutton, args, ONE);
+ if (app_res.show_date) XtSetValues(datebutton, args, ONE);
+ if (app_res.show_locator) XtSetValues(locator, args, ONE);
+
+ XtSetArg(args[0], XtNwidth, toc_width);
+ XtSetArg(args[1], XtNheight, toc_height);
+ XtSetValues(toc, args, TWO);
+
+ XtSetArg(args[0], XtNwidth, view_width);
+ XtSetArg(args[1], XtNheight, view_height);
+ XtSetValues(pageview, args, TWO);
+
+ XawFormDoLayout(form, True);
+
+ /* Check to make sure everything was done as planned. */
+ XtSetArg(args[0], XtNwidth, &width);
+ XtSetArg(args[1], XtNheight, &height);
+
+ XtGetValues(form, args, TWO);
+ if (width != form_width || height != form_height) {
+ correct = False;
+ /* fprintf(stderr, "Oops, %dx%d form was supposed to be %dx%d.\n",
+ width, height, form_width, form_height); */
+ }
+ if (app_res.show_title) {
+ XtGetValues(titlebutton, args, ONE);
+ if (width != label_width) {
+ correct = False;
+ /* fprintf(stderr,
+ "Oops, %d wide title was supposed to be %d wide.\n",
+ width, label_width); */
+ }
+ }
+ if (app_res.show_date) {
+ XtGetValues(datebutton, args, ONE);
+ if (width != label_width) {
+ correct = False;
+ /* fprintf(stderr,
+ "Oops, %d wide date was supposed to be %d wide.\n",
+ width, label_width); */
+ }
+ }
+ if (app_res.show_locator) {
+ XtGetValues(locator, args, ONE);
+ if (width != label_width) {
+ correct = False;
+ /* fprintf(stderr,
+ "Oops, %d wide locator was supposed to be %d wide.\n",
+ width, label_width); */
+ }
+ }
+ XtGetValues(toc, args, TWO);
+ if (width != toc_width || height != toc_height) {
+ correct = False;
+ /* fprintf(stderr, "Oops, %dx%d toc was supposed to be %dx%d.\n",
+ width, height, toc_width, toc_height); */
+ }
+ XtGetValues(pageview, args, TWO);
+ if (width != view_width || height != view_height) {
+ correct = False;
+ /* fprintf(stderr, "Oops, %dx%d pageview was supposed to be %dx%d.\n",
+ width, height, view_width, view_height); */
+ }
+
+ if (correct) {
+ set_size_hints(min_width, min_height, min_width+page_width,
+ max(form_height,
+ page_height + 2*(view_border + distance)));
+ if (app_res.auto_center) {
+ horiz_scroll_saved = vert_scroll_saved = False;
+ center_page(form, NULL, NULL);
+ } else {
+ set_scroll_bars();
+ }
+ set_chains();
+ delay = 125; /* Reset to 1/8 second delay */
+ /* fprintf(stderr, "Layout correct.\n"); */
+ } else {
+ XSync(XtDisplay(toplevel), False);
+ XtAppAddTimeOut(app_con, delay, try_try_again, NULL);
+ /* fprintf(stderr, "Didn't work, scheduling(%d)...\n",delay); */
+ }
+
+}
+
+/* Compute new dpi from magstep */
+void
+magnify(dpi, magstep)
+ float *dpi;
+ int magstep;
+{
+ if (magstep < 0) {
+ while (magstep++) *dpi /= 1.2;
+ } else {
+ while (magstep--) *dpi *= 1.2;
+ }
+}
+
+/* Attempt to open file, return error message string on failure */
+String
+open_file(name)
+ String name;
+{
+ FILE *fp;
+ struct stat sbuf;
+
+ if (*name == '\0') { /* Null filename */
+ return(NULL);
+ }
+ if (strcmp(name, "-")) {
+ if ((fp = fopen(name, "r")) == NULL) {
+ String buf = XtMalloc(strlen(app_res.open_fail) +
+ strlen(sys_errlist[errno]) + 1);
+ strcpy(buf, app_res.open_fail);
+ if (errno <= sys_nerr) strcat(buf, sys_errlist[errno]);
+ return buf;
+ } else {
+ if (oldfilename) XtFree(oldfilename);
+ oldfilename = filename;
+ filename = XtNewString(name);
+ if (psfile) fclose(psfile);
+ psfile = fp;
+ stat(filename, &sbuf);
+ mtime = sbuf.st_mtime;
+ new_file(0);
+ show_page(0);
+ return(NULL);
+ }
+ } else {
+ if (oldfilename) XtFree(oldfilename);
+ oldfilename = filename;
+ filename = XtNewString(name);
+ if (psfile) fclose(psfile);
+ psfile = NULL;
+ new_file(0);
+ show_page(0);
+ return(NULL);
+ }
+}
+
+/* Attempt to save file, return error message string on failure */
+String
+save_file(name)
+ String name;
+{
+ FILE *pswrite;
+
+ if (*name == '\0') { /* Null filename */
+ return(NULL);
+ }
+ if ((pswrite = fopen(name, "w")) == NULL) {
+ String buf = XtMalloc(strlen(app_res.save_fail) +
+ strlen(sys_errlist[errno]) + 1);
+ strcpy(buf, app_res.save_fail);
+ if (errno <= sys_nerr) strcat(buf, sys_errlist[errno]);
+ return buf;
+ } else {
+ pscopydoc(pswrite);
+ fclose(pswrite);
+ return(NULL);
+ }
+}
+
+/* Attempt to print file. Return error string on failure */
+String
+print_file(name, whole_mode)
+ String name;
+ Boolean whole_mode;
+{
+ FILE *printer;
+ SIGVAL (*oldsig)();
+ int bytes;
+ char buf[BUFSIZ];
+#ifdef VMS
+ char fnam[64], *p;
+#endif
+ Boolean failed;
+ String ret_val;
+
+#ifdef VMS
+ sprintf(fnam, "sys$scratch:%s.tmp", tmpnam(NULL));
+ printer = fopen(fnam, "w");
+#else /* VMS */
+ if (*name != '\0') {
+ setenv(app_res.printer_variable, name, True);
+ }
+ oldsig = signal(SIGPIPE, SIG_IGN);
+ printer = popen(app_res.print_command, "w");
+#endif /* VMS */
+ if (toc_text && !whole_mode) {
+ pscopydoc(printer);
+ } else {
+ FILE *psfile = fopen(filename, "r");
+ while (bytes = read(fileno(psfile), buf, BUFSIZ))
+ bytes = write(fileno(printer), buf, bytes);
+ fclose(psfile);
+ }
+#ifdef VMS
+ sprintf(buf, "%s %s %s", app_res.print_command, name, fnam);
+ failed = fclose(printer) != 0 || system(buf) != 1;
+#else /* VMS */
+ failed = pclose(printer) != 0;
+#endif /* VMS */
+ if (failed) {
+ sprintf(buf, app_res.print_fail, app_res.print_command);
+ ret_val = XtNewString(buf);
+ } else {
+ ret_val = NULL;
+ }
+#ifndef VMS
+ signal(SIGPIPE, oldsig);
+#endif /* VMS */
+ return(ret_val);
+}
+
+/* length calculates string length at compile time */
+/* can only be used with character constants */
+#define length(a) (sizeof(a)-1)
+
+/* Copy the headers, marked pages, and trailer to fp */
+void
+pscopydoc(fp)
+ FILE *fp;
+{
+ FILE *psfile;
+ char text[PSLINELENGTH];
+ char *comment;
+ Boolean pages_written = False;
+ Boolean pages_atend = False;
+ Boolean marked_pages = False;
+ int pages = 0;
+ int page = 1;
+ int i, j;
+ long here;
+
+ psfile = fopen(filename, "r");
+
+ for (i = 0; i < doc->numpages; i++) {
+ if (toc_text[toc_entry_length * i] == '*') pages++;
+ }
+
+ if (pages == 0) { /* User forgot to mark the pages */
+ mark_page(form, NULL, NULL);
+ marked_pages = True;
+ for (i = 0; i < doc->numpages; i++) {
+ if (toc_text[toc_entry_length * i] == '*') pages++;
+ }
+ }
+
+ here = doc->beginheader;
+ while (comment = pscopyuntil(psfile, fp, here,
+ doc->endheader, "%%Pages:")) {
+ here = ftell(psfile);
+ if (pages_written || pages_atend) {
+ free(comment);
+ continue;
+ }
+ sscanf(comment+length("%%Pages:"), "%s", text);
+ if (strcmp(text, "(atend)") == 0) {
+ fputs(comment, fp);
+ pages_atend = True;
+ } else {
+ switch (sscanf(comment+length("%%Pages:"), "%*d %d", &i)) {
+ case 1:
+ fprintf(fp, "%%%%Pages: %d %d\n", pages, i);
+ break;
+ default:
+ fprintf(fp, "%%%%Pages: %d\n", pages);
+ break;
+ }
+ pages_written = True;
+ }
+ free(comment);
+ }
+ pscopy(psfile, fp, doc->beginpreview, doc->endpreview);
+ pscopy(psfile, fp, doc->begindefaults, doc->enddefaults);
+ pscopy(psfile, fp, doc->beginprolog, doc->endprolog);
+ pscopy(psfile, fp, doc->beginsetup, doc->endsetup);
+
+ for (i = 0; i < doc->numpages; i++) {
+ if (doc->pageorder == DESCEND)
+ j = (doc->numpages - 1) - i;
+ else
+ j = i;
+ if (toc_text[toc_entry_length * j] == '*') {
+ comment = pscopyuntil(psfile, fp, doc->pages[i].begin,
+ doc->pages[i].end, "%%Page:");
+ fprintf(fp, "%%%%Page: %s %d\n",
+ doc->pages[i].label, page++);
+ free(comment);
+ pscopy(psfile, fp, -1, doc->pages[i].end);
+ }
+ }
+
+ here = doc->begintrailer;
+ while (comment = pscopyuntil(psfile, fp, here,
+ doc->endtrailer, "%%Pages:")) {
+ here = ftell(psfile);
+ if (pages_written) {
+ free(comment);
+ continue;
+ }
+ switch (sscanf(comment+length("%%Pages:"), "%*d %d", &i)) {
+ case 1:
+ fprintf(fp, "%%%%Pages: %d %d\n", pages, i);
+ break;
+ default:
+ fprintf(fp, "%%%%Pages: %d\n", pages);
+ break;
+ }
+ pages_written = True;
+ free(comment);
+ }
+ fclose(psfile);
+
+ if (marked_pages) unmark_page(form, NULL, NULL);
+}
+#undef length
+
+/* position popup window under the cursor */
+void
+positionpopup(w)
+ Widget w;
+{
+ Arg args[3];
+ Cardinal num_args;
+ Dimension width, height, b_width;
+ int x, y, max_x, max_y;
+ Window root, child;
+ int dummyx, dummyy;
+ unsigned int dummymask;
+
+ XQueryPointer(XtDisplay(w), XtWindow(w), &root, &child, &x, &y,
+ &dummyx, &dummyy, &dummymask);
+ num_args = 0;
+ XtSetArg(args[num_args], XtNwidth, &width); num_args++;
+ XtSetArg(args[num_args], XtNheight, &height); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, &b_width); num_args++;
+ XtGetValues(w, args, num_args);
+
+ width += 2 * b_width;
+ height += 2 * b_width;
+
+ x -= ( (Position) width/2 );
+ if (x < 0) x = 0;
+ if ( x > (max_x = (Position) (XtScreen(w)->width - width)) ) x = max_x;
+
+ y -= ( (Position) height/2 );
+ if (y < 0) y = 0;
+ if ( y > (max_y = (Position) (XtScreen(w)->height - height)) ) y = max_y;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNx, x); num_args++;
+ XtSetArg(args[num_args], XtNy, y); num_args++;
+ XtSetValues(w, args, num_args);
+}
+
+/* Set new magstep */
+Boolean
+set_new_magstep()
+{
+ int new_magstep;
+ Boolean changed = False;
+ Arg args[20];
+ Cardinal num_args;
+ float xdpi, ydpi;
+
+ new_magstep = app_res.magstep;
+ /* If magstep changed, stop interpreter and setup for new dpi. */
+ if (new_magstep != current_magstep) {
+ GhostviewDisableInterpreter(page);
+ XawFormDoLayout(form, False);
+ reset_size_hints();
+ reset_scroll_bars();
+ break_chains();
+ changed = True;
+ xdpi = default_xdpi;
+ ydpi = default_ydpi;
+ magnify(&xdpi, new_magstep);
+ magnify(&ydpi, new_magstep);
+ num_args = 0;
+ XtSetFloatArg(args[num_args], XtNxdpi, xdpi); num_args++;
+ XtSetFloatArg(args[num_args], XtNydpi, ydpi); num_args++;
+ XtSetValues(page, args, num_args);
+
+ XtSetArg(args[0], XtNleftBitmap, None);
+ XtSetValues(magstepentry[current_magstep - app_res.minimum_magstep],
+ args, ONE);
+ current_magstep = new_magstep;
+ }
+ XtSetArg(args[0], XtNleftBitmap, dot_bitmap);
+ XtSetValues(magstepentry[current_magstep - app_res.minimum_magstep],
+ args, ONE);
+
+ return changed;
+}
+
+/* Set new orientation */
+Boolean
+set_new_orientation(number)
+ int number;
+{
+ Boolean changed = False;
+ Boolean from_doc = False;
+ Arg args[1];
+ XtPageOrientation new_orientation;
+
+ if (app_res.force_orientation) {
+ new_orientation = app_res.orientation;
+ } else {
+ if (doc) {
+ if (toc_text && doc->pages[number].orientation != NONE) {
+ new_orientation = xorient(doc->pages[number].orientation);
+ from_doc = True;
+ } else if (doc->default_page_orientation != NONE) {
+ new_orientation = xorient(doc->default_page_orientation);
+ from_doc = True;
+ } else if (doc->orientation != NONE) {
+ new_orientation = xorient(doc->orientation);
+ from_doc = True;
+ } else {
+ new_orientation = app_res.orientation;
+ }
+ } else {
+ new_orientation = app_res.orientation;
+ }
+ }
+
+ /* If orientation changed,
+ * stop interpreter and setup for new orientation. */
+ if (new_orientation != current_orientation) {
+ GhostviewDisableInterpreter(page);
+ XawFormDoLayout(form, False);
+ reset_size_hints();
+ reset_scroll_bars();
+ break_chains();
+ changed = True;
+ XtSetArg(args[0], XtNorientation, new_orientation);
+ XtSetValues(page, args, ONE);
+ XtSetArg(args[0], XtNleftBitmap, None);
+ if (current_orientation == XtPageOrientationPortrait)
+ XtSetValues(portraitbutton, args, ONE);
+ else if (current_orientation == XtPageOrientationLandscape)
+ XtSetValues(landscapebutton, args, ONE);
+ else if (current_orientation == XtPageOrientationUpsideDown)
+ XtSetValues(upsidedownbutton, args, ONE);
+ else if (current_orientation == XtPageOrientationSeascape)
+ XtSetValues(seascapebutton, args, ONE);
+ current_orientation = new_orientation;
+ }
+
+ /* mark forced orientation with tie fighter. ("Use the force, Luke") */
+ if (app_res.force_orientation) {
+ XtSetArg(args[0], XtNleftBitmap, tie_fighter_bitmap);
+ } else if (from_doc) {
+ XtSetArg(args[0], XtNleftBitmap, menu16_bitmap);
+ } else {
+ XtSetArg(args[0], XtNleftBitmap, dot_bitmap);
+ }
+ if (current_orientation == XtPageOrientationPortrait)
+ XtSetValues(portraitbutton, args, ONE);
+ else if (current_orientation == XtPageOrientationLandscape)
+ XtSetValues(landscapebutton, args, ONE);
+ else if (current_orientation == XtPageOrientationUpsideDown)
+ XtSetValues(upsidedownbutton, args, ONE);
+ else if (current_orientation == XtPageOrientationSeascape)
+ XtSetValues(seascapebutton, args, ONE);
+
+ return changed;
+}
+
+/* Set new pagemedia */
+Boolean
+set_new_pagemedia(number)
+ int number;
+{
+ int new_pagemedia;
+ int new_llx;
+ int new_lly;
+ int new_urx;
+ int new_ury;
+ Boolean changed = False;
+ Boolean from_doc = False;
+ Arg args[4];
+
+ if (force_document_media) {
+ new_pagemedia = document_media;
+ } else if (app_res.force_pagemedia) {
+ new_pagemedia = default_pagemedia;
+ } else {
+ if (doc) {
+ if (toc_text && doc->pages[number].media != NULL) {
+ new_pagemedia = doc->pages[number].media - doc->media;
+ from_doc = True;
+ } else if (doc->default_page_media != NULL) {
+ new_pagemedia = doc->default_page_media - doc->media;
+ from_doc = True;
+ } else {
+ new_pagemedia = default_pagemedia;
+ }
+ } else {
+ new_pagemedia = default_pagemedia;
+ }
+ }
+
+ /* If pagemedia changed, remove the old marker. */
+ if (new_pagemedia != current_pagemedia) {
+ XtSetArg(args[0], XtNleftBitmap, None);
+ if (pagemediaentry[current_pagemedia])
+ XtSetValues(pagemediaentry[current_pagemedia], args, ONE);
+ else
+ XtSetValues(pagemediaentry[current_pagemedia-1], args, ONE);
+
+ current_pagemedia = new_pagemedia;
+ }
+
+ /* mark forced page media with tie fighter. ("Use the force, Luke") */
+ if (force_document_media || app_res.force_pagemedia) {
+ XtSetArg(args[0], XtNleftBitmap, tie_fighter_bitmap);
+ } else if (from_doc) {
+ XtSetArg(args[0], XtNleftBitmap, menu16_bitmap);
+ } else {
+ XtSetArg(args[0], XtNleftBitmap, dot_bitmap);
+ }
+ if (pagemediaentry[current_pagemedia])
+ XtSetValues(pagemediaentry[current_pagemedia], args, ONE);
+ else
+ XtSetValues(pagemediaentry[current_pagemedia-1], args, ONE);
+
+ /* Compute bounding box */
+ if (!force_document_media && !app_res.force_pagemedia &&
+ doc && doc->epsf &&
+ /* Ignore malformed bounding boxes */
+ (doc->boundingbox[URX] > doc->boundingbox[LLX]) &&
+ (doc->boundingbox[URY] > doc->boundingbox[LLY])) {
+ new_llx = doc->boundingbox[LLX];
+ new_lly = doc->boundingbox[LLY];
+ new_urx = doc->boundingbox[URX];
+ new_ury = doc->boundingbox[URY];
+ } else {
+ new_llx = new_lly = 0;
+ if (new_pagemedia < base_papersize) {
+ new_urx = doc->media[new_pagemedia].width;
+ new_ury = doc->media[new_pagemedia].height;
+ } else {
+ new_urx = papersizes[new_pagemedia-base_papersize].width;
+ new_ury = papersizes[new_pagemedia-base_papersize].height;
+ }
+ }
+
+ /* If bounding box changed, setup for new size. */
+ if ((new_llx != current_llx) || (new_lly != current_lly) ||
+ (new_urx != current_urx) || (new_ury != current_ury)) {
+ GhostviewDisableInterpreter(page);
+ XawFormDoLayout(form, False);
+ reset_size_hints();
+ reset_scroll_bars();
+ break_chains();
+ changed = True;
+ current_llx = new_llx;
+ current_lly = new_lly;
+ current_urx = new_urx;
+ current_ury = new_ury;
+ XtSetArg(args[0], XtNllx, current_llx);
+ XtSetArg(args[1], XtNlly, current_lly);
+ XtSetArg(args[2], XtNurx, current_urx);
+ XtSetArg(args[3], XtNury, current_ury);
+ XtSetValues(page, args, FOUR);
+ }
+
+ return changed;
+}
+
+static Boolean
+same_document_media()
+{
+ int i;
+
+ if (olddoc == NULL && doc == NULL) return True;
+ if (olddoc == NULL || doc == NULL) return False;
+ if (olddoc->nummedia != doc->nummedia) return False;
+ for (i = 0; i < doc->nummedia; i++)
+ if (strcmp(olddoc->media[i].name, doc->media[i].name)) return False;
+ return True;
+}
+
+void
+build_pagemedia_menu()
+{
+ Arg args[20];
+ Cardinal num_args;
+ Widget w;
+ int i;
+
+ if (pagemediamenu && same_document_media()) return;
+ if (pagemediamenu) XtDestroyWidget(pagemediamenu);
+ force_document_media = False;
+
+ pagemediamenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,
+ pagemediabutton, NULL, ZERO);
+
+ /* Build the Page Media menu */
+ /* the Page media menu has two parts.
+ * - the document defined page medias
+ * - the standard page media defined from Adobe's PPD
+ */
+ base_papersize = 0;
+ if (doc) base_papersize = doc->nummedia;
+ for (i = 0; papersizes[i].name; i++) {} /* Count the standard entries */
+ i += base_papersize;
+ pagemediaentry = (Widget *) XtMalloc(i * sizeof(Widget));
+
+ if (doc && doc->nummedia) {
+ for (i = 0; i < doc->nummedia; i++) {
+ num_args = 0;
+ XtSetArg(args[num_args], XtNleftMargin, 20); num_args++;
+ pagemediaentry[i] = XtCreateManagedWidget(doc->media[i].name,
+ smeBSBObjectClass, pagemediamenu,
+ args, num_args);
+ XtAddCallback(pagemediaentry[i], XtNcallback,
+ set_pagemedia, (XtPointer)i);
+ }
+
+ num_args = 0;
+ w = XtCreateManagedWidget("line", smeLineObjectClass, pagemediamenu,
+ args, num_args);
+ }
+
+ for (i = 0; papersizes[i].name; i++) {
+ pagemediaentry[i+base_papersize] = NULL;
+ if (i > 0) {
+ /* Skip over same paper size with small imageable area */
+ if ((papersizes[i].width == papersizes[i-1].width) &&
+ (papersizes[i].height == papersizes[i-1].height)) {
+ continue;
+ }
+ }
+ num_args = 0;
+ XtSetArg(args[num_args], XtNleftMargin, 20); num_args++;
+ pagemediaentry[i+base_papersize] = XtCreateManagedWidget(
+ papersizes[i].name,
+ smeBSBObjectClass, pagemediamenu,
+ args, num_args);
+ XtAddCallback(pagemediaentry[i+base_papersize], XtNcallback,
+ set_pagemedia, (XtPointer)(i+base_papersize));
+ }
+}
+
+Widget
+build_label_menu(parent, name, label, bitmap)
+ Widget parent;
+ String name, label;
+ Pixmap bitmap;
+{
+ Arg args[20];
+ Cardinal num_args;
+ Widget menu, entry;
+ num_args = 0;
+ menu = XtCreatePopupShell("menu", simpleMenuWidgetClass,
+ parent, args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNlabel, label); num_args++;
+ if (bitmap) {
+ XtSetArg(args[num_args], XtNleftMargin, 20); num_args++;
+ XtSetArg(args[num_args], XtNleftBitmap, bitmap); num_args++;
+ }
+ entry = XtCreateManagedWidget(name, smeBSBObjectClass,
+ menu, args, num_args);
+ return menu;
+}
+
+void
+new_file(number)
+ int number;
+{
+ Boolean layout_changed = False;
+
+ if (setup_ghostview()) layout_changed = True;
+
+ /* Coerce page number to fall in range */
+ if (toc_text) {
+ if (number >= doc->numpages) number = doc->numpages - 1;
+ if (number < 0) number = 0;
+ }
+
+ if (set_new_orientation(number)) layout_changed = True;
+ if (set_new_pagemedia(number)) layout_changed = True;
+ if (layout_changed) layout_ghostview();
+}
+
+/* Catch X errors die gracefully if one occurs */
+int
+catch_Xerror(dpy, err)
+ Display *dpy;
+ XErrorEvent *err;
+{
+ if (err->error_code == BadImplementation) {
+ old_Xerror(dpy, err);
+ return 0;
+ }
+ if (dying) return 0;
+ dying = True;
+ bomb = *err;
+ XtDestroyWidget(toplevel);
+ return 0;
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/pdf.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/pdf.c
new file mode 100644
index 0000000000..c50ae4baa3
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/pdf.c
@@ -0,0 +1,88 @@
+/* This file is part of the hacked version of the ghostview package */
+/* which is distributed under the terms of the gnu license. The */
+/* modification referred to above is by Tanmoy Bhattacharya, */
+/* <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification, */
+/* nor the original program provides any warranty. */
+#include <string.h>
+#include <ctype.h>
+#include <memory.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "pdf.h"
+#ifdef NOMEMMOVE
+#define memmove memcpy
+#endif
+static struct tagtable {
+ double xmin, ymin, xmax, ymax;
+ struct tagtable *next;
+ int page;
+} *tagstart=NULL, *tagcurrent=NULL;
+void pdf_process(char buf[])
+{char *pointer=buf;
+ while (*pointer&&(pointer=strstr(pointer,"\n%%[pdfinfo:\n"))) {
+ char *rectptr=strstr(pointer,"/Rect ");
+ char *pageptr=strstr(pointer,"/Page ");
+ char *endptr=strstr(pointer,"%%]\n");
+ char *lnkptr=strstr(pointer,"\n[/LNK ");
+ if (lnkptr && lnkptr<endptr && rectptr) {
+ rectptr += strlen("/Rect ");
+ while (isspace(*rectptr)) rectptr++;
+
+ if (*rectptr++ == '[') {
+ if(!tagstart) {
+ tagcurrent = tagstart = malloc(sizeof(struct tagtable));
+ if(!tagcurrent) {
+ strcat(buf,"\nGhostview: Unable to malloc!\n");
+ } }
+ else if (tagcurrent) {
+ tagcurrent->next = malloc(sizeof(struct tagtable));
+ tagcurrent = tagcurrent->next;}
+
+ if(!tagcurrent) {
+ strcat(buf,"\nGhostview: Something seriously wrong!\n");
+ }
+ else {
+ tagcurrent->next = NULL;
+ if (pageptr) {
+ pageptr += strlen("/Page ");
+ if(sscanf(pageptr,"%d",&tagcurrent->page) != 1) {
+ strcat(buf,"\nGhostview: Incorrect page specification\n");
+ tagcurrent->page = -1;
+ }
+ else tagcurrent->page--;
+ }
+ else
+ tagcurrent->page = -1;
+ if (sscanf(rectptr,"%lf %lf %lf %lf",&tagcurrent->xmin,
+ &tagcurrent->ymin, &tagcurrent->xmax, &tagcurrent->ymax)
+ != 4) {
+ strcat(buf,"\nGhostview: Incorrect rect specification\n");
+ fprintf(stderr,"error: %s\n",rectptr);
+ tagcurrent->xmin=0;
+ tagcurrent->ymin=0;
+ tagcurrent->xmax=0;
+ tagcurrent->ymax=0;
+ }
+ } }
+ }
+ if (endptr) {
+ endptr += strlen("%%]\n");
+ memmove(pointer,endptr,strlen(endptr)+1);
+ }
+ else pointer++;
+ }
+}
+
+void pdf_clear(void)
+{tagcurrent=tagstart=NULL;}
+
+int pdf_page(int x, int y)
+{struct tagtable *pointer=tagstart;
+ while(tagcurrent&&pointer){
+ if (x<=pointer->xmax && x >=pointer->xmin &&
+ y<=pointer->ymax && y >=pointer->ymin)
+ return pointer->page;
+ pointer = pointer->next;
+ }
+ return -1;
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/pdf.h b/support/hypertex/tanmoy/ghostview-1.5-hacked/pdf.h
new file mode 100644
index 0000000000..e9145bfbbe
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/pdf.h
@@ -0,0 +1,9 @@
+/* This file is part of the hacked version of the ghostview package */
+/* which is distributed under the terms of the gnu license. The */
+/* modification referred to above is by Tanmoy Bhattacharya, */
+/* <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification, */
+/* nor the original program provides any warranty. */
+void pdf_process(char buf[]);
+void pdf_clear(void);
+int pdf_page(int x, int y);
+
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/ps.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/ps.c
new file mode 100644
index 0000000000..d6f763a830
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/ps.c
@@ -0,0 +1,1431 @@
+/*
+ * ps.c -- Postscript scanning and copying routines.
+ * Copyright (C) 1992 Timothy O. Theisen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Tim Theisen Systems Programmer
+ * Internet: tim@cs.wisc.edu Department of Computer Sciences
+ * UUCP: uwvax!tim University of Wisconsin-Madison
+ * Phone: (608)262-0438 1210 West Dayton Street
+ * FAX: (608)262-9777 Madison, WI 53706
+ */
+
+#include <stdio.h>
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+#ifndef BUFSIZ
+#define BUFSIZ 1024
+#endif
+#include <ctype.h>
+#include <X11/Xos.h> /* #includes the appropriate <string.h> */
+#include "ps.h"
+
+#ifdef BSD4_2
+#define memset(a,b,c) bzero(a,c)
+#endif
+
+/* length calculates string length at compile time */
+/* can only be used with character constants */
+#define length(a) (sizeof(a)-1)
+#define iscomment(a, b) (strncmp(a, b, length(b)) == 0)
+#define DSCcomment(a) (a[0] == '%' && a[1] == '%')
+
+ /* list of standard paper sizes from Adobe's PPD. */
+
+struct documentmedia papersizes[] = {
+ "Letter", 612, 792,
+ "LetterSmall", 612, 792,
+ "Tabloid", 792, 1224,
+ "Ledger", 1224, 792,
+ "Legal", 612, 1008,
+ "Statement", 396, 612,
+ "Executive", 540, 720,
+ "A3", 842, 1190,
+ "A4", 595, 842,
+ "A4Small", 595, 842,
+ "A5", 420, 595,
+ "B4", 729, 1032,
+ "B5", 516, 729,
+ "Folio", 612, 936,
+ "Quarto", 610, 780,
+ "10x14", 720, 1008,
+ NULL, 0, 0
+};
+
+
+static char *readline();
+static char *gettextline();
+static char *gettext();
+static int blank();
+
+/*
+ * psscan -- scan the PostScript file for document structuring comments.
+ *
+ * This scanner is designed to retrieve the information necessary for
+ * the ghostview previewer. It will scan files that conform to any
+ * version (1.0, 2.0, 2.1, or 3.0) of the document structuring conventions.
+ * It does not really care which version of comments the file contains.
+ * (The comments are largely upward compatible.) It will scan a number
+ * of non-conforming documents. (You could have part of the document
+ * conform to V2.0 and the rest conform to V3.0. It would be similar
+ * to the DC-2 1/2+, it would look funny but it can still fly.)
+ *
+ * This routine returns a pointer to the document structure.
+ * The structure contains the information relevant to previewing.
+ * These include EPSF flag (to tell if the file is a encapsulated figure),
+ * Page Media (for the Page Size), Bounding Box (to minimize backing
+ * pixmap size or determine window size for encapsulated PostScript),
+ * Orientation of Paper (for default transformation matrix), and
+ * Page Order. The title and CreationDate are also retrieved to
+ * help identify the document.
+ *
+ * The following comments are examined:
+ *
+ * Header section:
+ * Must start with %!PS-Adobe-. Version numbers ignored.
+ *
+ * %!PS-Adobe-* [EPSF-*]
+ * %%BoundingBox: <int> <int> <int> <int>|(atend)
+ * %%CreationDate: <textline>
+ * %%Orientation: Portrait|Landscape|(atend)
+ * %%Pages: <uint> [<int>]|(atend)
+ * %%PageOrder: Ascend|Descend|Special|(atend)
+ * %%Title: <textline>
+ * %%DocumentMedia: <text> <real> <real> <real> <text> <text>
+ * %%DocumentPaperSizes: <text>
+ * %%EndComments
+ *
+ * Note: Either the 3.0 or 2.0 syntax for %%Pages is accepted.
+ * Also either the 2.0 %%DocumentPaperSizes or the 3.0
+ * %%DocumentMedia comments are accepted as well.
+ *
+ * The header section ends either explicitly with %%EndComments or
+ * implicitly with any line that does not begin with %X where X is
+ * a not whitespace character.
+ *
+ * If the file is encapsulated PostScript the optional Preview section
+ * is next:
+ *
+ * %%BeginPreview
+ * %%EndPreview
+ *
+ * This section explicitly begins and ends with the above comments.
+ *
+ * Next the Defaults section for version 3 page defaults:
+ *
+ * %%BeginDefaults
+ * %%PageBoundingBox: <int> <int> <int> <int>
+ * %%PageOrientation: Portrait|Landscape
+ * %%PageMedia: <text>
+ * %%EndDefaults
+ *
+ * This section explicitly begins and ends with the above comments.
+ *
+ * The prolog section either explicitly starts with %%BeginProlog or
+ * implicitly with any nonblank line.
+ *
+ * %%BeginProlog
+ * %%EndProlog
+ *
+ * The Prolog should end with %%EndProlog, however the proglog implicitly
+ * ends when %%BeginSetup, %%Page, %%Trailer or %%EOF are encountered.
+ *
+ * The Setup section is where the version 2 page defaults are found.
+ * This section either explicitly begins with %%BeginSetup or implicitly
+ * with any nonblank line after the Prolog.
+ *
+ * %%BeginSetup
+ * %%PageBoundingBox: <int> <int> <int> <int>
+ * %%PageOrientation: Portrait|Landscape
+ * %%PaperSize: <text>
+ * %%EndSetup
+ *
+ * The Setup should end with %%EndSetup, however the setup implicitly
+ * ends when %%Page, %%Trailer or %%EOF are encountered.
+ *
+ * Next each page starts explicitly with %%Page and ends implicitly with
+ * %%Page or %%Trailer or %%EOF. The following comments are recognized:
+ *
+ * %%Page: <text> <uint>
+ * %%PageBoundingBox: <int> <int> <int> <int>|(atend)
+ * %%PageOrientation: Portrait|Landscape
+ * %%PageMedia: <text>
+ * %%PaperSize: <text>
+ *
+ * The tralier section start explicitly with %%Trailer and end with %%EOF.
+ * The following comment are examined with the proper (atend) notation
+ * was used in the header:
+ *
+ * %%Trailer
+ * %%BoundingBox: <int> <int> <int> <int>|(atend)
+ * %%Orientation: Portrait|Landscape|(atend)
+ * %%Pages: <uint> [<int>]|(atend)
+ * %%PageOrder: Ascend|Descend|Special|(atend)
+ * %%EOF
+ *
+ *
+ * + A DC-3 received severe damage to one of its wings. The wing was a total
+ * loss. There was no replacement readily available, so the mechanic
+ * installed a wing from a DC-2.
+ */
+
+struct document *
+psscan(file)
+ FILE *file;
+{
+ struct document *doc;
+ int bb_set = NONE;
+ int pages_set = NONE;
+ int page_order_set = NONE;
+ int orientation_set = NONE;
+ int page_bb_set = NONE;
+ int page_media_set = NONE;
+ int preread; /* flag which tells the readline isn't needed */
+ int i;
+ unsigned int maxpages = 0;
+ unsigned int nextpage = 1; /* Next expected page */
+ unsigned int thispage;
+ int ignore = 0; /* whether to ignore page ordinals */
+ char *label;
+ char line[PSLINELENGTH]; /* 255 characters + 1 newline + 1 NULL */
+ char text[PSLINELENGTH]; /* Temporary storage for text */
+ long position; /* Position of the current line */
+ long beginsection; /* Position of the beginning of the section */
+ unsigned int line_len; /* Length of the current line */
+ unsigned int section_len; /* Place to accumulate the section length */
+ char *next_char; /* 1st char after text returned by gettext() */
+ char *cp;
+ struct documentmedia *dmp;
+
+ rewind(file);
+ if (readline(line, sizeof line, file, &position, &line_len) == NULL) {
+ fprintf(stderr, "Warning: empty file.\n");
+ return(NULL);
+ }
+
+ /* Header comments */
+
+ if (iscomment(line,"%!PS-Adobe-")) {
+ doc = (struct document *) malloc(sizeof(struct document));
+ if (doc == NULL) {
+ fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ memset(doc, 0, sizeof(struct document));
+ sscanf(line, "%*s %s", text);
+ doc->epsf = iscomment(text, "EPSF-");
+ doc->beginheader = position;
+ section_len = line_len;
+ } else {
+ return(NULL);
+ }
+
+ preread = 0;
+ while (preread || readline(line, sizeof line, file, &position, &line_len)) {
+ if (!preread) section_len += line_len;
+ preread = 0;
+ if (line[0] != '%' ||
+ iscomment(line+1, "%EndComments") ||
+ line[1] == ' ' || line[1] == '\t' || line[1] == '\n' ||
+ !isprint(line[1])) {
+ break;
+ } else if (line[1] != '%') {
+ /* Do nothing */
+ } else if (doc->title == NULL && iscomment(line+2, "Title:")) {
+ doc->title = gettextline(line+length("%%Title:"));
+ } else if (doc->date == NULL && iscomment(line+2, "CreationDate:")) {
+ doc->date = gettextline(line+length("%%CreationDate:"));
+ } else if (bb_set == NONE && iscomment(line+2, "BoundingBox:")) {
+ sscanf(line+length("%%BoundingBox:"), "%s", text);
+ if (strcmp(text, "(atend)") == 0) {
+ bb_set = ATEND;
+ } else {
+ if (sscanf(line+length("%%BoundingBox:"), "%d %d %d %d",
+ &(doc->boundingbox[LLX]),
+ &(doc->boundingbox[LLY]),
+ &(doc->boundingbox[URX]),
+ &(doc->boundingbox[URY])) == 4)
+ bb_set = 1;
+ else {
+ float fllx, flly, furx, fury;
+ if (sscanf(line+length("%%BoundingBox:"), "%f %f %f %f",
+ &fllx, &flly, &furx, &fury) == 4) {
+ bb_set = 1;
+ doc->boundingbox[LLX] = fllx;
+ doc->boundingbox[LLY] = flly;
+ doc->boundingbox[URX] = furx;
+ doc->boundingbox[URY] = fury;
+ if (fllx < doc->boundingbox[LLX])
+ doc->boundingbox[LLX]--;
+ if (flly < doc->boundingbox[LLY])
+ doc->boundingbox[LLY]--;
+ if (furx > doc->boundingbox[URX])
+ doc->boundingbox[URX]++;
+ if (fury > doc->boundingbox[URY])
+ doc->boundingbox[URY]++;
+ }
+ }
+ }
+ } else if (orientation_set == NONE &&
+ iscomment(line+2, "Orientation:")) {
+ sscanf(line+length("%%Orientation:"), "%s", text);
+ if (strcmp(text, "(atend)") == 0) {
+ orientation_set = ATEND;
+ } else if (strcmp(text, "Portrait") == 0) {
+ doc->orientation = PORTRAIT;
+ orientation_set = 1;
+ } else if (strcmp(text, "Landscape") == 0) {
+ doc->orientation = LANDSCAPE;
+ orientation_set = 1;
+ }
+ } else if (page_order_set == NONE && iscomment(line+2, "PageOrder:")) {
+ sscanf(line+length("%%PageOrder:"), "%s", text);
+ if (strcmp(text, "(atend)") == 0) {
+ page_order_set = ATEND;
+ } else if (strcmp(text, "Ascend") == 0) {
+ doc->pageorder = ASCEND;
+ page_order_set = 1;
+ } else if (strcmp(text, "Descend") == 0) {
+ doc->pageorder = DESCEND;
+ page_order_set = 1;
+ } else if (strcmp(text, "Special") == 0) {
+ doc->pageorder = SPECIAL;
+ page_order_set = 1;
+ }
+ } else if (pages_set == NONE && iscomment(line+2, "Pages:")) {
+ sscanf(line+length("%%Pages:"), "%s", text);
+ if (strcmp(text, "(atend)") == 0) {
+ pages_set = ATEND;
+ } else {
+ switch (sscanf(line+length("%%Pages:"), "%d %d",
+ &maxpages, &i)) {
+ case 2:
+ if (page_order_set == NONE) {
+ if (i == -1) {
+ doc->pageorder = DESCEND;
+ page_order_set = 1;
+ } else if (i == 0) {
+ doc->pageorder = SPECIAL;
+ page_order_set = 1;
+ } else if (i == 1) {
+ doc->pageorder = ASCEND;
+ page_order_set = 1;
+ }
+ }
+ case 1:
+ if (maxpages > 0) {
+ doc->pages = (struct page *) calloc(maxpages,
+ sizeof(struct page));
+ if (doc->pages == NULL) {
+ fprintf(stderr,
+ "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ }
+ }
+ }
+ } else if (doc->nummedia == NONE &&
+ iscomment(line+2, "DocumentMedia:")) {
+ float w, h;
+ doc->media = (struct documentmedia *)
+ malloc(sizeof (struct documentmedia));
+ if (doc->media == NULL) {
+ fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ doc->media[0].name = gettext(line+length("%%DocumentMedia:"),
+ &next_char);
+ if (doc->media[0].name != NULL) {
+ if (sscanf(next_char, "%f %f", &w, &h) == 2) {
+ doc->media[0].width = w + 0.5;
+ doc->media[0].height = h + 0.5;
+ }
+ if (doc->media[0].width != 0 && doc->media[0].height != 0)
+ doc->nummedia = 1;
+ else
+ free(doc->media[0].name);
+ }
+ preread=1;
+ while (readline(line, sizeof line, file, &position, &line_len) &&
+ DSCcomment(line) && iscomment(line+2, "+")) {
+ section_len += line_len;
+ doc->media = (struct documentmedia *)
+ realloc(doc->media,
+ (doc->nummedia+1)*
+ sizeof (struct documentmedia));
+ if (doc->media == NULL) {
+ fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ doc->media[doc->nummedia].name = gettext(line+length("%%+"),
+ &next_char);
+ if (doc->media[doc->nummedia].name != NULL) {
+ if (sscanf(next_char, "%f %f", &w, &h) == 2) {
+ doc->media[doc->nummedia].width = w + 0.5;
+ doc->media[doc->nummedia].height = h + 0.5;
+ }
+ if (doc->media[doc->nummedia].width != 0 &&
+ doc->media[doc->nummedia].height != 0) doc->nummedia++;
+ else
+ free(doc->media[doc->nummedia].name);
+ }
+ }
+ section_len += line_len;
+ if (doc->nummedia != 0) doc->default_page_media = doc->media;
+ } else if (doc->nummedia == NONE &&
+ iscomment(line+2, "DocumentPaperSizes:")) {
+
+ doc->media = (struct documentmedia *)
+ malloc(sizeof (struct documentmedia));
+ if (doc->media == NULL) {
+ fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ doc->media[0].name = gettext(line+length("%%DocumentPaperSizes:"),
+ &next_char);
+ if (doc->media[0].name != NULL) {
+ doc->media[0].width = 0;
+ doc->media[0].height = 0;
+ for (dmp=papersizes; dmp->name != NULL; dmp++) {
+ /* Note: Paper size comment uses down cased paper size
+ * name. Case insensitive compares are only used for
+ * PaperSize comments.
+ */
+ if (strcasecmp(doc->media[0].name, dmp->name) == 0) {
+ free(doc->media[0].name);
+ doc->media[0].name =
+ (char *)malloc(strlen(dmp->name)+1);
+ if (doc->media[0].name == NULL) {
+ fprintf(stderr,
+ "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ strcpy(doc->media[0].name, dmp->name);
+ doc->media[0].width = dmp->width;
+ doc->media[0].height = dmp->height;
+ break;
+ }
+ }
+ if (doc->media[0].width != 0 && doc->media[0].height != 0)
+ doc->nummedia = 1;
+ else
+ free(doc->media[0].name);
+ }
+ while (cp = gettext(next_char, &next_char)) {
+ doc->media = (struct documentmedia *)
+ realloc(doc->media,
+ (doc->nummedia+1)*
+ sizeof (struct documentmedia));
+ if (doc->media == NULL) {
+ fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ doc->media[doc->nummedia].name = cp;
+ doc->media[doc->nummedia].width = 0;
+ doc->media[doc->nummedia].height = 0;
+ for (dmp=papersizes; dmp->name != NULL; dmp++) {
+ /* Note: Paper size comment uses down cased paper size
+ * name. Case insensitive compares are only used for
+ * PaperSize comments.
+ */
+ if (strcasecmp(doc->media[doc->nummedia].name,
+ dmp->name) == 0) {
+ free(doc->media[doc->nummedia].name);
+ doc->media[doc->nummedia].name =
+ (char *)malloc(strlen(dmp->name)+1);
+ if (doc->media[doc->nummedia].name == NULL) {
+ fprintf(stderr,
+ "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ strcpy(doc->media[doc->nummedia].name, dmp->name);
+ doc->media[doc->nummedia].name = dmp->name;
+ doc->media[doc->nummedia].width = dmp->width;
+ doc->media[doc->nummedia].height = dmp->height;
+ break;
+ }
+ }
+ if (doc->media[doc->nummedia].width != 0 &&
+ doc->media[doc->nummedia].height != 0) doc->nummedia++;
+ else
+ free(doc->media[doc->nummedia].name);
+ }
+ preread=1;
+ while (readline(line, sizeof line, file, &position, &line_len) &&
+ DSCcomment(line) && iscomment(line+2, "+")) {
+ section_len += line_len;
+ next_char = line + length("%%+");
+ while (cp = gettext(next_char, &next_char)) {
+ doc->media = (struct documentmedia *)
+ realloc(doc->media,
+ (doc->nummedia+1)*
+ sizeof (struct documentmedia));
+ if (doc->media == NULL) {
+ fprintf(stderr,
+ "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ doc->media[doc->nummedia].name = cp;
+ doc->media[doc->nummedia].width = 0;
+ doc->media[doc->nummedia].height = 0;
+ for (dmp=papersizes; dmp->name != NULL; dmp++) {
+ /* Note: Paper size comment uses down cased paper size
+ * name. Case insensitive compares are only used for
+ * PaperSize comments.
+ */
+ if (strcasecmp(doc->media[doc->nummedia].name,
+ dmp->name) == 0) {
+ doc->media[doc->nummedia].width = dmp->width;
+ doc->media[doc->nummedia].height = dmp->height;
+ break;
+ }
+ }
+ if (doc->media[doc->nummedia].width != 0 &&
+ doc->media[doc->nummedia].height != 0) doc->nummedia++;
+ else
+ free(doc->media[doc->nummedia].name);
+ }
+ }
+ section_len += line_len;
+ if (doc->nummedia != 0) doc->default_page_media = doc->media;
+ }
+ }
+
+ if (DSCcomment(line) && iscomment(line+2, "EndComments")) {
+ readline(line, sizeof line, file, &position, &line_len);
+ section_len += line_len;
+ }
+ doc->endheader = position;
+ doc->lenheader = section_len - line_len;
+
+ /* Optional Preview comments for encapsulated PostScript files */
+
+ beginsection = position;
+ section_len = line_len;
+ while (blank(line) &&
+ readline(line, sizeof line, file, &position, &line_len)) {
+ section_len += line_len;
+ }
+
+ if (doc->epsf && DSCcomment(line) && iscomment(line+2, "BeginPreview")) {
+ doc->beginpreview = beginsection;
+ beginsection = 0;
+ while (readline(line, sizeof line, file, &position, &line_len) &&
+ !(DSCcomment(line) && iscomment(line+2, "EndPreview"))) {
+ section_len += line_len;
+ }
+ section_len += line_len;
+ readline(line, sizeof line, file, &position, &line_len);
+ section_len += line_len;
+ doc->endpreview = position;
+ doc->lenpreview = section_len - line_len;
+ }
+
+ /* Page Defaults for Version 3.0 files */
+
+ if (beginsection == 0) {
+ beginsection = position;
+ section_len = line_len;
+ }
+ while (blank(line) &&
+ readline(line, sizeof line, file, &position, &line_len)) {
+ section_len += line_len;
+ }
+
+ if (DSCcomment(line) && iscomment(line+2, "BeginDefaults")) {
+ doc->begindefaults = beginsection;
+ beginsection = 0;
+ while (readline(line, sizeof line, file, &position, &line_len) &&
+ !(DSCcomment(line) && iscomment(line+2, "EndDefaults"))) {
+ section_len += line_len;
+ if (!DSCcomment(line)) {
+ /* Do nothing */
+ } else if (doc->default_page_orientation == NONE &&
+ iscomment(line+2, "PageOrientation:")) {
+ sscanf(line+length("%%PageOrientation:"), "%s", text);
+ if (strcmp(text, "Portrait") == 0) {
+ doc->default_page_orientation = PORTRAIT;
+ } else if (strcmp(text, "Landscape") == 0) {
+ doc->default_page_orientation = LANDSCAPE;
+ }
+ } else if (page_media_set == NONE &&
+ iscomment(line+2, "PageMedia:")) {
+ cp = gettext(line+length("%%PageMedia:"), NULL);
+ for (dmp = doc->media, i=0; i<doc->nummedia; i++, dmp++) {
+ if (strcmp(cp, dmp->name) == 0) {
+ doc->default_page_media = dmp;
+ page_media_set = 1;
+ break;
+ }
+ }
+ free(cp);
+ } else if (page_bb_set == NONE &&
+ iscomment(line+2, "PageBoundingBox:")) {
+ if (sscanf(line+length("%%PageBoundingBox:"), "%d %d %d %d",
+ &(doc->default_page_boundingbox[LLX]),
+ &(doc->default_page_boundingbox[LLY]),
+ &(doc->default_page_boundingbox[URX]),
+ &(doc->default_page_boundingbox[URY])) == 4)
+ page_bb_set = 1;
+ else {
+ float fllx, flly, furx, fury;
+ if (sscanf(line+length("%%PageBoundingBox:"), "%f %f %f %f",
+ &fllx, &flly, &furx, &fury) == 4) {
+ page_bb_set = 1;
+ doc->default_page_boundingbox[LLX] = fllx;
+ doc->default_page_boundingbox[LLY] = flly;
+ doc->default_page_boundingbox[URX] = furx;
+ doc->default_page_boundingbox[URY] = fury;
+ if (fllx < doc->default_page_boundingbox[LLX])
+ doc->default_page_boundingbox[LLX]--;
+ if (flly < doc->default_page_boundingbox[LLY])
+ doc->default_page_boundingbox[LLY]--;
+ if (furx > doc->default_page_boundingbox[URX])
+ doc->default_page_boundingbox[URX]++;
+ if (fury > doc->default_page_boundingbox[URY])
+ doc->default_page_boundingbox[URY]++;
+ }
+ }
+ }
+ }
+ section_len += line_len;
+ readline(line, sizeof line, file, &position, &line_len);
+ section_len += line_len;
+ doc->enddefaults = position;
+ doc->lendefaults = section_len - line_len;
+ }
+
+ /* Document Prolog */
+
+ if (beginsection == 0) {
+ beginsection = position;
+ section_len = line_len;
+ }
+ while (blank(line) &&
+ readline(line, sizeof line, file, &position, &line_len)) {
+ section_len += line_len;
+ }
+
+ if (!(DSCcomment(line) &&
+ (iscomment(line+2, "BeginSetup") ||
+ iscomment(line+2, "Page:") ||
+ iscomment(line+2, "Trailer") ||
+ iscomment(line+2, "EOF")))) {
+ doc->beginprolog = beginsection;
+ beginsection = 0;
+ preread = 1;
+
+ while ((preread ||
+ readline(line, sizeof line, file, &position, &line_len)) &&
+ !(DSCcomment(line) &&
+ (iscomment(line+2, "EndProlog") ||
+ iscomment(line+2, "BeginSetup") ||
+ iscomment(line+2, "Page:") ||
+ iscomment(line+2, "Trailer") ||
+ iscomment(line+2, "EOF")))) {
+ if (!preread) section_len += line_len;
+ preread = 0;
+ }
+ section_len += line_len;
+ if (DSCcomment(line) && iscomment(line+2, "EndProlog")) {
+ readline(line, sizeof line, file, &position, &line_len);
+ section_len += line_len;
+ }
+ doc->endprolog = position;
+ doc->lenprolog = section_len - line_len;
+ }
+
+ /* Document Setup, Page Defaults found here for Version 2 files */
+
+ if (beginsection == 0) {
+ beginsection = position;
+ section_len = line_len;
+ }
+ while (blank(line) &&
+ readline(line, sizeof line, file, &position, &line_len)) {
+ section_len += line_len;
+ }
+
+ if (!(DSCcomment(line) &&
+ (iscomment(line+2, "Page:") ||
+ iscomment(line+2, "Trailer") ||
+ iscomment(line+2, "EOF")))) {
+ doc->beginsetup = beginsection;
+ beginsection = 0;
+ preread = 1;
+ while ((preread ||
+ readline(line, sizeof line, file, &position, &line_len)) &&
+ !(DSCcomment(line) &&
+ (iscomment(line+2, "EndSetup") ||
+ iscomment(line+2, "Page:") ||
+ iscomment(line+2, "Trailer") ||
+ iscomment(line+2, "EOF")))) {
+ if (!preread) section_len += line_len;
+ preread = 0;
+ if (!DSCcomment(line)) {
+ /* Do nothing */
+ } else if (doc->default_page_orientation == NONE &&
+ iscomment(line+2, "PageOrientation:")) {
+ sscanf(line+length("%%PageOrientation:"), "%s", text);
+ if (strcmp(text, "Portrait") == 0) {
+ doc->default_page_orientation = PORTRAIT;
+ } else if (strcmp(text, "Landscape") == 0) {
+ doc->default_page_orientation = LANDSCAPE;
+ }
+ } else if (page_media_set == NONE &&
+ iscomment(line+2, "PaperSize:")) {
+ cp = gettext(line+length("%%PaperSize:"), NULL);
+ for (dmp = doc->media, i=0; i<doc->nummedia; i++, dmp++) {
+ /* Note: Paper size comment uses down cased paper size
+ * name. Case insensitive compares are only used for
+ * PaperSize comments.
+ */
+ if (strcasecmp(cp, dmp->name) == 0) {
+ doc->default_page_media = dmp;
+ page_media_set = 1;
+ break;
+ }
+ }
+ free(cp);
+ } else if (page_bb_set == NONE &&
+ iscomment(line+2, "PageBoundingBox:")) {
+ if (sscanf(line+length("%%PageBoundingBox:"), "%d %d %d %d",
+ &(doc->default_page_boundingbox[LLX]),
+ &(doc->default_page_boundingbox[LLY]),
+ &(doc->default_page_boundingbox[URX]),
+ &(doc->default_page_boundingbox[URY])) == 4)
+ page_bb_set = 1;
+ else {
+ float fllx, flly, furx, fury;
+ if (sscanf(line+length("%%PageBoundingBox:"), "%f %f %f %f",
+ &fllx, &flly, &furx, &fury) == 4) {
+ page_bb_set = 1;
+ doc->default_page_boundingbox[LLX] = fllx;
+ doc->default_page_boundingbox[LLY] = flly;
+ doc->default_page_boundingbox[URX] = furx;
+ doc->default_page_boundingbox[URY] = fury;
+ if (fllx < doc->default_page_boundingbox[LLX])
+ doc->default_page_boundingbox[LLX]--;
+ if (flly < doc->default_page_boundingbox[LLY])
+ doc->default_page_boundingbox[LLY]--;
+ if (furx > doc->default_page_boundingbox[URX])
+ doc->default_page_boundingbox[URX]++;
+ if (fury > doc->default_page_boundingbox[URY])
+ doc->default_page_boundingbox[URY]++;
+ }
+ }
+ }
+ }
+ section_len += line_len;
+ if (DSCcomment(line) && iscomment(line+2, "EndSetup")) {
+ readline(line, sizeof line, file, &position, &line_len);
+ section_len += line_len;
+ }
+ doc->endsetup = position;
+ doc->lensetup = section_len - line_len;
+ }
+
+ /* Individual Pages */
+
+ if (beginsection == 0) {
+ beginsection = position;
+ section_len = line_len;
+ }
+ while (blank(line) &&
+ readline(line, sizeof line, file, &position, &line_len)) {
+ section_len += line_len;
+ }
+
+newpage:
+ while (DSCcomment(line) && iscomment(line+2, "Page:")) {
+ if (maxpages == 0) {
+ maxpages = 1;
+ doc->pages = (struct page *) calloc(maxpages, sizeof(struct page));
+ if (doc->pages == NULL) {
+ fprintf(stderr,
+ "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ }
+ label = gettext(line+length("%%Page:"), &next_char);
+ if (sscanf(next_char, "%d", &thispage) != 1) thispage = 0;
+ if (nextpage == 1) {
+ ignore = thispage != 1;
+ }
+ if (!ignore && thispage != nextpage) {
+ free(label);
+ doc->numpages--;
+ goto continuepage;
+ }
+ nextpage++;
+ if (doc->numpages == maxpages) {
+ maxpages++;
+ doc->pages = (struct page *)
+ realloc(doc->pages, maxpages*sizeof (struct page));
+ if (doc->pages == NULL) {
+ fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ }
+ memset(&(doc->pages[doc->numpages]), 0, sizeof(struct page));
+ page_bb_set = NONE;
+ doc->pages[doc->numpages].label = label;
+ if (beginsection) {
+ doc->pages[doc->numpages].begin = beginsection;
+ beginsection = 0;
+ } else {
+ doc->pages[doc->numpages].begin = position;
+ section_len = line_len;
+ }
+continuepage:
+ while (readline(line, sizeof line, file, &position, &line_len) &&
+ !(DSCcomment(line) &&
+ (iscomment(line+2, "Page:") ||
+ iscomment(line+2, "Trailer") ||
+ iscomment(line+2, "EOF")))) {
+ section_len += line_len;
+ if (!DSCcomment(line)) {
+ /* Do nothing */
+ } else if (doc->pages[doc->numpages].orientation == NONE &&
+ iscomment(line+2, "PageOrientation:")) {
+ sscanf(line+length("%%PageOrientation:"), "%s", text);
+ if (strcmp(text, "Portrait") == 0) {
+ doc->pages[doc->numpages].orientation = PORTRAIT;
+ } else if (strcmp(text, "Landscape") == 0) {
+ doc->pages[doc->numpages].orientation = LANDSCAPE;
+ }
+ } else if (doc->pages[doc->numpages].media == NULL &&
+ iscomment(line+2, "PageMedia:")) {
+ cp = gettext(line+length("%%PageMedia:"), NULL);
+ for (dmp = doc->media, i=0; i<doc->nummedia; i++, dmp++) {
+ if (strcmp(cp, dmp->name) == 0) {
+ doc->pages[doc->numpages].media = dmp;
+ break;
+ }
+ }
+ free(cp);
+ } else if (doc->pages[doc->numpages].media == NULL &&
+ iscomment(line+2, "PaperSize:")) {
+ cp = gettext(line+length("%%PaperSize:"), NULL);
+ for (dmp = doc->media, i=0; i<doc->nummedia; i++, dmp++) {
+ /* Note: Paper size comment uses down cased paper size
+ * name. Case insensitive compares are only used for
+ * PaperSize comments.
+ */
+ if (strcasecmp(cp, dmp->name) == 0) {
+ doc->pages[doc->numpages].media = dmp;
+ break;
+ }
+ }
+ free(cp);
+ } else if ((page_bb_set == NONE || page_bb_set == ATEND) &&
+ iscomment(line+2, "PageBoundingBox:")) {
+ sscanf(line+length("%%PageBoundingBox:"), "%s", text);
+ if (strcmp(text, "(atend)") == 0) {
+ page_bb_set = ATEND;
+ } else {
+ if (sscanf(line+length("%%PageBoundingBox:"), "%d %d %d %d",
+ &(doc->pages[doc->numpages].boundingbox[LLX]),
+ &(doc->pages[doc->numpages].boundingbox[LLY]),
+ &(doc->pages[doc->numpages].boundingbox[URX]),
+ &(doc->pages[doc->numpages].boundingbox[URY])) == 4)
+ if (page_bb_set == NONE) page_bb_set = 1;
+ else {
+ float fllx, flly, furx, fury;
+ if (sscanf(line+length("%%PageBoundingBox:"),
+ "%f %f %f %f",
+ &fllx, &flly, &furx, &fury) == 4) {
+ if (page_bb_set == NONE) page_bb_set = 1;
+ doc->pages[doc->numpages].boundingbox[LLX] = fllx;
+ doc->pages[doc->numpages].boundingbox[LLY] = flly;
+ doc->pages[doc->numpages].boundingbox[URX] = furx;
+ doc->pages[doc->numpages].boundingbox[URY] = fury;
+ if (fllx <
+ doc->pages[doc->numpages].boundingbox[LLX])
+ doc->pages[doc->numpages].boundingbox[LLX]--;
+ if (flly <
+ doc->pages[doc->numpages].boundingbox[LLY])
+ doc->pages[doc->numpages].boundingbox[LLY]--;
+ if (furx >
+ doc->pages[doc->numpages].boundingbox[URX])
+ doc->pages[doc->numpages].boundingbox[URX]++;
+ if (fury >
+ doc->pages[doc->numpages].boundingbox[URY])
+ doc->pages[doc->numpages].boundingbox[URY]++;
+ }
+ }
+ }
+ }
+ }
+ section_len += line_len;
+ doc->pages[doc->numpages].end = position;
+ doc->pages[doc->numpages].len = section_len - line_len;
+ doc->numpages++;
+ }
+
+ /* Document Trailer */
+
+ if (beginsection) {
+ doc->begintrailer = beginsection;
+ beginsection = 0;
+ } else {
+ doc->begintrailer = position;
+ section_len = line_len;
+ }
+
+ preread = 1;
+ while ((preread ||
+ readline(line, sizeof line, file, &position, &line_len)) &&
+ !(DSCcomment(line) && iscomment(line+2, "EOF"))) {
+ if (!preread) section_len += line_len;
+ preread = 0;
+ if (!DSCcomment(line)) {
+ /* Do nothing */
+ } else if (iscomment(line+2, "Page:")) {
+ free(gettext(line+length("%%Page:"), &next_char));
+ if (sscanf(next_char, "%d", &thispage) != 1) thispage = 0;
+ if (!ignore && thispage == nextpage) {
+ if (doc->numpages > 0) {
+ doc->pages[doc->numpages-1].end = position;
+ doc->pages[doc->numpages-1].len += section_len - line_len;
+ } else {
+ if (doc->endsetup) {
+ doc->endsetup = position;
+ doc->endsetup += section_len - line_len;
+ } else if (doc->endprolog) {
+ doc->endprolog = position;
+ doc->endprolog += section_len - line_len;
+ }
+ }
+ goto newpage;
+ }
+ } else if (bb_set == ATEND && iscomment(line+2, "BoundingBox:")) {
+ if (sscanf(line+length("%%BoundingBox:"), "%d %d %d %d",
+ &(doc->boundingbox[LLX]),
+ &(doc->boundingbox[LLY]),
+ &(doc->boundingbox[URX]),
+ &(doc->boundingbox[URY])) != 4) {
+ float fllx, flly, furx, fury;
+ if (sscanf(line+length("%%BoundingBox:"), "%f %f %f %f",
+ &fllx, &flly, &furx, &fury) == 4) {
+ doc->boundingbox[LLX] = fllx;
+ doc->boundingbox[LLY] = flly;
+ doc->boundingbox[URX] = furx;
+ doc->boundingbox[URY] = fury;
+ if (fllx < doc->boundingbox[LLX])
+ doc->boundingbox[LLX]--;
+ if (flly < doc->boundingbox[LLY])
+ doc->boundingbox[LLY]--;
+ if (furx > doc->boundingbox[URX])
+ doc->boundingbox[URX]++;
+ if (fury > doc->boundingbox[URY])
+ doc->boundingbox[URY]++;
+ }
+ }
+ } else if (orientation_set == ATEND &&
+ iscomment(line+2, "Orientation:")) {
+ sscanf(line+length("%%Orientation:"), "%s", text);
+ if (strcmp(text, "Portrait") == 0) {
+ doc->orientation = PORTRAIT;
+ } else if (strcmp(text, "Landscape") == 0) {
+ doc->orientation = LANDSCAPE;
+ }
+ } else if (page_order_set == ATEND && iscomment(line+2, "PageOrder:")) {
+ sscanf(line+length("%%PageOrder:"), "%s", text);
+ if (strcmp(text, "Ascend") == 0) {
+ doc->pageorder = ASCEND;
+ } else if (strcmp(text, "Descend") == 0) {
+ doc->pageorder = DESCEND;
+ } else if (strcmp(text, "Special") == 0) {
+ doc->pageorder = SPECIAL;
+ }
+ } else if (pages_set == ATEND && iscomment(line+2, "Pages:")) {
+ if (sscanf(line+length("%%Pages:"), "%*u %d", &i) == 1) {
+ if (page_order_set == NONE) {
+ if (i == -1) doc->pageorder = DESCEND;
+ else if (i == 0) doc->pageorder = SPECIAL;
+ else if (i == 1) doc->pageorder = ASCEND;
+ }
+ }
+ }
+ }
+ section_len += line_len;
+ if (DSCcomment(line) && iscomment(line+2, "EOF")) {
+ readline(line, sizeof line, file, &position, &line_len);
+ section_len += line_len;
+ }
+ doc->endtrailer = position;
+ doc->lentrailer = section_len - line_len;
+
+#if 0
+ section_len = line_len;
+ preread = 1;
+ while (preread ||
+ readline(line, sizeof line, file, &position, &line_len)) {
+ if (!preread) section_len += line_len;
+ preread = 0;
+ if (DSCcomment(line) && iscomment(line+2, "Page:")) {
+ free(gettext(line+length("%%Page:"), &next_char));
+ if (sscanf(next_char, "%d", &thispage) != 1) thispage = 0;
+ if (!ignore && thispage == nextpage) {
+ if (doc->numpages > 0) {
+ doc->pages[doc->numpages-1].end = position;
+ doc->pages[doc->numpages-1].len += doc->lentrailer +
+ section_len - line_len;
+ } else {
+ if (doc->endsetup) {
+ doc->endsetup = position;
+ doc->endsetup += doc->lentrailer +
+ section_len - line_len;
+ } else if (doc->endprolog) {
+ doc->endprolog = position;
+ doc->endprolog += doc->lentrailer +
+ section_len - line_len;
+ }
+ }
+ goto newpage;
+ }
+ }
+ }
+#endif
+ return doc;
+}
+
+/*
+ * psfree -- free dynamic storage associated with document structure.
+ */
+
+void
+psfree(doc)
+ struct document *doc;
+{
+ int i;
+
+ if (doc) {
+ for (i=0; i<doc->numpages; i++) {
+ if (doc->pages[i].label) free(doc->pages[i].label);
+ }
+ for (i=0; i<doc->nummedia; i++) {
+ if (doc->media[i].name) free(doc->media[i].name);
+ }
+ if (doc->title) free(doc->title);
+ if (doc->date) free(doc->date);
+ if (doc->pages) free(doc->pages);
+ if (doc->media) free(doc->media);
+ free(doc);
+ }
+}
+
+/*
+ * gettextine -- skip over white space and return the rest of the line.
+ * If the text begins with '(' return the text string
+ * using gettext().
+ */
+
+static char *
+gettextline(line)
+ char *line;
+{
+ char *cp;
+
+ while (*line && (*line == ' ' || *line == '\t')) line++;
+ if (*line == '(') {
+ return gettext(line, NULL);
+ } else {
+ if (strlen(line) == 0) return NULL;
+ cp = (char *) malloc(strlen(line));
+ if (cp == NULL) {
+ fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ strncpy(cp, line, strlen(line)-1);
+ cp[strlen(line)-1] = '\0';
+ return cp;
+ }
+}
+
+/*
+ * gettext -- return the next text string on the line.
+ * return NULL if nothing is present.
+ */
+
+static char *
+gettext(line, next_char)
+ char *line;
+ char **next_char;
+{
+ char text[PSLINELENGTH]; /* Temporary storage for text */
+ char *cp;
+ int quoted=0;
+
+ while (*line && (*line == ' ' || *line == '\t')) line++;
+ cp = text;
+ if (*line == '(') {
+ int level = 0;
+ quoted=1;
+ line++;
+ while (*line && !(*line == ')' && level == 0 )) {
+ if (*line == '\\') {
+ if (*(line+1) == 'n') {
+ *cp++ = '\n';
+ line += 2;
+ } else if (*(line+1) == 'r') {
+ *cp++ = '\r';
+ line += 2;
+ } else if (*(line+1) == 't') {
+ *cp++ = '\t';
+ line += 2;
+ } else if (*(line+1) == 'b') {
+ *cp++ = '\b';
+ line += 2;
+ } else if (*(line+1) == 'f') {
+ *cp++ = '\f';
+ line += 2;
+ } else if (*(line+1) == '\\') {
+ *cp++ = '\\';
+ line += 2;
+ } else if (*(line+1) == '(') {
+ *cp++ = '(';
+ line += 2;
+ } else if (*(line+1) == ')') {
+ *cp++ = ')';
+ line += 2;
+ } else if (*(line+1) >= '0' && *(line+1) <= '9') {
+ if (*(line+2) >= '0' && *(line+2) <= '9') {
+ if (*(line+3) >= '0' && *(line+3) <= '9') {
+ *cp++ = ((*(line+1) - '0')*8 + *(line+2) - '0')*8 +
+ *(line+3) - '0';
+ line += 4;
+ } else {
+ *cp++ = (*(line+1) - '0')*8 + *(line+2) - '0';
+ line += 3;
+ }
+ } else {
+ *cp++ = *(line+1) - '0';
+ line += 2;
+ }
+ } else {
+ line++;
+ *cp++ = *line++;
+ }
+ } else if (*line == '(') {
+ level++;
+ *cp++ = *line++;
+ } else if (*line == ')') {
+ level--;
+ *cp++ = *line++;
+ } else {
+ *cp++ = *line++;
+ }
+ }
+ } else {
+ while (*line && !(*line == ' ' || *line == '\t' || *line == '\n'))
+ *cp++ = *line++;
+ }
+ *cp = '\0';
+ if (next_char) *next_char = line;
+ if (!quoted && strlen(text) == 0) return NULL;
+ cp = (char *) malloc(strlen(text)+1);
+ if (cp == NULL) {
+ fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ strcpy(cp, text);
+ return cp;
+}
+
+/*
+ * readline -- Read the next line in the postscript file.
+ * Automatically skip over data (as indicated by
+ * %%BeginBinary/%%EndBinary or %%BeginData/%%EndData
+ * comments.)
+ * Also, skip over included documents (as indicated by
+ * %%BeginDocument/%%EndDocument comments.)
+ */
+
+static char *
+readline(line, size, fp, position, line_len)
+ char *line;
+ int size;
+ FILE *fp;
+ long *position;
+ unsigned int *line_len;
+{
+ char text[PSLINELENGTH]; /* Temporary storage for text */
+ char save[PSLINELENGTH]; /* Temporary storage for text */
+ char *cp;
+ unsigned int num;
+ unsigned int nbytes;
+ int i;
+ char buf[BUFSIZ];
+
+ if (position) *position = ftell(fp);
+ cp = fgets(line, size, fp);
+ if (cp == NULL) line[0] = '\0';
+ *line_len = strlen(line);
+ if (!(DSCcomment(line) && iscomment(line+2, "Begin"))) {
+ /* Do nothing */
+ } else if (iscomment(line+7, "Document:")) {
+ strcpy(save, line+7);
+ while (readline(line, size, fp, NULL, &nbytes) &&
+ !(DSCcomment(line) && iscomment(line+2, "EndDocument"))) {
+ *line_len += nbytes;
+ }
+ *line_len += nbytes;
+ strcpy(line, save);
+ } else if (iscomment(line+7, "Feature:")) {
+ strcpy(save, line+7);
+ while (readline(line, size, fp, NULL, &nbytes) &&
+ !(DSCcomment(line) && iscomment(line+2, "EndFeature"))) {
+ *line_len += nbytes;
+ }
+ *line_len += nbytes;
+ strcpy(line, save);
+ } else if (iscomment(line+7, "File:")) {
+ strcpy(save, line+7);
+ while (readline(line, size, fp, NULL, &nbytes) &&
+ !(DSCcomment(line) && iscomment(line+2, "EndFile"))) {
+ *line_len += nbytes;
+ }
+ *line_len += nbytes;
+ strcpy(line, save);
+ } else if (iscomment(line+7, "Font:")) {
+ strcpy(save, line+7);
+ while (readline(line, size, fp, NULL, &nbytes) &&
+ !(DSCcomment(line) && iscomment(line+2, "EndFont"))) {
+ *line_len += nbytes;
+ }
+ *line_len += nbytes;
+ strcpy(line, save);
+ } else if (iscomment(line+7, "ProcSet:")) {
+ strcpy(save, line+7);
+ while (readline(line, size, fp, NULL, &nbytes) &&
+ !(DSCcomment(line) && iscomment(line+2, "EndProcSet"))) {
+ *line_len += nbytes;
+ }
+ *line_len += nbytes;
+ strcpy(line, save);
+ } else if (iscomment(line+7, "Resource:")) {
+ strcpy(save, line+7);
+ while (readline(line, size, fp, NULL, &nbytes) &&
+ !(DSCcomment(line) && iscomment(line+2, "EndResource"))) {
+ *line_len += nbytes;
+ }
+ *line_len += nbytes;
+ strcpy(line, save);
+ } else if (iscomment(line+7, "Data:")) {
+ text[0] = '\0';
+ strcpy(save, line+7);
+ if (sscanf(line+length("%%BeginData:"), "%d %*s %s", &num, text) >= 1) {
+ if (strcmp(text, "Lines") == 0) {
+ for (i=0; i < num; i++) {
+ cp = fgets(line, size, fp);
+ *line_len += cp ? strlen(line) : 0;
+ }
+ } else {
+ while (num > BUFSIZ) {
+ fread(buf, sizeof (char), BUFSIZ, fp);
+ *line_len += BUFSIZ;
+ num -= BUFSIZ;
+ }
+ fread(buf, sizeof (char), num, fp);
+ *line_len += num;
+ }
+ }
+ while (readline(line, size, fp, NULL, &nbytes) &&
+ !(DSCcomment(line) && iscomment(line+2, "EndData"))) {
+ *line_len += nbytes;
+ }
+ *line_len += nbytes;
+ strcpy(line, save);
+ } else if (iscomment(line+7, "Binary:")) {
+ strcpy(save, line+7);
+ if(sscanf(line+length("%%BeginBinary:"), "%d", &num) == 1) {
+ while (num > BUFSIZ) {
+ fread(buf, sizeof (char), BUFSIZ, fp);
+ *line_len += BUFSIZ;
+ num -= BUFSIZ;
+ }
+ fread(buf, sizeof (char), num, fp);
+ *line_len += num;
+ }
+ while (readline(line, size, fp, NULL, &nbytes) &&
+ !(DSCcomment(line) && iscomment(line+2, "EndBinary"))) {
+ *line_len += nbytes;
+ }
+ *line_len += nbytes;
+ strcpy(line, save);
+ }
+ return cp;
+}
+
+/*
+ * pscopy -- copy lines of Postscript from a section of one file
+ * to another file.
+ * Automatically switch to binary copying whenever
+ * %%BeginBinary/%%EndBinary or %%BeginData/%%EndData
+ * comments are encountered.
+ */
+
+void
+pscopy(from, to, begin, end)
+ FILE *from;
+ FILE *to;
+ long begin; /* set negative to avoid initial seek */
+ long end;
+{
+ char line[PSLINELENGTH]; /* 255 characters + 1 newline + 1 NULL */
+ char text[PSLINELENGTH]; /* Temporary storage for text */
+ unsigned int num;
+ int i;
+ char buf[BUFSIZ];
+
+ if (begin >= 0) fseek(from, begin, SEEK_SET);
+ while (ftell(from) < end) {
+
+ fgets(line, sizeof line, from);
+ fputs(line, to);
+
+ if (!(DSCcomment(line) && iscomment(line+2, "Begin"))) {
+ /* Do nothing */
+ } else if (iscomment(line+7, "Data:")) {
+ text[0] = '\0';
+ if (sscanf(line+length("%%BeginData:"),
+ "%d %*s %s", &num, text) >= 1) {
+ if (strcmp(text, "Lines") == 0) {
+ for (i=0; i < num; i++) {
+ fgets(line, sizeof line, from);
+ fputs(line, to);
+ }
+ } else {
+ while (num > BUFSIZ) {
+ fread(buf, sizeof (char), BUFSIZ, from);
+ fwrite(buf, sizeof (char), BUFSIZ, to);
+ num -= BUFSIZ;
+ }
+ fread(buf, sizeof (char), num, from);
+ fwrite(buf, sizeof (char), num, to);
+ }
+ }
+ } else if (iscomment(line+7, "Binary:")) {
+ if(sscanf(line+length("%%BeginBinary:"), "%d", &num) == 1) {
+ while (num > BUFSIZ) {
+ fread(buf, sizeof (char), BUFSIZ, from);
+ fwrite(buf, sizeof (char), BUFSIZ, to);
+ num -= BUFSIZ;
+ }
+ fread(buf, sizeof (char), num, from);
+ fwrite(buf, sizeof (char), num, to);
+ }
+ }
+ }
+}
+
+/*
+ * pscopyuntil -- copy lines of Postscript from a section of one file
+ * to another file until a particular comment is reached.
+ * Automatically switch to binary copying whenever
+ * %%BeginBinary/%%EndBinary or %%BeginData/%%EndData
+ * comments are encountered.
+ */
+
+char *
+pscopyuntil(from, to, begin, end, comment)
+ FILE *from;
+ FILE *to;
+ long begin; /* set negative to avoid initial seek */
+ long end;
+#if NeedFunctionPrototypes
+ const
+#endif
+ char *comment;
+{
+ char line[PSLINELENGTH]; /* 255 characters + 1 newline + 1 NULL */
+ char text[PSLINELENGTH]; /* Temporary storage for text */
+ unsigned int num;
+ int comment_length;
+ int i;
+ char buf[BUFSIZ];
+ char *cp;
+
+ comment_length = strlen(comment);
+ if (begin >= 0) fseek(from, begin, SEEK_SET);
+ while (ftell(from) < end) {
+
+ fgets(line, sizeof line, from);
+
+ /* iscomment cannot be used here,
+ * because comment_length is not known at compile time. */
+ if (strncmp(line, comment, comment_length) == 0) {
+ cp = (char *) malloc(strlen(line)+1);
+ if (cp == NULL) {
+ fprintf(stderr, "Fatal Error: Dynamic memory exhausted.\n");
+ exit(-1);
+ }
+ strcpy(cp, line);
+ return cp;
+ }
+ fputs(line, to);
+ if (!(DSCcomment(line) && iscomment(line+2, "Begin"))) {
+ /* Do nothing */
+ } else if (iscomment(line+7, "Data:")) {
+ text[0] = '\0';
+ if (sscanf(line+length("%%BeginData:"),
+ "%d %*s %s", &num, text) >= 1) {
+ if (strcmp(text, "Lines") == 0) {
+ for (i=0; i < num; i++) {
+ fgets(line, sizeof line, from);
+ fputs(line, to);
+ }
+ } else {
+ while (num > BUFSIZ) {
+ fread(buf, sizeof (char), BUFSIZ, from);
+ fwrite(buf, sizeof (char), BUFSIZ, to);
+ num -= BUFSIZ;
+ }
+ fread(buf, sizeof (char), num, from);
+ fwrite(buf, sizeof (char), num, to);
+ }
+ }
+ } else if (iscomment(line+7, "Binary:")) {
+ if(sscanf(line+length("%%BeginBinary:"), "%d", &num) == 1) {
+ while (num > BUFSIZ) {
+ fread(buf, sizeof (char), BUFSIZ, from);
+ fwrite(buf, sizeof (char), BUFSIZ, to);
+ num -= BUFSIZ;
+ }
+ fread(buf, sizeof (char), num, from);
+ fwrite(buf, sizeof (char), num, to);
+ }
+ }
+ }
+ return NULL;
+}
+
+/*
+ * blank -- determine whether the line contains nothing but whitespace.
+ */
+
+static int
+blank(line)
+ char *line;
+{
+ char *cp = line;
+
+ while (*cp == ' ' || *cp == '\t') cp++;
+ return *cp == '\n' || (*cp == '%' && (line[0] != '%' || line[1] != '%'));
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/ps.h b/support/hypertex/tanmoy/ghostview-1.5-hacked/ps.h
new file mode 100644
index 0000000000..b5480c7c27
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/ps.h
@@ -0,0 +1,127 @@
+/*
+ * ps.h -- Include file for PostScript routines.
+ * Copyright (C) 1992 Timothy O. Theisen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Tim Theisen Systems Programmer
+ * Internet: tim@cs.wisc.edu Department of Computer Sciences
+ * UUCP: uwvax!tim University of Wisconsin-Madison
+ * Phone: (608)262-0438 1210 West Dayton Street
+ * FAX: (608)262-9777 Madison, WI 53706
+ */
+
+#ifndef NeedFunctionPrototypes
+#if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
+#define NeedFunctionPrototypes 1
+#else
+#define NeedFunctionPrototypes 0
+#endif /* __STDC__ */
+#endif /* NeedFunctionPrototypes */
+
+ /* Constants used to index into the bounding box array. */
+
+#define LLX 0
+#define LLY 1
+#define URX 2
+#define URY 3
+
+ /* Constants used to store keywords that are scanned. */
+ /* NONE is not a keyword, it tells when a field was not set */
+
+enum {ATEND = -1, NONE = 0, PORTRAIT, LANDSCAPE, ASCEND, DESCEND, SPECIAL};
+
+#define PSLINELENGTH 257 /* 255 characters + 1 newline + 1 NULL */
+
+struct document {
+ int epsf; /* Encapsulated PostScript flag. */
+ char *title; /* Title of document. */
+ char *date; /* Creation date. */
+ int pageorder; /* ASCEND, DESCEND, SPECIAL */
+ long beginheader, endheader; /* offsets into file */
+ unsigned int lenheader;
+ long beginpreview, endpreview;
+ unsigned int lenpreview;
+ long begindefaults, enddefaults;
+ unsigned int lendefaults;
+ long beginprolog, endprolog;
+ unsigned int lenprolog;
+ long beginsetup, endsetup;
+ unsigned int lensetup;
+ long begintrailer, endtrailer;
+ unsigned int lentrailer;
+ int boundingbox[4];
+ int default_page_boundingbox[4];
+ int orientation; /* PORTRAIT, LANDSCAPE */
+ int default_page_orientation; /* PORTRAIT, LANDSCAPE */
+ unsigned int nummedia;
+ struct documentmedia *media;
+ struct documentmedia *default_page_media;
+ unsigned int numpages;
+ struct page *pages;
+};
+
+struct page {
+ char *label;
+ int boundingbox[4];
+ struct documentmedia *media;
+ int orientation; /* PORTRAIT, LANDSCAPE */
+ long begin, end; /* offsets into file */
+ unsigned int len;
+};
+
+struct documentmedia {
+ char *name;
+ int width, height;
+};
+
+ /* list of standard paper sizes from Adobe's PPD. */
+
+extern struct documentmedia papersizes[];
+
+ /* scans a PostScript file and return a pointer to the document
+ structure. Returns NULL if file does not Conform to commenting
+ conventions . */
+
+#if NeedFunctionPrototypes
+struct document *psscan(FILE *);
+#else
+struct document *psscan();
+#endif
+
+ /* free data structure malloc'ed by psscan */
+
+#if NeedFunctionPrototypes
+void psfree(struct document *);
+#else
+void psfree();
+#endif
+
+ /* Copy a portion of the PostScript file */
+
+#if NeedFunctionPrototypes
+void pscopy(FILE *from, FILE *to, long begin, long end);
+#else
+void pscopy();
+#endif
+
+ /* Copy a portion of the PostScript file upto a comment */
+
+#if NeedFunctionPrototypes
+char *pscopyuntil(FILE *from, FILE *to, long begin, long end,
+ const char *comment);
+#else
+char *pscopyuntil();
+#endif
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/run-ad2c b/support/hypertex/tanmoy/ghostview-1.5-hacked/run-ad2c
new file mode 100644
index 0000000000..e1e2bf63b3
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/run-ad2c
@@ -0,0 +1 @@
+ad2c ghostview.ad >app-defaults.h
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/setenv.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/setenv.c
new file mode 100644
index 0000000000..7d84068aa3
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/setenv.c
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 1987 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that: (1) source distributions retain this entire copyright
+ * notice and comment, and (2) distributions including binaries display
+ * the following acknowledgement: ``This product includes software
+ * developed by the University of California, Berkeley and its contributors''
+ * in the documentation or other materials provided with the distribution
+ * and in all advertising materials mentioning features or use of this
+ * software. Neither the name of the University nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)setenv.c 5.4 (Berkeley) 6/1/90";
+#endif /* LIBC_SCCS and not lint */
+
+#include <stdio.h>
+#include <sys/types.h>
+extern char *malloc();
+
+#ifdef BSD4_2
+#define memcpy(a,b,c) bcopy(b,a,c)
+#endif
+
+/*
+ * setenv --
+ * Set the value of the environmental variable "name" to be
+ * "value". If rewrite is set, replace any current value.
+ */
+setenv(name, value, rewrite)
+ register char *name, *value;
+ int rewrite;
+{
+ extern char **environ;
+ static int alloced; /* if allocated space before */
+ register char *C;
+ int l_value, offset;
+ char *_findenv();
+
+ if (*value == '=') /* no `=' in value */
+ ++value;
+ l_value = strlen(value);
+ if ((C = _findenv(name, &offset))) { /* find if already exists */
+ if (!rewrite)
+ return(0);
+ if (strlen(C) >= l_value) { /* old larger; copy over */
+ while (*C++ = *value++);
+ return(0);
+ }
+ }
+ else { /* create new slot */
+ register int cnt;
+ register char **P;
+
+ for (P = environ, cnt = 0; *P; ++P, ++cnt);
+ if (alloced) { /* just increase size */
+ environ = (char **)realloc((char *)environ,
+ (size_t)(sizeof(char *) * (cnt + 2)));
+ if (!environ)
+ return(-1);
+ }
+ else { /* get new space */
+ alloced = 1; /* copy old entries into it */
+ P = (char **)malloc((size_t)(sizeof(char *) *
+ (cnt + 2)));
+ if (!P)
+ return(-1);
+ memcpy(P, environ, cnt * sizeof(char *));
+ environ = P;
+ }
+ environ[cnt + 1] = NULL;
+ offset = cnt;
+ }
+ for (C = name; *C && *C != '='; ++C); /* no `=' in name */
+ if (!(environ[offset] = /* name + `=' + value */
+ malloc((size_t)((int)(C - name) + l_value + 2))))
+ return(-1);
+ for (C = environ[offset]; (*C = *name++) && *C != '='; ++C);
+ for (*C++ = '='; *C++ = *value++;);
+ return(0);
+}
+
+/*
+ * unsetenv(name) --
+ * Delete environmental variable "name".
+ */
+void
+unsetenv(name)
+ char *name;
+{
+ extern char **environ;
+ register char **P;
+ int offset;
+ char *_findenv();
+
+ while (_findenv(name, &offset)) /* if set multiple times */
+ for (P = &environ[offset];; ++P)
+ if (!(*P = *(P + 1)))
+ break;
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/stdc.h b/support/hypertex/tanmoy/ghostview-1.5-hacked/stdc.h
new file mode 100644
index 0000000000..c198e75352
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/stdc.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 1988 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution is only permitted until one year after the first shipment
+ * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and
+ * binary forms are permitted provided that: (1) source distributions retain
+ * this entire copyright notice and comment, and (2) distributions including
+ * binaries display the following acknowledgement: This product includes
+ * software developed by the University of California, Berkeley and its
+ * contributors'' in the documentation or other materials provided with the
+ * distribution and in all advertising materials mentioning features or use
+ * of this software. Neither the name of the University nor the names of
+ * its contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * @(#)stdc.h 7.3 (Berkeley) 6/28/90
+ */
+
+/*
+ * This file is designed to ease the porting from standard C to ANSI C.
+ * It will eventually go away.
+ * Questions to K. Bostic.
+ */
+
+#if __STDC__ || c_plusplus
+#define CONCAT(x,y) x ## y
+#define PROTOTYPE(p) p
+#define STRING(x) #x
+#else
+#define const
+#define volatile
+#define signed
+#define CONCAT(x,y) x/**/y
+#define PROTOTYPE(p) ()
+#define STRING(x) "x"
+#endif
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/strcasecmp.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/strcasecmp.c
new file mode 100644
index 0000000000..6adc75bd9c
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/strcasecmp.c
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 1987 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that: (1) source distributions retain this entire copyright
+ * notice and comment, and (2) distributions including binaries display
+ * the following acknowledgement: ``This product includes software
+ * developed by the University of California, Berkeley and its contributors''
+ * in the documentation or other materials provided with the distribution
+ * and in all advertising materials mentioning features or use of this
+ * software. Neither the name of the University nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#include "stdc.h"
+#include <sys/types.h>
+
+#ifdef VMS
+#include <stddef.h>
+#endif
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static const char sccsid[] = "@(#)strcasecmp.c 5.9 (Berkeley) 6/1/90";
+#endif /* LIBC_SCCS and not lint */
+
+/*
+ * This array is designed for mapping upper and lower case letter
+ * together for a case independent comparison. The mappings are
+ * based upon ascii character sequences.
+ */
+static const unsigned char charmap[] = {
+ '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
+ '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
+ '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
+ '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
+ '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
+ '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
+ '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
+ '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
+ '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
+ '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
+ '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
+ '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
+ '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
+ '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
+ '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
+ '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
+ '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
+ '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
+ '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
+ '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
+ '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
+ '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
+ '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
+ '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
+ '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
+ '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
+ '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
+ '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
+ '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
+ '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
+ '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
+ '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
+};
+
+int
+strcasecmp(s1, s2)
+ const char *s1, *s2;
+{
+ register const unsigned char *cm = charmap,
+ *us1 = (const unsigned char *)s1,
+ *us2 = (const unsigned char *)s2;
+
+ while (cm[*us1] == cm[*us2++])
+ if (*us1++ == '\0')
+ return (0);
+ return (cm[*us1] - cm[*--us2]);
+}
+
+int
+strncasecmp(s1, s2, n)
+ const char *s1, *s2;
+ register size_t n;
+{
+ if (n != 0) {
+ register const unsigned char *cm = charmap,
+ *us1 = (const unsigned char *)s1,
+ *us2 = (const unsigned char *)s2;
+
+ do {
+ if (cm[*us1] != cm[*us2++])
+ return (cm[*us1] - cm[*--us2]);
+ if (*us1++ == '\0')
+ break;
+ } while (--n != 0);
+ }
+ return (0);
+}
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/test.ps b/support/hypertex/tanmoy/ghostview-1.5-hacked/test.ps
new file mode 100644
index 0000000000..84b87c38fc
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/test.ps
@@ -0,0 +1,3302 @@
+%!PS-Adobe-3.0
+%%Creator: dvips 5.51 Copyright 1986, 1993 Radical Eye Software
+%%Title: contact.dvi
+%%CreationDate: Tue Nov 1 16:26:57 1994
+%%Pages: 14
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: ./dvips -o contact.ps contact.dvi
+%DVIPSSource: TeX output 1994.09.28:1334
+%%BeginProlog
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}
+B /TR{translate}N /isls false N /vsize 11 72 mul N /@rigin{isls{[0 -1 1 0 0 0]
+concat}if 72 Resolution div 72 VResolution div neg scale isls{Resolution hsize
+-72 div mul 0 TR}if Resolution VResolution vsize -72 div 1 add mul TR matrix
+currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put
+setmatrix}N /@landscape{/isls true N}B /@manualfeed{statusdict /manualfeed
+true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N
+/IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix
+fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{
+CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn
+put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0
+0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data
+dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128
+ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127
+sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
+/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N
+/cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get
+S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height
+sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0
+-1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}imagemask restore}B /D{/cc X dup
+type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1
+ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}
+B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add
+.99 lt{/FV}{/RV}ifelse load def pop}N /eop{SI restore showpage userdict
+/eop-hook known{eop-hook}{pop}ifelse}N /@start{userdict /start-hook known{start-hook}
+if /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE
+S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76 div
+/hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley
+0 N /v{/ruley X /rulex X V}B /V{}B /RV statusdict begin /product where{pop
+product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4 getinterval
+(NeXT)eq or}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale
+rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex
+ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /FV{gsave
+transform round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail{dup
+/delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}B /d{-3 M}
+B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B /w{0
+rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{p 2 w}
+B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B
+/eos{SS restore}B end
+%%EndProcSet
+%%BeginProcSet: pdf.pro
+/PDFdict 10 dict dup begin
+/braindeaddistill 50 def
+/rfch % remove first charcter of string
+{dup length 1 sub 1 exch getinterval} def
+/lookuptarget % str arr lookuptarget arr target true
+ % or arr false
+{exch rfch dup % arr str' str'
+ /TargetAnchors where
+ {pop TargetAnchors dup % arr str' str' TargetAnchors TargetAnchors
+ 3 -1 roll known % arr str' TargetAnchors boolean
+ {exch get true} % arr target true
+ {pop (target unknown:)== == false} % arr false
+ ifelse}
+ {pop pop % arr
+ (target dictionary unknown) == false} % arr false
+ ifelse}
+bind def
+/initmat matrix currentmatrix def
+/pdfmnew % str arr
+{exch dup rfch exch 3 -1 roll % str' str arr
+lookuptarget % str' arr [target] bool
+ {mark 4 1 roll
+ /Title 4 1 roll
+ aload pop
+ exch
+ pop
+ /Page 3 1 roll
+ /View exch
+ [ exch /FitH exch ]
+ 5 -1 roll
+ aload pop
+ /Rect 4 1 roll
+ /Border 3 1 roll
+ /Color exch
+ /LNK gsave initmat setmatrix pdfmark grestore}
+ {pop pop}
+ ifelse}
+bind def
+/pdfmold
+{exch dup rfch exch 3 -1 roll
+lookuptarget
+ {mark 4 1 roll % put a mark below the source array and the array containing
+ % the page
+ % the rectangle array of the destination and the FitH parameter
+ % and below the Title string
+ /Title 4 1 roll % put /Title in front of Title string
+ aload pop % put the array elements on the stack
+ exch % exchange the FitH parameter and the Rect array
+ pop % Get rid of the Rect array
+ /Page 3 1 roll % put a /Page in front of the page number
+ /View exch % put a /View below the FitH parameter
+ [ exch /FitH exch ] % put in the /FitH
+ 5 -1 roll
+ aload pop pop
+ 0 3 getinterval
+ /Rect 3 1 roll
+ /Border exch
+ /LNK gsave initmat setmatrix pdfmark grestore}
+ {pop pop}
+ ifelse}
+bind def
+/pdfm
+/currentdistillerparams where
+ {pop
+ currentdistillerparams
+ dup /CoreDistVersion known
+ {/CoreDistVersion get}
+ {0}
+ ifelse dup
+ braindeaddistill le
+ {(WARNING: switching to old pdfm because version =) == == /pdfmold}
+ {pop /pdfmnew}
+ ifelse load
+ }
+ {/pdfmark where
+ {pop
+ {2 copy mark 3 1 roll
+ {pdfmnew} stopped
+ {cleartomark % failure
+ dup type /marktype eq {pop} if
+ 2 copy mark 3 1 roll
+ {pdfmold} stopped
+ {cleartomark (WARNING: pdfm disabled) ==
+ dup type /marktype eq {pop} if
+ /pdfm {pop pop} store}
+ {cleartomark (WARNING: new pdfm failed, switching to old pdfm) ==
+ dup type /marktype eq {pop} if
+ /pdfm /pdfmold load store}
+ ifelse}
+ {cleartomark dup type /marktype eq {pop} if
+ /pdfm /pdfmnew load store}
+ ifelse pop pop}}
+ {{pop pop}}
+ ifelse}
+ifelse
+bind def
+end def
+%%EndProcSet
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 400dpi
+TeXDict begin
+
+PDFdict begin
+/TargetAnchors
+61 dict dup begin
+(equation.2.1) [7 [520.02 227.14 535.32 239.14] 427] def
+(equation.2.2) [8 [520.02 564.28 535.32 576.28] 764] def
+(equation.2.3) [8 [520.02 362.86 535.32 374.86] 562] def
+(equation.2.4) [8 [520.02 300.04 535.32 312.04] 500] def
+(equation.2.5) [8 [520.02 158.56 535.32 170.56] 358] def
+(equation.2.6) [9 [520.02 623.86 535.32 635.86] 792] def
+(equation.2.7) [9 [520.02 350.98 535.32 362.98] 550] def
+(equation.2.8) [10 [520.02 552.94 535.32 564.94] 752] def
+(equation.2.9) [10 [520.02 478.60 535.32 490.60] 678] def
+(reference.1) [14 [76.50 677.86 82.44 689.86] 792] def
+(reference.2) [14 [76.50 645.64 82.44 657.64] 792] def
+(reference.3) [14 [76.50 613.24 82.44 625.24] 792] def
+(reference.4) [14 [76.50 581.02 82.44 593.02] 781] def
+(reference.5) [14 [76.50 548.62 82.44 560.62] 748] def
+(reference.6) [14 [76.50 516.40 82.44 528.40] 716] def
+(reference.7) [14 [76.50 484.00 82.44 496.00] 684] def
+(reference.8) [14 [76.50 451.78 82.44 463.78] 651] def
+(reference.9) [14 [76.50 419.38 82.44 431.38] 619] def
+(equation.1.10) [6 [514.08 77.20 535.32 89.20] 277] def
+(equation.1.11) [7 [514.08 512.44 535.32 524.44] 712] def
+(equation.1.1) [4 [520.02 195.46 535.32 207.46] 395] def
+(equation.1.2) [5 [520.02 639.70 535.32 651.70] 792] def
+(equation.1.3) [5 [520.02 521.26 535.32 533.26] 721] def
+(equation.1.4) [5 [520.02 262.60 535.32 274.60] 462] def
+(equation.1.5) [6 [520.02 563.74 535.32 575.74] 763] def
+(equation.1.6) [6 [520.02 504.34 535.32 516.34] 704] def
+(equation.1.7) [6 [520.02 381.04 535.32 393.04] 581] def
+(equation.1.8) [6 [520.02 308.86 535.32 320.86] 508] def
+(equation.1.9) [6 [520.02 245.14 535.32 257.14] 445] def
+(page.10) [11 [300.06 48.58 311.94 60.58] 248] def
+(page.11) [12 [300.06 48.58 311.94 60.58] 248] def
+(page.12) [13 [300.06 48.58 311.94 60.58] 248] def
+(page.13) [14 [300.06 48.58 311.94 60.58] 248] def
+(section.1) [4 [72.00 430.54 82.62 442.54] 630] def
+(section.2) [7 [72.00 343.60 82.62 355.60] 543] def
+(section.3) [12 [72.00 706.12 82.62 718.12] 792] def
+(subsection.1.1) [4 [72.00 401.56 91.44 413.56] 601] def
+(subsection.1.2) [5 [72.00 455.20 91.44 467.20] 655] def
+(reference.10) [14 [70.56 387.16 82.44 399.16] 587] def
+(reference.11) [14 [70.56 354.76 82.44 366.76] 554] def
+(reference.12) [14 [70.56 322.54 82.44 334.54] 522] def
+(reference.13) [14 [70.56 290.14 82.44 302.14] 490] def
+(reference.14) [14 [70.56 257.92 82.44 269.92] 457] def
+(reference.15) [14 [70.56 225.52 82.44 237.52] 425] def
+(reference.16) [14 [70.56 209.50 82.44 221.50] 409] def
+(reference.17) [14 [70.56 177.10 82.44 189.10] 377] def
+(reference.18) [14 [70.56 160.90 82.44 172.90] 360] def
+(reference.19) [14 [70.56 112.48 82.44 124.48] 312] def
+(reference.20) [14 [70.56 96.28 82.44 108.28] 296] def
+(equation.2.10) [10 [514.08 385.36 535.32 397.36] 585] def
+(equation.2.11) [11 [514.08 539.26 535.32 551.26] 739] def
+(equation.2.12) [11 [514.08 261.16 535.32 273.16] 461] def
+(page.1) [2 [302.94 48.58 308.88 60.58] 248] def
+(page.2) [3 [302.94 48.58 308.88 60.58] 248] def
+(page.3) [4 [302.94 48.58 308.88 60.58] 248] def
+(page.4) [5 [302.94 48.58 308.88 60.58] 248] def
+(page.5) [6 [302.94 48.58 308.88 60.58] 248] def
+(page.6) [7 [302.94 48.58 308.88 60.58] 248] def
+(page.7) [8 [302.94 48.58 308.88 60.58] 248] def
+(page.8) [9 [302.94 48.58 308.88 60.58] 248] def
+(page.9) [10 [302.94 48.58 308.88 60.58] 248] def
+end def
+TeXDict begin 40258431 52099146 1200 400 400
+@start /Fa 3 115 df<FFFFFE00FFFFFFC00FC007
+E007C001F807C000FC07C0007C07C0007E07C0007E07C0007E07C0007E07C0007E07C0007C07C0
+00FC07C001F807C003F007C00FC007FFFF8007C003E007C000F807C0007C07C0007E07C0003E07
+C0003F07C0003F07C0003F07C0003F07C0003F07C0003E07C0007E07C000FC07C001F80FC003F0
+FFFFFFE0FFFFFF0020227EA127>98 D<FFFFFFF8FFFFFFF80FC001F807C0007807C0003807C000
+1807C0001C07C0001C07C0000C07C00C0C07C00C0C07C00C0C07C00C0007C01C0007C03C0007FF
+FC0007FFFC0007C03C0007C01C0007C00C0007C00C0007C00C0307C00C0307C0000307C0000607
+C0000607C0000607C0000E07C0000E07C0001E07C0003E0FC000FCFFFFFFFCFFFFFFFC20227EA1
+25>101 D<FFFFF80000FFFFFF00000FC00FC00007C003E00007C001F00007C001F80007C000F8
+0007C000FC0007C000FC0007C000FC0007C000FC0007C000F80007C001F80007C001F00007C003
+C00007C01F000007FFF8000007C01C000007C00F000007C007800007C007C00007C003C00007C0
+03E00007C003E00007C003E00007C003E00007C003F00007C003F00007C003F00007C003F03007
+C001F8300FE001F830FFFE00F860FFFE007C400000000F8024237EA128>114
+D E /Fb 3 111 df<07FFFE0000E0038000E000C000E000E000E000E001C000E001C000E001C0
+00E001C001C00380038003801E0003FFF00003800000070000000700000007000000070000000E
+0000000E0000000E0000000E0000001C000000FFC000001B177C961D>80
+D<000FF00000781E0001C00700030003800E0001C01C0000C0180000E0380000E0700000E07000
+00E0E00000E0E00000E0E00000E0E00001C0C00001C0E0000380E0000300E000060070780C0030
+843800188270000E83C00001FF01000003010000030200000386000001FC000001F8000000F000
+1B1D7C9624>I<3C1F004661C04781C04700C08F01C00E01C00E01C00E03801C03801C03881C07
+081C07103803201801C0150E7D8D1D>110 D E /Fc 5 51 df<00800100020004000C00180018
+0030003000600060006000E000E000E000E000E000E000E000E000E000E0006000600060003000
+3000180018000C00040002000100008009227B9812>40 D<800040002000100018000C000C0006
+000600030003000300038003800380038003800380038003800380038003000300030006000600
+0C000C001800100020004000800009227D9812>I<07E01C38300C700E60066006E007E007E007
+E007E007E007E007E007E00760066006700E300C1C3807E010157D9417>48
+D<03000F00F7000700070007000700070007000700070007000700070007000700070007000700
+0700FFF80D157B9417>I<0FE03038701EF80EF80FF8077007000F000E001E001C0038006000C0
+018002010C0118033FFE7FFEFFFE10157D9417>I E /Fd 3 49 df<FFFFFFFFFFFFFFFFFFFFFF
+FF20037B8C2A>0 D<00E00000E00000E00000E00060E0C0F0E1E0F843E03E4F80075C0001F000
+01F000075C003E4F80F843E0F0E1E060E0C000E00000E00000E00000E00013147C951B>3
+D<01C003E003E003E007C007C007C00F800F800F000F001F001E001E003C003C003C0038007800
+78007000F000E00060000B187E990F>48 D E /Fe 11 55 df<FFFFC0FFFFC012027D9B1A>22
+D<0000E00E000000E00E000000E00E000000E00E000001C01C000001C01C000001C01C000001C0
+1C00000380380000038038000003803800000380380000038038007FFFFFFFE0FFFFFFFFF0FFFF
+FFFFF0000E00E000001C01C000001C01C000001C01C00000380380000038038000003803800000
+380380000070070000FFFFFFFFF0FFFFFFFFF07FFFFFFFE001C01C000001C01C000001C01C0000
+01C01C000001C01C00000380380000038038000003803800000380380000070070000007007000
+000700700000070070000024297D9F2C>35 D<00200040008001800300060006000C001C001C00
+3800380038007000700070007000F000F000F000F000F000F000F000F000F000F000F000F000F0
+0070007000700070003800380038001C001C000C0006000600030001800080004000200B2F7BA2
+15>40 D<800040002000300018000C000C0006000700070003800380038001C001C001C001C001
+E001E001E001E001E001E001E001E001E001E001E001E001E001C001C001C001C0038003800380
+0700070006000C000C00180030002000400080000B2F7DA215>I<0001C000000001C000000001
+C000000001C000000001C000000001C000000001C000000001C000000001C000000001C0000000
+01C000000001C000000001C000000001C000000001C000000001C00000FFFFFFFF80FFFFFFFF80
+FFFFFFFF800001C000000001C000000001C000000001C000000001C000000001C000000001C000
+000001C000000001C000000001C000000001C000000001C000000001C000000001C000000001C0
+00000001C0000021237D9C29>43 D<01F800070E000C03001C03803801C03801C07000E07000E0
+7000E07000E0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0
+F000F0F000F07000E07000E07801E03801C03801C01C03800C0300070E0001F80014207E9E1A>
+48 D<00C001C00FC0FFC0F3C003C003C003C003C003C003C003C003C003C003C003C003C003C0
+03C003C003C003C003C003C003C003C003C003C003C0FFFFFFFF101F7B9E1A>I<03F8000FFE00
+1C1F803007C06003E06001E0C001F0E001F0F000F0F000F06001F00001F00001E00001E00003C0
+000780000700000E00001C0000380000600000C0000180300300300600300C00701000603FFFE0
+7FFFE0FFFFE0FFFFE0141F7E9E1A>I<03F8000FFE001C0F803003C07003C07803E07801E07801
+E00003E00003C00003C0000780000F00001C0003F800000E000007800003C00003E00001E00001
+F00001F06001F0F001F0F001F0E001E0E003E06003C03007C01E0F000FFE0003F80014207E9E1A
+>I<000180000380000780000780000F80001F8000378000278000678000C78001878003078002
+07800607800C0780180780100780300780600780C00780FFFFFCFFFFFC00078000078000078000
+078000078000078000078000FFFC00FFFC161F7F9E1A>I<003F0001FF8003C0C00700E00E01E0
+1C01E01C00C038000038000078000070000070F800F30600F40300F40180F801C0F800E0F000E0
+F000F0F000F0F000F0F000F07000F07000F07000F03800E03801E01801C01C03800F070007FE00
+01F80014207E9E1A>54 D E /Ff 10 102 df<000180000300000600000E00001C000038000070
+0000700000E00001E00001C00003C0000380000780000780000F00000F00000F00001E00001E00
+001E00003E00003E00003C00003C00007C00007C00007C00007C0000780000780000F80000F800
+00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
+00F80000F800007800007800007C00007C00007C00007C00003C00003C00003E00003E00001E00
+001E00001E00000F00000F00000F000007800007800003800003C00001C00001E00000E0000070
+00007000003800001C00000E00000600000300000180114F76821E>0 D<C00000600000300000
+3800001C00000E000007000007000003800003C00001C00001E00000E00000F00000F000007800
+007800007800003C00003C00003C00003E00003E00001E00001E00001F00001F00001F00001F00
+000F00000F00000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80
+000F80000F80000F80000F80000F80000F80000F00000F00001F00001F00001F00001F00001E00
+001E00003E00003E00003C00003C00003C0000780000780000780000F00000F00000E00001E000
+01C00003C0000380000700000700000E00001C0000380000300000600000C00000114F7E821E>
+I<FFF8FFF8FFF8E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000FFF8FF
+F8FFF80D4F73821C>I<FFF8FFF8FFF80038003800380038003800380038003800380038003800
+380038003800380038003800380038003800380038003800380038003800380038003800380038
+003800380038003800380038003800380038003800380038003800380038003800380038003800
+380038003800380038003800380038003800380038003800380038003800380038003800380038
+003800380038FFF8FFF8FFF80D4F7F821C>I<000000070000000E0000001C0000003800000070
+000000E0000001E0000003C0000007800000070000000F0000001E0000003C0000003C00000078
+000000F8000000F0000001E0000003E0000003C0000007C00000078000000F8000000F0000001F
+0000001E0000003E0000003E0000007C0000007C00000078000000F8000000F8000001F0000001
+F0000001F0000003F0000003E0000003E0000007E0000007C0000007C0000007C000000FC00000
+0F8000000F8000000F8000001F8000001F8000001F0000001F0000003F0000003F0000003F0000
+003F0000003F0000003E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00
+00007E0000007C0000007C000000FC000000FC000000FC000000FC000000FC000000FC000000FC
+000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000
+FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0000007C0000
+007C0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000003E00
+00003F0000003F0000003F0000003F0000003F0000001F0000001F0000001F8000001F8000000F
+8000000F8000000F8000000FC0000007C0000007C0000007C0000007E0000003E0000003E00000
+03F0000001F0000001F0000001F0000000F8000000F8000000780000007C0000007C0000003E00
+00003E0000001E0000001F0000000F0000000F8000000780000007C0000003C0000003E0000001
+E0000000F0000000F8000000780000003C0000003C0000001E0000000F00000007000000078000
+0003C0000001E0000000E000000070000000380000001C0000000E00000007209F728231>18
+D<E000000070000000380000001C0000000E000000070000000780000003C0000001E0000000E0
+000000F0000000780000003C0000003C0000001E0000001F0000000F0000000780000007C00000
+03C0000003E0000001E0000001F0000000F0000000F8000000780000007C0000007C0000003E00
+00003E0000001E0000001F0000001F0000000F8000000F8000000F8000000FC0000007C0000007
+C0000007E0000003E0000003E0000003E0000003F0000001F0000001F0000001F0000001F80000
+01F8000000F8000000F8000000FC000000FC000000FC000000FC000000FC0000007C0000007E00
+00007E0000007E0000007E0000007E0000007E0000007E0000007E0000003E0000003E0000003F
+0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F000000
+3F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000
+003F0000003F0000003F0000003F0000003F0000003E0000003E0000007E0000007E0000007E00
+00007E0000007E0000007E0000007E0000007E0000007C000000FC000000FC000000FC000000FC
+000000FC000000F8000000F8000001F8000001F8000001F0000001F0000001F0000003F0000003
+E0000003E0000003E0000007E0000007C0000007C000000FC000000F8000000F8000000F800000
+1F0000001F0000001E0000003E0000003E0000007C0000007C00000078000000F8000000F00000
+01F0000001E0000003E0000003C0000007C00000078000000F0000001F0000001E0000003C0000
+003C00000078000000F0000000E0000001E0000003C0000007800000070000000E0000001C0000
+003800000070000000E0000000209F7E8231>I<0000000000007C00000000000000C600000000
+000001818000000000000387800000000000070FC000000000000F0FC000000000000F0FC00000
+0000001E0FC000000000001E078000000000003E000000000000003C000000000000003C000000
+000000007C000000000000007C000000000000007800000000000000F800000000000000F80000
+0000000000F800000000000001F000000000000001F000000000000001F000000000000001F000
+000000000003F000000000000003E000000000000003E000000000000003E000000000000007E0
+00000000000007E000000000000007C000000000000007C00000000000000FC00000000000000F
+C00000000000000FC00000000000000F800000000000001F800000000000001F80000000000000
+1F800000000000001F800000000000001F000000000000003F000000000000003F000000000000
+003F000000000000003F000000000000007F000000000000007E000000000000007E0000000000
+00007E00000000000000FE00000000000000FE00000000000000FC00000000000000FC00000000
+000000FC00000000000001FC00000000000001FC00000000000001FC00000000000001F8000000
+00000001F800000000000003F800000000000003F800000000000003F800000000000003F80000
+0000000003F000000000000007F000000000000007F000000000000007F000000000000007F000
+000000000007E00000000000000FE00000000000000FE00000000000000FE00000000000000FE0
+0000000000001FC00000000000001FC00000000000001FC00000000000001FC00000000000001F
+C00000000000001FC00000000000003F800000000000003F800000000000003F80000000000000
+3F800000000000003F000000000000007F000000000000007F000000000000007F000000000000
+007F000000000000007E00000000000000FE00000000000000FE00000000000000FE0000000000
+0000FE00000000000000FC00000000000000FC00000000000001FC00000000000001FC00000000
+000001FC00000000000001F800000000000001F800000000000001F800000000000003F8000000
+00000003F800000000000003F000000000000003F000000000000003F000000000000007F00000
+0000000007E000000000000007E000000000000007E000000000000007E000000000000007C000
+00000000000FC00000000000000FC00000000000000FC00000000000000FC00000000000000F80
+0000000000001F800000000000001F800000000000001F800000000000001F000000000000001F
+000000000000003F000000000000003F000000000000003E000000000000003E00000000000000
+3E000000000000007E000000000000007C000000000000007C000000000000007C000000000000
+00FC00000000000000F800000000000000F800000000000000F800000000000001F00000000000
+0001F000000000000001E000000000000001E000000000000003E000000000000003C000000000
+007807C00000000000FC07800000000000FC07800000000000FC0F000000000000FC0E00000000
+0000781C000000000000603800000000000018700000000000000FC00000000000003A947C7F25
+>90 D<00006000000001F800000007FE0000000FFF0000003F9FC00000FE07F00003F000FC000F
+C0003F003F00000FC07C000003E0F0000000F08000000010240C80B025>98
+D<00000001C0000000000000000FF8000000000000007FFF00000000000003FFFFE00000000000
+1FFE3FFC0000000000FFE003FF8000000007FF00007FF00000003FF0000007FE000001FF000000
+007FC0000FF8000000000FF8007F800000000000FF00FC0000000000001F80C000000000000001
+80410D80B242>I<007E00001001FF800060078FE000C01C01F8038030007F1E0060001FF80080
+0007E000240780AF25>101 D E /Fg 34 120 df<1E003F007F80FFC0FFC0FFC0FFC07F803F00
+1E000A0A7B8915>46 D<001FF00000FFFE0001F83F0007E00FC00FC007E00F8003E01F8003F03F
+8003F83F8003F83F0001F87F0001FC7F0001FC7F0001FC7F0001FCFF0001FEFF0001FEFF0001FE
+FF0001FEFF0001FEFF0001FEFF0001FEFF0001FEFF0001FEFF0001FEFF0001FEFF0001FEFF0001
+FEFF0001FEFF0001FEFF0001FE7F0001FC7F0001FC7F0001FC7F0001FC3F8003F83F8003F81F80
+03F01FC007F00FC007E007E00FC003F83F8000FFFE00001FF0001F2B7DAA26>48
+D<0001C0000003C000000FC00000FFC000FFFFC000FFFFC000FF3FC000003FC000003FC000003F
+C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
+3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000
+003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
+00003FC0007FFFFFE07FFFFFE07FFFFFE01B2B7BAA26>I<007FC00003FFF80007FFFE001F81FF
+803E007FC07C003FE07E001FE0FF001FF0FF800FF0FF800FF8FF800FF8FF800FF87F000FF83E00
+0FF800000FF800000FF000001FF000001FE000001FE000003FC000003F8000007F000000FE0000
+00FC000001F8000003E0000007C000000F8000000F0000001C0038003800380070003800E00070
+01C000700380007007FFFFF00FFFFFF01FFFFFF03FFFFFF07FFFFFE0FFFFFFE0FFFFFFE0FFFFFF
+E01D2B7CAA26>I<003FF00001FFFE0003E07F8007001FC00E000FE01F800FF03FC00FF83FC00F
+F83FE00FF83FC00FF81FC00FF80F800FF807000FF000001FF000001FE000001FC000003F800000
+7F000001FC00007FF000007FFE0000007F8000001FE000000FF000000FF8000007F8000007FC00
+0007FC000007FE000007FE3E0007FE7F0007FEFF8007FEFF8007FEFF8007FCFF8007FCFF000FF8
+7E000FF03E001FE01FC07FC00FFFFF8003FFFE00007FF0001F2B7DAA26>I<000001E000000001
+E000000003E000000007E00000000FE00000001FE00000001FE00000003FE00000007FE0000000
+EFE0000001CFE0000003CFE00000038FE00000070FE000000E0FE000001C0FE00000380FE00000
+780FE00000700FE00000E00FE00001C00FE00003800FE00007000FE00007000FE0000E000FE000
+1C000FE00038000FE00070000FE000F0000FE000FFFFFFFF80FFFFFFFF80FFFFFFFF8000001FE0
+0000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE000000FFF
+FF80000FFFFF80000FFFFF80212B7EAA26>I<0001FE00000FFF80003F01C000FC006001F801F0
+03F003F807E007F80FE007F80FC007F81FC007F83FC003F03FC001E07F8000007F8000007F8000
+007F800000FF87F800FF8FFE00FF981F80FFB00FC0FFE007E0FFE007F0FFC003F8FFC003FCFFC0
+03FCFF8003FEFF8003FEFF8003FEFF8003FE7F8003FE7F8003FE7F8003FE7F8003FE3F8003FC3F
+C003FC1FC003FC1FC007F80FE007F007E007E003F81FC001FFFF80007FFE00000FF0001F2B7DAA
+26>54 D<380000003E0000003FFFFFFF3FFFFFFF3FFFFFFF3FFFFFFE7FFFFFFC7FFFFFF87FFFFF
+F07FFFFFE0780001E0700003C070000780E0000F00E0001E00E0003C0000003C00000078000000
+F0000001F0000001E0000003E0000007C0000007C000000FC000000F8000001F8000001F800000
+3F8000003F8000003F0000007F0000007F0000007F0000007F000000FF000000FF000000FF0000
+00FF000000FF000000FF000000FF000000FF0000007E0000003C0000202D7CAC26>I<001FF800
+00FFFF0001F01F8003C007C0078003E00F0003F01F0001F01F0001F83F0001F83F0001F83F8001
+F83FC001F83FF001F03FF803F01FFE03E01FFF87C00FFFEF8007FFFE0003FFFC0001FFFF0000FF
+FF8000FFFFC003FFFFE007C7FFF00F81FFF81F007FFC3E003FFC7E000FFE7C0003FEFC0001FEFC
+0000FEFC00007EFC00007EFC00007EFC00007C7E00007C7E0000F83F0000F01F8003F00FF00FC0
+07FFFF8001FFFE00003FF0001F2B7DAA26>I<001FF00000FFFC0003F83F0007E00F800FC00FC0
+1FC007E03F8007F07F8003F07F8003F87F8003F8FF8003FCFF8003FCFF8003FCFF8003FCFF8003
+FEFF8003FEFF8003FEFF8003FE7F8007FE7F8007FE3F8007FE1FC00FFE0FC00FFE07E01BFE03F0
+33FE00FFE3FE003FC3FE000003FC000003FC000003FC000003FC0F0007F81F8007F83FC007F03F
+C007F03FC00FE03FC00FC03F801F801F003F000F01FE0007FFFC0003FFF00000FF80001F2B7DAA
+26>I<000001F0000000000001F0000000000003F8000000000003F8000000000003F800000000
+0007FC000000000007FC00000000000FFE00000000000FFE00000000000FFE00000000001FFF00
+000000001FFF00000000003FFF80000000003CFF80000000003CFF8000000000787FC000000000
+787FC000000000F87FE000000000F03FE000000000F03FE000000001E01FF000000001E01FF000
+000003E01FF800000003C00FF800000007C00FFC000000078007FC000000078007FC0000000F80
+07FE0000000F0003FE0000001F0003FF0000001FFFFFFF0000001FFFFFFF0000003FFFFFFF8000
+003C0000FF8000007C0000FFC000007800007FC000007800007FC00000F800007FE00000F00000
+3FE00001F000003FF00001E000001FF00001E000001FF00003E000001FF800FFFF8007FFFFE0FF
+FF8007FFFFE0FFFF8007FFFFE0332E7DAD3A>65 D<FFFFFFFFC000FFFFFFFFF800FFFFFFFFFE00
+01FE0001FF8001FE00007FC001FE00003FE001FE00003FE001FE00001FF001FE00001FF001FE00
+000FF801FE00000FF801FE00000FF801FE00000FF801FE00000FF801FE00001FF801FE00001FF0
+01FE00001FF001FE00003FE001FE00007FC001FE0000FF8001FE0003FE0001FFFFFFF80001FFFF
+FFFC0001FE0000FF0001FE00003FC001FE00001FE001FE00000FF001FE00000FF801FE000007FC
+01FE000007FC01FE000007FE01FE000007FE01FE000007FE01FE000007FE01FE000007FE01FE00
+0007FE01FE000007FE01FE000007FC01FE00000FFC01FE00000FF801FE00001FF001FE00007FF0
+01FE0001FFC0FFFFFFFFFF80FFFFFFFFFE00FFFFFFFFE0002F2E7EAD36>I<00000FFE000C0000
+FFFFC01C0007FFFFF07C000FFE01FCFC003FE0003FFC007F80000FFC01FF000007FC03FC000003
+FC07FC000001FC07F8000000FC0FF0000000FC1FF00000007C1FE00000007C3FE00000007C3FE0
+0000003C7FE00000003C7FC00000003C7FC000000000FFC000000000FFC000000000FFC0000000
+00FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0
+000000007FC0000000007FC0000000007FE00000001C3FE00000001C3FE00000001C1FE0000000
+1C1FF0000000380FF00000003807F80000003807FC0000007003FC000000E001FF000001C0007F
+80000780003FE0001F00000FFE00FE000007FFFFF8000000FFFFE00000000FFE00002E2E7CAD37
+>I<FFFFFFFF8000FFFFFFFFF000FFFFFFFFFC0001FF0003FF0001FF0000FF8001FF00007FC001
+FF00003FE001FF00003FF001FF00001FF001FF00001FF001FF00001FF801FF00001FF801FF0000
+1FF801FF00001FF801FF00001FF801FF00001FF801FF00001FF001FF00001FF001FF00003FE001
+FF00003FE001FF00007FC001FF0000FF8001FF0007FF0001FFFFFFFC0001FFFFFFE00001FF0000
+000001FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001
+FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001FF0000
+000001FF0000000001FF0000000001FF0000000001FF00000000FFFFFE000000FFFFFE000000FF
+FFFE0000002D2E7EAD34>80 D<FFFFFFFE000000FFFFFFFFE00000FFFFFFFFFC000001FF0007FF
+000001FF0000FF800001FF00007FC00001FF00003FE00001FF00003FF00001FF00001FF00001FF
+00001FF00001FF00001FF80001FF00001FF80001FF00001FF80001FF00001FF80001FF00001FF8
+0001FF00001FF00001FF00001FF00001FF00003FE00001FF00003FC00001FF00007F800001FF00
+01FF000001FF0007FC000001FFFFFFF0000001FFFFFF80000001FF001FE0000001FF0007F80000
+01FF0003FC000001FF0001FE000001FF0001FF000001FF0000FF000001FF0000FF800001FF0000
+FF800001FF0000FF800001FF0000FF800001FF0000FF800001FF0000FFC00001FF0000FFC00001
+FF0000FFC00001FF0000FFC00801FF0000FFC01C01FF00007FE01C01FF00007FE01C01FF00003F
+F038FFFFFE001FF870FFFFFE0007FFE0FFFFFE0000FFC0362E7EAD39>82
+D<7FFFFFFFFFF87FFFFFFFFFF87FFFFFFFFFF87F801FF007F87E001FF001F87C001FF000F87800
+1FF0007870001FF00038F0001FF0003CF0001FF0003CF0001FF0003CE0001FF0001CE0001FF000
+1CE0001FF0001CE0001FF0001CE0001FF0001C00001FF0000000001FF0000000001FF000000000
+1FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001FF000
+0000001FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001FF000000000
+1FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001FF000
+0000001FF0000000001FF0000000001FF00000007FFFFFFC00007FFFFFFC00007FFFFFFC002E2D
+7DAC35>84 D<00FFF0000007FFFE00000F807F80000FC01FC0001FE00FE0001FE00FF0001FE007
+F0000FC007F800078007F800000007F800000007F800000007F80000003FF800001FFFF80000FF
+E7F80007FC07F8000FE007F8001F8007F8003F0007F8007F0007F800FE0007F800FE0007F800FE
+0007F800FE0007F800FE000FF8007F000FF8003F801BFC001FC0F3FFC00FFFE1FFC001FF007FC0
+221E7E9D25>97 D<000FFE00007FFFC001FC03E003F007E007C00FF00FC00FF01F800FF03F8007
+E07F8003C07F0000007F000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
+0000FF0000007F0000007F0000007F8000003F8000381F8000380FC0007007E0007003F001E001
+FC07C0007FFF00000FF8001D1E7E9D22>99 D<0000001F80000007FF80000007FF80000007FF80
+0000007F800000007F800000007F800000007F800000007F800000007F800000007F800000007F
+800000007F800000007F800000007F800000007F80000FF87F80007FFE7F8001FC0FFF8003F001
+FF8007E000FF800FC0007F801F80007F803F80007F803F80007F807F00007F807F00007F80FF00
+007F80FF00007F80FF00007F80FF00007F80FF00007F80FF00007F80FF00007F80FF00007F807F
+00007F807F00007F807F00007F803F80007F801F80007F800FC000FF8007C001FF8003E003FF80
+01F80F7FF8007FFC7FF8000FF07FF8252E7EAD2A>I<000FF800007FFE0001F81F8007E007C00F
+C003E01FC001F01F8001F03F8001F87F0000F87F0000FC7F0000FCFF0000FCFF0000FCFFFFFFFC
+FFFFFFFCFF000000FF000000FF000000FF0000007F0000007F0000003F8000003F80001C1F8000
+1C0FC0003807C0007003F000E001FC07C0007FFF80000FFC001E1E7E9D23>I<0003FC00001FFF
+00007F078000FE0FC001FC1FE003FC1FE003F81FE007F80FC007F8078007F8030007F8000007F8
+000007F8000007F8000007F8000007F80000FFFFF000FFFFF000FFFFF00007F8000007F8000007
+F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80000
+07F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800
+0007F8000007F800007FFFC0007FFFC0007FFFC0001B2E7EAD17>I<003FE01F0001FFFCFF8003
+F07FE7C007C01F0FC00FC01F87C01F800FC3801F800FC0003F800FE0003F800FE0003F800FE000
+3F800FE0003F800FE0001F800FC0001F800FC0000FC01F800007C01F000007F07E00000FFFFC00
+000C3FE000001C000000001C000000001E000000001E000000001F000000001FFFFF00001FFFFF
+E0000FFFFFF8000FFFFFFC0007FFFFFE0003FFFFFE001FFFFFFF003F0001FF007E00003F80FC00
+001F80FC00001F80FC00001F80FC00001F807C00001F007E00003F003F00007E001F8000FC0007
+F007F00001FFFFC000003FFE0000222C7E9D26>I<03F0000000FFF0000000FFF0000000FFF000
+00000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0
+0000000FF00000000FF00000000FF00000000FF00000000FF01FE0000FF07FF8000FF1E0FC000F
+F380FE000FF6007F000FFC007F000FFC007F800FF8007F800FF8007F800FF0007F800FF0007F80
+0FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F
+800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF000
+7F80FFFF07FFF8FFFF07FFF8FFFF07FFF8252E7DAD2A>I<07800FC01FE03FF03FF03FF03FF01F
+E00FC00780000000000000000000000000000003F0FFF0FFF0FFF00FF00FF00FF00FF00FF00FF0
+0FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0FFFFFFFFFF
+FF102F7DAE15>I<03F0000000FFF0000000FFF0000000FFF00000000FF00000000FF00000000F
+F00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0000000
+0FF00000000FF00000000FF007FFC00FF007FFC00FF007FFC00FF000F0000FF001E0000FF003C0
+000FF00780000FF00F00000FF03C00000FF07800000FF0F000000FF1F000000FF3F800000FF7F8
+00000FFFFC00000FFDFE00000FF9FF00000FF0FF00000FE07F80000FE03FC0000FE03FE0000FE0
+1FE0000FE00FF0000FE007F8000FE007FC000FE003FC000FE001FE00FFFE0FFFF0FFFE0FFFF0FF
+FE0FFFF0242E7EAD28>107 D<03F0FFF0FFF0FFF00FF00FF00FF00FF00FF00FF00FF00FF00FF0
+0FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00F
+F00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0FFFFFFFFFFFF102E7DAD15>I<03F00FF000
+7F8000FFF03FFC01FFE000FFF0F07E0783F000FFF1C07F0E03F80007F3003F9801FC0007F6003F
+B001FC0007F6003FF001FE0007FC003FE001FE0007FC003FE001FE0007F8003FC001FE0007F800
+3FC001FE0007F8003FC001FE0007F8003FC001FE0007F8003FC001FE0007F8003FC001FE0007F8
+003FC001FE0007F8003FC001FE0007F8003FC001FE0007F8003FC001FE0007F8003FC001FE0007
+F8003FC001FE0007F8003FC001FE0007F8003FC001FE0007F8003FC001FE0007F8003FC001FE00
+07F8003FC001FE0007F8003FC001FE00FFFFC7FFFE3FFFF0FFFFC7FFFE3FFFF0FFFFC7FFFE3FFF
+F03C1E7D9D41>I<07E01FE000FFE07FF800FFE1E0FC00FFE380FE000FE6007F000FEC007F000F
+EC007F800FF8007F800FF8007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F80
+0FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F
+800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F80FFFF07FFF8FFFF07FFF8FFFF07
+FFF8251E7D9D2A>I<000FF80000007FFF000001F80FC00007E003F0000FC001F8001F8000FC00
+1F8000FC003F8000FE007F00007F007F00007F007F00007F00FF00007F80FF00007F80FF00007F
+80FF00007F80FF00007F80FF00007F80FF00007F80FF00007F807F00007F007F00007F007F0000
+7F003F8000FE003F8000FE001FC001FC000FC001F80007E003F00001F80FC000007FFF0000000F
+F80000211E7E9D26>I<07E0FC00FFE1FF00FFE30F80FFE61F800FEC3FC00FEC3FC00FF83FC00F
+F81F800FF80F000FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF00000
+0FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000
+00FFFF8000FFFF8000FFFF80001A1E7E9D1F>114 D<01FF8E0007FFFE001F00FE003C003E0078
+001E0078000E00F8000E00F8000E00FC000E00FF000000FFF800007FFF80007FFFF0003FFFF800
+1FFFFC0007FFFE0003FFFF00003FFF000001FF8060003F80E0001F80E0000F80F0000F80F0000F
+00F8000F00FC001E00FE001E00FF807800F3FFF000C07F8000191E7E9D1E>I<00380000380000
+380000380000780000780000780000F80000F80001F80003F80007F8001FFFFEFFFFFEFFFFFE07
+F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007
+F80007F80007F80707F80707F80707F80707F80707F80707F80703F80E01FC0E00FE1C007FF800
+0FE0182A7FA91E>I<03F0001F80FFF007FF80FFF007FF80FFF007FF800FF0007F800FF0007F80
+0FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F
+800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF0007F800FF000
+7F800FF0007F800FF000FF800FF000FF8007F001FF8003F0037F8001FC0E7FF800FFFC7FF8001F
+F07FF8251E7D9D2A>I<FFFE3FFF01FFC0FFFE3FFF01FFC0FFFE3FFF01FFC00FF003F8001C000F
+F003F8001C000FF801FC003C0007F801FC00380007F801FE00380003FC01FE00700003FC03FE00
+700003FE03FF00F00001FE03FF00E00001FE073F80E00000FF073F81C00000FF0F3F81C00000FF
+8E1FC3C000007F8E1FC38000007F9C0FE38000003FDC0FE70000003FFC0FE70000003FF807FF00
+00001FF807FE0000001FF003FE0000000FF003FC0000000FF003FC0000000FE001FC00000007E0
+01F800000007C000F800000003C000F000000003C000F00000321E7E9D37>119
+D E /Fh 18 123 df<000F800030C000606000C0600180700380700700700700780E00781E0078
+1E00783C00783C00783C00787800F07FFFF07FFFF07800F0F001E0F001E0F001E0F003C0F003C0
+F00380F00700700700700E00700C003018003030001860000F800015207D9F19>18
+D<07C0000001E0000001F0000000F8000000F8000000780000007C0000003C0000003E0000001E
+0000001F0000001F0000000F8000000F8000000780000007C0000003C0000007E000000FE00000
+1DF0000039F0000070F80000E0F80001C0780007807C000F003C001E003E003C001E007C001F00
+F8001F00F0000F80E000078019207C9F20>21 D<0007E0001C3800301C00600E00E00E01C00F03
+C00F07800F07800F07800F0F001E0F001E0F001E0F003C1E00381E00701F00601F00C03C83803C
+7E003C00003C0000780000780000780000780000F00000F00000F00000600000181E7E931C>26
+D<07FFFF0FFFFF3FFFFE381800601800C0380080380000300000700000700000700000700000F0
+0000E00000E00001E00001E00001E00003C00001800018147D9318>28 D<70F8FCFC7404040408
+0810102040060E7A8410>59 D<000FE000003FF80000F03C0001C00E00018007000380038003C0
+0380078001C0030001C0000001C0000001C0000001E0001FC1E0007021E001C011C003000BC00E
+000BC01E0007C01C0007C03C000780780007807800078078000F00F0000F00F0000E00F0001E00
+F0001C00F000380070003800780070003801E0001E0780000FFF000003F800001B227DA01C>64
+D<00FFFE0000FFFE00000F8000000F0000000F0000000F0000001E0000001E0000001E0000001E
+0000003C0000003C0000003C0000003C00000078000000780000007800000078000000F0000000
+F0000600F0000600F0000C01E0000C01E0000C01E0001801E0001803C0003803C0007003C001F0
+03C007F07FFFFFE0FFFFFFE01F207D9F24>76 D<00FF8000007FE000FF800000FFC0000F800001
+F800000DC00001F800000DC000037800000DC0000678000019C00006F0000019C0000CF0000019
+C00018F0000018E00018F0000030E00031E0000030E00061E0000030E00061E0000030E000C1E0
+000060E00183C0000060700183C0000060700303C0000060700603C00000C0700607800000C070
+0C07800000C0381807800000C03818078000018038300F0000018038600F0000018038600F0000
+018038C00F000003001D801E000003001D801E000003001F001E00000F801E001E00007FF01E03
+FFE000FFF01C07FFE00033207D9F33>I<00FF8003FFC000FF8003FF80000FC0007C00000FC000
+3000000DE0003000000DE00030000018F00060000018F000600000187800600000187800600000
+307C00C00000303C00C00000303C00C00000301E00C00000601E01800000600F01800000600F01
+800000600781800000C00783000000C003C3000000C003C3000000C001E30000018001E6000001
+8001F60000018000F60000018000F600000300007C00000300007C00000300003C00000F80003C
+00007FF000180000FFF0001800002A207D9F2A>I<01FFFFF00001FFFFFE00001E003F00001E00
+0F80001E000780001E0007C0003C0007C0003C0007C0003C0007C0003C0007C00078000F800078
+000F800078001F000078001E0000F0007C0000F001F00000FFFFC00000F000000001E000000001
+E000000001E000000001E000000003C000000003C000000003C000000003C00000000780000000
+078000000007800000000780000000FFF8000000FFF800000022207C9F22>80
+D<00003FC0000001E078000007001C00001E000F00003800078000F000038001E00003C003C000
+03C007C00001E007800001E00F000001E01F000001E01F000001E03E000001E03E000001E07C00
+0003E07C000003E07C000003E07C000003E078000007C0F8000007C0F8000007807800000F8078
+00000F007800001E007800003E007C03C03C003C0C2078001C1020F0001E1011C0000F10178000
+07901E000001F0780200003FD8020000001806000000180C0000001C1C0000001FF80000001FF0
+0000001FF00000000FE0000000078000232A7DA02A>I<001F0C0070DE00C07C03807C07803C07
+003C0F00781E00781E00781E00783C00F03C00F03C00F03C00F03C01E01C01E01C03E00C07E006
+1FC001F3C00003C00003C0000780000780300780780F00F01E006078003FE000171D7E931A>
+103 D<001800380078003000000000000000000000000000000000078008E010E030F060F061E0
+C1E003C003C003C00780078007800F060F0C1E0C1E180E100E2003C00F207E9F13>105
+D<00F0000FF0000FE00001E00001E00001E00003C00003C00003C00003C0000780000780000780
+780781840F020E0F041E0F081E0F100C1E60001E80001F80001FF8003C3C003C1E003C1E003C0F
+06781E0C781E0C781E08780E18F007306003E017207D9F1C>107 D<0F01F80011C30E0031CC0F
+0061F8070061F0070061E00700C3E00F0003C00F0003C00F0003C00F0007801E0007801E000780
+1E0007803C180F003C300F0078300F0078600F0038401E0038800C000F001D147E9321>110
+D<0F03F011CC1831D81C61F03C61E03C61E018C3C00003C00003C00003C0000780000780000780
+000780000F00000F00000F00000F00001E00000C000016147E9319>114
+D<00C001E001E003C003C003C003C007800780FFFEFFFE0F000F000F000F001E001E001E001E00
+3C003C003C003C06780C78087818383038E00F800F1D7D9C14>116 D<00E01803F83007FC600F
+FFE00C00C0000180000300000E0000180000300000600000C0000380000600300C00601801E03F
+FFC031FF80607F00C03C0015147D9319>122 D E /Fi 18 107 df<FFFFFFFFFF80FFFFFFFFFF
+80FFFFFFFFFF8029037B9134>0 D<387CFEFEFE7C3807077B9312>I<60000006E000000E700000
+1E7800003C3C0000781E0000F00F0001E0078003C003C0078001E00F0000F01E0000783C00003C
+7800001EF000000FE0000007C000000380000007C000000FE000001EF000003C780000783C0000
+F01E0001E00F0003C00780078003C00F0001E01E0000F03C0000787800003C7000001EE000000E
+600000061F2176A034>I<00007FC000000003FFF80000000F803E0000001C0007000000700001
+C00000E00000E000018000003000030000001800078000003C000CC0000066000C600000C60018
+3000018300301800030180300C000601803006000C01806003001800C06001803000C06000C060
+00C0C00060C00060C00031800060C0001B000060C0000E000060C0000C000060C0000E000060C0
+001B000060C00031800060C00060C000606000C06000C06001803000C06003001800C03006000C
+0180300C000601803018000301801830000183000C600000C6000CC000006600078000003C0003
+000000180001800000300000E00000E00000700001C000001C00070000000F803E00000003FFF8
+000000007FC000002B2D7CA634>10 D<E00000000000F80000000000FE00000000001F80000000
+0007E00000000001F800000000007E00000000001F800000000007E00000000001FC0000000000
+7F00000000001FC00000000003F00000000000FC00000000003F00000000000FC00000000003F0
+0000000000FC00000000003F80000000000F80000000003F8000000000FC0000000003F0000000
+000FC0000000003F0000000000FC0000000003F0000000001FC0000000007F0000000001FC0000
+000007E0000000001F80000000007E0000000001F80000000007E0000000001F80000000007E00
+00000000F80000000000E000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000007FFF
+FFFFFF00FFFFFFFFFF80FFFFFFFFFF8029347BA934>21 D<00FC0000002003FF000000600FFFC0
+0000601FFFE00000601F03F00000603C00F80000E078003E0000E070001F0001C0E0000F8003C0
+E00007E00780C00001F81F00C00000FFFF00C000007FFE00C000001FF80040000007E0002B0F7C
+9734>24 D<00000000006000000000000000700000000000000070000000000000007000000000
+0000007000000000000000380000000000000038000000000000001C000000000000001C000000
+000000000E000000000000000F000000000000000780000000000000038000000000000001E000
+000000000000F00000000000000078007FFFFFFFFFFFFE00FFFFFFFFFFFFFF807FFFFFFFFFFFFE
+000000000000007800000000000000F000000000000001E0000000000000038000000000000007
+800000000000000F000000000000000E000000000000001C000000000000001C00000000000000
+380000000000000038000000000000007000000000000000700000000000000070000000000000
+00700000000000000060000039237CA142>33 D<00030000006000000007000000700000000700
+000070000000070000007000000007000000700000000E000000380000000E000000380000001C
+0000001C0000001C0000001C000000380000000E000000780000000F000000F000000007800000
+E000000003800003C000000001E000078000000000F0000F000000000078003FFFFFFFFFFFFE00
+FFFFFFFFFFFFFF803FFFFFFFFFFFFE000F00000000007800078000000000F00003C000000001E0
+0000E000000003800000F000000007800000780000000F000000380000000E0000001C0000001C
+0000001C0000001C0000000E000000380000000E00000038000000070000007000000007000000
+70000000070000007000000007000000700000000300000060000039237CA142>36
+D<007F0000007F000001FFE00001FFC00007FFF800078070000F01FC000E0018001C007E001800
+0C0010003F003000040030001F806000020020000FC0C0000300400007E180000100400003F380
+000100C00001FB00000080800001FE00000080800000FE000000808000007E000000808000003E
+000000808000003F000000808000003F800000808000003FC00000808000006FC0000180400000
+E7E0000100400000C3F000010060000181F800020020000300FC000600100006007E0004001800
+0C003F001C000C0038001FC078000700F0000FFFF00001FFC00003FFC000007F0000007F000039
+1D7C9C42>49 D<0007FC000001C0003FFE000003C000FFFE0000078003E07E0000078007003E00
+000F000E003E00000F001C003E00001F003C003E00001E0078003E00001E0078003C00003E00F0
+003C00003C00E0007C00003C0000007C00007C0000007C0000780000007C000078000000780000
+F8000000780000F0000000F80000F0000000F80001F0000000F00001F0000000F00001E0000001
+F00001E0000001F00003E000001FFFFFFFC000007FFFFFFFC00000FFFFFFFFC0000003E00007C0
+000003C0000780000003C0000780000007C0000F8000000780000F8000000780000F8000000F80
+000F0000000F80000F0000000F00001F0000000F00001F0000001F00001F0000001E00001F0000
+001E00001E0000003E00001E0000003C00003E0060003C00003E01E0007800003E03C000780000
+3E038000F800003F0F0000F000003FFE0000E000003FF800008000001FC00033307EAC38>72
+D<000000600000000004000001E00000000004000003E0000000000C000003F0000000001C0000
+03F0000000003C000003F00000000078000007F00000000078000007F000000000F8000007F800
+000001F8000007F800000003F8000007F800000007F0000006F80000000FF000000CF80000000F
+F000000CFC0000001DF000000CFC00000039F000000CFC00000071F00000187C000000F1E00000
+187C000001E1E00000187E000001C3E00000187E00000383E00000307E00000703E00000303E00
+000E03E00000303F00001E03C00000603F00003C03C00000603F00007807C00000601F00007007
+C00000C01F8000E007C00000C01F8001C007C00000C01F80038007C00001800FC0078007C00001
+800FC00F0007800003000FC01E00078000030007E03C000F8000030007E078000F8000060007E0
+F0000F8000060003F1E0000F80000C0003F3C0000F80000C0003FF80000F80000C0001FF00000F
+8000180001FE00000F8000380000FC00000F8060300000F800000F80787000007000000F80FFE0
+00006000000FC0FFC000000000000FFCFFC000000000000FF8FF80000000000007E07F00000000
+000000001E000000000000000046317EAD50>77 D<0001FFFFF000001FFFFFFE00007FFFFFFF80
+01F87C01FFE0078078003FF00E0078000FF81C00F80003F83C00F80001FC7800F80000FC7800F8
+0000FCF000F800007CE000F800007C0000F000007C0000F000007C0001F00000780001F0000078
+0001F00000F80001E00000F00001E00000E00003E00001E00003E00003C00003C00003800003C0
+0007000007C0000E000007C0003C0000078000700000078003E000000F801F8000000F8FFE0000
+000F1FF00000000F3F800000001F00000000001E00000000001E00000000003E00000000003C00
+000000003C00000000007C0000000000780000000000780000000000F80000000000F000000000
+00F00000000001E00000000001E00000000003C0000000000380000000000200000000002E307E
+AC2E>80 D<0000E000000000E000000000E000000001F000000001F000000003B800000003B800
+0000071C000000071C000000071C0000000E0E0000000E0E0000001C070000001C070000001C07
+000000380380000038038000007001C000007001C00000E000E00000E000E00000E000E00001C0
+00700001C0007000038000380003800038000700001C000700001C000700001C000E00000E000E
+00000E001C000007001C000007001C000007003800000380380000038070000001C070000001C0
+E0000000E0E0000000E0C00000006023297CA72C>94 D<00007C0003C0000700001E00001C0000
+3C0000780000780000780000780000780000780000780000780000780000780000780000780000
+780000780000780000780000780000780000780000780000780000780000F00000E00001E00003
+80000F0000F800000F000003800001E00000E00000F00000780000780000780000780000780000
+780000780000780000780000780000780000780000780000780000780000780000780000780000
+7800007800007800007800003C00001C00001E000007000003C000007C16437BB121>102
+D<F800000F000003800001E00000E00000F0000078000078000078000078000078000078000078
+000078000078000078000078000078000078000078000078000078000078000078000078000078
+00007800007800003C00001C00001E000007000003C000007C0003C0000700001E00001C00003C
+000078000078000078000078000078000078000078000078000078000078000078000078000078
+0000780000780000780000780000780000780000780000780000780000F00000E00001E0000380
+000F0000F8000016437BB121>I<0006000E000E001C001C001C0038003800700070007000E000
+E000E001C001C0038003800380070007000E000E000E001C001C001C0038003800700070007000
+E000E000E000700070007000380038001C001C001C000E000E000E000700070003800380038001
+C001C000E000E000E000700070007000380038001C001C001C000E000E00060F437AB11A>I<C0
+00E000E000700070007000380038001C001C001C000E000E000E000700070003800380038001C0
+01C000E000E000E000700070007000380038001C001C001C000E000E000E001C001C001C003800
+3800700070007000E000E000E001C001C0038003800380070007000E000E000E001C001C001C00
+38003800700070007000E000E000C0000F437CB11A>I<E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0034379B112>I E /Fj 20 122 df<7FFF807FFF80FFFF00FFFF00
+11047D9016>45 D<001FF00000F03C0001800F0003C0078007E007C007E007C007E007C007C003
+C0038007C0000007C0000007C0000007C00001FFC0003F87C000F80F8003E00F800FC00F801F80
+0F803F000F807E000F867E001F0CFC001F0CFC001F0CFC002F0CFC002F0C7C004F187E018F181F
+0607F007F803C01F1D7D9C21>97 D<00F800003FF000003FF0000003F0000001F0000001F00000
+01F0000003E0000003E0000003E0000003E0000003E0000003E0000007C0000007C0000007C000
+0007C0000007C1FC0007CE07000F9801C00FE001E00FC000F00F8000F80F8000780F80007C1F00
+007C1F00007C1F00007E1F00007E1F00007E1F00007E3E0000FC3E0000FC3E0000FC3E0000FC3E
+0000F83E0001F87C0001F07C0003E07C0003C07C0007C07E0007807A001E00F1003C00E0C0F000
+C03F80001F2E7AAD25>I<0007F800001C07000078018001E0038003C00FC007C00FC00F800FC0
+1F000F801F0007003F0000003E0000007E0000007E0000007E000000FC000000FC000000FC0000
+00FC000000FC000000FC0000007C0000007C0003003C0003003E0006001E000C000F0018000700
+300003C0E000007F00001A1D7C9C1E>I<00000007C0000001FF80000001FF800000001F800000
+000F800000000F800000000F800000001F000000001F000000001F000000001F000000001F0000
+00001F000000003E000000003E000000003E000000003E000003F83E00001E063E000078037C00
+00E000FC0003C000FC0007C0007C000F80007C000F00007C001F0000F8003F0000F8003E0000F8
+007E0000F8007E0000F8007E0000F800FC0001F000FC0001F000FC0001F000FC0001F000FC0001
+F000FC0001F0007C0003E0007C0003E0003C0003E0003C0007E0001E0007E0000E001BE0000700
+37E00003C0C7FE00007F07FE00222E7CAD25>I<0007F000003C3C0000F00E0001E00F0003C007
+80078007800F8007C01F0007C01F0007C03E0007C03E0007C07E0007C07FFFFFC07E000000FC00
+0000FC000000FC000000FC000000FC000000FC0000007C0000007C0003003C0003003C0006001E
+000C000E0018000700300003C0C000007F00001A1D7C9C1E>I<00000FC0000078300000F0F000
+03E1F80007C1F8000781F8000F81F0000F80E0001F0000001F0000001F0000001F0000001F0000
+003E0000003E0000003E0000003E000007FFFC0007FFFC00007C0000007C0000007C0000007C00
+00007C0000007C000000F8000000F8000000F8000000F8000000F8000000F8000001F0000001F0
+000001F0000001F0000001F0000001F0000003E0000003E0000003E0000003E0000003E0000003
+E0000007E00000FFFF0000FFFF00001D2E7FAD14>I<00000007800001F818C0000F0F21C0001C
+03C3C0003803C3C0007803C18000F001E00001F001E00001F001E00003E003E00003E003E00003
+E003E00003E003E00003E003C00001E007C00001E007800000E00F000000F01E00000138380000
+010FE0000002000000000200000000060000000006000000000700000000078000000007FFFC00
+0003FFFF000001FFFFC00001FFFFE0000F000FE0001C0001F000380000F000780000F000F00000
+F000F00000F000F00000F000F00001E000F00001E000780003C00038000780001E001E00000780
+78000000FFC00000222C7F9D21>I<0007C0000001FF80000001FF800000001F800000000F8000
+00000F800000000F800000001F000000001F000000001F000000001F000000001F000000001F00
+0000003E000000003E000000003E000000003E000000003E07F000003E183C00007C601E00007C
+800F00007D000F00007E000F80007E000F80007C000F8000FC001F0000F8001F0000F8001F0000
+F8001F0000F8001F0000F8001F0001F0003E0001F0003E0001F0003E0001F0003E0001F0003E00
+01F0003E0003E0007C0003E0007C0003E0007C0003E0007C0003E0007C0003E0007C0007E000FC
+00FFFE1FFFC0FFFE1FFFC0222E7FAD25>I<000E00001F00003F80003F80003F80003F00001E00
+000000000000000000000000000000000000000000000000000000003E0007FE0007FC0000FC00
+007C00007C00007C00007C0000F80000F80000F80000F80000F80000F80001F00001F00001F000
+01F00001F00001F00003E00003E00003E00003E00003E00003E00007E000FFFE00FFFC00112D7F
+AC12>I<0007C000FF8001FF80001F80000F80000F80000F80001F00001F00001F00001F00001F
+00001F00003E00003E00003E00003E00003E00003E00007C00007C00007C00007C00007C00007C
+0000F80000F80000F80000F80000F80000F80001F00001F00001F00001F00001F00001F00003E0
+0003E00003E00003E00003E00003E00007E000FFFE00FFFE00122E7FAD12>108
+D<003E07F000FE0007FE183C0307800FFC601E0C03C000FC800F1001E0007D000F2001E0007E00
+0FC001F0007E000FC001F0007C000F8001F000FC001F8003E000F8001F0003E000F8001F0003E0
+00F8001F0003E000F8001F0003E000F8001F0003E001F0003E0007C001F0003E0007C001F0003E
+0007C001F0003E0007C001F0003E0007C001F0003E0007C003E0007C000F8003E0007C000F8003
+E0007C000F8003E0007C000F8003E0007C000F8003E0007C000F8007E000FC001F80FFFE1FFFC3
+FFF8FFFE1FFFC3FFF8351D7F9C38>I<003E07F00007FE183C000FFC601E0000FC800F00007D00
+0F00007E000F80007E000F80007C000F8000FC001F0000F8001F0000F8001F0000F8001F0000F8
+001F0000F8001F0001F0003E0001F0003E0001F0003E0001F0003E0001F0003E0001F0003E0003
+E0007C0003E0007C0003E0007C0003E0007C0003E0007C0003E0007C0007E000FC00FFFE1FFFC0
+FFFE1FFFC0221D7F9C25>I<0007F000003C1E000070070001E0038003C003C0078001E00F8001
+E01F0001F01F0001F03E0001F03E0001F87E0001F87E0001F87E0001F8FC0003F0FC0003F0FC00
+03F0FC0003F0FC0003E0FC0007E07C0007C07C0007C07C000F803C000F001E001E001E003C0007
+00700003C1C00000FF00001D1D7C9C21>I<000F83F80001FF9C0E0003FF300780001FC003C000
+1F8003E0001F0001F0001F0001F0001F0001F8003E0000F8003E0000F8003E0000FC003E0000FC
+003E0000FC003E0000FC007C0001F8007C0001F8007C0001F8007C0001F8007C0003F0007C0003
+F000F80003E000F80007C000F8000F8000F8000F8000FC001F0000FC003C0001F200780001F181
+E00001F07F000001F000000001F000000001F000000003E000000003E000000003E000000003E0
+00000003E000000003E000000007C000000007E0000000FFFE000000FFFE000000262A819C25>
+I<007C1F8007FC21C00FF843E000F887E0007907E0007A07E0007A03C0007C000000F4000000F4
+000000F8000000F8000000F8000000F8000001F0000001F0000001F0000001F0000001F0000001
+F0000003E0000003E0000003E0000003E0000003E0000003E0000007E00000FFFF0000FFFF0000
+1B1D7F9C1A>114 D<001FC300E03701801E03000E06000E0E00060E00060E00061E000C1F8000
+0FF0000FFF0007FFE003FFF001FFF8007FFC0007FC00007C30003E30001E70001C70001C70001C
+700018780038780030FC0060E3038081FE00181D7E9C1A>I<0030000030000060000060000060
+0000E00000E00001E00001C00003C00007C0000FC0003FFFE0FFFFE00F80000F80000F80000F80
+000F80000F80001F00001F00001F00001F00001F00001F00003E00003E00003E00003E01803E01
+803E01807C03007C03007C03007C03007C06003C06001E0C000E180003E00013297AA81A>I<03
+E0007C7FE00FFCFFC01FF80FC001F807C000F807C000F807C000F807C000F80F8001F00F8001F0
+0F8001F00F8001F00F8001F00F8001F01F0003E01F0003E01F0003E01F0003E01F0003E01F0003
+E03E0007C03E0007C03E000FC03E000FC01E0017C01E0027C00E004FC007818FFC01FE0FFC1E1D
+7B9C25>I<03FFF01FFC03FFF01FF8003F000FE0003F000780003F000700001F000600001F000E
+00001F000C00001F801800000F801800000F803000000F803000000F806000000FC060000007C0
+C0000007C1C0000007C180000007E300000003E300000003E600000003E600000003EC00000003
+FC00000001F800000001F800000001F000000001E000000000E000000000C000000000C0000000
+018000000001800000000300000000070000007806000000FC0C000000FC0C000000FC18000000
+F830000000F06000000061C00000003F00000000262A809C23>121 D E
+/Fk 39 123 df<0000003F80000001C0E0000006007000001800380000300038000060003C0000
+C0001C000180003C000300003C000300003C000600003C000C000038000C000078001800007000
+180000F000180000E000300001C000300FF7000030181E0000300FF70000600003800060000380
+00600003C000600001C000C00001E000C00001E000C00001E000C00003E001800003E001800003
+E001800003E001800003E003000007C003000007C003000007C00300000F800700000F80070000
+0F000780001E000780001C000CC00038000CC00070000C6000E0000C3001C000180E0700001803
+F80000180000000018000000003000000000300000000030000000003000000000600000000060
+0000000060000000006000000000C000000000C000000000C000000000263B80AD26>12
+D<0001FE000007FFC000081FE0000807E0001003C000100000001000000018000000180000001C
+0000001C0000000E0000000F000000070000000780000007C0000003E0000003E0000003F00000
+1EF8000030F80000E07C0001C07C0003807C0007003E000E003E001E003E001C001E003C001E00
+3C001E0078001E0078001E0078001E00F0001C00F0003C00F0003C00F0003C00F0003800F00078
+0070007000700070007000E0003800C000180180000C0300000706000001F800001B2F7DAE1E>
+14 D<0007F8003FF800F80001E00007C0000F00001F00001E00003E00007C00007C0000F80000
+FFFFC0FFFFC0F80000F00000F00000F00000F00000F00000F00000F00000700000780000380000
+1C00700E00E007038000FE00151D7C9C1B>I<000040000000C0000000C0000000C0000000C000
+0000C00000007FE00000603000019FE00003000000060000000C00000018000000300000006000
+0000E0000000C00000018000000380000003000000070000000E0000000E0000001C0000001C00
+000018000000380000003800000038000000700000007000000070000000700000007000000070
+000000F0000000F0000000F00000007000000078000000780000007C0000003E0000003F800000
+1FE000000FFC000003FF800001FFE000003FF0000007F8000000F8000000780000003800000038
+00000038000000380000003000006060000010C000000F80001C3C7DAE1D>I<0000F800000386
+0000060600000E0300001C03800038038000780380007003C000F003C001E003C001E003C003C0
+03C003C003C0078003C0078003C00F8007C00F0007C01F0007C01F0007C01F0007C03E000F803E
+000F803FFFFF803FFFFF807C001F007C001F007C001F007C001E0078003E0078003E00F8003C00
+F8007C00F8007800F8007800F000F000F000F0007001E0007001E0007003C00070038000700700
+0038060000380C0000181800000C30000007C000001A2E7DAD1F>18 D<01F00000003C0000001E
+0000001F0000001F0000000F0000000F800000078000000780000007C0000003C0000003E00000
+03E0000001E0000001F0000001F0000000F0000000F800000078000000780000007C0000003C00
+00003E0000003E0000001E0000003F0000007F000000CF0000018F800003078000070780000E07
+C0001C03C0003803C0007003E000E001E001E001F003C001F0078000F00F0000F81E0000F83C00
+00787800007CF800003CF000003EE000001E1F2E7CAD27>21 D<03E0000C3FE0001E7FE0001E03
+C0003C03C0003C03C0003C03C0007807800078078000F0078000F0078001E00F0001E00F0003C0
+0F0003800F0007801E000F001E000E001E001C001E0038003C0070003C00E0003C01C0003C0300
+00780E0000781800007870000079C00000FE000000F00000001F1D7D9C21>23
+D<000040000000C0000000C0000000C0000000C0000000C00000007FC00003E060000F1FC0001E
+0000007C000000F8000000F0000001F0000003E0000003E0000003E0000007C0000007C0000007
+C0000003C0000003E0000001E0000001E0000000F7FC00003C0C00006FF80001C0000003000000
+060000000E0000001C0000001800000038000000300000007000000070000000E0000000E00000
+00E0000000F0000000F0000000F80000007C0000007F0000003FC000001FF8000007FE000001FF
+C000007FF000001FF8000003FC000000FC0000003C0000001C0000001C00004018000020300000
+1860000007C0001B3C7EAE1D>I<00003F000000E1C00001806000070070000E0078001C003800
+1C003C0038003C0078003C0070003C00F0003C00E0007C01E0007C01E0007C01E0007C03C000F8
+03C000F803C000F803C000F0078001F0078001E0078003C0078003C00F8007800FC00F000F400E
+000F6038001E3070001E0F80001E0000001E0000003C0000003C0000003C0000003C0000007800
+0000780000007800000078000000F0000000F0000000F0000000600000001E2B7E9C22>26
+D<0007FFFFC0001FFFFFC0007FFFFF8000F81F000001E007000003C007800007800380000F0003
+C0001E0003C0001C0003C0003C0003C0003C0003C000780003C000780003C000780003C000F000
+078000F000078000F000078000F0000F0000F0000F0000F0000E0000F0001C000070003C000070
+0038000030007000003800E000001C03800000060E00000001F8000000221D7D9C26>I<00FFFF
+FE03FFFFFE07FFFFFC0E0180001C018000380180003003800060038000C0030000C00300000007
+00000007000000070000000E0000000E0000000E0000000E0000001E0000001C0000001C000000
+3C0000003C0000003800000038000000780000007800000078000000F00000006000001F1D7E9C
+1D>I<000000C000000000C000000000C000000000C00000000180000000018000000001800000
+000180000000030000000003000000000300000000030000000006000000000600000000060000
+000006000000000C000000007F800000078C7000001C0C1C00007018060000E018070001C01803
+8003801801C007003001C00E003001E01E003001E03C003001E03C006001E078006001E0780060
+01E078006001E0F000C003C0F000C003C0F000C00380F000C00780F0018007007001800F007001
+801E003801801C0038030038001C0300E0000E0301C000070307000001C63C0000003FE0000000
+060000000006000000000C000000000C000000000C000000000C00000000180000000018000000
+00180000000018000000003000000000300000000030000000233B7DAD28>30
+D<0000000C000000000C000000000C000000001800000000180000000018000000001800000000
+300000000030000000003000000000300000000060000000006000000000600000000060000000
+00C000000000C00003E000C00C043000C01E083801803E103C01803F303C01801F603C01801F60
+3C03000E407803000EC07803000EC07803000E00F006000E00F006000C01E006000C01E006000C
+01E00C000803C00C001803C00C001803C00C003003C018002003C018006003C01800C003C01801
+8003C030010003C030020001E0300C0000E03018000078607000001E61C0000003FE0000000060
+00000000C000000000C000000000C000000000C000000001800000000180000000018000000001
+8000000003000000000300000000030000000003000000283B7EAD2B>32
+D<387CFEFEFE7C3807077B8612>58 D<387CFEFEFF7D390101010102020204040810204008147B
+8612>I<00000300000700000700000E00000E00000E00001C00001C00001C0000380000380000
+380000700000700000700000E00000E00000E00001C00001C00001C00003800003800003800007
+00000700000700000E00000E00000E00001C00001C00001C000038000038000038000038000070
+0000700000700000E00000E00000E00001C00001C00001C0000380000380000380000700000700
+000700000E00000E00000E00001C00001C00001C00003800003800003800007000007000007000
+00E00000E00000C0000018437CB121>61 D<E00000000000F800000000007E00000000001F8000
+00000007E00000000001F800000000007E00000000001F800000000007E00000000001FC000000
+00007F00000000001FC00000000003F00000000000FC00000000003F00000000000FC000000000
+03F00000000000FC00000000003F80000000000F80000000003F8000000000FC0000000003F000
+0000000FC0000000003F0000000000FC0000000003F0000000001FC0000000007F0000000001FC
+0000000007E0000000001F80000000007E0000000001F80000000007E0000000001F8000000000
+7E0000000000F80000000000E0000000000029277BA334>I<0000FF00000003FFC000000F01E0
+00001C0078000030003C000060001C000060000E0000F0000F0000F800070001F800078001F800
+078001F000078000E0000780000000078000000007C000000007C000000007C00001FC07C0000F
+0307C000380087C0007000478000E0004F8001C0002F800380002F800700002F800F00003F001E
+00003F001E00003F003E00003E003C00003E007C00003E007C00003C007C00007C00F800007C00
+F800007800F80000F800F80000F000F80001E000F80001E000F80003C000780003800078000700
+0038000F00001C001C00001E007800000F81F0000003FFC0000000FE00000022307DAE23>64
+D<001FFFFFFF00001FFFFFFFE000007F0003F000007E0000F800007E00007C00007E00007E0000
+7E00003E0000FC00003F0000FC00003F0000FC00003F0000FC00003F0001F800003E0001F80000
+7E0001F800007E0001F80000FC0003F00000F80003F00001F00003F00003E00003F00007C00007
+E0001F000007E000FC000007FFFFF0000007E0007E00000FC0001F00000FC0000F80000FC00007
+C0000FC00007C0001F800007E0001F800003E0001F800003E0001F800003E0003F000007E0003F
+000007E0003F000007E0003F000007C0007E00000FC0007E00000F80007E00001F80007E00003F
+0000FC00007E0000FC0000FC0000FC0003F80001FC000FE0007FFFFFFF8000FFFFFFFC0000302D
+7EAC32>66 D<001FFFFFFF0000001FFFFFFFC00000007F0007F00000007E0000F80000007E0000
+7C0000007E00003E0000007E00001F000000FC00000F000000FC00000F800000FC00000F800000
+FC000007C00001F8000007C00001F8000007C00001F8000007C00001F8000007C00003F0000007
+C00003F0000007C00003F0000007C00003F0000007C00007E000000FC00007E000000FC00007E0
+00000FC00007E000000FC0000FC000000F80000FC000001F80000FC000001F80000FC000001F00
+001F8000003F00001F8000003E00001F8000003E00001F8000007C00003F0000007C00003F0000
+00F800003F000001F000003F000001F000007E000003E000007E000007C000007E00000F800000
+7E00001F000000FC00003E000000FC0000F8000000FC0003F0000001FC001FC000007FFFFFFF00
+0000FFFFFFF8000000322D7EAC37>68 D<001FFFFFFFF8003FFFFFFFF80000FE0003F80000FC00
+00F80000FC0000780000FC0000780000FC0000300001F80000300001F80000300001F800003000
+01F80000300003F00000300003F00000300003F000C0300003F000C0300007E00180000007E001
+80000007E00180000007E0038000000FC0070000000FC01F0000000FFFFF0000000FFFFF000000
+1F801E0000001F800E0000001F800E0000001F800E0000003F000C0000003F000C0000003F000C
+0000003F000C0000007E00000000007E00000000007E00000000007E0000000000FC0000000000
+FC0000000000FC0000000000FC0000000001F80000000001F80000000001F80000000003F80000
+0000FFFFF8000000FFFFF00000002D2D7DAC2B>70 D<000000FF8004000007FFF00C00003FC078
+1C0000FC000C3C0001F00006780007C00003F8000F800001F8001F000001F8003E000000F0007C
+000000F000F8000000F001F0000000F003E00000006007E00000006007C0000000600FC0000000
+E01F80000000C01F80000000003F00000000003F00000000003E00000000007E00000000007E00
+000000007E0000000000FC0000000000FC0000000000FC0000000000FC00007FFFF0FC00007FFF
+F0FC0000007E00FC0000007E00FC0000007E00FC000000FC00FC000000FC007C000000FC007C00
+0000FC007C000001F8003E000001F8003E000001F8001F000003F8000F000003F00007800007F0
+0003E0000CF00001F00038F00000FE01F06000003FFFC020000007FC0000002E2F7CAD34>I<00
+1FFFFF80001FFFFF0000007F800000007E000000007E000000007E000000007E00000000FC0000
+0000FC00000000FC00000000FC00000001F800000001F800000001F800000001F800000003F000
+000003F000000003F000000003F000000007E000000007E000000007E000000007E00000000FC0
+0000000FC00000000FC00000000FC00000001F800000001F800003001F800003001F800006003F
+000006003F000006003F00000C003F00000C007E000018007E000038007E000038007E00007000
+FC0000F000FC0001F000FC0007E001FC003FE07FFFFFFFC0FFFFFFFFC0282D7EAC2D>76
+D<000001FF000000000F01E0000000380078000000F0001C000003C0000E00000780000F00000F
+00000780003E000003C0007C000003C000F8000003E000F0000001E001F0000001F003E0000001
+F007C0000001F007C0000001F00F80000001F01F80000001F01F00000001F03F00000001F03F00
+000001F03E00000003F07E00000003F07E00000003F07E00000003F0FC00000007E0FC00000007
+E0FC00000007E0FC0000000FC0FC0000000FC0FC0000000F80FC0000001F80FC0000001F00FC00
+00003F00FC0000003E00FC0000007C007C000000FC007C000000F8007C000001F0003E000003E0
+003E000007C0001E00000F80000F00001E00000780003C000003C000F0000001E001E000000078
+0F000000000FF80000002C2F7CAD33>79 D<001FFFFFFE00001FFFFFFF8000007F000FE000007E
+0001F000007E0000F800007E0000FC00007E00007C0000FC00007C0000FC00007C0000FC00007E
+0000FC00007E0001F80000FC0001F80000FC0001F80000FC0001F80001F80003F00001F80003F0
+0001F00003F00003E00003F00007C00007E0000F800007E0003E000007E000F8000007FFFFE000
+000FC0000000000FC0000000000FC0000000000FC0000000001F80000000001F80000000001F80
+000000001F80000000003F00000000003F00000000003F00000000003F00000000007E00000000
+007E00000000007E00000000007E0000000000FC0000000000FC0000000000FC0000000001FC00
+0000007FFFF0000000FFFFF00000002F2D7EAC2B>I<000001FF000000000F01E00000003C0078
+000000F0001C000003C0001E00000780000F00000F00000780003E000007C0007C000003C000F8
+000003E000F0000003E001F0000001F003E0000001F007C0000001F007C0000001F00F80000001
+F01F80000001F01F80000001F03F00000001F03F00000003F03E00000003F07E00000003F07E00
+000003F07E00000003F0FC00000007E0FC00000007E0FC00000007E0FC0000000FC0FC0000000F
+C0FC0000000F80F80000001F80F80000001F00F80000003F00F80000003E00FC0000007C007C00
+00007C007C000000F8007C00F801F0003C010403E0003E060207C0001E04020F80000F08011E00
+000788013C000003C80170000001E801E00000007C0F000400000FF9000400000001800C000000
+03800800000003801800000003801800000003C07000000003E0F000000003FFE000000003FFC0
+00000001FFC000000001FF8000000000FF00000000007C00002C3B7CAD35>I<000FC000003861
+80007013C001C01F8003C00F8007800F8007000F800F000F001E000F001E000F003E000F003C00
+1E007C001E007C001E007C001E00F8003C00F8003C00F8003C00F8003C00F8007818F0007818F0
+0078187000F8107001F0307801703038027060180C38600C1818C003E00F001D1D7D9C23>97
+D<00F0001FF0003FF00001F00001E00001E00001E00001E00003C00003C00003C00003C0000780
+000780000780000780000F00000F07C00F18700F60181EC01C1F801E1F000E1E000F3E000F3C00
+0F3C000F3C000F78001F78001F78001F78001FF0003EF0003EF0003EF0003CF0007CF00078F000
+F07000F07001E07003C0300380180E000C1C0003E000182E7DAD1D>I<000001F00000030C0000
+061E00000E3E00001E7E00001C7E00003C7C00003C3800003C0000003800000078000000780000
+00780000007800000078000000F0000000F000003FFFE0003FFFE00000F0000001E0000001E000
+0001E0000001E0000001E0000003C0000003C0000003C0000003C0000003C00000078000000780
+00000780000007800000078000000F0000000F0000000F0000000F0000000F0000001E0000001E
+0000001E0000001E0000001E0000003C0000003C0000003C0000003C0000003800000078000038
+7800007C700000FC700000FCE00000F8C00000F1C00000618000001E0000001F3B7CAD21>102
+D<00007C000003C30C0007019E000E00FC003C00FC0038007C0070007C00F0007801F0007801E0
+007803E0007803C000F007C000F007C000F007C000F00F8001E00F8001E00F8001E00F8001E00F
+8003C00F8003C00F0003C0070007C007800F8003801F800380378001C0678000E1CF00003F0F00
+00000F0000000F0000001E0000001E0000001E0000001E0038003C007C003800FC007000FC00E0
+00F803C000700F00001FFC00001F2A7F9C20>I<00780FF80FF800F800F000F000F000F001E001
+E001E001E003C003C003C003C007800780078007800F000F000F000F001E001E001E001E003C00
+3C003C003C007800780078007800F030F030F030F020E060E060E0C0708031801E000D2E7DAD14
+>108 D<07800FC00008E07070001070C038003071003800207A003C00607C003C00607C003C00
+C0F8003C00C0F8003C00C0F0003C0000F0003C0001E000780001E000780001E000780001E000F0
+0003C000F00003C000F00003C001E00003C001E000078001E060078003C060078003C060078003
+C0C00F000380C00F000381800F000381800F000383001E000186000C0000F800231D7E9C28>
+110 D<007803F000008E0E18000107180C000307300E000207E007000607C0070006078007800C
+0F0007800C0F0007800C0F000780000F000780001E000F80001E000F80001E000F80001E000F80
+003C001F00003C001F00003C001F00003C001E000078003E000078003C00007800780000780078
+0000F800F00000FC00E00000FC01C00000F603800001E30E000001E0F8000001E000000001E000
+000003C000000003C000000003C000000003C00000000780000000078000000007800000000780
+0000000F80000000FFF8000000FFF8000000212A829C21>112 D<07803F0008E0C180107183C0
+307307C0207E0FC0607C0FC060780F80C0F80700C0F00000C0F0000000F0000001E0000001E000
+0001E0000001E0000003C0000003C0000003C0000003C000000780000007800000078000000780
+00000F0000000F0000000F0000000F0000001E0000000C0000001A1D7E9C1E>114
+D<000FE000383800600C00C00401801E03803E03803E07803C07801807800007E00003FE0003FF
+C001FFE000FFF0001FF80001F8000078000078780038FC0038FC0038FC0030F80070E00060C000
+C0600180380E0007F800171D7C9C1F>I<000C00001E00001E00003C00003C00003C00003C0000
+780000780000780000780000F000FFFFE0FFFFE000F00001E00001E00001E00001E00003C00003
+C00003C00003C0000780000780000780000780000F00000F00000F00000F00001E00C01E00C01E
+00801E01801C03001C03001C06000C0C000E180003E00013297FA818>I<03E00060043000F008
+3801F0103C01F8303C00F8603C00F8603C007040780070C0780070C078007000F0007000F00060
+01E0006001E0006001E0006003C000C003C000C003C000C003C001800380018007800300078003
+00038006000380040003C00C0001C0180001C0300000706000001F80001D1D7E9C20>118
+D<03E0003001800430007803C00838007807C0103C00F007E0303C00F003E0603C00F003E0603C
+00F001C0407801E001C0C07801E001C0C0F001E001C000F001E001C000F003C0018001E003C001
+8001E003C0018001E003C0018003C00780030003C00780030003C00780030003C0078002000380
+0700060007800F00060007800F000C0003800F000C0003800F00080003C01F80100001C0138030
+0000C023806000007040E0C000001F803F00002B1D7E9C30>I<001E0060007F006000FF80C001
+FFC18001C0F70003000F000300060000000C000000180000003000000060000000C00000018000
+0003000000060000001C0000003000000060000000C000000180018003000180060001800C0003
+000F0007001CF01E00303FFC00601FF800600FF000C007C0001B1D7D9C1F>122
+D E /Fl 28 122 df<0000007FF0000001E01C000007000600000E000700001E000F00001C001F
+00003C001F000038000E00007800000000780000000078000000007800000000F000000000F000
+000000F000000000F000000000F00000003FFFFFF8003FFFFFF80001E000780001E000F00001E0
+00F00003C000F00003C000F00003C001E00003C001E00003C001E000078001E000078003C00007
+8003C000078003C000078003C0000F000780000F000780000F000780000F000780000F000F0600
+1E000F06001E000F06001E000F06001E000E0C001E000E0C003C000E08003C000E18003C000730
+003C0001E0003C000000007800000000780000000078000000007000000000F000000070F00000
+00F8E0000000F8E0000000F1C0000000E18000000063000000003E00000000283B81AD25>12
+D<3C7EFEFEFCFC700707788614>46 D<00000400000C0000180000380000780000F80001F00007
+F0003EF000F8F000C1E00001E00001E00001E00003C00003C00003C00003C00007800007800007
+80000780000F00000F00000F00000F00001E00001E00001E00001E00003C00003C00003C00003C
+0000780000780000780000780000F00000F00000F00001F000FFFFE0FFFFE0162C78AB22>49
+D<00007F00000181C0000600E0000C007000180038003000380060003C0040003C00C1003E0181
+003E0181003E0301003E0301003E0301003E0602007C0602007C0604007C060400F8060800F802
+3001F001C003E0000003C00000078000000F0000003C00000078000001E00000038000000F0000
+001C00000070000000E000000180002003000030060000600C0000600C0000E0180000C0300001
+C03FC0038070FC0700603FFF00E00FFE00C007FC00C001F0001F2D7AAB22>I<00000001800000
+00000380000000000380000000000780000000000F80000000000F80000000001FC0000000001F
+C00000000037C00000000077C00000000067C000000000C7C000000000C7C00000000187C00000
+000187C00000000307C00000000707C00000000607C00000000C07C00000000C07C00000001803
+E00000001803E00000003003E00000007003E00000006003E0000000C003E0000000C003E00000
+018003E00000018003E0000003FFFFE0000007FFFFE00000060003E000000C0003E000000C0003
+F00000180001F00000180001F00000300001F00000700001F00000600001F00000C00001F00000
+C00001F00001C00001F00003C00001F0000FC00003F800FFF8003FFFC0FFF8007FFF802A2E7CAD
+31>65 D<000000FF001000000FFFC03000003F80F0700000FC0038F00003F0001DE00007C0000F
+E0000F800007E0001E000007E0007C000003C00078000003C000F8000003C001F0000003C003E0
+0000018007E00000018007C0000001800F80000001801F80000003001F80000000003F00000000
+003F00000000003E00000000007E00000000007E00000000007E0000000000FC0000000000FC00
+00000000FC0000000000FC0000000000FC0000000000FC0000000000F80000000000F800000018
+00F80000003000FC0000003000FC00000030007C00000060007C000000C0003C000000C0003E00
+000180001E00000300001F00000600000F80000C000007C00038000003E000F0000000FC03C000
+00007FFF000000000FF80000002C2F76AD30>67 D<001FFFFFFFF0001FFFFFFFF00000FC0007F0
+0000F80001F00000F80000F00000F80000700000F80000600001F00000600001F00000600001F0
+0000600001F00000600003E00000600003E00000600003E00180600003E00180600007C0030000
+0007C00300000007C00300000007C0070000000F800E0000000F801E0000000FFFFE0000000FFF
+FE0000001F003C0000001F001C0000001F001C0000001F001C0000003E00180000003E00180000
+003E00180000003E00180000007C00000000007C00000000007C00000000007C0000000000F800
+00000000F80000000000F80000000000F80000000001F00000000001F00000000001F000000000
+03F000000000FFFFE0000000FFFFE00000002C2D7CAC2B>70 D<001FFC0000003FF8001FFC0000
+007FF80000FE0000007E000000DE000000FC000000DE000000FC000000DE000001BC000000DE00
+00033C0000019E000003780000019E000006780000019E00000C780000019E00000C780000031E
+000018F00000030F000018F00000030F000030F00000030F000060F00000060F000061E0000006
+0F0000C1E00000060F0000C1E00000060F000181E000000C0F000303C000000C0F000303C00000
+0C07800603C000000C07800603C000001807800C07800000180780180780000018078018078000
+001807803007800000300780300F000000300780600F000000300780C00F000000300780C00F00
+00006003C1801E0000006003C1801E0000006003C3001E0000006003C6001E000000C003C6003C
+000000C003CC003C000000C003CC003C000000C003D8003C0000018003F000780000018001F000
+78000003C001E0007800000FE001E000F80000FFFE01C03FFFE000FFFC01803FFFC0003D2D7BAC
+3C>77 D<0FFFFFFFFFC00FFFFFFFFFC01FC00FC00FC01E000F8003C01C000F80038018000F8003
+8038000F80018030001F00018030001F00018060001F00038060001F00030060003E000300C000
+3E000300C0003E000300C0003E00030000007C00000000007C00000000007C00000000007C0000
+000000F80000000000F80000000000F80000000000F80000000001F00000000001F00000000001
+F00000000001F00000000003E00000000003E00000000003E00000000003E00000000007C00000
+000007C00000000007C00000000007C0000000000F80000000000F80000000000F80000000000F
+80000000001F00000000001F00000000001F00000000003F000000003FFFFF0000007FFFFF0000
+002A2D74AC30>84 D<000F80000038430000E0278001C03F0003C01F0007801F000F001F000F00
+1E001E001E001E001E003E001E003C003C007C003C007C003C007C003C00F8007800F8007800F8
+007800F8007800F800F060F000F060F000F060F001F0607001E0C07802E0C03806E08018086180
+0C30730007C01E001B1D789C22>97 D<01F0001FF0003FF00001F00001E00001E00001E00001E0
+0003C00003C00003C00003C0000780000780000780000780000F00000F0F800F30E00F40701E80
+701F00381F00381E003C3C003C3C003C3C003C3C003C78007C78007C78007C78007CF000F8F000
+F8F000F8F000F0F001F0F001E0E003E0F003C0700780700700300E00381C001C700007C000162E
+78AD1F>I<0007F0001C1C00700600E00601C00F03801F07801F0F001E1F001C1E00003E00003C
+00007C00007C00007C0000F80000F80000F80000F80000F80000F80000F8000478000C78001C38
+00383800601C01C00E070003F800181D789C1F>I<0000007800000FF800001FF8000000F80000
+00F0000000F0000000F0000000F0000001E0000001E0000001E0000001E0000003C0000003C000
+0003C0000003C000000780000F87800038478000E0278001C03F0003C01F0007801F000F001F00
+0F001E001E001E001E001E003E001E003C003C007C003C007C003C007C003C00F8007800F80078
+00F8007800F8007800F800F060F000F060F000F060F001F0607001E0C07802E0C03806E0801808
+61800C30730007C01E001D2E78AD22>I<0007E0003C1800700C01E00C03C0060780060F00060F
+000C1E000C3E00183E00307C01E07FFF007C00007C0000780000F80000F80000F80000F8000078
+000078000478000C78001C3800381C00600C01C006070001F800171D789C1F>I<001E000003FE
+000007FE0000003E0000003C0000003C0000003C0000003C000000780000007800000078000000
+78000000F0000000F0000000F0000000F0000001E0000001E0FC0001E3070001EC038003D803C0
+03F003C003E003C003E003C007C003C007C003C0078003C0078003C00F0007800F0007800F0007
+800F000F001E000F001E000F001E001E001E001E003C001E0C3C003C0C3C003C0C3C003C087800
+3818780038107800383078003820F00018C060000F801E2E7BAD22>104
+D<000E001F001F001E001C0000000000000000000000000000000000000000000003C00C601870
+10703078607860F0C0F0C0F0C1E001E001E003C003C003C00780078007800F000F061E061E061E
+0C1C0C1C081C181C300C600780102D7AAC14>I<00780FF80FF800F800F000F000F000F001E001
+E001E001E003C003C003C003C007800780078007800F000F000F000F001E001E001E001E003C00
+3C003C003C007800780078007800F060F060F060F060E0C0E0C0E080E18073001E000D2E79AD11
+>108 D<0F003F001F800018C0C1C060E00030E300E180700030E600F300780060FC00F6007800
+60F800F400780060F800FC007800C1F000F8007800C1F000F8007800C1E000F000780001E000F0
+00780003C001E000F00003C001E000F00003C001E000F00003C001E001E000078003C001E00007
+8003C001E000078003C003C000078003C003C0000F00078003C1800F0007800781800F00078007
+81800F0007800781001E000F000703001E000F000702001E000F000706001E000F000704003C00
+1E0003180018000C0001F000311D7A9C36>I<0F003F0018C0C1C030E300E030E600F060FC00F0
+60F800F060F800F0C1F000F0C1F000F0C1E000F001E000F003C001E003C001E003C001E003C003
+C0078003C0078003C007800780078007800F0007830F000F030F000F030F000F021E000E061E00
+0E041E000E0C1E000E083C000630180003E0201D7A9C25>I<0007E000001C380000701C0000E0
+0E0001C00F0003800700078007800F0007801F0007801E0007803E000F803C000F807C000F807C
+000F807C000F80F8001F00F8001F00F8001F00F8003E00F8003E00F8003C00F000780078007800
+7800F0003801E0003803C0001C0700000E1E000003F00000191D789C22>I<007803F00000C60E
+18000187180C000187300E000307E007000307C007000307800780060F000780060F000780060F
+000780000F000780001E000F80001E000F80001E000F80001E000F80003C001F00003C001F0000
+3C001F00003C001E000078003E000078003C000078007800007800780000F800F00000FC00E000
+00FC01C00000F603800001E30E000001E0F8000001E000000001E000000003C000000003C00000
+0003C000000003C000000007800000000780000000078000000007800000000F80000000FFFC00
+0000FFF8000000212A7F9C22>I<0F007E0018C1818030E201C030E403C060FC07C060F807C060
+F00380C1F00000C1E00000C1E0000001E0000003C0000003C0000003C0000003C0000007800000
+0780000007800000078000000F0000000F0000000F0000000F0000001E0000001E0000001E0000
+001E0000003C000000180000001A1D7A9C1C>114 D<001FC000707000C01801800803001C0700
+3C07003C0F00380F00000F00000FC00007FC0007FF0003FF8001FFC0003FE00003E00001E00000
+E03000E07800E0F800E0F800C0F001C0C00180C00300600600381C000FE000161D7A9C1B>I<00
+1800003C00003C0000780000780000780000780000F00000F00000F00000F00001E000FFFFC0FF
+FFC001E00003C00003C00003C00003C0000780000780000780000780000F00000F00000F00000F
+00001E00001E00001E00001E00003C03003C03003C03003C0600380400380C003818003810001C
+6000078000122979A816>I<03C000300C60007818700078307000F0307800F0607800F0607800
+F0C0F001E0C0F001E0C1E001E001E001E001E003C003C003C003C003C003C003C0078007800780
+078007800780078007800F000F060F000F060F000F060F000F0607001E0C07003E0C07802E0C03
+80C61801C18730007E01E01F1D7A9C24>I<03C000600C0C6000F01E187000F03F307001E03F30
+7801E01F607801E00F607801E00EC0F003C00EC0F003C00EC1E003C00601E003C00E01E007800C
+03C007800C03C007800C03C007800C07800F001807800F001807800F001807800F001007001E00
+300F001E00300F001E006007001E006007001E004007803E00C003802F0180018047010000E183
+8600003F00FC00281D7A9C2C>119 D<007C03E001870C180303981C0603B03C0C01E07C0801E0
+7C1803E0381803C0003003C0003003C0000003C00000078000000780000007800000078000000F
+0000000F0000000F0000000F0000001E0030001E0030001E0030301E0060783E0060F83E00C0F8
+6E0180F0460300618306001F01F8001E1D7C9C1F>I<03C000600C6000F0187000F0307001E030
+7801E0607801E0607001E0C0F003C0C0F003C0C1E003C001E003C001E0078003C0078003C00780
+03C0078007800F0007800F0007800F0007800F000F001E000F001E000F001E000F001E000F003C
+0007003C0007007C000380BC0001C37800007C780000007800000078000000F0000000F0001C01
+E0003C01E0007C03C0007C03800078070000600E0000301C0000187000000FC000001C2A7A9C20
+>I E /Fm 18 118 df<1E003F007F807FC07FC07FC03FC01FC003C007C007800F803F007E00FC
+00F80060000A11748723>44 D<3C7EFFFFFFFF7E3C0808738723>46 D<001800003C00007C0000
+7C0000FC0000FC0001FC0007FC007FFC00FFFC00FF7C007C7C00007C00007C00007C00007C0000
+7C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000
+7C00007C00007C00007C00007C00007C00007C00007C003FFFFC7FFFFE7FFFFE7FFFFC17297AA8
+23>49 D<0007F000001FFC00007FFE0000FFFF0001FC1F8003F007C007C003C00F80FBC01F03FF
+E01E07FFE03E0FFFE03C1F8FF07C1E03F0783E03F0783C01F0F83C01F0F07C01F0F07800F0F078
+00F0F07800F0F07800F0F07800F0F07800F0F07800F0F07C01F0F83C01E0783C01E0783E03E07C
+1E03C03C1F8FC03E0FFF801E07FF001F03FE000F80F80007C000E003F003F001FC0FF000FFFFE0
+007FFFC0001FFF000007F8001C297DA823>64 D<003FF80000FFFC0003FFFE0007FFFF000FE03F
+001F803F003F001E003E0000007E0000007C000000FC000000F8000000F8000000F8000000F800
+0000F8000000F8000000F8000000FC0000007C0000007E0000003E0007003F000F801F801F800F
+E07F0007FFFF0003FFFE0000FFF800003FE000191D7B9C23>99 D<0000FF800001FFC00001FFC0
+0000FFC0000007C0000007C0000007C0000007C0000007C0000007C0000007C0000007C0003F87
+C000FFE7C003FFFFC007FFFFC00FE0FFC01F803FC03F001FC03E000FC07E000FC07C0007C0FC00
+07C0F80007C0F80007C0F80007C0F80007C0F80007C0F80007C0F80007C0FC0007C07C000FC07C
+000FC03E001FC03F001FC01F803FC00FE0FFC007FFFFFE03FFF7FF01FFE7FF003F83FE20297EA8
+23>I<003FC00000FFF80003FFFC0007FFFE000FF07F001FC01F803F000FC03E0007C07E0007C0
+7C0007E0FC0003E0F80003E0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFC0F8000000F80000007C0000
+007C0000007E0000003E0001C01F0003E00FC007E007F01FC003FFFFC001FFFF80007FFE00001F
+F8001B1D7D9C23>I<7FC0000000FFE0000000FFE00000007FE000000003E000000003E0000000
+03E000000003E000000003E000000003E000000003E000000003E000000003E0FE000003E3FF80
+0003EFFFC00003FFFFE00003FF87E00003FE03F00003F801F00003F801F00003F001F00003F001
+F00003E001F00003E001F00003E001F00003E001F00003E001F00003E001F00003E001F00003E0
+01F00003E001F00003E001F00003E001F00003E001F00003E001F00003E001F00003E001F0007F
+FF0FFF80FFFF9FFFC0FFFF9FFFC07FFF0FFF80222980A823>104 D<003800007C0000FE0000FE
+0000FE00007C000038000000000000000000000000000000000000007FFC00FFFE00FFFE007FFE
+00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E
+00003E00003E00003E00003E00003E00003E00003E00003E007FFFFEFFFFFFFFFFFF7FFFFE182A
+7AA923>I<7FFE0000FFFF0000FFFF00007FFF0000001F0000001F0000001F0000001F0000001F
+0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000000
+1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000
+001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00007FFFFF
+C0FFFFFFE0FFFFFFE07FFFFFC01B297CA823>108 D<7E1F01F000FF7F87F800FFFFCFFC007FFF
+FFFE000FF1FF1F000FC0FC0F000FC0FC0F000F80F80F000F80F80F000F00F00F000F00F00F000F
+00F00F000F00F00F000F00F00F000F00F00F000F00F00F000F00F00F000F00F00F000F00F00F00
+0F00F00F000F00F00F000F00F00F000F00F00F000F00F00F000F00F00F007FE1FE1FE0FFF3FF3F
+F0FFF3FF3FF07FE1FE1FE0241D819C23>I<7FC0FE0000FFE3FF8000FFEFFFC0007FFFFFE00003
+FF87E00003FE03F00003F801F00003F801F00003F001F00003F001F00003E001F00003E001F000
+03E001F00003E001F00003E001F00003E001F00003E001F00003E001F00003E001F00003E001F0
+0003E001F00003E001F00003E001F00003E001F00003E001F0007FFF0FFF80FFFF9FFFC0FFFF9F
+FFC07FFF0FFF80221D809C23>I<003F000001FFE00003FFF00007FFF8000FE1FC001F807E003F
+003F003E001F007C000F807C000F80F80007C0F80007C0F80007C0F80007C0F80007C0F80007C0
+F80007C0F80007C0FC000FC07C000F807E001F803E001F003F003F001F807E000FE1FC0007FFF8
+0003FFF00001FFE000003F00001A1D7C9C23>I<7FC1FC00FFE7FF80FFEFFFC07FFFFFE003FF07
+F003FC01F803F800FC03F0007C03F0003E03E0003E03E0003F03E0001F03E0001F03E0001F03E0
+001F03E0001F03E0001F03E0001F03E0003F03F0003E03F0007E03F8007C03F800FC03FC01F803
+FF07F003FFFFE003EFFFC003E7FF0003E1FC0003E0000003E0000003E0000003E0000003E00000
+03E0000003E0000003E0000003E0000003E0000003E000007FFF0000FFFF8000FFFF80007FFF00
+00202C809C23>I<7FF00FE0FFF87FF0FFF8FFF87FF9FFFC00FBF8FC00FFC0FC00FF807800FF00
+0000FE000000FE000000FC000000FC000000FC000000F8000000F8000000F8000000F8000000F8
+000000F8000000F8000000F8000000F8000000F8000000F8000000F800007FFFFC00FFFFFE00FF
+FFFE007FFFFC001E1D7E9C23>114 D<01FF8C0FFFFE1FFFFE3FFFFE7F01FEF8007EF0003EF000
+3EF0003EF8001C7F00007FF8003FFF800FFFE007FFF8007FFC0001FE00003E70001FF8000FF800
+0FFC000FFC001FFE001EFF80FEFFFFFCFFFFF8F7FFE060FF80181D7B9C23>I<0070000000F800
+0000F8000000F8000000F8000000F8000000F8000000F800007FFFFF80FFFFFFC0FFFFFFC07FFF
+FF8000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000
+F8000000F8000000F8000000F8000000F8000000F801C000F803E000F803E000F803E000F803E0
+00FC07E0007E0FC0007FFF80003FFF00000FFE000007F8001B257EA423>I<7FC03FE000FFE07F
+F000FFE07FF0007FE03FF00003E001F00003E001F00003E001F00003E001F00003E001F00003E0
+01F00003E001F00003E001F00003E001F00003E001F00003E001F00003E001F00003E001F00003
+E001F00003E001F00003E001F00003E001F00003E003F00003E003F00003E007F00003F81FF000
+01FFFFFF8000FFFFFFC0007FFDFFC0001FF0FF80221D809C23>I E /Fn
+42 122 df<FFFEFFFEFFFE0F037F8E14>45 D<78FCFCFCFC7806067B8511>I<003F000001C0E0
+0003807000070038000E001C001C000E001C000E003C000F003C000F0078000780780007807800
+078078000780F80007C0F80007C0F80007C0F80007C0F80007C0F80007C0F80007C0F80007C0F8
+0007C0F80007C0F80007C0F80007C0F80007C0F80007C0F80007C0780007807800078078000780
+7C000F803C000F003C000F003C000F001E001E000E001C00070038000380700001E1E000003F00
+001A297EA71F>48 D<00300000700001F0000FF000FEF000F0F00000F00000F00000F00000F000
+00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
+00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
+00F00001F8007FFFF07FFFF014287BA71F>I<00FE0003FFC00E07E01801F83000FC60007C6000
+3EF8003EFC003FFE003FFE001FFE001F7C001F38003F00003F00003E00003E00007C0000780000
+F80000F00001E00003C0000780000700000E0000180000300000600000C0000180030300030600
+0604000608000610000E3FFFFE7FFFFCFFFFFCFFFFFC18287DA71F>I<00003000000070000000
+70000000F0000001F0000001F0000003F0000006F0000004F000000CF0000018F0000010F00000
+30F0000060F00000C0F0000080F0000180F0000300F0000200F0000600F0000C00F0000800F000
+1800F0003000F0002000F0006000F000C000F000FFFFFFC0FFFFFFC00000F0000000F0000000F0
+000000F0000000F0000000F0000000F0000000F0000001F800003FFFC0003FFFC01A287EA71F>
+52 D<18000C1F00781FFFF01FFFE01FFFC01FFF0019F800180000180000180000180000180000
+180000180000180000187F001981C01E00E018007018003800003C00003E00001E00001E00001F
+00001F00001F78001FFC001FFC001FFC001FFC001EF8001E60003E60003C3000783800781C00F0
+0F03C003FF8000FC0018297DA71F>I<007F0003FFC00781F00C007818003C38001C30000E7000
+0E70000E70000E78000E78000E7E001C3F00183FC0301FE0600FF8C007FF0001FF0000FF8001BF
+E0031FF00E07F81C01FC3800FE30003E70001E60000FE0000FE00007E00007E00007E00007F000
+0670000E78000C3800181E00300F81E003FFC000FE0018297DA71F>56 D<007E0001FF800781C0
+0F00E01E00703C00383C003878003C78003CF8001EF8001EF8001EF8001EF8001FF8001FF8001F
+F8001F78001F78003F78003F3C003F1C005F0E005F07009F03831F00FC1F00001E00001E00001E
+00003E00003C3C003C7E00387E00787E00707E00E07C01C03003801C0F000FFE0003F80018297D
+A71F>I<78FCFCFCFC78000000000000000000000000000078FCFCFCFC78061A7B9911>I<FFFFFF
+FFC0FFFFFFFFC007E0001FC003E00007C003E00001E003E00000E003E00000E003E000006003E0
+00006003E000006003E000006003E000003003E001803003E001803003E001800003E001800003
+E003800003E003800003E00F800003FFFF800003FFFF800003E00F800003E003800003E0038000
+03E001800003E001801803E001801803E001801803E000001803E000003003E000003003E00000
+3003E000003003E000007003E000007003E00000F003E00001F003E00003E007E0001FE0FFFFFF
+FFE0FFFFFFFFE025297EA82A>69 D<FFFFFFFF80FFFFFFFF8007E0003F8003E000078003E00003
+C003E00001C003E00001C003E00000C003E00000C003E00000C003E00000C003E000006003E001
+806003E001806003E001800003E001800003E003800003E003800003E00F800003FFFF800003FF
+FF800003E00F800003E003800003E003800003E001800003E001800003E001800003E001800003
+E000000003E000000003E000000003E000000003E000000003E000000003E000000003E0000000
+03E000000003E000000007F0000000FFFFC00000FFFFC0000023297EA828>I<FFFF80FFFF80FF
+FF80FFFF8007F00007F00003E00003E00003E00003E00003E00003E00003E00003E00003E00003
+E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003
+E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003FFFFFFE00003FFFFFF
+E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003
+E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003
+E00003E00003E00003E00003E00003E00003E00003E00003E00007F00007F000FFFF80FFFF80FF
+FF80FFFF8029297EA82E>72 D<FFE0001FFF80FFF0001FFF8003F80001F80003F80000F000037C
+00006000037E00006000033E00006000031F00006000031F80006000030F800060000307C00060
+000307E00060000303E00060000301F00060000301F80060000300F800600003007C0060000300
+7E00600003003E00600003001F00600003001F80600003000F806000030007C06000030003E060
+00030003E06000030001F06000030000F86000030000F860000300007C60000300003E60000300
+003E60000300001F60000300000FE0000300000FE00003000007E00003000003E00003000003E0
+0007800001E0000FC00000E000FFFC0000E000FFFC0000600029297EA82E>78
+D<FFFFFFC000FFFFFFF80007E000FE0003E0001F0003E0000F8003E00007C003E00007E003E000
+03E003E00003F003E00003F003E00003F003E00003F003E00003F003E00003F003E00003E003E0
+0007E003E00007C003E0000F8003E0001F0003E000FC0003FFFFF00003E000000003E000000003
+E000000003E000000003E000000003E000000003E000000003E000000003E000000003E0000000
+03E000000003E000000003E000000003E000000003E000000003E000000003E000000007F00000
+00FFFF800000FFFF80000024297EA82A>80 D<FFFFFF000000FFFFFFE0000007E001F8000003E0
+007E000003E0001F000003E0000F800003E0000FC00003E00007C00003E00007E00003E00007E0
+0003E00007E00003E00007E00003E00007E00003E00007C00003E00007C00003E0000F800003E0
+001F000003E0001E000003E0007C000003E003E0000003FFFF00000003E003C0000003E000F000
+0003E00078000003E0003C000003E0003E000003E0001E000003E0001F000003E0001F000003E0
+001F000003E0001F000003E0001F800003E0001F800003E0001F800003E0001F800003E0001F80
+C003E0001FC0C003E0000FC0C007F00007C080FFFF8003E180FFFF8001E100000000007E002A2A
+7EA82D>82 D<00FF008003FFC1800780F3801E003B801C001F8038000F807800078070000780F0
+000380F0000380F0000380F0000180F8000180F8000180FC0000007E0000007F0000003FF00000
+1FFF00000FFFE00007FFF80001FFFE00003FFF000003FF0000003F8000000FC0000007C0000003
+E0000003E0C00001E0C00001E0C00001E0C00001E0E00001E0E00001C0E00001C0F00003C0F800
+0380FC000700EF000E00E3E03C00C0FFF800801FC0001B2B7DA922>I<7FFFFFFFFC7FFFFFFFFC
+7E007C00FC78007C003C70007C001C60007C000C60007C000CE0007C000EE0007C000EC0007C00
+06C0007C0006C0007C0006C0007C0006C0007C000600007C000000007C000000007C000000007C
+000000007C000000007C000000007C000000007C000000007C000000007C000000007C00000000
+7C000000007C000000007C000000007C000000007C000000007C000000007C000000007C000000
+007C000000007C000000007C000000007C000000007C00000000FE0000007FFFFC00007FFFFC00
+27297EA82C>I<FFFE0001FFE0FFFE0001FFE007F000007F0003E000003C0003E00000180003F0
+0000380001F00000300001F00000300000F80000600000F80000600000F800006000007C0000C0
+00007C0000C000007E0001C000003E00018000003E00018000001F00030000001F00030000001F
+80070000000F80060000000F800600000007C00C00000007C00C00000007C00C00000003E01800
+000003E01800000003F03800000001F03000000001F03000000000F86000000000F86000000000
+FCE0000000007CC0000000007CC0000000003F80000000003F80000000003F80000000001F0000
+0000001F00000000001F00000000000E00000000000E0000002B2A7FA82E>86
+D<FFFE0001FFE0FFFE0001FFE007F000007F0003E000003C0003F00000380001F80000300000F8
+0000600000FC0000E000007E0000C000003E00018000003F00038000001F00030000001F800600
+00000FC00E00000007C00C00000007E01C00000003F01800000001F03000000001F87000000000
+F86000000000FCC0000000007FC0000000003F80000000003F80000000001F00000000001F0000
+0000001F00000000001F00000000001F00000000001F00000000001F00000000001F0000000000
+1F00000000001F00000000001F00000000001F00000000001F00000000001F00000000003F0000
+000007FFFC00000007FFFC00002B297FA82E>89 D<FFC0FFC0FFC0E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000FFC0FFC0FFC00A3C7BAC11>91
+D<FFC0FFC0FFC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C0
+01C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001
+C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C0FFC0
+FFC0FFC00A3C7FAC11>93 D<07FC00001C0780003C01C0007E00E0007E00F0007E0078003C0078
+0018007800000078000000780000007800007FF80003E078000F8078001F0078003E0078007C00
+780078007860F8007860F8007860F8007860F800B860780138603C023CC01E0C1FC007F00F001B
+1A7D991F>97 D<0F000000FF000000FF0000001F0000000F0000000F0000000F0000000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F07F0000F381C
+000F600F000FC003800F8003C00F0001E00F0001E00F0001F00F0000F00F0000F80F0000F80F00
+00F80F0000F80F0000F80F0000F80F0000F80F0000F00F0000F00F0001F00F0001E00F0001C00F
+8003C00EC007800E600E000E383C000C0FE0001D2A7EA922>I<007FC001C0700780780F00FC1E
+00FC3C00FC3C00787C0030780000F80000F80000F80000F80000F80000F80000F80000F8000078
+00007C00003C000C3C000C1E00180F001007806001C0C0007F00161A7E991B>I<000007800000
+7F8000007F8000000F800000078000000780000007800000078000000780000007800000078000
+00078000000780000007800000078000000780003F878001E0E780038037800F000F801E000F80
+1C0007803C0007807C0007807800078078000780F8000780F8000780F8000780F8000780F80007
+80F8000780F8000780780007807C0007803C0007803C0007801E000F800E001F80078037C001C0
+C7F8007F07F81D2A7EA922>I<007E0003C3800700E00E00F01C00703C00783C003878003C7800
+3CF8003CF8003CFFFFFCF80000F80000F80000F80000F800007800007C00003C000C3C000C1E00
+180E003007006001C1C0007F00161A7E991B>I<000FC000786000E0F001C1F803C1F80381F807
+80F0078060078000078000078000078000078000078000078000078000FFFF00FFFF0007800007
+800007800007800007800007800007800007800007800007800007800007800007800007800007
+800007800007800007800007800007800007800007C0007FFE007FFE00152A7FA913>I<000007
+8000FE08400383B1E00701E1E00E00E1E01E00F0C01C0070003C0078003C0078003C0078003C00
+78003C0078001C0070001E00F0000E00E0000701C0000B83800008FE0000180000001800000018
+000000180000001C0000000FFFE00007FFFC0007FFFE001C003F003800078070000380600001C0
+E00001C0E00001C0E00001C0E00001C07000038070000380380007000E001C000780780000FFC0
+001B287E9A1F>I<0F000000FF000000FF0000001F0000000F0000000F0000000F0000000F0000
+000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F03F0000F0C
+1C000F300E000F400F000F4007800F8007800F8007800F0007800F0007800F0007800F0007800F
+0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F000780
+0F0007800F0007800F000780FFF07FF8FFF07FF81D2A7EA922>I<1E003F003F003F003F001E00
+0000000000000000000000000000000000000F00FF00FF001F000F000F000F000F000F000F000F
+000F000F000F000F000F000F000F000F000F000F000F000F000F00FFF0FFF00C297EA811>I<0F
+00FF00FF001F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+00FFF0FFF00C2A7EA911>108 D<0781F800FC00FF860E030700FF98070C03800FA0079003C007
+A003D001E007C003E001E007C003E001E0078003C001E0078003C001E0078003C001E0078003C0
+01E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E007
+8003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C0
+01E0FFFC7FFE3FFFFFFC7FFE3FFF301A7F9933>I<0F03F000FF0C1C00FF300E001F400F000F40
+07800F8007800F8007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F
+0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F000780
+FFF07FF8FFF07FF81D1A7E9922>I<007F800001C0E000070038000E001C001E001E003C000F00
+3C000F00780007807800078078000780F80007C0F80007C0F80007C0F80007C0F80007C0F80007
+C0F80007C0780007807C000F803C000F003C000F001E001E000F003C000780780001C0E000007F
+80001A1A7E991F>I<0F07F000FF383C00FF600F000FC007800F8003C00F0003E00F0001E00F00
+01F00F0001F00F0000F80F0000F80F0000F80F0000F80F0000F80F0000F80F0000F80F0000F00F
+0001F00F0001F00F0001E00F0003C00F8003C00FC007800F600E000F383C000F0FE0000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000FFF000
+00FFF000001D267E9922>I<1E07C0FE18E0FE21F01E41F00E41F00E80E00E80000E80000F0000
+0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000
+0F00000F8000FFFC00FFFC00141A7E9918>114 D<07F8401C0FC03003C06001C06001C0E000C0
+E000C0F000C0F800007E00007FF0003FFC000FFF0003FF80001FC00003C0C001E0C001E0C000E0
+E000E0E000E0F000C0F001C0F80180C6070083F800131A7E9918>I<0180000180000180000180
+000180000380000380000380000780000780000F80003FFFC0FFFFC00780000780000780000780
+000780000780000780000780000780000780000780000780000780000780600780600780600780
+6007806007806007806003C0C001C08000E180003E0013257FA418>I<0F000780FF007F80FF00
+7F801F000F800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F
+0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F000F800F000F80
+07001780038027C001C0C7F8007F07F81D1A7E9922>I<FFF1FFC1FF80FFF1FFC1FF800F803E00
+7E000F001E00380007801E00380007801E00300007801F00300003C03700600003C03700600003
+C03780600001E06380C00001E06380C00001E063C0C00000F0C1C1800000F0C1C1800000F0C1E1
+8000007980E30000007980E30000007980F30000003F00760000003F00760000003F007E000000
+1E003C0000001E003C0000001E003C0000000C00180000291A7F992C>119
+D<FFF01FF8FFF01FF80F8007C007800380078003000780030003C0060003C0060003E00E0001E0
+0C0001E00C0000F0180000F0180000F838000078300000783000003C6000003C6000003EE00000
+1EC000001EC000000F8000000F8000000F800000070000000700000006000000060000000E0000
+000C0000300C0000FC180000FC180000FC300000FC3000007860000070C000001F0000001D267F
+9920>121 D E /Fo 1 64 df<0002000000020000000200000002000000070000000700000007
+000000070000000700000007000000070000F80700F83FCF9FE00FFFFF8003FFFE0000FFF80000
+3FE000001FC000003FE000003DE0000078F0000070700000E0380000E0380001C01C0003800E00
+0300060006000300040001001D1D7F9C1F>63 D E /Fp 1 64 df<00000400000000000C000000
+00000C00000000000C00000000000C00000000001E00000000001E00000000001E00000000001E
+00000000001E00000000001E00000000001E00000000001E00000000001E00000000003F000000
+FC003F000FC07FF03F03FF801FFFBF7FFE0003FFFFFFF00000FFFFFFC000003FFFFF0000000FFF
+FC00000003FFF000000000FFC000000000FFC000000001FFE000000001FFE000000003F3F00000
+0007E1F800000007C0F80000000F807C0000000F003C0000001F003E0000001E001E0000003C00
+0F000000380007000000700003800000E00001C00000C00000C0000080000040002A287EA72F>
+63 D E /Fq 21 122 df<FFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFC
+1E077F9B26>45 D<000000003FF800000C00000003FFFF80001C0000001FFFFFE0003C000000FF
+FFFFF8003C000003FFF001FE007C00000FFF00003F00FC00001FFC00000F81FC00007FF0000003
+C1FC0000FFC0000001E3FC0001FF80000000F7FC0003FE000000007FFC0007FC000000003FFC00
+0FF8000000001FFC001FF0000000000FFC003FE0000000000FFC007FE00000000007FC00FFC000
+00000003FC01FF800000000003FC01FF800000000001FC03FF000000000001FC03FF0000000000
+01FC07FE000000000000FC0FFE000000000000FC0FFE0000000000007C1FFC0000000000007C1F
+FC0000000000007C1FFC0000000000007C3FF80000000000003C3FF80000000000003C3FF80000
+000000003C7FF80000000000003C7FF80000000000003C7FF0000000000000007FF00000000000
+00007FF000000000000000FFF000000000000000FFF000000000000000FFF000000000000000FF
+F000000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000
+0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000000000
+00007FF0000000000000007FF0000000000000007FF8000000000000007FF8000000000000007F
+F80000000000001C3FF80000000000001C3FF80000000000001C3FF80000000000001C1FFC0000
+000000001C1FFC0000000000001C1FFC000000000000380FFE000000000000380FFE0000000000
+003807FE0000000000003803FF0000000000007003FF0000000000007001FF8000000000007001
+FF800000000000E000FFC00000000000E0007FE00000000001C0003FE00000000003C0001FF000
+0000000380000FF80000000007000007FC000000000E000003FE000000001C000001FF80000000
+3C000000FFC0000000F80000007FF0000001E00000001FFC000007C00000000FFF80001F800000
+0003FFF801FF0000000000FFFFFFFC00000000001FFFFFF0000000000003FFFF80000000000000
+3FF800000046527ACF53>67 D<00003FF00003000003FFFE000700000FFFFFC00F00003FFFFFF0
+0F00007FC00FF81F0000FE0001FC3F0001F800003E3F0003F000001F7F0007E0000007FF000FC0
+000003FF001F80000001FF001F80000000FF003F000000007F003F000000007F007F000000003F
+007E000000003F007E000000001F00FE000000001F00FE000000001F00FE000000000F00FE0000
+00000F00FE000000000F00FF000000000F00FF000000000700FF000000000700FF800000000700
+7FC000000007007FC000000000007FE000000000003FF800000000003FFC00000000003FFF0000
+0000001FFFF0000000000FFFFF000000000FFFFFF000000007FFFFFF00000003FFFFFFF0000001
+FFFFFFFC000000FFFFFFFF0000003FFFFFFF8000001FFFFFFFC0000007FFFFFFE0000001FFFFFF
+F00000001FFFFFF800000001FFFFFC000000001FFFFE0000000001FFFF00000000001FFF000000
+000007FF800000000003FF800000000001FFC00000000000FFC000000000007FC000000000003F
+C000000000003FE060000000001FE0E0000000001FE0E0000000001FE0E0000000000FE0E00000
+00000FE0E0000000000FE0F0000000000FE0F0000000000FE0F0000000000FC0F0000000000FC0
+F8000000000FC0F8000000001FC0FC000000001F80FC000000001F80FE000000003F00FF000000
+003F00FF800000007E00FFC00000007C00FFE0000000FC00FEF8000001F800FC7E000007F000FC
+3FC0001FE000F81FFC007F8000F007FFFFFF0000F001FFFFFC0000E0003FFFF00000C00003FF80
+000033527ACF40>83 D<3FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF
+003FFFFFFFFFFFFFFFFF003FFE0001FFE0001FFF003FE00000FFC00001FF003F800000FFC00000
+7F007F000000FFC000003F807E000000FFC000001F807C000000FFC000000F807C000000FFC000
+000F8078000000FFC00000078078000000FFC00000078078000000FFC00000078070000000FFC0
+0000038070000000FFC00000038070000000FFC00000038070000000FFC00000038070000000FF
+C00000038070000000FFC000000380E0000000FFC0000001C0E0000000FFC0000001C0E0000000
+FFC0000001C0E0000000FFC0000001C0E0000000FFC0000001C0E0000000FFC0000001C0000000
+00FFC00000000000000000FFC00000000000000000FFC00000000000000000FFC0000000000000
+0000FFC00000000000000000FFC00000000000000000FFC00000000000000000FFC00000000000
+000000FFC00000000000000000FFC00000000000000000FFC00000000000000000FFC000000000
+00000000FFC00000000000000000FFC00000000000000000FFC00000000000000000FFC0000000
+0000000000FFC00000000000000000FFC00000000000000000FFC00000000000000000FFC00000
+000000000000FFC00000000000000000FFC00000000000000000FFC00000000000000000FFC000
+00000000000000FFC00000000000000000FFC00000000000000000FFC00000000000000000FFC0
+0000000000000000FFC00000000000000000FFC00000000000000000FFC00000000000000000FF
+C00000000000000000FFC00000000000000000FFC00000000000000000FFC00000000000000000
+FFC00000000000000000FFC00000000000000000FFC00000000000000000FFC000000000000000
+00FFC00000000000000000FFC00000000000000000FFC00000000000000000FFC0000000000000
+0000FFC00000000000000000FFC00000000000000001FFE00000000000000007FFF80000000000
+01FFFFFFFFFFE000000001FFFFFFFFFFE000000001FFFFFFFFFFE000000001FFFFFFFFFFE00000
+4A4D7CCC53>I<FFFFFFFC001FFFFFFF00007FFFFF80FFFFFFFC001FFFFFFF00007FFFFF80FFFF
+FFFC001FFFFFFF00007FFFFF80FFFFFFFC001FFFFFFF00007FFFFF8001FFFF0000003FFFC00000
+07FFF800007FF80000001FFF00000000FFC000003FF00000000FFE000000007F8000003FF00000
+0007FE000000003F0000003FF800000007FE000000001E0000001FF800000007FE000000001C00
+00001FF800000003FF000000001C0000001FFC00000003FF000000003C0000000FFC00000003FF
+00000000380000000FFC00000001FF80000000380000000FFE00000001FF800000007800000007
+FE00000001FF800000007000000007FE00000003FFC00000007000000007FF00000003FFC00000
+00F000000003FF00000003FFC0000000E000000003FF00000007FFE0000000E000000003FF8000
+00077FE0000001E000000001FF800000077FE0000001C000000001FF8000000F7FF0000001C000
+000001FFC000000E3FF0000001C000000000FFC000000E3FF00000038000000000FFC000001E3F
+F80000038000000000FFC000001C1FF800000380000000007FE000001C1FF80000070000000000
+7FE000003C1FFC00000700000000007FE00000380FFC00000700000000003FF00000380FFC0000
+0E00000000003FF00000780FFE00000E00000000003FF000007007FE00000E00000000001FF800
+007007FE00001C00000000001FF80000F007FF00001C00000000001FF80000E003FF00001C0000
+0000000FFC0000E003FF00003800000000000FFC0000E003FF80003800000000000FFC0001C001
+FF800038000000000007FE0001C001FF800070000000000007FE0001C001FF8000700000000000
+07FE00038000FFC00070000000000003FF00038000FFC000E0000000000003FF00038000FFC000
+E0000000000003FF000700007FE000E0000000000003FF800700007FE001E0000000000001FF80
+0700007FE001C0000000000001FF800E00003FF001C0000000000001FFC00E00003FF003C00000
+00000000FFC00E00003FF00380000000000000FFC01C00001FF80380000000000000FFE01C0000
+1FF807800000000000007FE01C00001FF807000000000000007FE03800000FFC07000000000000
+007FF03800000FFC0F000000000000003FF03800000FFC0E000000000000003FF070000007FE0E
+000000000000003FF870000007FE1E000000000000001FF870000007FE1C000000000000001FF8
+F0000007FF1C000000000000001FFCE0000003FF3C000000000000000FFCE0000003FF38000000
+000000000FFDE0000003FFB8000000000000000FFFC0000001FFB80000000000000007FFC00000
+01FFF00000000000000007FFC0000001FFF00000000000000007FF80000000FFF0000000000000
+0003FF80000000FFE00000000000000003FF80000000FFE00000000000000003FF000000007FE0
+0000000000000001FF000000007FC00000000000000001FF000000007FC00000000000000001FE
+000000003FC00000000000000000FE000000003F800000000000000000FE000000003F80000000
+0000000000FC000000001F8000000000000000007C000000001F0000000000000000007C000000
+001F00000000000000000078000000000F00000000000000000038000000000E00000000007150
+7ECD76>87 D<0001FFC0000000001FFFF8000000007FFFFE00000001FE00FF00000003E0003FC0
+000007F8000FE0000007FC0007F000000FFC0007F800000FFE0003FC00000FFE0001FC00000FFE
+0001FE00000FFE0001FE000007FC0000FE000003F80000FF000001F00000FF000000000000FF00
+0000000000FF000000000000FF000000000000FF000000000000FF000000000000FF0000000000
+3FFF000000000FFFFF00000000FFFFFF00000007FF00FF0000001FF800FF0000007FC000FF0000
+01FF0000FF000003FE0000FF000007F80000FF00000FF00000FF00001FF00000FF00003FE00000
+FF00003FC00000FF00007FC00000FF00E07FC00000FF00E0FF800000FF00E0FF800000FF00E0FF
+800000FF00E0FF800000FF00E0FF800001FF00E0FF800001FF00E0FF8000037F00E07FC000037F
+00E07FC000067F00E03FE0000E3F81C01FF0001C3F81C00FF800783FC38007FF01F01FFF8001FF
+FFC00FFF00007FFF8007FC000007FC0001F00033347CB239>97 D<00000FFE00000000FFFFE000
+0003FFFFF800000FF801FE00001FC0001F00003F80007F80007F0000FF8000FE0000FFC001FC00
+01FFC003FC0001FFC007F80001FFC00FF00001FFC00FF00000FF801FF000007F001FE000003E00
+3FE0000000003FE0000000007FE0000000007FE0000000007FC0000000007FC000000000FFC000
+000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000
+FFC000000000FFC000000000FFC000000000FFC0000000007FC0000000007FE0000000007FE000
+0000003FE0000000003FE0000000003FF0000000E01FF0000000E00FF0000000E00FF8000001C0
+07F8000001C003FC0000038003FE0000070001FE0000070000FF00000E00003FC0003C00001FE0
+007800000FFC03F0000003FFFFC0000000FFFF000000001FF800002B347CB233>99
+D<0000000001FE0000000003FFFE0000000003FFFE0000000003FFFE0000000003FFFE00000000
+000FFE000000000003FE000000000001FE000000000001FE000000000001FE000000000001FE00
+0000000001FE000000000001FE000000000001FE000000000001FE000000000001FE0000000000
+01FE000000000001FE000000000001FE000000000001FE000000000001FE000000000001FE0000
+00000001FE000000000001FE000000000001FE000000000001FE000000000001FE000000000001
+FE000000000001FE000000000001FE0000000FF801FE0000007FFF01FE000003FFFFC1FE00000F
+FC03E1FE00001FE000F9FE00003F80003DFE00007F00001FFE0000FE000007FE0001FC000007FE
+0003F8000003FE0007F8000001FE000FF0000001FE000FF0000001FE001FF0000001FE001FE000
+0001FE003FE0000001FE003FE0000001FE007FE0000001FE007FC0000001FE007FC0000001FE00
+FFC0000001FE00FFC0000001FE00FFC0000001FE00FFC0000001FE00FFC0000001FE00FFC00000
+01FE00FFC0000001FE00FFC0000001FE00FFC0000001FE00FFC0000001FE00FFC0000001FE007F
+C0000001FE007FC0000001FE007FC0000001FE003FE0000001FE003FE0000001FE003FE0000001
+FE001FE0000001FE001FF0000001FE000FF0000001FE0007F8000003FE0007F8000007FE0003FC
+000007FE0001FC00000FFE0000FE00001DFF00007F800079FFC0003FC001F1FFFF000FF80FC1FF
+FF0003FFFF81FFFF0000FFFE01FFFF00001FF001FE0038517CCF40>I<00001FF000000000FFFF
+00000003FFFFC000000FF01FE000003FC007F800007F8003FC0000FF0001FE0001FE0000FF0003
+FC00007F0007F800007F8007F800003F800FF000003FC00FF000001FC01FE000001FE01FE00000
+1FE03FE000001FE03FE000001FE07FE000000FF07FC000000FF07FC000000FF07FC000000FF0FF
+C000000FF0FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF0FFC000000000FFC000000000FFC00000
+0000FFC000000000FFC000000000FFC0000000007FC0000000007FC0000000007FC0000000007F
+E0000000003FE0000000003FE0000000001FE0000000701FF0000000700FF0000000700FF00000
+00E007F8000000E003FC000001C001FC000003C000FE00000780007F00000F00003F80001E0000
+1FE0007C000007F803F8000001FFFFE00000007FFF800000000FFC00002C347DB233>I<007F80
+0000000000FFFF800000000000FFFF800000000000FFFF800000000000FFFF80000000000003FF
+80000000000000FF800000000000007F800000000000007F800000000000007F80000000000000
+7F800000000000007F800000000000007F800000000000007F800000000000007F800000000000
+007F800000000000007F800000000000007F800000000000007F800000000000007F8000000000
+00007F800000000000007F800000000000007F800000000000007F800000000000007F80000000
+0000007F800000000000007F800000000000007F800000000000007F800000000000007F800000
+000000007F8007FC000000007F803FFF800000007F80FFFFC00000007F81F01FF00000007F8380
+07F80000007F870003F80000007F8C0001FC0000007F980001FE0000007FB00001FE0000007FB0
+0000FE0000007FE00000FF0000007FE00000FF0000007FC00000FF0000007FC00000FF0000007F
+C00000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF000000
+7F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000
+007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF00
+00007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF
+0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000
+FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F8000
+00FF000000FFC00001FF800001FFE00003FFC000FFFFFFC1FFFFFF80FFFFFFC1FFFFFF80FFFFFF
+C1FFFFFF80FFFFFFC1FFFFFF8039507CCF40>104 D<0078000001FE000003FF000003FF000007
+FF800007FF800007FF800007FF800003FF000003FF000001FE0000007800000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000007F80007FFF80007FFF80007FFF80007FFF800003FF
+800000FF8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000
+7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000
+007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
+00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000FF
+800001FFE000FFFFFF80FFFFFF80FFFFFF80FFFFFF80194E7DCD1F>I<007F8000FFFF8000FFFF
+8000FFFF8000FFFF800003FF800000FF8000007F8000007F8000007F8000007F8000007F800000
+7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000
+007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
+00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F
+8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000
+7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000
+007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
+00007F8000007F8000007F800000FFC00001FFE000FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC01A50
+7DCF1F>108 D<00FF0007FC000007FC000000FFFF003FFF80003FFF800000FFFF00FFFFE000FF
+FFE00000FFFF01F00FF001F00FF00000FFFF03C003F803C003F8000003FF070001FC070001FC00
+0000FF0C0001FE0C0001FE0000007F180000FF180000FF0000007F380000FF380000FF0000007F
+3000007F3000007F0000007F6000007FE000007F8000007F6000007FE000007F8000007FC00000
+7FC000007F8000007FC000007FC000007F8000007FC000007FC000007F8000007F8000007F8000
+007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
+00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F
+8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000
+7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000
+007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
+00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F
+8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000
+7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000
+007F8000007F8000007F8000007F8000007F8000007F8000007F800000FFC00000FFC00000FFC0
+0001FFE00001FFE00001FFE000FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFF
+FFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC05A327CB161>I<00FF0007FC000000FFFF
+003FFF800000FFFF00FFFFC00000FFFF01F01FF00000FFFF038007F8000003FF070003F8000000
+FF0C0001FC0000007F180001FE0000007F300001FE0000007F300000FE0000007F600000FF0000
+007F600000FF0000007FC00000FF0000007FC00000FF0000007FC00000FF0000007F800000FF00
+00007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF
+0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000
+FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F8000
+00FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F80
+0000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F
+800000FF0000007F800000FF0000007F800000FF0000007F800000FF000000FFC00001FF800001
+FFE00003FFC000FFFFFFC1FFFFFF80FFFFFFC1FFFFFF80FFFFFFC1FFFFFF80FFFFFFC1FFFFFF80
+39327CB140>I<00000FFC00000000007FFF8000000003FFFFF000000007F807F80000001FE001
+FE0000003F80007F0000007F00003F800000FE00001FC00001FC00000FE00003F8000007F00007
+F0000003F8000FF0000003FC000FF0000003FC001FE0000001FE001FE0000001FE003FE0000001
+FF003FE0000001FF003FC0000000FF007FC0000000FF807FC0000000FF807FC0000000FF80FFC0
+000000FFC0FFC0000000FFC0FFC0000000FFC0FFC0000000FFC0FFC0000000FFC0FFC0000000FF
+C0FFC0000000FFC0FFC0000000FFC0FFC0000000FFC0FFC0000000FFC0FFC0000000FFC07FC000
+0000FF807FC0000000FF807FC0000000FF803FE0000001FF003FE0000001FF003FE0000001FF00
+1FE0000001FE001FF0000003FE000FF0000003FC0007F8000007F80007F8000007F80003FC0000
+0FF00001FE00001FE00000FF00003FC000007F80007F8000001FE001FE0000000FF807FC000000
+03FFFFF0000000007FFF80000000000FFC00000032347DB239>I<007F800FF80000FFFF807FFF
+0000FFFF81FFFFC000FFFF87E01FF000FFFF8F8007FC0001FF9E0001FE0000FFB80000FF00007F
+F000007F80007FE000007FC0007FC000003FE0007FC000003FE0007F8000001FF0007F8000001F
+F8007F8000000FF8007F8000000FFC007F80000007FC007F80000007FC007F80000007FE007F80
+000007FE007F80000003FE007F80000003FF007F80000003FF007F80000003FF007F80000003FF
+007F80000003FF007F80000003FF007F80000003FF007F80000003FF007F80000003FF007F8000
+0003FF007F80000003FF007F80000007FE007F80000007FE007F80000007FE007F80000007FC00
+7F8000000FFC007F8000000FF8007F8000000FF8007F8000001FF0007F8000001FF0007FC00000
+3FE0007FC000003FC0007FE000007F80007FF00000FF00007FB80001FE00007F9C0003FC00007F
+8F000FF800007F87E03FE000007F83FFFFC000007F80FFFE0000007F801FF00000007F80000000
+00007F8000000000007F8000000000007F8000000000007F8000000000007F8000000000007F80
+00000000007F8000000000007F8000000000007F8000000000007F8000000000007F8000000000
+007F8000000000007F8000000000007F800000000000FFC00000000001FFE000000000FFFFFFC0
+000000FFFFFFC0000000FFFFFFC0000000FFFFFFC000000038487DB140>I<00FF003F00FFFF00
+FFC0FFFF01FFF0FFFF03C3F8FFFF0707F803FF0E0FFC00FF1C0FFC007F380FFC007F300FFC007F
+7007F8007F6003F0007F6001E0007FE00000007FC00000007FC00000007FC00000007FC0000000
+7F800000007F800000007F800000007F800000007F800000007F800000007F800000007F800000
+007F800000007F800000007F800000007F800000007F800000007F800000007F800000007F8000
+00007F800000007F800000007F800000007F800000007F800000007F800000007F800000007F80
+0000007F800000007F800000007F80000000FFC0000001FFE00000FFFFFFF000FFFFFFF000FFFF
+FFF000FFFFFFF00026327DB12D>114 D<000FFC0180007FFF838001FFFFC78007F803FF800FC0
+00FF801F00003F803E00001F803E00000F807C00000F807C00000780FC00000780FC00000780FC
+00000380FC00000380FE00000380FE00000380FF000003807FC00000007FF00000007FFE000000
+3FFFF000001FFFFF00000FFFFFE00007FFFFF00003FFFFFC0001FFFFFE00007FFFFF00000FFFFF
+800000FFFFC0000007FFC0000000FFE00000003FE06000001FE0E000000FF0E0000007F0F00000
+07F0F0000003F0F0000003F0F0000003F0F8000003F0F8000003E0FC000003E0FC000003E0FE00
+0007C0FF000007C0FF00000F80FFC0001F00FDE0007E00F8FC01FC00F07FFFF800E01FFFE000C0
+03FE000024347CB22D>I<0001C000000001C000000001C000000001C000000001C000000001C0
+00000003C000000003C000000003C000000003C000000003C000000007C000000007C00000000F
+C00000000FC00000001FC00000001FC00000003FC00000007FC0000000FFC0000001FFC0000003
+FFC000001FFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0003FC00000003FC00000003FC00000
+003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000
+00003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0
+0000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00070003FC00070003F
+C00070003FC00070003FC00070003FC00070003FC00070003FC00070003FC00070003FC0007000
+3FC00070003FC00070001FE000E0001FE000E0000FE000E0000FF001C00007F001800003F80380
+0001FE0F000000FFFE0000003FFC0000000FF00024487EC62D>I<007F800000FF0000FFFF8001
+FFFF0000FFFF8001FFFF0000FFFF8001FFFF0000FFFF8001FFFF000003FF800007FF000000FF80
+0001FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F
+800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF000000
+7F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000
+007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF00
+00007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF
+0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000FF0000007F800000
+FF0000007F800001FF0000007F800001FF0000007F800001FF0000007F800003FF0000007F8000
+03FF0000003F800003FF0000003F800006FF0000003FC0000EFF0000001FC0001CFF8000000FC0
+0038FFE0000007F00070FFFF800003FC03E0FFFF800001FFFFC0FFFF8000007FFF00FFFF800000
+0FFC00FF000039337CB140>I<FFFFFF0007FFFFFFFFFF0007FFFFFFFFFF0007FFFFFFFFFF0007
+FFFF01FFE00000FFF000FFC000007FC0007F8000003F00007FC000003E00003FC000001C00003F
+C000001C00001FE000003800001FE000003800001FF000007800000FF000007000000FF0000070
+000007F80000E0000007F80000E0000007FC0001E0000003FC0001C0000003FE0001C0000001FE
+000380000001FE000380000001FF000780000000FF000700000000FF800F000000007F800E0000
+00007F800E000000003FC01C000000003FC01C000000003FE03C000000001FE038000000001FE0
+38000000000FF070000000000FF070000000000FF8F00000000007F8E00000000007FCE0000000
+0003FDC00000000003FDC00000000003FFC00000000001FF800000000001FF800000000000FF00
+0000000000FF0000000000007E0000000000007E0000000000007E0000000000003C0000000000
+003C00000000000038000000000000380000000000007800000000000070000000000000700000
+00000000E0000000000000E0000000000001E0000000000001C00000003F0003C00000007F8003
+80000000FFC00380000000FFC00700000000FFC00F00000000FFC00E00000000FFC01E00000000
+FF803C000000007F0078000000007C00F0000000003F03E0000000001FFFC00000000007FF0000
+00000001FC000000000038487EB03D>121 D E /Fr 91 128 df<FFFFFFFFF8FFFFFFFFF87F00
+000FF87F000001F83F8000007C1FC000003C1FE000001C0FE000001C07F000000C03F800000C03
+F800000C01FC00000E00FE00000600FE000006007F000006003F800000003F800000001FC00000
+000FE00000000FE000000007F000000003F800000003FC00000001F800000000F0000000006000
+000000C00000000180000000030000000006000006000E000006001C000006003800000E003000
+000C006000000C00C000000C018000001C030000001C070000003C0E0000007C1C000001FC1800
+000FF83FFFFFFFF87FFFFFFFF8FFFFFFFFF8272D7CAC30>6 D<0000FF800000000F80F8000000
+3E003E000000F8000F800001F00007C00003E00003E00007C00001F0000FC00001F8001F800000
+FC001F800000FC003F800000FE003F0000007E007F0000007F007F0000007F007F0000007F007F
+0000007F007F0000007F007F0000007F007F0000007F007F0000007F003F0000007E003F800000
+FE003F800000FE001F800000FC001F800000FC000F800000F8000FC00001F80007C00001F00003
+C00001E00003E00003E00001E00003C00001E00003C00000F00007800000700007000000700007
+0000003000060000C038000E0180C018000C01806018000C0300600800080300600C0018030070
+0C001807007FFC001FFF003FFC001FFE003FFC001FFE003FFC001FFE00292E7DAD30>10
+D<0000FF01FC00000780C78600001E003E0F00007800FE1F8000F801FC1F8001F001FC1F8001E0
+01F80F0003E000F8060003E000F8000003E000F8000003E000F8000003E000F8000003E000F800
+0003E000F8000003E000F8000003E000F8000003E000F80000FFFFFFFFF000FFFFFFFFF00003E0
+00F8000003E000F8000003E000F8000003E000F8000003E000F8000003E000F8000003E000F800
+0003E000F8000003E000F8000003E000F8000003E000F8000003E000F8000003E000F8000003E0
+00F8000003E000F8000003E000F8000003E000F8000003E000F8000003E000F8000003E000F800
+0003E000F8000003E000F8000003E000F8000003E000F8000007F001FC00007FFF1FFFE0007FFF
+1FFFE000292E7FAD27>I<0001FF0000000F01C000003C00600000F800700001F000F80003E001
+F80003C001F80007C001F80007C000F00007C000000007C000000007C000000007C000000007C0
+00000007C000000007C000000007C0000000FFFFFFF800FFFFFFF80007C001F80007C000F80007
+C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F800
+07C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F8
+0007C000F80007C000F80007C000F80007C000F80007C000F80007C000F8000FE001FC00FFFE1F
+FFC0FFFE1FFFC0222E7FAD25>I<0001FE003FC000000F01C1E07000003C006780180000F8007E
+001C0001F000FE003E0003E001FC007E0003C001F8007E0007C001F8007E0007C000F8003C0007
+C000F800000007C000F800000007C000F800000007C000F800000007C000F800000007C000F800
+000007C000F800000007C000F8000000FFFFFFFFFFFE00FFFFFFFFFFFE0007C000F8007E0007C0
+00F8003E0007C000F8003E0007C000F8003E0007C000F8003E0007C000F8003E0007C000F8003E
+0007C000F8003E0007C000F8003E0007C000F8003E0007C000F8003E0007C000F8003E0007C000
+F8003E0007C000F8003E0007C000F8003E0007C000F8003E0007C000F8003E0007C000F8003E00
+07C000F8003E0007C000F8003E0007C000F8003E0007C000F8003E0007C000F8003E0007C000F8
+003E000FE001FC007F00FFFE1FFFC7FFF0FFFE1FFFC7FFF0342E7FAD37>14
+D<07C0FFC0FFC00FC007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C0
+07C007C007C007C007C007C007C00FE0FFFCFFFC0E1D7F9C12>16 D<00E001F003F003F007E00F
+C01F001E003C007800E00040000C0C73AD21>19 D<8001E007F00F3C3C1E780FF003C001801008
+78AA21>I<FFFFFFFFFFFF18027CA621>22 D<001FC0007E0000F0700383C003C01C0701E00780
+0E0E00F00F00071C00781E0007BC007C3E0003F8007C3E0003F8003C7C0003F8003E7C0001F000
+3E7C0001F0003EFC0001F0003EFC0001FFFFFEFC0001F00000FC0001F00000FC0001F00000FC00
+01F00000FC0001F000007C0001F000007C0001F000007E0003F800003E0003F800063E0003F800
+061F0007BC000C0F00071C000C07800E0E001803C01C07003000F07001C0C0001FC0007F002F1D
+7E9C34>27 D<387CFEFEFEFEFEFEFE7C7C7C7C7C7C7C7C7C7C7C7C383838383838383838383838
+00000000000000387CFEFEFE7C38072F7BAE12>33 D<3803807C07C0FE0FE0FE0FE0FF0FF07D07
+D03903900100100100100100100100100200200200200200200400400400400800801001002002
+0040040014147EAD21>I<0003E0000000000610000000001C0800000000380C00000000380400
+000000780600000000780600000000F00600000000F00600000000F00600000000F80400000000
+F80C00000000F80800000000F81800000000F81000000000F820000000007860000000007C4000
+0000007C8003FFF8007D0003FFF8003E00007F80003E00001E00003E00001C00001F0000180000
+1F00003000003F80003000004F80006000008FC00060000107C000C0000207E000C0000603F001
+80000E03F00300001C01F80300003C00FC0600007C00FC0400007C007E0C0000FC003F180000FC
+001F300000FC001FB00000FC000FE00030FE0007E00030FE0003F000307E0003F800603F000EFC
+00E01F801C7E01C00FC0F01F838007FFC007FF0000FF0001FC002D307DAE34>38
+D<387CFEFEFF7D390101010102020204040810204008147BAD12>I<0002000400080010003000
+6000C001C001800380030007000F000E000E001E001C003C003C003C0038007800780078007800
+7800F800F000F000F000F000F000F000F000F000F000F000F000F000F000F80078007800780078
+00780038003C003C003C001C001E000E000E000F00070003000380018001C000C0006000300010
+0008000400020F437AB11A>I<800040002000100018000C000600070003000380018001C001E0
+00E000E000F000700078007800780038003C003C003C003C003C003E001E001E001E001E001E00
+1E001E001E001E001E001E001E001E003E003C003C003C003C003C0038007800780078007000F0
+00E000E001E001C0018003800300070006000C00180010002000400080000F437CB11A>I<0000
+0E00000000000E00000000000E00000000000E00000000000E00000000000E00000000000E0000
+0000000E00000000000E00000000000E00000000000E00000000000E00000000000E0000000000
+0E00000000000E00000000000E00000000000E00000000000E00000000000E00000000000E0000
+0000000E000000FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE000000E00000000000E0000000000
+0E00000000000E00000000000E00000000000E00000000000E00000000000E00000000000E0000
+0000000E00000000000E00000000000E00000000000E00000000000E00000000000E0000000000
+0E00000000000E00000000000E00000000000E00000000000E00000000000E0000002B2D7CA634
+>43 D<387CFEFEFF7D390101010102020204040810204008147B8612>I<FFFFFFFFFFFFFFFF10
+047F9016>I<387CFEFEFE7C3807077B8612>I<00000300000700000700000E00000E00000E0000
+1C00001C00001C0000380000380000380000700000700000700000E00000E00000E00001C00001
+C00001C0000380000380000380000700000700000700000E00000E00000E00001C00001C00001C
+0000380000380000380000380000700000700000700000E00000E00000E00001C00001C00001C0
+000380000380000380000700000700000700000E00000E00000E00001C00001C00001C00003800
+00380000380000700000700000700000E00000E00000C0000018437CB121>I<003FC00000F0F0
+0003C03C0007801E000F000F000F000F001E0007801E0007803E0007C03C0003C07C0003E07C00
+03E07C0003E07C0003E07C0003E0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC
+0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0
+7C0003E07C0003E07C0003E07C0003E03E0007C03E0007C01E0007801E0007800F000F000F000F
+0007801E0003C03C0000F0F000003FC0001C2D7EAB21>I<00180000380000F80003F800FFF800
+FCF80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
+00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
+00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80001FC00FFFFF8FFFFF8
+152C7AAB21>I<007F000003FFE0000703F8000C00FC0018007E0030003F0060003F0060001F80
+78001F80FC001FC0FE001FC0FE000FC0FE000FC0FE000FC07C001FC000001FC000001F8000001F
+8000003F0000003F0000007E0000007C000000F8000000F0000001E0000003C000000380000007
+0000000E0000001C000000380000007000000060000000C000C0018000C0030000C0060001800C
+000180180003801FFFFF803FFFFF807FFFFF00FFFFFF00FFFFFF001A2C7DAB21>I<007F800003
+FFE0000F81F8001C007C0038003E0038003F007E003F007E003F807F001F807E001F803E001F80
+1C003F8000003F0000003F0000003E0000007E0000007C000000F0000001E0000007800000FF00
+000001E0000000F80000007C0000003E0000003F0000003F0000001F8000001F8000001FC00000
+1FC038001FC07C001FC0FE001FC0FE001FC0FE001F80FC001F80F8003F8060003F0030003E0038
+007E001C00F8000F81F00003FFE000007F00001A2D7DAB21>I<00000C0000001C0000001C0000
+003C0000007C0000007C000000FC000001FC0000017C0000037C0000067C0000047C00000C7C00
+00187C0000307C0000307C0000607C0000C07C0000807C0001807C0003007C0002007C0006007C
+000C007C0008007C0018007C0030007C0020007C0060007C00C0007C00FFFFFFF0FFFFFFF00000
+7C0000007C0000007C0000007C0000007C0000007C0000007C0000007C0000007C000000FE0000
+1FFFF0001FFFF01C2C7EAB21>I<180006001F803C001FFFF8001FFFF0001FFFE0001FFFC0001F
+FF0000187000001800000018000000180000001800000018000000180000001800000018000000
+183F800018C0E000190070001A003C001C001E0018001E0000001F0000000F0000000F8000000F
+8000000FC000000FC000000FC000000FC078000FC0FC000FC0FC000FC0FC000FC0FC000F80F800
+0F8060001F8060001F0070001E0030003E0018007C000E00F8000781F00003FFC000007E00001A
+2D7DAB21>I<0007F000001FFC00007C0E0000F0030001E00F8003C01F8007801F800F001F800F
+001F801E000F001E0000003E0000003E0000007C0000007C0000007C0000007C1F8000FC60E000
+FC807000FD003800FD001C00FE001E00FE001F00FE000F80FE000F80FC000F80FC000FC0FC000F
+C0FC000FC0FC000FC07C000FC07C000FC07C000FC07C000FC07C000FC03C000F803E000F801E00
+0F001E001F000F001E000F003C000780780003E0F00000FFE000003F80001A2D7DAB21>I<3000
+00003C0000003FFFFFE03FFFFFE03FFFFFC07FFFFFC07FFFFF80700003006000030060000600C0
+000C00C0001800C00018000000300000006000000060000000C000000180000001800000030000
+0007000000060000000E0000000E0000001E0000001C0000003C0000003C0000003C0000007C00
+00007800000078000000F8000000F8000000F8000000F8000000F8000001F8000001F8000001F8
+000001F8000001F8000001F8000001F8000001F8000000F000001B2E7CAC21>I<007F800001FF
+E00007C0F8000F003C001E001E001C000F0038000F00380007807800078078000780780007807C
+0007807C0007007E000F003F800E003FC01C001FF038000FF8700007FEE00003FF800001FFC000
+007FE00000FFF800038FFC000707FE000E01FF001C00FF003C003F8078001F8078000FC0F00007
+C0F00007C0F00003C0F00003C0F00003C0F00003C0F000038078000380780007003C000F001E00
+0E000F003C0007C0F80001FFE000007F80001A2D7DAB21>I<003F000001FFC00003C0F0000780
+78000F003C001E003C003E001E003E001E007C001F007C000F00FC000F80FC000F80FC000F80FC
+000F80FC000F80FC000FC0FC000FC0FC000FC0FC000FC07C000FC07C001FC07C001FC03E001FC0
+1E001FC00E002FC007002FC003804FC001C18FC0007E0F8000000F8000000F8000000F8000001F
+0000001F0000001F003C001E007E003E007E003C007E0078007E0070007C00F0003001E0001C07
+80000FFF000003FC00001A2D7DAB21>I<387CFEFEFE7C38000000000000000000000000000000
+387CFEFEFE7C38071D7B9C12>I<387CFEFEFE7C38000000000000000000000000000000387CFC
+FEFE7E3A02020202040404080810102040072A7B9C12>I<7FFFFFFFFFC0FFFFFFFFFFE0FFFFFF
+FFFFE0000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFE0FFFFFF
+FFFFE07FFFFFFFFFC02B117C9834>61 D<01FE000607C01801E03000F06000F87000F8F800FCFC
+00FCFC00FCFC00FC7800FC0000F80001F80001F00003E00007C0000700000F00000E00001C0000
+1C0000180000380000300000300000300000300000300000300000300000300000300000000000
+000000000000000000000000000000000000700000F80001FC0001FC0001FC0000F80000700016
+2E7CAD1F>63 D<00000700000000000700000000000700000000000F80000000000F8000000000
+1FC0000000001FC0000000001FC0000000003FE00000000037E00000000037E00000000067F000
+00000063F00000000063F000000000C1F800000000C1F800000000C1F80000000180FC00000001
+80FC0000000180FC00000003007E00000003007E00000007007F00000006003F00000006003F00
+00000E003F8000000C001F8000000C001F80000018001FC000001FFFFFC000001FFFFFC0000030
+0007E00000300007E00000300007E00000600003F00000600003F00000600003F00000C00001F8
+0000C00001F80001C00001FC0001800000FC0003800000FC0003C00000FE000FE00001FF00FFFC
+001FFFF8FFFC001FFFF82D2E7EAD32>65 D<FFFFFFF800FFFFFFFF0003F8001FC001F80007E001
+F80003F001F80001F801F80001FC01F80000FC01F80000FE01F80000FE01F80000FE01F80000FE
+01F80000FE01F80000FE01F80000FC01F80001FC01F80001F801F80003F001F80007E001F8000F
+C001F8003F0001FFFFFC0001F8001F8001F80007E001F80003F001F80001F801F80000FC01F800
+00FE01F800007E01F800007E01F800007F01F800007F01F800007F01F800007F01F800007F01F8
+00007F01F800007E01F80000FE01F80000FC01F80001FC01F80003F801F80007F003F8001FE0FF
+FFFFFF80FFFFFFFC00282D7EAC2F>I<00003FC0020001FFF8060007E01E0E001F80071E007E00
+019E00F80000FE01F000007E03E000003E07E000003E07C000001E0FC000001E1F8000000E1F80
+00000E3F0000000E3F000000067F000000067F000000067E000000007E00000000FE00000000FE
+00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
+7E000000007E000000007F000000007F000000063F000000063F000000061F800000061F800000
+0C0FC000000C07C000000C07E000001803E000003801F000003000FC000060007E0001C0001F80
+03800007F01E000001FFF80000003FE000272F7CAD30>I<FFFFFFF00000FFFFFFFE000003F800
+3F800001F80007E00001F80003F00001F80000F80001F800007C0001F800003E0001F800003F00
+01F800001F0001F800001F8001F800000F8001F800000FC001F800000FC001F8000007E001F800
+0007E001F8000007E001F8000007E001F8000007F001F8000007F001F8000007F001F8000007F0
+01F8000007F001F8000007F001F8000007F001F8000007F001F8000007F001F8000007F001F800
+0007E001F8000007E001F8000007E001F800000FC001F800000FC001F800000FC001F800001F80
+01F800001F8001F800003F0001F800003E0001F800007C0001F80000F80001F80001F00001F800
+07E00003F8003F8000FFFFFFFE0000FFFFFFF800002C2D7EAC33>I<FFFFFFFFF0FFFFFFFFF003
+F80007F001F80001F001F80000F801F800007801F800003801F800003801F800001801F8000018
+01F800001801F800001C01F800000C01F800600C01F800600C01F800600001F800600001F80060
+0001F800E00001F800E00001F803E00001FFFFE00001FFFFE00001F803E00001F800E00001F800
+E00001F800600001F800600001F800600301F800600301F800600301F800000601F800000601F8
+00000601F800000601F800000E01F800000C01F800001C01F800001C01F800003C01F800007C01
+F80000FC03F80007F8FFFFFFFFF8FFFFFFFFF8282D7EAC2D>I<FFFFFFFFE0FFFFFFFFE003F800
+0FE001F80003E001F80000F001F80000F001F800007001F800007001F800003001F800003001F8
+00003001F800003801F800001801F800601801F800601801F800600001F800600001F800600001
+F800E00001F800E00001F803E00001FFFFE00001FFFFE00001F803E00001F800E00001F800E000
+01F800600001F800600001F800600001F800600001F800600001F800000001F800000001F80000
+0001F800000001F800000001F800000001F800000001F800000001F800000001F800000001F800
+000003FC000000FFFFF80000FFFFF80000252D7EAC2B>I<00003FE001000001FFFC03000007F0
+0E0700001F80038F00003E0000CF0000FC00007F0001F800003F0003F000001F0007E000001F00
+07C000000F000FC000000F001F80000007001F80000007003F00000007003F00000003007F0000
+0003007F00000003007E00000000007E0000000000FE0000000000FE0000000000FE0000000000
+FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00003FFFF87E0000
+3FFFF87E0000007F807F0000003F007F0000003F003F0000003F003F0000003F001F8000003F00
+1F8000003F000FC000003F0007C000003F0007E000003F0003F000003F0001F800007F0000FC00
+007F00003E0000CF00001F800187000007F00F03000001FFFC010000003FE000002D2F7CAD34>
+I<FFFFF07FFFF8FFFFF07FFFF803FC0001FE0001F80000FC0001F80000FC0001F80000FC0001F8
+0000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC
+0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F8
+0000FC0001F80000FC0001FFFFFFFC0001FFFFFFFC0001F80000FC0001F80000FC0001F80000FC
+0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F8
+0000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC
+0001F80000FC0001F80000FC0001F80000FC0003FC0001FE00FFFFF07FFFF8FFFFF07FFFF82D2D
+7EAC32>I<FFFFF0FFFFF003FC0001F80001F80001F80001F80001F80001F80001F80001F80001
+F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
+F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
+F80001F80001F80001F80001F80003FC00FFFFF0FFFFF0142D7EAC18>I<01FFFFE001FFFFE000
+01FE000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00
+0000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC
+000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000
+FC000000FC000000FC003800FC007C00FC00FE00FC00FE00FC00FE00F800FC01F8007801F00060
+01F0003003E0001807C0000E0F000001FC00001B2E7DAC22>I<FFFFF001FFF8FFFFF001FFF803
+FC00007F8001F800003E0001F80000380001F80000700001F80000600001F80000C00001F80003
+800001F80007000001F8000E000001F8001C000001F80038000001F80070000001F800E0000001
+F801C0000001F80380000001F80700000001F80F80000001F81FC0000001F83FC0000001F877E0
+000001F8E7F0000001F9C3F0000001FB81F8000001FF01FC000001FE00FC000001FC007E000001
+F8007F000001F8003F000001F8001F800001F8001F800001F8000FC00001F8000FE00001F80007
+E00001F80003F00001F80003F80001F80001F80001F80000FC0001F80000FE0001F800007E0001
+F800007F0003FC0000FFC0FFFFF007FFFCFFFFF007FFFC2E2D7EAC34>I<FFFFF80000FFFFF800
+0003FC00000001F800000001F800000001F800000001F800000001F800000001F800000001F800
+000001F800000001F800000001F800000001F800000001F800000001F800000001F800000001F8
+00000001F800000001F800000001F800000001F800000001F800000001F800000001F800000001
+F800000001F800000001F800000001F800003001F800003001F800003001F800003001F8000060
+01F800006001F800006001F800006001F80000E001F80000E001F80001E001F80003E001F80007
+E001F8000FC003F8007FC0FFFFFFFFC0FFFFFFFFC0242D7EAC2A>I<FFF80000001FFFFFFC0000
+003FFF03FC0000003FC001FC0000003F8001BE0000006F8001BE0000006F80019F000000CF8001
+9F000000CF80019F000000CF80018F8000018F80018F8000018F80018F8000018F800187C00003
+0F800187C000030F800183E000060F800183E000060F800183E000060F800181F0000C0F800181
+F0000C0F800180F800180F800180F800180F800180F800180F8001807C00300F8001807C00300F
+8001803E00600F8001803E00600F8001803E00600F8001801F00C00F8001801F00C00F8001801F
+00C00F8001800F81800F8001800F81800F80018007C3000F80018007C3000F80018007C3000F80
+018003E6000F80018003E6000F80018001FC000F80018001FC000F80018001FC000F80018000F8
+000F8003C000F8000F800FF00070001FC0FFFF007007FFFFFFFF007007FFFF382D7EAC3D>I<FF
+F80007FFF8FFFC0007FFF801FE00007F8001FE00001E0001BF00000C0001BF80000C00019F8000
+0C00018FC0000C00018FE0000C000187E0000C000183F0000C000183F8000C000181F8000C0001
+80FC000C000180FE000C0001807E000C0001803F000C0001803F800C0001801F800C0001800FC0
+0C0001800FE00C00018007E00C00018007F00C00018003F00C00018001F80C00018001FC0C0001
+8000FC0C000180007E0C000180007F0C000180003F0C000180001F8C000180001FCC000180000F
+CC0001800007EC0001800007FC0001800003FC0001800001FC0001800001FC0001800000FC0001
+8000007C00018000007C0003C000003C000FF000001C00FFFF00001C00FFFF00000C002D2D7EAC
+32>I<00007FC000000003C0780000000F001E0000003C0007800000780003C00000F00001E000
+01E00000F00003E00000F80007C000007C000FC000007E000F8000003E001F8000003F001F0000
+001F003F0000001F803F0000001F807F0000001FC07E0000000FC07E0000000FC07E0000000FC0
+FE0000000FE0FE0000000FE0FE0000000FE0FE0000000FE0FE0000000FE0FE0000000FE0FE0000
+000FE0FE0000000FE0FE0000000FE0FE0000000FE07E0000000FC07F0000001FC07F0000001FC0
+3F0000001F803F0000001F803F8000003F801F8000003F000F8000003E000FC000007E0007C000
+007C0003E00000F80001F00001F00000F80003E00000780003C000003E000F8000000F001E0000
+0003C078000000007FC000002B2F7CAD34>I<FFFFFFE000FFFFFFFC0003F8007F0001F8000FC0
+01F80007E001F80003F001F80003F001F80001F801F80001F801F80001FC01F80001FC01F80001
+FC01F80001FC01F80001FC01F80001FC01F80001F801F80001F801F80003F001F80003E001F800
+07C001F8000F8001F8007F0001FFFFF80001F800000001F800000001F800000001F800000001F8
+00000001F800000001F800000001F800000001F800000001F800000001F800000001F800000001
+F800000001F800000001F800000001F800000001F800000001F800000001F800000003FC000000
+FFFFF00000FFFFF00000262D7EAC2D>I<FFFFFFC00000FFFFFFF8000003F800FE000001F8001F
+800001F8000FC00001F80007E00001F80003F00001F80003F80001F80001F80001F80001FC0001
+F80001FC0001F80001FC0001F80001FC0001F80001FC0001F80001FC0001F80001F80001F80003
+F00001F80003F00001F80007E00001F8000F800001F8001F000001F800F8000001FFFFC0000001
+F800F0000001F8003C000001F8001E000001F8000F800001F8000F800001F80007C00001F80007
+C00001F80007E00001F80007E00001F80007E00001F80007E00001F80007F00001F80007F00001
+F80007F00001F80007F00001F80007F00C01F80007F00C01F80003F80C01F80003F80C03FC0001
+F818FFFFF000FC18FFFFF0007E30000000000FC02E2E7EAC31>82 D<007F002001FFE0600780F8
+E00E001CE01C000FE0380007E0380003E0700001E0700001E0F00000E0F00000E0F00000E0F000
+0060F8000060F8000060FC0000007E0000007F0000007FE000003FFE00001FFFE0000FFFF80007
+FFFE0003FFFF0000FFFF80000FFFC00000FFC000001FE0000007E0000003E0000001F0000001F0
+C00001F0C00000F0C00000F0C00000F0E00000F0E00000E0E00000E0F00001E0F00001C0F80003
+C0FE000380E7000F00E3E01E00C0FFF800801FE0001C2F7CAD25>I<7FFFFFFFFFC07FFFFFFFFF
+C07F001F801FC07C001F8003C070001F8001C070001F8001C060001F8000C060001F8000C0E000
+1F8000E0E0001F8000E0C0001F800060C0001F800060C0001F800060C0001F800060C0001F8000
+6000001F80000000001F80000000001F80000000001F80000000001F80000000001F8000000000
+1F80000000001F80000000001F80000000001F80000000001F80000000001F80000000001F8000
+0000001F80000000001F80000000001F80000000001F80000000001F80000000001F8000000000
+1F80000000001F80000000001F80000000001F80000000001F80000000001F80000000001F8000
+0000001F80000000003FC00000003FFFFFC000003FFFFFC0002B2D7EAC30>I<FFFFF007FFF8FF
+FFF007FFF803FC00007F8001F800001E0001F800000C0001F800000C0001F800000C0001F80000
+0C0001F800000C0001F800000C0001F800000C0001F800000C0001F800000C0001F800000C0001
+F800000C0001F800000C0001F800000C0001F800000C0001F800000C0001F800000C0001F80000
+0C0001F800000C0001F800000C0001F800000C0001F800000C0001F800000C0001F800000C0001
+F800000C0001F800000C0001F800000C0001F800000C0001F800000C0001F800000C0001F80000
+0C0000F80000180000F80000180000FC00001800007C00003000003C00003000003E0000600000
+1F0000C000000F800180000007C00700000001F01E000000007FF8000000001FE000002D2E7EAC
+32>I<FFFFC0007FFEFFFFC0007FFE07FC00000FE003F8000007C001F80000038001F800000300
+01FC0000070000FC0000060000FC00000600007E00000C00007E00000C00007F00000C00003F00
+001800003F00001800003F80003800001F80003000001F80003000000FC0006000000FC0006000
+000FE00060000007E000C0000007E000C0000007F001C0000003F00180000003F00180000001F8
+0300000001F80300000001FC0700000000FC0600000000FC06000000007E0C000000007E0C0000
+00007F0C000000003F18000000003F18000000003FB8000000001FB0000000001FB0000000000F
+E0000000000FE0000000000FE00000000007C00000000007C00000000007C00000000003800000
+0000038000002F2E7FAC32>I<FFFFC07FFFC01FFF80FFFFC07FFFC01FFF8007F80003FC0003FC
+0003F00003F80000F00003F00001F80000E00003F00001F80000600001F80001F80000C00001F8
+0001FC0000C00001F80001FC0000C00000FC0001FC0001800000FC00037E0001800000FC00037E
+00018000007E00037E00030000007E00063F00030000007E00063F00030000007F00063F000700
+00003F000C1F80060000003F000C1F80060000003F800C1F800E0000001F801C1FC00C0000001F
+80180FC00C0000001F80180FC00C0000000FC0380FE0180000000FC03007E0180000000FC03007
+E01800000007E03007E03000000007E06003F03000000007E06003F03000000003F06003F06000
+000003F0C001F86000000003F0C001F86000000001F8C001F8C000000001F98000FCC000000001
+F98000FCC000000001FD8000FDC000000000FF00007F8000000000FF00007F8000000000FF0000
+7F80000000007F00007F00000000007E00003F00000000007E00003F00000000003E00003E0000
+0000003C00001E00000000003C00001E00000000001C00001C00000000001800000C000000412E
+7FAC44>I<FFFFC0003FFEFFFFC0003FFE07FC00000FF003F8000007C001FC0000070000FC0000
+070000FE00000600007F00000C00007F00001C00003F80001800001FC0003800001FC000300000
+0FE00060000007E000E0000007F000C0000003F801C0000003F80180000001FC0300000000FE07
+00000000FE06000000007F0E000000003F0C000000003F98000000001FD8000000001FF0000000
+000FF00000000007E00000000007E00000000007E00000000007E00000000007E00000000007E0
+0000000007E00000000007E00000000007E00000000007E00000000007E00000000007E0000000
+0007E00000000007E00000000007E00000000007E0000000000FF000000003FFFFC0000003FFFF
+C0002F2D7FAC32>89 D<3FFFFFFF003FFFFFFF003FE0007E003F0000FE003E0000FC003C0001F8
+00380001F800380003F000700007F000700007E00070000FC00060000FC00060001F800060003F
+800060003F000000007E000000007E00000000FC00000001FC00000001F800000003F000000007
+F000000007E00000000FE00000000FC00000001F800000003F800000003F000000007E00018000
+7E00018000FC00018001FC00018001F800018003F000038003F000038007E00003800FE0000300
+0FC00007001F800007001F80000F003F00001F007F00007F007E0001FF00FFFFFFFF00FFFFFFFF
+00212D7CAC29>I<FFC0FFC0FFC0E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000FFC0FFC0FFC00A437AB112>I<02002004004008
+00801001002002002002004004004004004004008008008008008008008008009C09C0BE0BE0FF
+0FF07F07F07F07F03E03E01C01C0141476AD21>I<FFC0FFC0FFC001C001C001C001C001C001C0
+01C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001
+C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C0
+01C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C0FFC0FFC0FFC00A
+437FB112>I<00C00001E00003F00007F8000F3C001E1E003C0F00780780E001C0400080120A79
+AD21>I<00FF00000701E0000C00F0001E0078003F003C003F003E003F001F003F001F000C001F
+0000001F0000001F0000001F000007FF00007E1F0003F01F000FC01F001F801F003F001F007E00
+1F007E001F0CFC001F0CFC001F0CFC001F0CFC002F0CFC002F0C7E004F0C3E0087981F8303F003
+FC01E01E1D7E9C21>97 D<07C0000000FFC0000000FFC00000000FC000000007C000000007C000
+000007C000000007C000000007C000000007C000000007C000000007C000000007C000000007C0
+00000007C000000007C000000007C000000007C1FC000007C707800007D801E00007F000F00007
+E000780007C0003C0007C0003E0007C0003E0007C0001F0007C0001F0007C0001F0007C0001F80
+07C0001F8007C0001F8007C0001F8007C0001F8007C0001F8007C0001F8007C0001F0007C0001F
+0007C0003F0007C0003E0007C0003C0007C0007C0007E000780007B000F000071801C000070607
+80000601FC0000212E7FAD25>I<001FE00000F0380003C00C0007801E000F003F001F003F003E
+003F003E003F007E000C007C0000007C000000FC000000FC000000FC000000FC000000FC000000
+FC000000FC0000007C0000007C0000007E0000003E0001803E0001801F0003000F000300078006
+0003C00C0000F03000001FC000191D7E9C1E>I<000001F00000003FF00000003FF000000003F0
+00000001F000000001F000000001F000000001F000000001F000000001F000000001F000000001
+F000000001F000000001F000000001F000000001F000000001F000001FC1F00000F031F00001C0
+0DF000078007F0000F0003F0001F0001F0001E0001F0003E0001F0007E0001F0007C0001F0007C
+0001F000FC0001F000FC0001F000FC0001F000FC0001F000FC0001F000FC0001F000FC0001F000
+7C0001F0007C0001F0007C0001F0003E0001F0003E0001F0001E0003F0000F0003F000078007F0
+0003C019F80000F071FF80001FC1FF80212E7EAD25>I<003F800000E0F0000380780007003C00
+0F001E001E001E003E001F003E000F007C000F807C000F807C000F80FC000F80FFFFFF80FC0000
+00FC000000FC000000FC000000FC0000007C0000007C0000007C0000003E0001803E0001801E00
+03000F0003000780060003C01C0000F07000001FC000191D7E9C1E>I<000FE0003C3000707801
+F0FC01E0FC03E0FC07C07807C03007C00007C00007C00007C00007C00007C00007C00007C00007
+C000FFFF80FFFF8007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007
+C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007
+C0000FE000FFFF00FFFF00162E7FAD14>I<000001E0007F061001C1C8780380F078070070780F
+0078301E003C001E003C003E003E003E003E003E003E003E003E003E003E001E003C001E003C00
+0F007800070070000780E0000DC1C000087F0000180000001800000018000000180000001C0000
+001E0000000FFFF0000FFFFE0007FFFF8003FFFFC01E001FC0380003E0780001E0700000F0F000
+00F0F00000F0F00000F0F00000F0780001E0380001C01C0003800F000F0003C03C00007FE0001D
+2C7E9D21>I<07C0000000FFC0000000FFC00000000FC000000007C000000007C000000007C000
+000007C000000007C000000007C000000007C000000007C000000007C000000007C000000007C0
+00000007C000000007C000000007C0FF000007C303C00007C401E00007C801F00007D000F00007
+D000F80007E000F80007E000F80007C000F80007C000F80007C000F80007C000F80007C000F800
+07C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F8
+0007C000F80007C000F80007C000F80007C000F80007C000F8000FE001FC00FFFE1FFFC0FFFE1F
+FFC0222E7FAD25>I<07000F801FC01FC01FC00F80070000000000000000000000000000000000
+000007C0FFC0FFC00FC007C007C007C007C007C007C007C007C007C007C007C007C007C007C007
+C007C007C007C007C007C007C007C00FE0FFFCFFFC0E2D7FAC12>I<000E00001F00003F80003F
+80003F80001F00000E00000000000000000000000000000000000000000000000000000000000F
+8001FF8001FF80001F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F
+80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F
+80000F80000F80000F80000F80000F80000F80000F80300F80780F80FC0F00FC1F00FC1E00783C
+003078000FE000113A83AC14>I<07C00000FFC00000FFC000000FC0000007C0000007C0000007
+C0000007C0000007C0000007C0000007C0000007C0000007C0000007C0000007C0000007C00000
+07C0000007C03FFC07C03FFC07C01FE007C00F8007C00E0007C01C0007C0380007C0700007C0E0
+0007C1C00007C3800007C7800007CFC00007DBE00007F1E00007E1F00007C0F80007C0780007C0
+3C0007C03E0007C01F0007C00F0007C00F8007C007C007C007C007C003E00FE007F8FFFE1FFFFF
+FE1FFF202E7FAD23>I<07C0FFC0FFC00FC007C007C007C007C007C007C007C007C007C007C007
+C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C0
+07C007C007C007C007C007C007C007C007C00FE0FFFEFFFE0F2E7FAD12>I<07C0FF001FE000FF
+C303C0607800FFC401E0803C000FC801F1003E0007D000F2001E0007D000FA001F0007E000FC00
+1F0007E000FC001F0007C000F8001F0007C000F8001F0007C000F8001F0007C000F8001F0007C0
+00F8001F0007C000F8001F0007C000F8001F0007C000F8001F0007C000F8001F0007C000F8001F
+0007C000F8001F0007C000F8001F0007C000F8001F0007C000F8001F0007C000F8001F0007C000
+F8001F0007C000F8001F0007C000F8001F000FE001FC003F80FFFE1FFFC3FFF8FFFE1FFFC3FFF8
+351D7F9C38>I<07C0FF0000FFC303C000FFC401E0000FC801F00007D000F00007D000F80007E0
+00F80007E000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007
+C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F800
+07C000F80007C000F80007C000F80007C000F8000FE001FC00FFFE1FFFC0FFFE1FFFC0221D7F9C
+25>I<003FC00000E0700003C03C0007801E000F000F001E0007803E0007C03C0003C07C0003E0
+7C0003E07C0003E0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F07C0003
+E07C0003E07C0003E03E0007C03E0007C01E0007800F000F0007801E0003C03C0000E07000003F
+C0001C1D7E9C21>I<07C1FC0000FFC7078000FFD801E0000FF000F00007E000F80007C0007C00
+07C0007E0007C0003E0007C0003F0007C0003F0007C0001F0007C0001F8007C0001F8007C0001F
+8007C0001F8007C0001F8007C0001F8007C0001F8007C0001F0007C0003F0007C0003F0007C000
+3E0007C0007C0007C0007C0007E000F80007F001F00007D803C00007C607800007C1FC000007C0
+00000007C000000007C000000007C000000007C000000007C000000007C000000007C000000007
+C000000007C00000000FE0000000FFFE000000FFFE000000212A7F9C25>I<001FC0300000F030
+700001E018700007C004F0000F8006F0001F0003F0001F0003F0003E0001F0007E0001F0007E00
+01F0007C0001F000FC0001F000FC0001F000FC0001F000FC0001F000FC0001F000FC0001F000FC
+0001F0007C0001F0007E0001F0007E0001F0003E0001F0003F0001F0001F0003F0000F8007F000
+078005F00003C019F00000F071F000001F81F000000001F000000001F000000001F000000001F0
+00000001F000000001F000000001F000000001F000000001F000000001F000000003F80000003F
+FF8000003FFF80212A7E9C23>I<0781F0FF8618FF883C0F907E07907E07A07E07A03C07A00007
+C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007
+C00007C00007C00007C00007C0000FE000FFFF00FFFF00171D7F9C1A>I<03FC200E07E01001E0
+3000E06000E0E00060E00060E00060F00060FC00007F80007FFC003FFF001FFF800FFFE001FFE0
+001FF00001F8C000F8C00078C00038E00038E00038F00030F00030F80060EC00C0C7038081FE00
+151D7E9C1A>I<00C00000C00000C00000C00000C00001C00001C00001C00003C00003C00007C0
+000FC0001FFFE0FFFFE007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0
+0007C00007C00007C00007C00007C00007C03007C03007C03007C03007C03007C03007C03003C0
+2003E06001E04000F080003F0014297FA81A>I<07C000F800FFC01FF800FFC01FF8000FC001F8
+0007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000
+F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C0
+00F80007C000F80007C000F80007C001F80007C001F80003C002F80003C002F80001E004FC0000
+7818FFC0001FE0FFC0221D7F9C25>I<FFFC07FFFFFC07FF0FE001F807C000F007E000E003E000
+C003E000C001F0018001F0018001F8018000F8030000F80300007C0600007C0600007C0600003E
+0C00003E0C00003F1C00001F1800001F1800000FB000000FB000000FF0000007E0000007E00000
+03C0000003C0000003C00000018000201D7F9C23>I<FFF8FFF83FF8FFF8FFF83FF80FE00FC00F
+C007C00780078007C007C0070007C007C0030003E007C0060003E007E0060003E007E0060001F0
+0DE00C0001F00DF00C0001F81DF01C0000F818F0180000F818F8180000FC38F83800007C307830
+00007C307C3000007E707C7000003E603C6000003E603E6000001FC01EC000001FC01EC000001F
+C01FC000000F800F8000000F800F8000000F800F80000007000700000007000700000007000700
+002D1D7F9C30>I<FFFC1FFE00FFFC1FFE000FF007F00003E007C00003F007000001F006000000
+F80E0000007C1C0000007C180000003E300000001F700000001FE00000000FC000000007C00000
+0003E000000007F000000007F00000000CF80000001CFC000000387C000000303E000000601F00
+0000E01F800001C00F800001C007C00007C007E0001FC007F000FFF01FFF80FFF01FFF80211D7F
+9C23>I<FFFC07FFFFFC07FF0FE001F807C000F007E000E003E000C003E000C001F0018001F001
+8001F8018000F8030000F80300007C0600007C0600007C0600003E0C00003E0C00003F1C00001F
+1800001F1800000FB000000FB000000FF0000007E0000007E0000003C0000003C0000003C00000
+018000000180000003000000030000000300000006000078060000FC0E0000FC0C0000FC180000
+FC1800007830000030E000001F800000202A7F9C23>I<3FFFFF3E003E3C007E38007C3000F870
+01F86001F06003E06007E06007C0000F80001F80001F00003E00007E00007C0000F80001F80301
+F00303E00307E00307C0070F80071F80061F00063E000E7E001E7C007EFFFFFE181D7E9C1E>I<
+FFFFFFFF2001809121>I<3801C07E07E0FE07F0FE07F0FE07F07E07E03801C014077AAC21>127
+D E end
+%%EndSetup
+%%Page: 0 1
+0 0 bop 2246 66 a Fr(PUPT{1312)-72 653 y Fq(W)-10 b(orld-Sheet)39
+b(Sup)s(ersymmetry)34 b(Without)k(Con)m(tact)g(T)-10 b(erms)2622
+611 y Fp(?)787 999 y Fr(Jacques)21 b(Distler)i(and)f(Mark)g(D.)g(Do)n(yle)908
+1125 y(Joseph)g(Henry)g(Lab)r(oratories)999 1231 y(Princeton)g(Univ)n(ersit)n
+(y)901 1338 y(Princeton,)h(NJ)44 b(08544)h(USA)133 1603 y(Green)27
+b(and)h(Seib)r(erg)g(sho)n(w)n(ed)g(that,)i(in)f(simple)f(treatmen)n(ts)f(of)
+i(fermionic)f(string)g(theory)-6 b(,)31 b(it)0 1710 y(is)c(necessary)f(to)h
+(in)n(tro)r(duce)f(con)n(tact)g(in)n(teractions)h(when)f(v)n(ertex)g(op)r
+(erators)h(collide.)44 b(Otherwise,)0 1816 y(certain)18 b(sup)r(erconformal)g
+(W)-6 b(ard)19 b(iden)n(tities)g(w)n(ould)g(b)r(e)f(violated.)29
+b(In)18 b(this)h(note,)g(w)n(e)f(sho)n(w)h(ho)n(w)g(these)0
+1922 y(con)n(tact)d(terms)g(arise)h(naturally)h(when)e(prop)r(er)g(accoun)n
+(t)g(is)i(tak)n(en)e(of)i(the)e(sup)r(erconformal)g(geometry)0
+2028 y(in)n(v)n(olv)n(ed)22 b(when)e(punctures)g(collide.)30
+b(More)20 b(precisely)-6 b(,)22 b(w)n(e)e(sho)n(w)i(that)e(there)g(is)h(no)g
+(con)n(tact)f(term)g(at)0 2135 y(all!)37 b(Rather,)24 b(corrections)f(arise)i
+(to)f(the)f(\\na)-7 b(\177)-26 b(\020v)n(e")25 b(form)n(ula)f(when)g(the)f(b)
+r(oundary)h(of)h(mo)r(duli)f(space)0 2241 y(is)f(describ)r(ed)e(correctly)-6
+b(.)0 3230 y(3/92)p 0 3309 800 3 v -66 3482 a Fo(?)20 b Fn(Email:)27
+b Fm(distler@puhep1.princeton.edu,)k(mdd@puhep1.princeton.edu)17
+b Fn(.)-15 3575 y(Researc)n(h)22 b(supp)r(orted)f(b)n(y)g(NSF)g(gran)n(t)f
+(PHY90-21984.)p eop
+%%Page: 1 2
+1 1 bop 133 66 a Fr(The)24 b(existence)f(of)h(con)n(tact)g(terms)f(in)i
+(string)g(theory)f(seems,)g(after)h(a)f(momen)n(t's)g(though)n(t,)h(to)0
+173 y(b)r(e)e(somewhat)h(parado)n(xical.)37 b(In)24 b(the)f
+Fl(stable)i(c)m(omp)m(acti\014c)m(ation)e Fr(of)i(mo)r(duli)f(space)f([1)p
+ (#reference.1) [[462 687 468 699] [1 1 1 [3 3]] [0 0 1]] pdfm (,2)p
+ (#reference.2) [[471 687 477 699] [1 1 1 [3 3]] [0 0 1]] pdfm (],)k
+(punctures)0 279 y(\()p Fl(i.e.)22 b Fr(the)e(lo)r(cations)i(at)g(whic)n(h)f
+(v)n(ertex)f(op)r(erators)h(are)g(inserted\))g(are,)g Fl(by)i(de\014nition)g
+Fr(not)e(allo)n(w)n(ed)h(to)0 386 y(collide.)30 b(Rather,)20
+b(as)g(t)n(w)n(o)g(punctures)e(approac)n(h)i(eac)n(h)f(other,)h(w)n(e)g(can)f
+(b)n(y)h(a)g(conformal)g(transforma-)0 492 y(tion)g(tak)n(e)g(the)f
+(punctures)g(to)h(remain)g(separated)f(while)h(a)g(piece)f(of)i(the)e
+(surface)h(surrounding)g(them)0 599 y(pinc)n(hes)h(o\013)h(\(Fig.)h(1\).)30
+b(If)21 b(the)g(punctures)g(nev)n(er)f(collide,)j(there)e(w)n(ould)h(seem)e
+(to)i(b)r(e)f(little)h(role)g(for)g(a)0 705 y Fk(\016)s Fr(-function)16
+b(con)n(tact)g(term.)27 b(A)17 b(more)f(sophisticated)i(p)r(erson)e(migh)n(t)
+h(replace)f(the)h(notion)g(of)h(a)f(con)n(tact)0 812 y(term)23
+b(when)g(punctures)f(coincide)i(with)g(that)f(of)h(a)h(con)n(tribution)f(to)g
+(the)f(string)h(measure)f(whic)n(h)g(is)0 918 y(\\)p Fk(\016)s
+Fj(-function-concen)n(trated)g(on)i(the)g(b)r(oundary)g(of)h(mo)r(duli)f
+(space)g(corresp)r(onding)g(to)g(the)g(pinc)n(hed)0 1024 y(surface)p
+Fr(.")i(But)g(this)g(form)n(ulation)h(seems)e(rather)g(strained)h(and)g(hard)
+g(to)g(deriv)n(e)f(from)h(conformal)0 1131 y(\014eld)c(theory)-6
+b(.)33 b(After)22 b(all,)j(conformal)e(\014eld)g(theory)f(amplitudes)h(are)g
+(supp)r(osed)g(to)g(b)r(e)f(real-analytic)0 1237 y(functions)g(of)h(the)e(mo)
+r(duli,)i(whic)n(h)f(a)g Fk(\016)s Fr(-function)g(certainly)g(is)h(not.)266
+1883 y(Fig.)g(1:Colliding)i(punctures.)133 2070 y(F)-6 b(ortunately)g(,)21
+b(it)e(no)n(w)h(app)r(ears)f(that)f(\\con)n(tact)h(in)n(teractions")g(ha)n(v)
+n(e)g(a)g(p)r(erfectly)f(natural)i(home)0 2176 y(in)i(string)g(theory)-6
+b(.)29 b(What)22 b(app)r(ear)f(to)g(b)r(e)g(con)n(tact)g(in)n(teractions)g
+(arise)h(as)g(a)g(consequence)d(of)j(certain)0 2283 y(global)i(features)f(of)
+g(the)g(mo)r(duli)g(space)f(of)i(punctured)d(Riemann)h(surfaces.)33
+b(The)22 b(imp)r(ortan)n(t)h(p)r(oin)n(t)0 2389 y(is)h(that)f(in)h(order)e
+(to)i(de\014ne)e(the)g(op)r(erators)h(whic)n(h)h(go)f(in)n(to)h(a)f
+(conformal)h(\014eld)f(theory)g(correlation)0 2495 y(function,)d(w)n(e)e
+(need,)g(implicitly)-6 b(,)21 b(a)d(normal-ordering)h(prescription)g(or,)g
+(what)g(amoun)n(ts)f(to)g(the)g(same)0 2602 y(thing,)25 b(a)e(c)n(hoice)g(of)
+h(a)g(lo)r(cal)g(co)r(ordinate)f(at)h(the)f(insertion)h(p)r(oin)n(t.)34
+b(Actually)-6 b(,)25 b(w)n(e)e(need)f(a)i(family)g(of)0 2708
+y(suc)n(h)k(lo)r(cal)i(co)r(ordinates)f(whic)n(h)f(v)l(ary)i(as)f(w)n(e)f(v)l
+(ary)i(the)e(mo)r(duli)h(of)g(the)f(surface.)49 b(Our)29 b(standard)0
+2815 y(b)r(eliefs)21 b(ab)r(out)g(the)f(prop)r(erties)h(of)g(string)h
+(amplitudes)f(obtain)g(when)g(the)f(co)r(ordinate)g(families)i(v)l(ary)0
+2921 y(holomorphically)29 b(with)f(the)f(mo)r(duli.)47 b(Unfortunately)-6
+b(,)30 b(there)c(are)i(obstructions)g(to)f(\014nding)h(suc)n(h)0
+3028 y(a)h(holomorphic)f(co)r(ordinate)g(family)i(globally)g(on)f(mo)r(duli)f
+(space.)49 b(W)-6 b(e)28 b(are)g(forced)g(to)h(allo)n(w)h(our)0
+3134 y(normal-ordering)23 b(prescription)f(to)g(v)l(ary)h
+(non-holomorphically)g(with)f(the)g(mo)r(duli.)133 3241 y(One)i(consequence)f
+(of)i(this)h(phenomenon)d(is)j(that)f(the)f(one-p)r(oin)n(t)h(function)g(of)h
+(the)e(zero)g(mo-)0 3347 y(men)n(tum)e(dilaton)j(v)n(ertex)f(op)r(erator)g
+(\(whic)n(h)g(na)-7 b(\177)-26 b(\020v)n(ely)25 b(decouples\))e(is)i(not)f
+(zero,)g(but)g(rather)g(is)h(pro-)0 3454 y(p)r(ortional)30
+b(to)e(the)g(Euler)h(c)n(haracteristic)f(of)h(the)f(Riemann)g(surface)g([3)p
+ (#reference.3) [[403 96 409 108] [1 1 1 [3 3]] [0 0 1]] pdfm (,4)p
+ (#reference.4) [[412 96 418 108] [1 1 1 [3 3]] [0 0 1]] pdfm (,5)p
+ (#reference.5) [[422 96 428 108] [1 1 1 [3 3]] [0 0 1]] pdfm (].)52
+b(In)29 b(the)f(presence)e(of)0 3560 y(other)h(v)n(ertex)g(op)r(erator)g
+(insertions,)k(one)c(needs)g(a)g(more)g(re\014ned)g(treatmen)n(t)e(of)k(the)e
+(b)r(eha)n(vior)g(of)1283 3719 y(1)p eop
+%%Page: 2 3
+2 2 bop 0 66 a Fr(co)r(ordinate)22 b(families)h(as)g(punctures)e(collide.)31
+b(This)23 b(leads)g(to)f(the)g(dilaton)h(insertion)g(b)r(eing)f(prop)r(or-)0
+176 y(tional)e(to)f(the)f(Euler)g(c)n(haracteristic)g(of)i(the)e
+Fl(punctur)m(e)m(d)e Fr(Riemann)i(surface)h([6)p
+ (#reference.6) [[424 686 429 698] [1 1 1 [3 3]] [0 0 1]] pdfm (].)30
+b(In)18 b(other)g(w)n(ords,)j(the)0 285 y(dilaton)26 b(insertion)f(coun)n(ts)
+f(the)g(p)r(o)n(w)n(ers)g(of)i(the)d(string)j(coupling)f(in)g(the)f
+(correlation)h(function,)g(or,)0 394 y(if)h(y)n(ou)f(wish,)h(there)e(is)h(a)g
+(lo)n(w-energy)g(theorem)f Fk(D)g Fi(\030)f Fk(\025)1478 368
+y Fh(@)p 1463 378 63 3 v 1463 417 a(@)s(\025)1533 394 y Fr(.)38
+b(F)-6 b(or)26 b(the)e(b)r(osonic)h(string,)i(this)e(is)h(true)0
+503 y(only)e(for)g(the)e(\014rst)i(v)l(ariation)h(with)e(resp)r(ect)f(to)h
+Fk(\025)g Fr(\(one)g(dilaton)h(insertion\),)h(but)e(for)h(the)e(heterotic)0
+612 y(string,)27 b(it)f(holds)g(to)g(all)h(orders)e(\(m)n(ultiple)g(dilaton)i
+(insertions\))f([7)p
+ (#reference.7) [[379 608 385 620] [1 1 1 [3 3]] [0 0 1]] pdfm (].)41
+b(In)26 b(similar)g(fashion,)i(one)d(can)0 721 y(reco)n(v)n(er)19
+b(the)g(\\dilaton")j([8)p
+ (#reference.8) [[188 588 194 600] [1 1 1 [3 3]] [0 0 1]] pdfm (])f(and)f
+(\\puncture")f([9)p
+ (#reference.9) [[289 588 295 600] [1 1 1 [3 3]] [0 0 1]] pdfm (])i
+(equations)f(of)h(top)r(ological)g(gra)n(vit)n(y)-6 b(,)23
+b(p)r(ostulated)d(in)0 830 y([10)p
+ (#reference.10) [[75 569 87 581] [1 1 1 [3 3]] [0 0 1]] pdfm (,11)p
+ (#reference.11) [[90 569 102 581] [1 1 1 [3 3]] [0 0 1]] pdfm (].)32
+b(The)20 b(k)n(ey)g(p)r(oin)n(t)h(to)f(b)r(e)g(emphasized)f(here)h(is)h(that)
+f(none)g(of)h(these)f(results)h(in)n(v)n(olv)n(e)g(m)n(ysteri-)0
+939 y(ous)i Fk(\016)s Fr(-functions)f(at)g(the)g(b)r(oundary)g(of)i(mo)r
+(duli)e(space.)31 b(The)21 b(string)j(measure)d(is)i(p)r(erfectly)e(smo)r
+(oth)0 1048 y(and,)e(aside)f(from)g(ph)n(ysical)h(on-shell)g(p)r(oles,)g(v)l
+(anishes)g(as)f(one)g(approac)n(hes)f(the)h(b)r(oundary)f(of)i(mo)r(duli)0
+1157 y(space.)133 1268 y(Another)j(sort)h(of)g(con)n(tact)f(term)g(whic)n(h)g
+(one)h(encoun)n(ters)e(in)j(fermionic)e(string)h(theory)g(is)g(that)0
+1377 y(prop)r(osed)32 b(b)n(y)g(Green)g(and)g(Seib)r(erg)f([12)p
+ (#reference.12) [[253 470 264 482] [1 1 1 [3 3]] [0 0 1]] pdfm (].)62
+b(The)32 b(\\in)n(tegrated")g(form)g(of)h(a)f(NS)g(v)n(ertex)f(op)r(erator)0
+1486 y(\()p Fl(i.e.)20 b Fr(when)e(one)h(thinks)g(of)h(the)e(v)n(ertex)h(op)r
+(erator)g(as)g(a)g(2-form)h(to)f(b)r(e)f(in)n(tegrated)h(o)n(v)n(er)g(the)g
+(Riemann)0 1595 y(surface\))h(is)h(naturally)g(in)g(the)e(\(0\)-picture.)29
+b(Ho)n(w)n(ev)n(er,)21 b(if)g(one)f(na)-7 b(\177)-26 b(\020v)n(ely)21
+b(tak)n(es)f(the)f(OPE)i(of)g(t)n(w)n(o)f(suc)n(h)0 1704 y(v)n(ertex)h(op)r
+(erators)h(as)h(the)f(approac)n(h)g(eac)n(h)f(other,)h(the)g(result)g
+(violates)h(the)e(sup)r(erconformal)h(W)-6 b(ard)0 1813 y(iden)n(tities.)47
+b(The)28 b(\\solution")h(is)f(to)g(add)g(a)g Fk(\016)s Fr(-function)f(con)n
+(tact)g(term)g(whic)n(h)h(restores)f(the)g(W)-6 b(ard)0 1922
+y(iden)n(tities.)51 b(Green)28 b(and)h(Seib)r(erg)g(sho)n(w)n(ed)g(that)g
+(\(at)g(least)g(for)h(free)e(\014eld)h(theories\))f(this)i(con)n(tact)0
+2031 y(term)20 b(could)i(b)r(e)f(explained)g(b)n(y)h(including)g(the)f
+(auxiliary)i(\014elds,)f Fk(F)9 b Fr(,)23 b(necessary)d(to)i(close)f(the)g(w)
+n(orld-)0 2140 y(sheet)26 b(sup)r(ersymmetry)f(algebra)i(o\013-shell.)45
+b(The)27 b(equation)g(of)g(motion)g(for)h(the)e(auxiliary)j(\014eld)d(is)0
+2250 y(simply)e Fk(F)30 b Fr(=)21 b(0,)k(and)f(the)f(auxiliary)j(\014eld)d
+(do)r(esn't)h(propagate)g({)g(its)g(t)n(w)n(o-p)r(oin)n(t)g(function)g(is)h
+(just)f(a)0 2359 y Fk(\016)s Fr(-function.)33 b(But,)24 b(noted)f(Green)g
+(and)g(Seib)r(erg,)h(if)g(w)n(e)g(include)f(the)g(con)n(tribution)g(of)h(the)
+f(auxiliary)0 2468 y(\014eld)h(to)g(the)f(\(0\)-picture)h(v)n(ertex)f(op)r
+(erator,)i(the)e(extra)h(terms)f(whic)n(h)h(arise)g(from)g(con)n(tracting)g
+(the)0 2577 y(auxiliary)j(\014elds)e(when)g(the)g(v)n(ertex)f(op)r(erators)h
+(collide)h(precisely)f(repro)r(duce)f(the)g(needed)g(con)n(tact)0
+2686 y(terms.)133 2796 y(This)j(mec)n(hanism,)g(though)f(prett)n(y)-6
+b(,)28 b(has)f(some)f(dra)n(wbac)n(ks.)44 b(First,)29 b(it)e(only)g(applies)h
+(to)e(\014eld)0 2905 y(theories)e(in)h(whic)n(h)f(one)h(kno)n(ws)g(an)f
+(o\013-shell)h(auxiliary)i(\014eld)d(structure.)36 b(This)25
+b(lea)n(v)n(es)f(out)h(a)g(large)0 3015 y(class)30 b(of)f(in)n(teresting)g
+(theories)g(whic)n(h)g(are)g(only)g(sup)r(erconformal)g(on-shell.)51
+b(One)29 b(w)n(ould)g(lik)n(e)h(to)0 3124 y(b)r(e)h(able)g(to)h(treat)f(more)
+f(general)i(sup)r(erconformal)f(theories.)57 b(Second,)34 b(b)n(y)d
+(explicitly)h(in)n(v)n(oking)0 3233 y(o\013-shell)d(features)f(of)h(the)f
+(theory)-6 b(,)31 b(one)d(is)i Fl(p)m(otential)s(ly)f Fr(op)r(ening)f(a)h(P)n
+(andora's)h(b)r(o)n(x)f(of)g(violations)0 3342 y(of)d(sup)r(erconformal)e(in)
+n(v)l(ariance.)39 b(F)-6 b(or)26 b(free)f(theories,)h(it)f(app)r(ears)g(that)
+g(one)f(can)h(easily)h(snap)f(sh)n(ut)0 3451 y(the)d(lid)h(after)f
+(extracting)g(the)f(desired)h(con)n(tact)f(terms.)30 b(F)-6
+b(or)23 b(more)e(general)h(theories,)h(ev)n(en)e(if)i(their)0
+3560 y(auxiliary)h(\014eld)e(structure)f(is)h(kno)n(wn,)h(one)f(ma)n(y)g(not)
+g(b)r(e)f(so)i(luc)n(ky)-6 b(.)1283 3719 y(2)p eop
+%%Page: 3 4
+3 3 bop 133 66 a Fr(In)25 b(the)g(op)r(erator)g(formalism,)i(a)e(v)n(ertex)g
+(op)r(erator)g(is)h(naturally)g(though)n(t)g(of)g(as)f(a)h(0-form)g(in-)0
+179 y(serted)17 b(at)h(a)h(puncture;)f(it)g(alw)n(a)n(ys)i(app)r(ears)e(in)g
+(the)g(\()p Fi(\000)p Fr(1\)-picture.)27 b(The)17 b(picture-c)n(hanging)h(op)
+r(erator)0 291 y(whic)n(h)27 b(mo)n(v)n(es)g(it)g(in)n(to)g(the)g
+(\(0\)-picture)f(app)r(ears)h(when)f(one)h(in)n(tegrates)f(o)n(v)n(er)i(the)e
+(sup)r(ermo)r(dulus)0 403 y(asso)r(ciated)d(to)g(the)f(lo)r(cation)i(of)f
+(the)g(puncture.)31 b(When)22 b(t)n(w)n(o)i(v)n(ertex)e(op)r(erators)h
+(collide,)h(w)n(e)e(should)0 515 y(not)i(b)r(e)f(to)r(o)i(ca)n(v)l(alier)g
+(in)f(our)g(treatmen)n(t)f(of)h(picture-c)n(hanging.)36 b(W)-6
+b(e)24 b(shall)h(see)f(in)g(this)h(pap)r(er)e(that)0 627 y(in)e(a)g(more)e
+(careful)i(treatmen)n(t)d(of)j(the)f(collision)i(of)f(t)n(w)n(o)g(punctures,)
+f(extra)g(terms)f(arise)i(in)g(addition)0 739 y(to)27 b(the)g(usual)g
+(\\picture-c)n(hanging")h(terms.)44 b(These)26 b(are)h(precisely)f(what)h(is)
+h(necessary)f(to)g(restore)0 851 y(the)22 b(sup)r(erconformal)g(W)-6
+b(ard)24 b(iden)n(tities.)32 b(Th)n(us)23 b(in)g(a)g(careful)g(treatmen)n(t)e
+(of)i(the)f(degenerating)g(sur-)0 963 y(face)i(\(Fig.)h(1\),)g(no)f(extra)g
+(\\con)n(tact)g(terms")f(are)h(necessary;)g(all)i(of)e(the)g(necessary)f
+(corrections)g(are)0 1075 y(automatically)i(tak)n(en)f(in)n(to)h(accoun)n(t.)
+35 b(All)25 b(of)g(this)f(can)g(b)r(e)g(carried)g(through)g(for)g(an)h
+(arbitrary)g(su-)0 1188 y(p)r(erconformal)d(\014eld)f(theory)-6
+b(.)30 b(Indeed,)22 b(w)n(e)f(w)n(on't)i(sp)r(ecify)f(precisely)g(what)g(sup)
+r(erconformal)f(theory)0 1300 y(w)n(e)h(are)g(w)n(orking)h(with.)0
+1597 y Fg(1.)34 b(Preliminaries)0 1758 y Fl(1.1.)d(The)23 b(Me)m(asur)m(e)133
+1919 y Fr(As)f(discussed)g(ab)r(o)n(v)n(e,)h(the)f(de\014nition)h(of)f(the)g
+(normal-ordered)g(v)n(ertex)f(op)r(erators,)i(and)g(hence)0
+2031 y(of)31 b(the)f(string)h(measure,)g(dep)r(ends)e(on)i(a)f(c)n(hoice)g
+(of)h(lo)r(cal)g(co)r(ordinate)f(at)h(the)e(insertion)i(p)r(oin)n(ts.)0
+2143 y(The)26 b(op)r(erator)h(formalism)g(pro)n(vides)g(a)g(nice)f(framew)n
+(ork)h(for)g(k)n(eeping)f(trac)n(k)h(of)g(this)g(dep)r(endence)0
+2255 y(and)i(constructing)f(explicit)h(expressions)g(for)h(the)e(sup)r
+(erstring)h(measure.)49 b(The)28 b(extra)g(data)h(of)h(a)0
+2367 y(lo)r(cal)e(co)r(ordinate)f(at)h(eac)n(h)f(puncture)f(\014ts)i
+(together)e(in)n(to)i(an)g(in\014nite)g(dimensional)g(\014b)r(er)e(bundle)13
+2463 y Ff(b)0 2479 y Fi(P)46 2497 y Fh(g)r(;n)144 2479 y Fi(!)245
+2463 y Ff(c)229 2479 y Fi(M)309 2497 y Fh(g)r(;n)388 2479 y
+Fr(.)i(Cho)r(osing)17 b(a)f(family)h(of)g(lo)r(cal)g(co)r(ordinates)e(at)h
+(the)g(punctures)f(amoun)n(ts)g(to)h(c)n(ho)r(osing)0 2592
+y(a)22 b(section)g Fk(\033)f Fr(:)389 2575 y Ff(c)373 2592
+y Fi(M)453 2610 y Fh(g)r(;n)551 2592 y Fi(!)648 2575 y Ff(b)635
+2592 y Fi(P)681 2610 y Fh(g)r(;n)761 2592 y Fr(.)30 b(The)22
+b(measure)e(on)1313 2575 y Ff(c)1297 2592 y Fi(M)1377 2610
+y Fh(g)r(;n)1478 2592 y Fr(is)j(de\014ned)e(b)n(y)123 2777
+y(\012\()p Fk(v)229 2795 y Fe(1)259 2777 y Fk(;)11 b(v)320
+2795 y Fe(2)350 2777 y Fk(;)g(:)g(:)g(:)i(;)h Fr(\026)-36 b
+Fk(v)529 2795 y Fe(3)p Fh(g)r Fd(\000)p Fe(3+)p Fh(n)729 2777
+y Fk(;)q(\027)781 2795 y Fe(1)810 2777 y Fk(;)11 b(\027)872
+2795 y Fe(2)902 2777 y Fk(;)g(:)g(:)g(:)i(;)e(\027)1082 2795
+y Fe(2)p Fh(g)r Fd(\000)p Fe(2+)p Fh(n)1282 2777 y Fr(\))18
+b(=)423 2903 y Fi(h)p Fr(\006)p Fk(;)11 b Fr(\()p Fk(z)583
+2921 y Fe(1)613 2903 y Fk(;)g(\022)673 2921 y Fe(1)703 2903
+y Fr(\))p Fk(;)h(:)f(:)g(:)h Fi(j)p Fk(B)s Fr([)p Fk(\033)974
+2921 y Fd(\003)1006 2903 y Fk(v)1038 2921 y Fe(1)1068 2903
+y Fr(])f Fk(:)g(:)g(:)i(B)s Fr([)p Fk(\033)1295 2921 y Fd(\003)1330
+2903 y Fr(\026)-36 b Fk(v)1359 2921 y Fe(3)p Fh(g)r Fd(\000)p
+Fe(3+)p Fh(n)1558 2903 y Fr(])762 3029 y Fi(\002)15 b Fk(\016)s
+Fr(\()p Fk(B)s Fr([)p Fk(\033)997 3047 y Fd(\003)1027 3029
+y Fk(\027)1060 3047 y Fe(1)1090 3029 y Fr(]\))c Fk(:)g(:)g(:)i(\016)s
+Fr(\()p Fk(B)s Fr([)p Fk(\033)1402 3047 y Fd(\003)1432 3029
+y Fk(\027)1465 3047 y Fe(2)p Fh(g)r Fd(\000)p Fe(2+)p Fh(n)1664
+3029 y Fr(]\))p Fi(j)p Fk( )1769 3047 y Fe(1)1800 3029 y Fi(i)1826
+3047 y Fh(P)1860 3054 y Fc(1)1903 3029 y Fi(\012)i(\001)c(\001)g(\001)16
+b(\012)f(j)p Fk( )2190 3047 y Fh(n)2226 3029 y Fi(i)2252 3047
+y Fh(P)2286 3054 y Fb(n)2322 3029 y Fk(:)2463 2903 y Fr(\(1)p
+Fk(:)p Fr(1)q(\))0 3221 y(where)24 b Fk(\033)233 3239 y Fd(\003)263
+3221 y Fk(v)295 3239 y Fh(i)342 3221 y Fr(is)i(the)d(push-forw)n(ard)j(of)f
+(a)g(tangen)n(t)f(v)n(ector)g(to)1616 3204 y Ff(c)1600 3221
+y Fi(M)1680 3239 y Fh(g)r(;n)1784 3221 y Fr(to)h(a)g(tangen)n(t)f(v)n(ector)g
+(to)2469 3204 y Ff(b)2456 3221 y Fi(P)2502 3239 y Fh(g)r(;n)2582
+3221 y Fr(.)0 3333 y(This)f(construction,)f(and)g(the)f(ab)r(o)n(v)n(e)h
+(notation,)i(are)d(describ)r(ed)g(in)i(great)f(detail)g(in)h([13)p
+ (#reference.13) [[468 118 480 130] [1 1 1 [3 3]] [0 0 1]] pdfm (,5)p
+ (#reference.5) [[483 118 489 130] [1 1 1 [3 3]] [0 0 1]] pdfm (])h(and)e([7)
+p (#reference.7) [[523 118 529 130] [1 1 1 [3 3]] [0 0 1]] pdfm (].)133
+3448 y(The)f(tangen)n(t)g(space)f(to)780 3431 y Ff(b)767 3448
+y Fi(P)813 3466 y Fh(g)r(;n)914 3448 y Fr(has)i(an)f(elegan)n(t)g(presen)n
+(tation)g(in)h(terms)e(of)i(Sc)n(hi\013er)f(v)l(ariations.)0
+3560 y(It)f(has)g(the)f(structure)f(of)i(a)g(direct)f(sum)h(of)g
+Fk(n)g Fr(copies)f(of)h(the)g(Nev)n(eu-Sc)n(h)n(w)n(arz)e(algebra)i(\(one)f
+(for)i(eac)n(h)1283 3719 y(3)p eop
+%%Page: 4 5
+4 4 bop 0 66 a Fr(puncture\))22 b(mo)r(dulo)h(a)h(certain)f(\\Borel")h
+(subalgebra.)35 b(The)22 b(generators)i(of)g(this)f(algebra)h(are)g(giv)n(en)
+0 172 y(in)e(terms)g(of)g(the)g(lo)r(cal)g(co)r(ordinates)g(at)g(the)g
+(puncture)e(b)n(y)826 360 y Fk(l)846 378 y Fh(n)900 360 y Fi($)f(\000)p
+Fk(z)1071 332 y Fh(n)p Fe(+1)1199 315 y Fk(@)p 1182 345 73
+3 v 1182 405 a(@)t(z)1277 360 y Fi(\000)1352 334 y Fe(1)p 1352
+345 27 3 v 1352 383 a(2)1386 360 y Fr(\()p Fk(n)14 b Fr(+)h(1\))p
+Fk(z)1626 332 y Fh(n)1662 360 y Fk(\022)1719 315 y(@)p 1703
+345 72 3 v 1703 405 a(@)t(\022)817 523 y(g)849 541 y Fh(k)900
+523 y Fi($)993 497 y Fe(1)p 993 508 27 3 v 993 546 a(2)1027
+523 y Fk(z)1061 496 y Fh(k)q Fe(+)1139 478 y Fc(1)p 1139 486
+23 3 v 1139 512 a(2)1173 469 y Ff(\000)1228 478 y Fk(@)p 1211
+508 72 3 v 1211 569 a(@)t(\022)1306 523 y Fi(\000)g Fk(\022)1430
+478 y(@)p 1414 508 73 3 v 1414 569 a(@)t(z)1494 469 y Ff(\001)1525
+523 y Fk(:)2463 435 y Fr(\(1)p Fk(:)p Fr(2)q(\))0 698 y(An)21
+b(in\014nitesimal)i(c)n(hange)e(in)h(the)f(co)r(ordinate)g(used)h(at)f(a)h
+(puncture)e(is)j(giv)n(en)f(b)n(y)g(the)f(action)h(of)g(the)0
+804 y(\\v)n(ertical")g(tangen)n(t)f(v)n(ectors)g Fk(l)788 822
+y Fh(n)824 804 y Fk(;)32 b(g)906 822 y Fh(n)p Fe(+)988 804
+y Fc(1)p 988 812 23 3 v 988 838 a(2)1021 804 y Fk(;)h(n)19
+b Fi(\025)f Fr(0.)30 b(These)20 b(induce)g(a)i(c)n(hange)f(of)g(the)g(state)g
+(asso)r(ciated)0 910 y(to)h(the)g(punctured)e(surface)i(giv)n(en)g(b)n(y)480
+1093 y Fi(h)p Fr(\006)p Fk(;)11 b(z)18 b Fi(\000)d Fk(\017z)760
+1065 y Fh(n)p Fe(+1)878 1093 y Fi(\000)952 1067 y Fe(1)p 952
+1078 27 3 v 952 1116 a(2)987 1093 y Fr(^)-34 b Fk(\017\022)r(z)1080
+1065 y Fh(k)q Fe(+)1158 1048 y Fc(1)p 1158 1056 23 3 v 1158
+1081 a(2)1192 1093 y Fi(j)19 b Fr(=)f Fi(h)p Fr(\006)p Fk(;)11
+b(z)s Fi(j)1454 1039 y Ff(\000)1485 1093 y Fr(1)k(+)g Fk(\017L)1672
+1111 y Fh(n)1723 1093 y Fr(+)g(^)-34 b Fk(\017G)1868 1111 y
+Fh(k)1901 1039 y Ff(\001)1946 1093 y Fr(+)15 b Fi(\001)c(\001)g(\001)h
+Fk(:)344 b Fr(\(1)p Fk(:)p Fr(3)q(\))0 1276 y(Again,)23 b(details)g(ma)n(y)f
+(b)r(e)f(found)i(in)f([13)p
+ (#reference.13) [[241 488 253 500] [1 1 1 [3 3]] [0 0 1]] pdfm (,5)p
+ (#reference.5) [[256 488 262 500] [1 1 1 [3 3]] [0 0 1]] pdfm (,7)p
+ (#reference.7) [[265 488 271 500] [1 1 1 [3 3]] [0 0 1]] pdfm (].)0
+1460 y Fl(1.2.)31 b(The)23 b(Co)m(or)m(dinate)g(F)-5 b(amily)133
+1605 y Fr(The)23 b(geometry)g(appropriate)h(for)g(computing)g(con)n(tact)f
+(terms)g(in)h(the)f(op)r(erator)h(formalism)g(is)0 1711 y(no)n(w)19
+b(w)n(ell-established.)29 b(The)18 b(heterotic)g(case)g(w)n(as)h(treated)e
+(in)i(detail)g(in)g([7)p
+ (#reference.7) [[409 410 415 422] [1 1 1 [3 3]] [0 0 1]] pdfm (])g(and)g(w)n
+(e)f(will)i(b)r(orro)n(w)f(the)0 1817 y(results)j(of)g(some)e(of)i(the)f
+(calculations)i(presen)n(ted)c(there.)29 b(Here)20 b(w)n(e)i(will)g(b)r(e)f
+(con)n(ten)n(t)g(to)g(giv)n(e)h(a)g(brief)0 1923 y(accoun)n(t)f(of)i(the)e
+(geometry)g(and)h(the)g(reader)f(should)i(consult)f([7)p
+ (#reference.7) [[365 372 371 384] [1 1 1 [3 3]] [0 0 1]] pdfm (])h(for)g(a)f
+(more)f(complete)g(accoun)n(t.)133 2029 y(When)i(the)h(p)r(oin)n(ts)g
+Fk(P)33 b Fr(and)24 b Fk(Q)f Fr(are)h(widely)g(separated,)h(it)f(is)g
+(appropriate)h(to)f(use)f(co)r(ordinates)0 2135 y(at)29 b(one)f(p)r(oin)n(t)h
+(that)f(are)g(indep)r(enden)n(t)f(of)i(the)f(lo)r(cation)h(of)g(the)f(other.)
+49 b(A)28 b(con)n(v)n(enien)n(t)g(c)n(hoice)f(of)0 2241 y(co)r(ordinate)k(is)
+h(the)f(so-called)h(sup)r(erconformal)f(normal-ordered)g(\(SCNO\))f(co)r
+(ordinate)i([5)p
+ (#reference.5) [[502 315 508 327] [1 1 1 [3 3]] [0 0 1]] pdfm (],)j(and)0
+2347 y(letting)22 b(\()q Ff(e)-38 b Fk(r)r(;)16 b Ff(e)-42
+b Fk(\032)q Fr(\))22 b(b)r(e)f(the)h(lo)r(cation)g(of)h Fk(P)9
+b Fr(,)22 b(w)n(e)g(tak)n(e)g(as)h(co)r(ordinates)617 2530
+y Fk(\020)646 2548 y Fh(P)691 2530 y Fr(\()p Fi(\001)p Fr(\))18
+b(=)g Fk(z)s Fr(\()p Fi(\001)p Fr(\))d Fi(\000)h Ff(e)-39 b
+Fk(r)17 b Fi(\000)i Ff(e)-42 b Fk(\032)q(\022)r Fr(\()p Fi(\001)p
+Fr(\))p Fk(;)1453 2512 y Fr(\024)1447 2530 y Fk(\020)1476 2548
+y Fh(P)1521 2530 y Fr(\()p Fi(\001)p Fr(\))18 b(=)g Fk(\022)r
+Fr(\()p Fi(\001)p Fr(\))d Fi(\000)k Ff(e)-41 b Fk(\032)66 b(:)481
+b Fr(\(1)p Fk(:)p Fr(4)q(\))0 2712 y(The)25 b(p)r(oin)n(t)i
+Fk(P)34 b Fr(should)27 b(b)r(e)e(though)n(t)h(of)g(as)h(the)e(place)h(where)e
+Fk(\020)1638 2730 y Fh(P)1683 2712 y Fr(\()p Fi(\001)p Fr(\))i(and)1918
+2695 y(\024)1912 2712 y Fk(\020)1941 2730 y Fh(P)1985 2712
+y Fr(\()p Fi(\001)p Fr(\))g(v)l(anish.)43 b Fk(\020)2353 2730
+y Fh(P)2397 2712 y Fr(\()p Fi(\001)p Fr(\))26 b(and)6 2801
+y(\024)0 2818 y Fk(\020)29 2836 y Fh(P)73 2818 y Fr(\()p Fi(\001)p
+Fr(\))31 b(are)f(co)r(ordinates)h(that)f(are)g(sup)r(erconformally)h(related)
+f(to)h Fk(z)s Fr(\()p Fi(\001)p Fr(\))f(and)h Fk(\022)r Fr(\()p
+Fi(\001)p Fr(\).)55 b(F)-6 b(or)32 b(a)f(SCNO)0 2924 y(co)r(ordinate,)350
+2907 y(\024)344 2924 y Fk(\020)373 2942 y Fh(P)417 2924 y Fr(\()p
+Fi(\001)p Fr(\))21 b(is)f(just)h Fk(D)r(\020)788 2942 y Fh(P)832
+2924 y Fr(\()p Fi(\001)p Fr(\),)g(where)f Fk(D)i Fr(is)f(the)e(sup)r
+(er-deriv)l(ativ)n(e)1890 2898 y Fh(@)p 1877 2909 58 3 v 1877
+2947 a(@)s(\022)1954 2924 y Fr(+)11 b Fk(\022)2071 2898 y Fh(@)p
+2058 2909 59 3 v 2058 2947 a(@)s(z)2124 2924 y Fr(.)29 b(Co)r(ordinates)21
+b(at)0 3030 y Fk(Q)p Fr(,)j(lo)r(cated)f(at,)h(sa)n(y)-6 b(,)26
+b(\()p Fk(r)n(;)11 b(\032)p Fr(\),)25 b(can)e(b)r(e)g(giv)n(en)h(b)n(y)g
+(similar)h(expressions,)f(with)h Ff(e)-38 b Fk(r)25 b Fr(and)j
+Ff(e)-41 b Fk(\032)24 b Fr(replaced)e(b)n(y)i Fk(r)0 3136 y
+Fr(and)e Fk(\032)p Fr(.)133 3242 y(In)15 b(conformal)h(\014eld)f(theories,)i
+(the)d(collision)j(of)f(t)n(w)n(o)g(punctures)e(is)i(replaced)e(b)n(y)i(the)e
+(conformally)0 3348 y(equiv)l(alen)n(t)25 b(picture)e(of)i(the)f(t)n(w)n(o)h
+(punctures)e(lo)r(cated)h(on)h(a)f(sphere)g(pinc)n(hing)h(o\013)f(from)h(the)
+e(rest)h(of)0 3454 y(the)17 b(surface.)28 b(In)17 b(this)h(region)g(SCNO)f
+(co)r(ordinates)g(are)g(not)h(appropriate.)28 b(Instead,)18
+b(the)f(co)r(ordinates)0 3560 y(of)22 b(the)e(p)r(oin)n(t)i
+Fk(P)30 b Fr(will)23 b(dep)r(end)c(on)j(the)e(lo)r(cation)i(of)g
+Fk(Q)p Fr(,)f(and)g(they)g(are)g(giv)n(en)g(b)n(y)h(a)f(plum)n(bing)h
+(\014xture)1283 3719 y(4)p eop
+%%Page: 5 6
+5 5 bop 0 66 a Fr(construction)32 b([14)p
+ (#reference.14) [[146 706 158 718] [1 1 1 [3 3]] [0 0 1]] pdfm (].)63
+b(This)34 b(construction)e(is)h(obtained)g(b)n(y)g(b)r(eginning)g(with)g(a)g
+(three-punctured)0 171 y(sup)r(er-sphere.)g(W)-6 b(e)23 b(can)h(use)f
+Fk(O)r(sp)p Fr(\(2)p Fk(;)11 b Fr(1\))24 b(symmetry)e(to)h(\014x)h(the)e
+(three)h(b)r(osonic)g(co)r(ordinates)h(of)g(the)0 275 y(punctures)16
+b(at)i(0,)h(1,)h(and)e Fi(1)p Fr(.)28 b(Only)18 b(t)n(w)n(o)g(of)h(the)e
+(three)f(fermionic)i(co)r(ordinates)f(can)g(b)r(e)g(\014xed)h(though;)0
+379 y(the)k(remaining)g(one)g(is)h(the)f(one)g(o)r(dd)g(mo)r(dulus)g(of)h
+(the)f(three-punctured)e(sup)r(er-sphere,)h(whic)n(h)h(w)n(e)0
+483 y(denote)e Fk(\034)8 b Fr(.)29 b(Th)n(us)21 b(w)n(e)f(place)g(our)h
+(three)f(punctures)f(at)i(\(0,0\),)h(\(1,)p Fk(\034)8 b Fr(\))21
+b(and)g(\()p Fi(1)p Fr(,0\).)30 b(The)20 b(p)r(oin)n(t)h(at)g
+Fi(1)g Fr(is)0 587 y(sewn)i(on)n(to)g(the)f(rest)h(of)g(the)f(surface)h(at)g
+(the)f(old)i(lo)r(cation)f(of)h Fk(Q)p Fr(.)32 b(If)23 b Fk(w)h
+Fr(and)f Fk(\030)j Fr(are)d(the)f(co)r(ordinates)0 692 y(on)e(the)g(sup)r
+(er-sphere,)g(w)n(e)g(can)g(write)g(the)g(most)g(general)g(co)r(ordinates)g
+(that)g(v)l(anish)i(at)e Fk(P)29 b Fr(and)21 b Fk(Q)f Fr(as)804
+857 y Fk(w)d Fi(\000)c Ff(e)-36 b Fk(a)970 875 y Fe(1)1000
+857 y Fk(\034)8 b(w)r(\030)17 b Fr(+)c Ff(e)-36 b Fk(a)1234
+875 y Fe(2)1264 857 y Fk(w)1314 829 y Fe(2)1358 857 y Fi(\000)13
+b Ff(e)-36 b Fk(a)1459 875 y Fe(3)1489 857 y Fk(\034)8 b(w)1576
+829 y Fe(2)1605 857 y Fk(\030)18 b Fr(+)c Fi(\001)d(\001)g(\001)669
+b Fr(\(1)p Fk(:)p Fr(5)q(\))0 1022 y(at)22 b(\(0,0\))h(and)33
+1187 y(\()p Fk(w)10 b Fi(\000)e Fr(1)g(+)g Fk(\034)g(\030)s
+Fr(\))g Fi(\000)g Fk(a)476 1205 y Fe(1)502 1187 y Fk(\034)g
+Fr(\()p Fk(w)i Fi(\000)e Fr(1)g(+)g Fk(\034)g(\030)s Fr(\)\()p
+Fk(\030)j Fi(\000)d Fk(\034)g Fr(\))f(+)h Fk(a)1170 1205 y
+Fe(2)1196 1187 y Fr(\()p Fk(w)i Fi(\000)e Fr(1)g(+)g Fk(\034)g(\030)s
+Fr(\))1536 1160 y Fe(2)1570 1187 y Fi(\000)g Fk(a)1665 1205
+y Fe(3)1695 1187 y Fk(\034)g Fr(\()p Fk(w)i Fi(\000)e Fr(1)g(+)g
+Fk(\034)g(\030)s Fr(\))2072 1160 y Fe(2)2098 1187 y Fr(\()p
+Fk(\030)j Fi(\000)d Fk(\034)g Fr(\))g(+)g Fi(\001)j(\001)g(\001)32
+b Fr(\(1)p Fk(:)p Fr(6)q(\))0 1352 y(at)26 b(\(1,)p Fk(\034)8
+b Fr(\).)43 b(W)-6 b(e)26 b(ha)n(v)n(e)g(just)h(giv)n(en)f(the)g(ev)n(en)f
+(co)r(ordinates)i(here.)41 b(The)26 b(o)r(dd)g(co)r(ordinates)g(are)g(found)0
+1457 y(b)n(y)c(demanding)g(that)g(the)f(co)r(ordinate)h(transformation)h
+(from)f(\()p Fk(w)r(;)11 b(\030)s Fr(\))21 b(b)r(e)h(sup)r(erconformal)f([7)p
+ (#reference.7) [[501 456 507 468] [1 1 1 [3 3]] [0 0 1]] pdfm (].)32
+b(The)0 1561 y(min)n(us)c(signs)g(are)f(for)h(later)g(con)n(v)n(enience.)45
+b(A)n(t)27 b Fi(1)h Fr(w)n(e)f(can)g(simply)h(use)f Fi(\000)p
+Fr(1)p Fk(=w)i Fr(and)f Fk(\030)s(=w)r Fr(.)46 b(These)0 1665
+y(co)r(ordinates)22 b(are)g(sewn)g(to)g(the)f(co)r(ordinates)h
+Fk(\020)1204 1683 y Fh(Q)1249 1665 y Fr(\()p Fi(\001)p Fr(\))g(and)1477
+1647 y(\024)1471 1665 y Fk(\020)1500 1683 y Fh(Q)1545 1665
+y Fr(\()p Fi(\001)p Fr(\))g(b)n(y)g(the)g(iden)n(ti\014cations)795
+1872 y Fk(w)d Fr(=)940 1819 y Fk(\020)969 1837 y Fh(Q)1015
+1819 y Fr(\()p Fi(\001)p Fr(\))p 940 1856 145 3 v 986 1917
+a Fk(t)1010 1898 y Fe(2)1159 1872 y Fk(;)145 b(\030)21 b Fr(=)d
+Fi(\000)1508 1801 y Fr(\024)1502 1819 y Fk(\020)1531 1837 y
+Fh(Q)1576 1819 y Fr(\()p Fi(\001)p Fr(\))p 1502 1856 V 1562
+1917 a Fk(t)1787 1872 y(:)658 b Fr(\(1)p Fk(:)p Fr(7)q(\))0
+2037 y(Th)n(us,)23 b(w)n(e)e(ha)n(v)n(e)i(as)f(co)r(ordinates)g(for)h
+Fk(P)31 b Fr(and)22 b Fk(Q)p Fr(,)g(when)f(they)h(are)g(close)g(together,)616
+2230 y Fk(\036)656 2248 y Fh(Q)701 2230 y Fr(\()p Fi(\001)p
+Fr(\))d(=)849 2177 y Fk(\020)878 2195 y Fh(Q)924 2177 y Fr(\()p
+Fi(\001)p Fr(\))p 849 2214 V 895 2275 a Fk(t)919 2256 y Fe(2)1016
+2230 y Fr(+)14 b Ff(e)-36 b Fk(a)1118 2248 y Fe(1)1148 2230
+y Fk(\034)1192 2177 y(\020)1221 2195 y Fh(Q)1266 2177 y Fr(\()p
+Fi(\001)p Fr(\))1357 2159 y(\024)1336 2177 y Fk(\020)1365 2195
+y Fh(Q)1411 2177 y Fr(\()p Fi(\001)p Fr(\))p 1192 2214 289
+3 v 1310 2275 a Fk(t)1334 2256 y Fe(3)1504 2230 y Fr(+)13 b
+Ff(e)-36 b Fk(a)1605 2248 y Fe(2)1643 2177 y Fk(\020)1672 2195
+y Fh(Q)1717 2177 y Fr(\()p Fi(\001)p Fr(\))1787 2153 y Fe(2)p
+1643 2214 175 3 v 1703 2275 a Fk(t)1727 2256 y Fe(4)1840 2230
+y Fr(+)14 b Fi(\001)d(\001)g(\001)617 2365 y Fk(\036)657 2383
+y Fh(P)701 2365 y Fr(\()p Fi(\001)p Fr(\))19 b(=)o(\006\()p
+Fi(\001)p Fr(\))c(+)g Fk(a)1076 2383 y Fe(1)1105 2365 y Fk(\034)8
+b Fr(\006\()p Fi(\001)p Fr(\))1267 2348 y(\024)1260 2365 y(\006\()p
+Fi(\001)p Fr(\))15 b(+)f Fk(a)1494 2383 y Fe(2)1524 2365 y
+Fr(\006\()p Fi(\001)p Fr(\))1642 2337 y Fe(2)1687 2365 y Fr(+)g
+Fi(\001)d(\001)g(\001)24 b Fk(;)2463 2273 y Fr(\(1)p Fk(:)p
+Fr(8)q(\))0 2508 y(with)494 2627 y(\006\()p Fi(\001)p Fr(\))18
+b(=)700 2573 y Ff(\000)739 2574 y Fk(\020)768 2592 y Fh(Q)813
+2574 y Fr(\()p Fi(\001)p Fr(\))p 739 2612 145 3 v 784 2673
+a Fk(t)808 2654 y Fe(2)906 2627 y Fi(\000)c Fr(1)h Fi(\000)1094
+2574 y Fk(\034)1151 2557 y Fr(\024)1131 2574 y Fk(\020)1160
+2592 y Fh(Q)1205 2574 y Fr(\()p Fi(\001)p Fr(\))p 1094 2612
+181 3 v 1173 2673 a Fk(t)1283 2573 y Ff(\001)1314 2627 y Fk(;)1483
+2610 y Fr(\024)1476 2627 y(\006\()p Fi(\001)p Fr(\))k(=)1683
+2573 y Ff(\000)1742 2557 y Fr(\024)1721 2574 y Fk(\020)1750
+2592 y Fh(Q)1795 2574 y Fr(\()p Fi(\001)p Fr(\))p 1721 2612
+145 3 v 1781 2673 a Fk(t)1888 2627 y Fr(+)c Fk(\034)1992 2573
+y Ff(\001)2088 2627 y Fk(:)357 b Fr(\(1)p Fk(:)p Fr(9)q(\))133
+2770 y(Notice)27 b(that)h(the)f(co)r(ordinates)h(for)h Fk(P)36
+b Fr(are)28 b(no)n(w)g(giv)n(en)h(in)f(terms)f(of)i Fk(r)r
+Fr(,)g Fk(\032)p Fr(,)i Fk(t)p Fr(,)e(and)f Fk(\034)36 b Fr(instead)0
+2874 y(of)26 b Ff(e)-38 b Fk(r)27 b Fr(and)i Ff(e)-42 b Fk(\032)q
+Fr(.)37 b(These)24 b(are)g(the)g(co)r(ordinates)h(for)g(sup)r(ermo)r(duli)f
+(space)g(appropriate)h(to)f(describ)r(e)g(the)0 2978 y(neigh)n(b)r(orho)r(o)r
+(d)29 b(of)g(this)f(b)r(oundary)h(of)g(sup)r(ermo)r(duli)f(space.)48
+b(On)28 b(the)g(o)n(v)n(erlap)h(b)r(et)n(w)n(een)e(the)h(t)n(w)n(o)0
+3082 y(patc)n(hes)22 b(of)h(sup)r(ermo)r(duli)f(space,)g(the)g(c)n(hange)g
+(of)h(co)r(ordinates)f(from)g Fk(r)n(;)11 b(\032;)g(t;)g(\034)32
+b Fr(to)23 b Fk(r)n(;)11 b(\032;)j Ff(e)-40 b Fk(r)s(;)16 b
+Ff(e)-42 b Fk(\032)24 b Fr(is)f(found)0 3186 y(b)n(y)29 b(demanding)g(that)g
+Fk(\036)637 3204 y Fh(P)681 3186 y Fr(\()p Fk(P)9 b Fr(\))28
+b(\(and)h(its)h(sup)r(erconformal)f(partner)1800 3169 y(\024)1791
+3186 y Fk(\036)1831 3204 y Fh(P)1875 3186 y Fr(\()p Fk(P)9
+b Fr(\)\))29 b(v)l(anish)h(at)f(the)g(same)0 3291 y(p)r(oin)n(t)f(where)e
+(the)g(co)r(ordinate)h(family)i(in)e(the)g(other)g(patc)n(h)g(are)g(cen)n
+(tered.)43 b(This)28 b(happ)r(ens)f(when)0 3395 y Fk(\020)29
+3413 y Fh(Q)74 3395 y Fr(\()p Fk(P)9 b Fr(\))18 b(=)g Fk(t)290
+3371 y Fe(2)342 3395 y Fr(and)477 3377 y(\024)471 3395 y Fk(\020)500
+3413 y Fh(Q)546 3395 y Fr(\()p Fk(P)9 b Fr(\))18 b(=)g Fi(\000)p
+Fk(t\034)8 b Fr(.)29 b(W)-6 b(e)22 b(\014nd)798 3560 y Ff(e)-38
+b Fk(r)20 b Fr(=)f Fk(r)d Fr(+)f Fk(t)1055 3533 y Fe(2)1099
+3560 y Fr(+)f Fk(t\032\034)t(;)149 b Ff(e)-41 b Fk(\032)19
+b Fr(=)f Fk(\032)d Fi(\000)f Fk(t\034)74 b(:)628 b Fr(\(1)p
+Fk(:)p Fr(10)q(\))1283 3719 y(5)p eop
+%%Page: 6 7
+6 6 bop 0 66 a Fr(The)27 b(non-split)h(nature)f(of)h(this)g(transformation)g
+(is)h(ultimately)e(resp)r(onsible)h(for)g(the)f(corrections)0
+181 y(to)c(the)f(\\na)-7 b(\177)-26 b(\020v)n(e")23 b(calculation)g(that)g
+(restores)f(the)g(W)-6 b(ard)24 b(iden)n(tities)1724 157 y
+Fe(#)1771 181 y Fr(.)31 b(This)24 b(will)g(b)r(e)d(seen)h(explicitly)0
+296 y(b)r(elo)n(w.)133 414 y(Finally)-6 b(,)21 b(to)d(get)f(a)h(co)r
+(ordinate)f(family)i(appropriate)f(for)g(b)r(oth)f(when)g(the)g(punctures)f
+(are)i(widely)0 529 y(separated)j(and)g(when)g(they)g(are)g(close)h
+(together,)f(one)g(should)h(in)n(terp)r(olate)f(smo)r(othly)h(b)r(et)n(w)n
+(een)e(the)0 644 y(t)n(w)n(o)27 b(b)r(eha)n(viors)h(outlined)f(ab)r(o)n(v)n
+(e.)46 b(W)-6 b(e)27 b(do)g(this)h(b)n(y)f(in)n(tro)r(ducing)h(a)f(smo)r(oth)
+g(function)g Fk(f)7 b Fr(\()p Fi(j)p Fk(t)p Fi(j)p Fr(\))27
+b(that)0 758 y(go)r(es)i(from)h(0)g(to)f(1)h(as)g Fi(j)p Fk(t)p
+Fi(j)g Fr(go)r(es)g(from)f(0)h(to)f Fi(1)p Fr(,)j(and)e(using)g(a)g(linear)g
+(in)n(terp)r(olation.)53 b(Th)n(us,)32 b(the)0 873 y(co)r(ordinates)22
+b(that)g(w)n(e)g(will)h(use)f(are)741 1067 y Fk(\033)779 1085
+y Fh(P)823 1067 y Fr(\()p Fi(\001)p Fr(\))d(=)972 1022 y Fk(f)7
+b Fr(\()p Fi(j)p Fk(t)p Fi(j)p Fr(\))p 972 1051 153 3 v 1021
+1112 a Fk(t)1045 1093 y Fe(2)1132 1067 y Fk(\020)1161 1085
+y Fh(P)1205 1067 y Fr(\()p Fi(\001)p Fr(\))15 b(+)f(\(1)h Fi(\000)g
+Fk(f)7 b Fr(\()p Fi(j)p Fk(t)p Fi(j)p Fr(\)\))p Fk(\036)1715
+1085 y Fh(P)1758 1067 y Fr(\()p Fi(\001)p Fr(\))740 1233 y
+Fk(\033)778 1251 y Fh(Q)823 1233 y Fr(\()p Fi(\001)p Fr(\))19
+b(=)972 1189 y Fk(f)7 b Fr(\()p Fi(j)p Fk(t)p Fi(j)p Fr(\))p
+972 1218 V 1021 1279 a Fk(t)1045 1260 y Fe(2)1132 1233 y Fk(\020)1161
+1251 y Fh(Q)1206 1233 y Fr(\()p Fi(\001)p Fr(\))15 b(+)f(\(1)h
+Fi(\000)f Fk(f)7 b Fr(\()p Fi(j)p Fk(t)p Fi(j)p Fr(\)\))p Fk(\036)1715
+1251 y Fh(Q)1760 1233 y Fr(\()p Fi(\001)p Fr(\))k Fk(:)2430
+1142 y Fr(\(1)p Fk(:)p Fr(11)q(\))0 1424 y(The)18 b(precise)f(shap)r(e)h(of)h
+(the)f(function)g Fk(f)25 b Fr(will)20 b(drop)f(out)f(of)h(the)e
+(calculation.)30 b(An)n(y)18 b(co)r(ordinate)g(family)0 1539
+y(whic)n(h)i(in)n(terp)r(olates)h(b)r(et)n(w)n(een)d(the)i(required)g(b)r
+(eha)n(vior)g(at)g(large)h Fi(j)p Fk(t)p Fi(j)g Fr(and)g(at)f(small)h
+Fi(j)p Fk(t)p Fi(j)g Fr(will)h(yield)f(the)0 1653 y(same)c(v)l(alue)i(for)g
+(the)e(measure.)27 b(\(In)18 b(the)g(case)f(of)i(dilaton)g(correlation)f
+(functions,)i(the)d(measure)g(itself)0 1768 y(do)r(es)22 b(dep)r(end)e(on)j
+(the)e(in)n(terp)r(olating)i(function)f Fk(f)7 b Fr(;)22 b(only)h(its)g(in)n
+(tegral)g(is)f(indep)r(enden)n(t)f(of)h Fk(f)7 b Fr(.\))0 2080
+y Fg(2.)34 b(The)26 b(calculation)133 2247 y Fr(The)21 b(state)h
+Fi(h)p Fr(\006)p Fk(;)11 b(\033)573 2265 y Fh(P)618 2247 y
+Fk(;)g(\033)685 2265 y Fh(Q)730 2247 y Fi(j)23 b Fr(at)f Fk(r)e
+Fr(=)p 972 2203 32 3 v 18 w Fk(r)h Fr(=)d(0)k(can)g(b)r(e)f(expanded)g(as)101
+2460 y Fi(h)p Fr(\006)p Fk(;)11 b(\033)242 2478 y Fh(P)287
+2460 y Fk(;)g(\033)354 2478 y Fh(Q)399 2460 y Fi(j)19 b Fr(=)p
+Fi(h)p Fr(\006)p Fk(;)11 b(\033)629 2478 y Fh(P)663 2485 y
+Fc(0)692 2460 y Fk(;)g(\033)759 2478 y Fh(Q)801 2485 y Fc(0)831
+2460 y Fi(j)849 2406 y Ff(\000)880 2460 y Fr(1)k(+)f Fk(\032\034)8
+b(tL)1134 2426 y Fe(\()p Fh(P)f Fe(\))1134 2478 y Fd(\000)p
+Fe(1)1235 2460 y Fr(+)14 b Fk(\032\034)1372 2406 y Ff(\000)1410
+2415 y Fr(2)p Fk(p)1476 2433 y Fe(2)1521 2415 y Fi(\000)h Fk(p)1621
+2433 y Fe(1)p 1410 2445 241 3 v 1519 2506 a Fk(t)1659 2406
+y Ff(\001)1690 2460 y Fk(L)1735 2426 y Fe(\()p Fh(P)7 b Fe(\))1735
+2478 y(0)1835 2460 y Fr(+)15 b(2)1935 2406 y Ff(\000)1965 2460
+y Fk(\032)g Fi(\000)g Fk(\034)8 b(t)2142 2406 y Ff(\001)2172
+2460 y Fk(G)2224 2426 y Fe(\()p Fh(P)f Fe(\))2224 2487 y Fd(\000)2274
+2469 y Fc(1)p 2274 2477 23 3 v 2274 2503 a(2)2325 2460 y Fr(+)14
+b Fi(\001)d(\001)g(\001)2469 2406 y Ff(\001)503 2625 y Fi(\002)569
+2571 y Ff(\000)599 2625 y Fr(1)k Fi(\000)722 2580 y Fk(\032\034)c
+Ff(e)-40 b Fk(p)826 2598 y Fe(1)p 722 2610 135 3 v 777 2671
+a Fk(t)864 2625 y(L)909 2591 y Fe(\()p Fh(Q)p Fe(\))909 2643
+y(0)1010 2625 y Fr(+)15 b(2)p Fk(\032G)1196 2591 y Fe(\()p
+Fh(Q)p Fe(\))1196 2652 y Fd(\000)1246 2634 y Fc(1)p 1246 2642
+23 3 v 1246 2668 a(2)1298 2625 y Fr(+)f Fi(\001)d(\001)g(\001)1442
+2571 y Ff(\001)1472 2625 y Fk(t)1496 2598 y Fe(2\()p Fh(L)1579
+2573 y Fc(\()p Fb(P)c Fc(\))1579 2614 y(0)1654 2598 y Fe(+)p
+Fh(L)1731 2573 y Fc(\()p Fb(Q)p Fc(\))1731 2614 y(0)1807 2598
+y Fe(\))p 1831 2576 24 3 v 1831 2625 a Fk(t)1855 2587 y Fe(2\()1908
+2576 y(\026)1902 2587 y Fh(L)1938 2563 y Fc(\()p Fb(P)f Fc(\))1938
+2604 y(0)2012 2587 y Fe(+)2059 2576 y(\026)2053 2587 y Fh(L)2089
+2563 y Fc(\()p Fb(Q)p Fc(\))2089 2604 y(0)2165 2587 y Fe(\))2463
+2727 y Fr(\(2)p Fk(:)p Fr(1)q(\))0 2842 y(where)18 b Fk(p)222
+2860 y Fe(1)271 2842 y Fr(=)g Fk(a)376 2860 y Fe(1)406 2842
+y Fr(\(1)9 b Fi(\000)g Fk(f)e Fr(\),)23 b Ff(e)-40 b Fk(p)672
+2860 y Fe(1)720 2842 y Fr(=)17 b Ff(e)-36 b Fk(a)825 2860 y
+Fe(1)855 2842 y Fr(\(1)9 b Fi(\000)g Fk(f)e Fr(\),)20 b(and)f
+Fk(p)1247 2860 y Fe(2)1296 2842 y Fr(=)f Fk(a)1401 2860 y Fe(2)1431
+2842 y Fr(\(1)9 b Fi(\000)g Fk(f)e Fr(\).)28 b Fk(\033)1710
+2860 y Fh(P)1744 2867 y Fc(0)1793 2842 y Fr(and)19 b Fk(\033)1957
+2860 y Fh(Q)1999 2867 y Fc(0)2047 2842 y Fr(are)g(the)g(equal)g(to)h
+Fk(\033)2556 2860 y Fh(P)0 2956 y Fr(and)i Fk(\033)167 2974
+y Fh(Q)234 2956 y Fr(with)g Fk(\032)g Fr(and)g Fk(\034)29 b
+Fr(set)22 b(to)g(zero,)f(and)h(rescaled)f(b)n(y)h(a)g(factor)g(of)h
+Fk(t)1788 2932 y Fe(2)1817 2956 y Fr(.)30 b(The)22 b(ghost)g(insertions)g
+(that)0 3071 y(result)j(from)g(computing)g(the)f(pushforw)n(ards)j(of)e(the)g
+(tangen)n(t)g(v)n(ectors)g(asso)r(ciated)g(to)g(the)g(mo)r(duli)0
+3186 y(corresp)r(onding)f(to)g(the)g(lo)r(cations)h(of)g(the)f(p)r(oin)n(ts)g
+Fk(P)33 b Fr(and)25 b Fk(Q)f Fr(b)n(y)g(the)g(co)r(ordinate)g(family)h(are)f
+(giv)n(en)p 0 3278 800 3 v -66 3434 a Fe(#)6 3460 y Fn(The)j(role)f(of)g
+(non-split)g(co)r(ordinate)g(transformations)g(on)f(sup)r(ermo)r(duli)i
+(space)f(in)h(this)f(regard)g(w)n(as)g(also)0 3557 y(noted)21
+b(b)n(y)g(H.)g(V)-5 b(erlinde)21 b([15)p
+ (#reference.15) [[180 78 191 90] [1 1 1 [3 3]] [0 0 1]] pdfm (].)1283
+3719 y Fr(6)p eop
+%%Page: 7 8
+7 7 bop 0 66 a Fr(in)25 b([7)p
+ (#reference.7) [[90 706 96 718] [1 1 1 [3 3]] [0 0 1]] pdfm (].)41
+b(The)24 b(measure)g(is)i(formed)e(b)n(y)i(m)n(ultiplying)g(these)e(six)i
+(con)n(tributions)f(together)f(\(including)0 167 y(delta)d(functions)g(for)g
+(the)f(insertions)i(for)f Fk(\032)g Fr(and)g Fk(\034)8 b Fr(\).)29
+b(The)21 b(insertions)g(are)g(\(ev)l(aluated)f(at)h Fk(r)f
+Fr(=)p 2421 123 32 3 v 19 w Fk(r)g Fr(=)e(0\))189 310 y Fk(B)s
+Fr([)p Fk(\033)298 328 y Fd(\003)330 310 y Fr(\()380 266 y
+Fk(@)p 364 295 71 3 v 364 356 a(@)t(r)442 310 y Fr(\)])h(=)c
+Fi(\000)638 257 y Ff(\000)687 266 y Fr(1)p 676 295 54 3 v 676
+356 a Fk(t)700 337 y Fe(2)738 257 y Ff(\001)769 310 y Fk(b)798
+276 y Fe(\()p Fh(P)7 b Fe(\))798 328 y Fd(\000)p Fe(1)898 310
+y Fr(+)964 217 y Ff(\022)1021 266 y Fr(2)p Fk(p)1087 283 y
+Fe(1)1117 266 y Fk(\034)p 1021 295 133 3 v 1061 356 a(t)1085
+337 y Fe(2)1162 217 y Ff(\023)1211 310 y Fk(\014)1253 276 y
+Fe(\()p Fh(P)g Fe(\))1249 337 y Fd(\000)1298 320 y Fc(1)p 1298
+328 23 3 v 1298 353 a(2)1352 310 y Fi(\000)1419 257 y Ff(\000)1468
+266 y Fr(1)p 1457 295 54 3 v 1457 356 a Fk(t)1481 337 y Fe(2)1519
+257 y Ff(\001)1549 310 y Fk(b)1578 276 y Fe(\()p Fh(Q)p Fe(\))1578
+328 y Fd(\000)p Fe(1)1679 310 y Fr(+)1746 217 y Ff(\022)1803
+266 y Fr(2)t Ff(e)-41 b Fk(p)1869 283 y Fe(1)1899 266 y Fk(\034)p
+1803 295 133 3 v 1842 356 a(t)1866 337 y Fe(2)1944 217 y Ff(\023)1993
+310 y Fk(\014)2035 276 y Fe(\()p Fh(Q)p Fe(\))2031 337 y Fd(\000)2080
+320 y Fc(1)p 2080 328 23 3 v 2080 353 a(2)2135 310 y Fr(+)14
+b Fi(\001)d(\001)g(\001)189 491 y Fk(B)s Fr([)p Fk(\033)298
+509 y Fd(\003)330 491 y Fr(\()380 446 y Fk(@)p 364 476 71 3
+v 364 537 a(@)p 403 493 32 3 v 4 w(r)442 491 y Fr(\)])19 b(=)c
+Fi(\000)638 437 y Ff(\000)687 446 y Fr(1)p 676 476 54 3 v 676
+503 24 3 v 676 552 a Fk(t)700 514 y Fe(2)738 437 y Ff(\001)766
+474 y Fr(\026)769 491 y Fk(b)798 457 y Fe(\()p Fh(P)7 b Fe(\))798
+509 y Fd(\000)p Fe(1)898 491 y Fi(\000)964 437 y Ff(\000)1013
+446 y Fr(1)p 1003 476 54 3 v 1003 503 24 3 v 1003 552 a Fk(t)1027
+514 y Fe(2)1064 437 y Ff(\001)1092 474 y Fr(\026)1095 491 y
+Fk(b)1124 457 y Fe(\()p Fh(Q)p Fe(\))1124 509 y Fd(\000)p Fe(1)1225
+491 y Fr(+)14 b Fi(\001)d(\001)g(\001)187 677 y Fk(B)s Fr([)p
+Fk(\033)296 695 y Fd(\003)327 677 y Fr(\()378 632 y Fk(@)p
+361 662 74 3 v 361 723 a(@)t(\032)442 677 y Fr(\)])19 b(=)557
+583 y Ff(\022)606 677 y Fi(\000)675 632 y Fk(\032)p 666 662
+54 3 v 666 723 a(t)690 703 y Fe(2)742 677 y Fr(+)816 632 y(2)p
+Fk(\034)p 816 662 70 3 v 839 723 a(t)894 583 y Ff(\023)943
+677 y Fk(b)972 643 y Fe(\()p Fh(P)7 b Fe(\))972 695 y Fd(\000)p
+Fe(1)1072 677 y Fr(+)1138 583 y Ff(\022)1195 632 y Fr(2)p 1195
+662 34 3 v 1200 723 a Fk(t)1251 677 y Fr(+)1326 632 y(2)p Fk(p)1392
+650 y Fe(1)1422 632 y Fk(\032\034)p 1326 662 168 3 v 1382 723
+a(t)1406 703 y Fe(2)1501 583 y Ff(\023)1550 677 y Fk(\014)1592
+643 y Fe(\()p Fh(P)g Fe(\))1588 704 y Fd(\000)1637 686 y Fc(1)p
+1637 694 23 3 v 1637 720 a(2)1677 677 y Fi(\000)557 769 y Ff(\022)623
+818 y Fk(\032)p 614 848 54 3 v 614 909 a(t)638 889 y Fe(2)675
+769 y Ff(\023)724 863 y Fk(b)753 828 y Fe(\()p Fh(Q)p Fe(\))753
+881 y Fd(\000)p Fe(1)854 863 y Fr(+)921 769 y Ff(\022)978 818
+y Fr(2)p 978 848 34 3 v 983 909 a Fk(t)1034 863 y Fr(+)1108
+818 y(2)t Ff(e)-41 b Fk(p)1174 836 y Fe(1)1204 818 y Fk(\032\034)p
+1108 848 168 3 v 1165 909 a(t)1189 889 y Fe(2)1283 769 y Ff(\023)1332
+863 y Fk(\014)1374 828 y Fe(\()p Fh(Q)p Fe(\))1370 890 y Fd(\000)1419
+872 y Fc(1)p 1419 880 23 3 v 1419 906 a(2)1475 863 y Fr(+)14
+b Fi(\001)d(\001)g(\001)197 1049 y Fk(B)s Fr([)p Fk(\033)306
+1067 y Fd(\003)338 1049 y Fr(\()384 1004 y Fk(@)p 372 1034
+63 3 v 372 1095 a(@)t(t)442 1049 y Fr(\)])19 b(=)c Fi(\000)638
+955 y Ff(\022)695 1004 y Fr(2)p 695 1034 34 3 v 700 1095 a
+Fk(t)736 955 y Ff(\023)785 1049 y Fk(b)814 1014 y Fe(\()p Fh(P)7
+b Fe(\))814 1067 y Fd(\000)p Fe(1)914 1049 y Fr(+)980 955 y
+Ff(\022)1037 1004 y Fr(2)p Fk(\034)p 1037 1034 70 3 v 1060
+1095 a(t)1130 1049 y Fr(+)1204 1004 y(4)p Fk(p)1270 1022 y
+Fe(1)1301 1004 y Fk(\034)p 1204 1034 133 3 v 1259 1095 a(t)1345
+955 y Ff(\023)1394 1049 y Fk(\014)1436 1014 y Fe(\()p Fh(P)g
+Fe(\))1432 1076 y Fd(\000)1481 1058 y Fc(1)p 1481 1066 23 3
+v 1481 1092 a(2)1536 1049 y Fr(+)14 b Fi(\001)d(\001)g(\001)197
+1235 y Fk(B)s Fr([)p Fk(\033)306 1253 y Fd(\003)338 1235 y
+Fr(\()384 1190 y Fk(@)p 372 1220 63 3 v 372 1282 a(@)p 411
+1233 24 3 v 4 w(t)442 1235 y Fr(\)])19 b(=)c Fi(\000)638 1141
+y Ff(\022)695 1190 y Fr(2)p 695 1220 34 3 v 700 1233 24 3 v
+700 1282 a Fk(t)736 1141 y Ff(\023)783 1217 y Fr(\026)785 1235
+y Fk(b)814 1200 y Fe(\()p Fh(P)7 b Fe(\))814 1253 y Fd(\000)p
+Fe(1)914 1235 y Fr(+)14 b Fi(\001)d(\001)g(\001)185 1416 y
+Fk(B)s Fr([)p Fk(\033)294 1434 y Fd(\003)325 1416 y Fr(\()377
+1371 y Fk(@)p 359 1400 76 3 v 359 1461 a(@)t(\034)442 1416
+y Fr(\)])19 b(=)c Fi(\000)638 1362 y Ff(\000)668 1416 y Fk(\034)705
+1362 y Ff(\001)735 1416 y Fk(b)764 1381 y Fe(\()p Fh(P)7 b
+Fe(\))764 1433 y Fd(\000)p Fe(1)865 1416 y Fi(\000)931 1362
+y Ff(\000)961 1416 y Fr(2)994 1362 y Ff(\001)1025 1416 y Fk(\014)1067
+1381 y Fe(\()p Fh(P)g Fe(\))1063 1443 y Fd(\000)1112 1425 y
+Fc(1)p 1112 1433 23 3 v 1112 1459 a(2)1167 1416 y Fr(+)14 b
+Fi(\001)d(\001)g(\001)2463 854 y Fr(\(2)p Fk(:)p Fr(2)q(\))0
+1548 y(where)26 b(the)g(dots)h(represen)n(t)e(higher)i(terms)f(\()p
+Fk(b)1209 1566 y Fh(n)1245 1548 y Fk(;)11 b(n)26 b Fi(\025)h
+Fr(0)g(and)g Fk(\014)1651 1566 y Fh(n)1686 1548 y Fk(;)11 b(n)27
+b Fi(\025)1868 1522 y Fe(1)p 1868 1533 27 3 v 1868 1571 a(2)1903
+1548 y Fr(\))f(that)h(annihilate)h(strong)0 1648 y(ph)n(ysical)23
+b(states)f(\(SPSs\).)133 1749 y(T)-6 b(o)25 b(insert)f(a)h(SPS)f(at)h
+Fk(P)33 b Fr(and)24 b(at)h Fk(Q)p Fr(,)f(there)g(are)g(t)n(w)n(o)g(p)r
+(ossible)h(con)n(tributions)g(to)g(the)e(measure)0 1849 y(from)f(the)f(ab)r
+(o)n(v)n(e)i(insertions:)195 1973 y Fk(b)224 1939 y Fe(\()p
+Fh(P)7 b Fe(\))224 1991 y Fd(\000)p Fe(1)307 1956 y Fr(\026)309
+1973 y Fk(b)338 1939 y Fe(\()p Fh(P)g Fe(\))338 1991 y Fd(\000)p
+Fe(1)423 1973 y Fk(\016)s Fr([)p Fk(\014)516 1939 y Fe(\()p
+Fh(P)g Fe(\))512 2000 y Fd(\000)561 1982 y Fc(1)p 561 1990
+23 3 v 561 2016 a(2)601 1973 y Fr(])p Fk(b)648 1939 y Fe(\()p
+Fh(Q)p Fe(\))648 1991 y Fd(\000)p Fe(1)732 1956 y Fr(\026)734
+1973 y Fk(b)763 1939 y Fe(\()p Fh(Q)p Fe(\))763 1991 y Fd(\000)p
+Fe(1)849 1973 y Fk(\016)s Fr([)p Fk(\014)942 1939 y Fe(\()p
+Fh(Q)p Fe(\))938 2000 y Fd(\000)987 1982 y Fc(1)p 987 1990
+V 987 2016 a(2)1028 1973 y Fr(])22 b Fk(;)145 b(b)1260 1939
+y Fe(\()p Fh(P)7 b Fe(\))1260 1991 y Fd(\000)p Fe(1)1342 1956
+y Fr(\026)1345 1973 y Fk(b)1374 1939 y Fe(\()p Fh(P)g Fe(\))1374
+1991 y Fd(\000)p Fe(1)1459 1973 y Fk(\016)s Fr([)p Fk(\014)1552
+1939 y Fe(\()p Fh(P)g Fe(\))1548 2000 y Fd(\000)1597 1982 y
+Fc(1)p 1597 1990 V 1597 2016 a(2)1636 1973 y Fr(])p Fk(b)1683
+1939 y Fe(\()p Fh(Q)p Fe(\))1683 1991 y Fd(\000)p Fe(1)1768
+1956 y Fr(\026)1770 1973 y Fk(b)1799 1939 y Fe(\()p Fh(Q)p
+Fe(\))1799 1991 y Fd(\000)p Fe(1)1885 1973 y Fk(\014)1927 1939
+y Fe(\()p Fh(Q)p Fe(\))1923 2000 y Fd(\000)1972 1982 y Fc(1)p
+1972 1990 V 1972 2016 a(2)2013 1973 y Fk(\016)2046 1946 y Fd(0)2064
+1973 y Fr([)p Fk(\014)2124 1939 y Fe(\()p Fh(Q)p Fe(\))2120
+2000 y Fd(\000)2169 1982 y Fc(1)p 2169 1990 V 2169 2016 a(2)2210
+1973 y Fr(])22 b Fk(:)195 b Fr(\(2)p Fk(:)p Fr(3)q(\))0 2098
+y(Using)24 b(the)f(formal)h(iden)n(ti\014cation)g(of)g Fk(\014)t(\016)1068
+2074 y Fd(0)1085 2098 y Fr(\()p Fk(\014)t Fr(\))f(and)g Fi(\000)p
+Fk(\016)s Fr(\()p Fk(\014)t Fr(\),)f(w)n(e)h(easily)i(\014nd)e(the)g(con)n
+(tribution)h(from)0 2198 y(the)d(insertions)i(in)g(\(2.2)p
+ (#equation.2.2) [[165 322 180 334] [1 1 1 [3 3]] [0 0 1]] pdfm (\))f(to)h(b)
+r(e)853 2277 y Fk(t)p 820 2307 91 3 v 820 2368 a Fi(j)p Fk(t)p
+Fi(j)880 2349 y Fe(6)918 2322 y Fk(b)947 2288 y Fe(\()p Fh(P)7
+b Fe(\))947 2340 y Fd(\000)p Fe(1)1030 2305 y Fr(\026)1033
+2322 y Fk(b)1062 2288 y Fe(\()p Fh(P)g Fe(\))1062 2340 y Fd(\000)p
+Fe(1)1147 2322 y Fk(\016)s Fr([)p Fk(\014)1240 2288 y Fe(\()p
+Fh(P)g Fe(\))1236 2349 y Fd(\000)1285 2331 y Fc(1)p 1285 2339
+23 3 v 1285 2365 a(2)1324 2322 y Fr(])p Fk(b)1371 2288 y Fe(\()p
+Fh(Q)p Fe(\))1371 2340 y Fd(\000)p Fe(1)1456 2305 y Fr(\026)1458
+2322 y Fk(b)1487 2288 y Fe(\()p Fh(Q)p Fe(\))1487 2340 y Fd(\000)p
+Fe(1)1573 2322 y Fk(\016)s Fr([)p Fk(\014)1666 2288 y Fe(\()p
+Fh(Q)p Fe(\))1662 2349 y Fd(\000)1711 2331 y Fc(1)p 1711 2339
+V 1711 2365 a(2)1751 2322 y Fr(])p Fk(;)676 b Fr(\(2)p Fk(:)p
+Fr(4)q(\))0 2465 y(where)21 b(there)g(has)h(b)r(een)f(some)h(cancellation)g
+(b)r(et)n(w)n(een)e(the)i(t)n(w)n(o)g(di\013eren)n(t)f(con)n(tributions)i(in)
+f(\(2.3)p (#equation.2.3) [[510 274 525 286] [1 1 1 [3 3]] [0 0 1]] pdfm
+(\).)133 2565 y(Th)n(us)g(w)n(e)g(ha)n(v)n(e)117 2597 y Ff(Z)183
+2634 y(\002)215 2687 y Fr(d)s Fk(r)16 b Fi(^)k Fr(d)p 405 2644
+32 3 v 3 w Fk(r)c Fi(^)k Fr(d)s Fk(t)14 b Fi(^)20 b Fr(d)p
+697 2639 24 3 v 3 w Fk(t)p Fi(j)5 b Fr(d)s Fk(\032)g Fr(d)s
+Fk(\034)900 2634 y Ff(\003)948 2687 y Fi(h)p Fr(\006)p Fk(;)11
+b(\033)1089 2705 y Fh(P)1134 2687 y Fk(;)g(\033)1201 2705 y
+Fh(Q)1247 2687 y Fi(j)g(\001)g(\001)g(\001)i Fk(B)s Fr([)p
+Fk(\033)1474 2705 y Fd(\003)1505 2687 y Fr(\()1555 2643 y Fk(@)p
+1539 2672 71 3 v 1539 2733 a(@)t(r)1618 2687 y Fr(\)])p Fk(B)s
+Fr([)p Fk(\033)1771 2705 y Fd(\003)1803 2687 y Fr(\()1852 2643
+y Fk(@)p 1837 2672 V 1837 2733 a(@)p 1876 2689 32 3 v 4 w(r)1915
+2687 y Fr(\)])p Fk(\016)1992 2634 y Ff(\002)2019 2687 y Fk(B)s
+Fr([)p Fk(\033)2128 2705 y Fd(\003)2160 2687 y Fr(\()2211 2643
+y Fk(@)p 2194 2672 74 3 v 2194 2733 a(@)t(\032)2275 2687 y
+Fr(\)])2319 2634 y Ff(\003)331 2864 y Fi(\002)h Fk(B)s Fr([)p
+Fk(\033)506 2882 y Fd(\003)538 2864 y Fr(\()583 2819 y Fk(@)p
+572 2848 63 3 v 572 2909 a(@)t(t)642 2864 y Fr(\)])p Fk(B)s
+Fr([)p Fk(\033)795 2882 y Fd(\003)827 2864 y Fr(\()873 2819
+y Fk(@)p 861 2848 V 861 2910 a(@)p 900 2862 24 3 v 4 w(t)932
+2864 y Fr(\)])p Fk(\016)1009 2810 y Ff(\002)1036 2864 y Fk(B)s
+Fr([)p Fk(\033)1145 2882 y Fd(\003)1177 2864 y Fr(\()1229 2819
+y Fk(@)p 1211 2848 76 3 v 1211 2909 a(@)t(\034)1294 2864 y
+Fr(\)])1338 2810 y Ff(\003)1366 2864 y Fi(j)p Fk( )r Fi(i)1455
+2836 y Fh(P)1515 2864 y Fi(\012)g(j)p Fk( )r Fi(i)1670 2836
+y Fh(Q)1735 2864 y Fr(=)117 2940 y Ff(Z)183 2976 y(\002)215
+3030 y Fr(d)s Fk(r)i Fi(^)k Fr(d)p 405 2986 32 3 v 3 w Fk(r)c
+Fi(^)k Fr(d)s Fk(t)14 b Fi(^)20 b Fr(d)p 697 2981 24 3 v 3
+w Fk(t)p Fi(j)5 b Fr(d)s Fk(\032)g Fr(d)s Fk(\034)900 2976
+y Ff(\003)948 3030 y Fi(h)p Fr(\006)p Fk(;)11 b(\033)1089 3048
+y Fh(P)1123 3055 y Fc(0)1153 3030 y Fk(;)g(\033)1220 3048 y
+Fh(Q)1262 3055 y Fc(0)1291 3030 y Fi(j)331 3201 y(\002)397
+3148 y Ff(\000)427 3201 y Fr(1)k(+)g Fk(\032\034)8 b(tL)682
+3167 y Fe(\()p Fh(P)f Fe(\))682 3219 y Fd(\000)p Fe(1)782 3201
+y Fr(+)15 b Fk(\032\034)920 3148 y Ff(\000)958 3157 y Fr(2)p
+Fk(p)1024 3174 y Fe(2)1069 3157 y Fi(\000)g Fk(p)1169 3174
+y Fe(1)p 958 3186 241 3 v 1067 3247 a Fk(t)1207 3148 y Ff(\001)1237
+3201 y Fk(L)1282 3167 y Fe(\()p Fh(P)7 b Fe(\))1282 3219 y(0)1383
+3201 y Fr(+)15 b(2)1483 3148 y Ff(\000)1513 3201 y Fk(\032)g
+Fi(\000)g Fk(\034)8 b(t)1690 3148 y Ff(\001)1720 3201 y Fk(G)1772
+3167 y Fe(\()p Fh(P)f Fe(\))1772 3228 y Fd(\000)1821 3211 y
+Fc(1)p 1821 3219 23 3 v 1821 3244 a(2)1858 3148 y Ff(\001)331
+3366 y Fi(\002)397 3313 y Ff(\000)427 3366 y Fr(1)15 b Fi(\000)550
+3322 y Fk(\032\034)c Ff(e)-40 b Fk(p)654 3339 y Fe(1)p 550
+3351 135 3 v 605 3412 a Fk(t)692 3366 y(L)737 3332 y Fe(\()p
+Fh(Q)p Fe(\))737 3384 y(0)838 3366 y Fr(+)15 b(2)p Fk(\032G)1024
+3332 y Fe(\()p Fh(Q)p Fe(\))1024 3393 y Fd(\000)1074 3376 y
+Fc(1)p 1074 3384 23 3 v 1074 3409 a(2)1111 3313 y Ff(\001)1142
+3366 y Fk(t)1166 3339 y Fe(2\()p Fh(L)1249 3315 y Fc(\()p Fb(P)6
+b Fc(\))1249 3355 y(0)1324 3339 y Fe(+)p Fh(L)1401 3315 y Fc(\()p
+Fb(Q)p Fc(\))1401 3355 y(0)1476 3339 y Fe(\))p 1500 3318 24
+3 v 1500 3366 a Fk(t)1524 3329 y Fe(2\()1577 3317 y(\026)1571
+3329 y Fh(L)1607 3304 y Fc(\()p Fb(P)h Fc(\))1607 3345 y(0)1682
+3329 y Fe(+)1729 3317 y(\026)1723 3329 y Fh(L)1759 3304 y Fc(\()p
+Fb(Q)p Fc(\))1759 3345 y(0)1834 3329 y Fe(\))331 3524 y Fi(\002)397
+3471 y Ff(\000)469 3479 y Fk(t)p 435 3509 91 3 v 435 3570 a
+Fi(j)p Fk(t)p Fi(j)495 3551 y Fe(6)534 3471 y Ff(\001)564 3524
+y Fk(b)593 3490 y Fe(\()p Fh(P)g Fe(\))593 3542 y Fd(\000)p
+Fe(1)676 3507 y Fr(\026)679 3524 y Fk(b)708 3490 y Fe(\()p
+Fh(P)g Fe(\))708 3542 y Fd(\000)p Fe(1)793 3524 y Fk(\016)s
+Fr([)p Fk(\014)886 3490 y Fe(\()p Fh(P)g Fe(\))882 3551 y Fd(\000)931
+3534 y Fc(1)p 931 3542 23 3 v 931 3567 a(2)970 3524 y Fr(])p
+Fk(b)1017 3490 y Fe(\()p Fh(Q)p Fe(\))1017 3542 y Fd(\000)p
+Fe(1)1102 3507 y Fr(\026)1104 3524 y Fk(b)1133 3490 y Fe(\()p
+Fh(Q)p Fe(\))1133 3542 y Fd(\000)p Fe(1)1219 3524 y Fk(\016)s
+Fr([)p Fk(\014)1312 3490 y Fe(\()p Fh(Q)p Fe(\))1308 3551 y
+Fd(\000)1357 3534 y Fc(1)p 1357 3542 V 1357 3567 a(2)1397 3524
+y Fr(])p Fi(j)p Fk( )r Fi(i)1504 3497 y Fh(P)1565 3524 y Fi(\012)14
+b(j)p Fk( )r Fi(i)1720 3497 y Fh(Q)1766 3524 y Fk(:)2463 3108
+y Fr(\(2)p Fk(:)p Fr(5)q(\))1283 3719 y(7)p eop
+%%Page: 8 9
+8 8 bop 0 66 a Fr(The)21 b(state)h Fk(b)328 84 y Fd(\000)p
+Fe(1)396 49 y Fr(\026)399 66 y Fk(b)428 84 y Fd(\000)p Fe(1)499
+66 y Fk(\016)s Fr([)p Fk(\014)588 84 y Fd(\000)636 67 y Fc(1)p
+636 75 23 3 v 636 100 a(2)670 66 y Fr(])p Fi(j)p Fk( )r Fi(i)h
+Fr(has)g Fk(L)964 84 y Fe(0)1012 66 y Fr(=)1090 40 y Fe(1)p
+1090 51 27 3 v 1090 89 a(2)1147 66 y Fr(and)1284 50 y(\026)1276
+66 y Fk(L)1321 84 y Fe(0)1369 66 y Fr(=)18 b(1)23 b(and)f(th)n(us,)g(pic)n
+(king)h(o\013)f(the)f(term)g(prop)r(or-)0 171 y(tional)i Fk(\032\034)8
+b Fr(,)23 b(\(2.5)p
+ (#equation.2.5) [[131 687 146 699] [1 1 1 [3 3]] [0 0 1]] pdfm (\))f(b)r
+(ecomes)672 254 y Ff(Z)739 291 y(\002)771 345 y Fr(d)s Fk(r)16
+b Fi(^)k Fr(d)p 961 301 32 3 v 3 w Fk(r)c Fi(^)k Fr(d)s Fk(t)14
+b Fi(^)20 b Fr(d)p 1253 296 24 3 v 3 w Fk(t)p Fi(j)5 b Fr(d)s
+Fk(\032)g Fr(d)s Fk(\034)1456 291 y Ff(\003)377 525 y Fi(h)p
+Fr(\006)p Fk(;)11 b(\033)518 543 y Fh(P)552 550 y Fc(0)582
+525 y Fk(;)g(\033)649 543 y Fh(Q)691 550 y Fc(0)720 525 y Fi(j)q
+Fk(\032\034)810 431 y Ff(\022)859 525 y Fk(tL)928 490 y Fe(\()p
+Fh(P)c Fe(\))928 542 y Fd(\000)p Fe(1)1028 525 y Fr(+)1103
+480 y(\(2)p Fk(a)1197 498 y Fe(2)1241 480 y Fi(\000)15 b Fk(a)1343
+498 y Fe(1)1388 480 y Fi(\000)e Ff(e)-36 b Fk(a)1489 498 y
+Fe(1)1519 480 y Fr(\)\(1)14 b Fi(\000)h Fk(f)7 b Fr(\))p 1103
+509 648 3 v 1398 570 a(2)p Fk(t)1773 525 y Fr(+)15 b(4)p Fk(tG)1949
+490 y Fe(\()p Fh(Q)p Fe(\))1949 552 y Fd(\000)1998 534 y Fc(1)p
+1998 542 23 3 v 1998 568 a(2)2036 525 y Fk(G)2088 490 y Fe(\()p
+Fh(P)7 b Fe(\))2088 552 y Fd(\000)2137 534 y Fc(1)p 2137 542
+V 2137 568 a(2)2174 431 y Ff(\023)754 713 y Fi(\002)820 659
+y Ff(\000)858 668 y Fi(j)p Fk(t)p Fi(j)918 644 y Fe(2)p 858
+698 91 3 v 892 759 a Fk(t)957 659 y Ff(\001)987 713 y Fk(b)1016
+679 y Fe(\()p Fh(P)g Fe(\))1016 731 y Fd(\000)p Fe(1)1099 696
+y Fr(\026)1102 713 y Fk(b)1131 679 y Fe(\()p Fh(P)g Fe(\))1131
+731 y Fd(\000)p Fe(1)1216 713 y Fk(\016)s Fr([)p Fk(\014)1309
+679 y Fe(\()p Fh(P)g Fe(\))1305 740 y Fd(\000)1354 722 y Fc(1)p
+1354 730 23 3 v 1354 756 a(2)1393 713 y Fr(])p Fk(b)1440 679
+y Fe(\()p Fh(Q)p Fe(\))1440 731 y Fd(\000)p Fe(1)1525 696 y
+Fr(\026)1527 713 y Fk(b)1556 679 y Fe(\()p Fh(Q)p Fe(\))1556
+731 y Fd(\000)p Fe(1)1642 713 y Fk(\016)s Fr([)p Fk(\014)1735
+679 y Fe(\()p Fh(Q)p Fe(\))1731 740 y Fd(\000)1780 722 y Fc(1)p
+1780 730 V 1780 756 a(2)1820 713 y Fr(])p Fi(j)p Fk( )r Fi(i)1927
+686 y Fh(P)1988 713 y Fi(\012)14 b(j)p Fk( )r Fi(i)2143 686
+y Fh(Q)2189 713 y Fk(:)2463 523 y Fr(\(2)p Fk(:)p Fr(6)q(\))0
+876 y(A)n(t)26 b(\014rst)g(sigh)n(t,)i(the)d(term)g(prop)r(ortional)i(to)f
+(\(1)17 b Fi(\000)g Fk(f)7 b Fr(\))26 b(lo)r(oks)h(lik)n(e)f(bad)g(news,)h
+(since)f(it)g(dep)r(ends)f(on)0 980 y(the)k(shap)r(e)f(of)i(the)f(function)g
+Fk(f)7 b Fr(,)31 b(and)e(hence)f(on)h(the)g(details)h(of)g(the)e(co)r
+(ordinate)h(family)h(c)n(hosen.)0 1084 y(Actually)-6 b(,)29
+b(the)d(co)r(e\016cien)n(ts)f Fk(a)782 1102 y Fh(i)831 1084
+y Fr(and)h Ff(e)-36 b Fk(a)1000 1102 y Fh(i)1048 1084 y Fr(are)27
+b(not)f(to)h(b)r(e)f(tak)n(en)g(to)g(b)r(e)g(arbitrary)-6 b(.)45
+b(As)26 b(discussed)h(in)0 1188 y([7)p
+ (#reference.7) [[75 504 81 516] [1 1 1 [3 3]] [0 0 1]] pdfm (],)c(a)e
+(unique)g(c)n(hoice)f(for)h(the)f(co)r(e\016cien)n(ts)g(is)i(singled)g(out)e
+(b)n(y)h(demanding)g(that)f(dilaton)i(insertions)0 1292 y(b)r(eha)n(v)n(e)j
+(correctly)-6 b(.)40 b(There)25 b(one)g(found)h(that)f Fk(a)1224
+1310 y Fe(1)1279 1292 y Fr(=)f Fk(a)1390 1310 y Fe(2)1444 1292
+y Fr(=)f Ff(e)-36 b Fk(a)1555 1310 y Fe(1)1609 1292 y Fr(=)24
+b Fi(\000)o Ff(e)-36 b Fk(a)1772 1310 y Fe(2)1826 1292 y Fr(=)24
+b Fi(\000)p Fr(1)p Fk(=)p Fr(4.)41 b(\(Actually)-6 b(,)28 b(the)c
+Ff(e)-36 b Fk(a)2578 1310 y Fh(i)0 1396 y Fr(w)n(ere)18 b(not)h(determined)e
+(in)i([7)p (#reference.7) [[198 467 204 479] [1 1 1 [3 3]] [0 0 1]] pdfm
+(],)i(but)e(a)g(calculation)h(exactly)e(analogous)j(to)e(the)f(ones)h(presen)
+n(ted)e(there)0 1500 y(\014xes)24 b(these)f(co)r(e\016cien)n(ts)g(as)h(w)n
+(ell.\))36 b(With)25 b(these)e(v)l(alues)h(for)h(the)e(co)r(e\016cien)n(ts,)h
+(the)f(o\013ending)h(term)0 1604 y(v)l(anishes,)e(and)e(all)h(dep)r(endence)d
+(on)i(the)f(shap)r(e)h(of)h(the)e(co)r(ordinate)h(family)h(c)n(hosen)f(drops)
+g(out.)30 b Fl(A)n(ny)0 1709 y Fr(co)r(ordinate)19 b(family)i(whic)n(h)f(in)n
+(terp)r(olates)g(to)f(the)h(asymptotic)f(b)r(eha)n(vior)h(\(1.5)p
+ (#equation.1.5) [[414 410 429 422] [1 1 1 [3 3]] [0 0 1]] pdfm (\),\(1.6)p
+ (#equation.1.6) [[441 410 456 422] [1 1 1 [3 3]] [0 0 1]] pdfm (\))h(giv)n
+(es)g(the)e(same)0 1813 y(result)j(for)h(the)e(measure)131
+1880 y Ff(Z)197 1916 y(\002)230 1970 y Fr(d)s Fk(r)16 b Fi(^)k
+Fr(d)p 420 1926 32 3 v 3 w Fk(r)c Fi(^)j Fr(d)s Fk(t)c Fi(^)k
+Fr(d)p 711 1921 24 3 v 3 w Fk(t)p Fi(j)5 b Fr(d)s Fk(\032)g
+Fr(d)s Fk(\034)914 1916 y Ff(\003)963 1970 y Fi(h)p Fr(\006)p
+Fk(;)11 b(\033)1104 1988 y Fh(P)1138 1995 y Fc(0)1167 1970
+y Fk(;)g(\033)1234 1988 y Fh(Q)1276 1995 y Fc(0)1306 1970 y
+Fi(j)p Fk(\032\034)1395 1916 y Ff(\000)1425 1970 y Fk(L)1470
+1936 y Fe(\()p Fh(P)c Fe(\))1470 1988 y Fd(\000)p Fe(1)1571
+1970 y Fr(+)14 b(4)p Fk(G)1722 1936 y Fe(\()p Fh(Q)p Fe(\))1722
+1997 y Fd(\000)1772 1979 y Fc(1)p 1772 1987 23 3 v 1772 2013
+a(2)1810 1970 y Fk(G)1862 1936 y Fe(\()p Fh(P)7 b Fe(\))1862
+1997 y Fd(\000)1911 1979 y Fc(1)p 1911 1987 V 1911 2013 a(2)1948
+1916 y Ff(\001)955 2123 y Fi(\002)15 b(j)p Fk(t)p Fi(j)1082
+2096 y Fe(2)1112 2123 y Fk(b)1141 2089 y Fe(\()p Fh(P)7 b Fe(\))1141
+2141 y Fd(\000)p Fe(1)1224 2106 y Fr(\026)1227 2123 y Fk(b)1256
+2089 y Fe(\()p Fh(P)g Fe(\))1256 2141 y Fd(\000)p Fe(1)1341
+2123 y Fk(\016)s Fr([)p Fk(\014)1434 2089 y Fe(\()p Fh(P)g
+Fe(\))1430 2150 y Fd(\000)1479 2132 y Fc(1)p 1479 2140 V 1479
+2166 a(2)1518 2123 y Fr(])p Fk(b)1565 2089 y Fe(\()p Fh(Q)p
+Fe(\))1565 2141 y Fd(\000)p Fe(1)1650 2106 y Fr(\026)1652 2123
+y Fk(b)1681 2089 y Fe(\()p Fh(Q)p Fe(\))1681 2141 y Fd(\000)p
+Fe(1)1767 2123 y Fk(\016)s Fr([)p Fk(\014)1860 2089 y Fe(\()p
+Fh(Q)p Fe(\))1856 2150 y Fd(\000)1905 2132 y Fc(1)p 1905 2140
+V 1905 2166 a(2)1945 2123 y Fr(])p Fi(j)p Fk( )r Fi(i)2052
+2096 y Fh(P)2113 2123 y Fi(\012)14 b(j)p Fk( )r Fi(i)2268 2096
+y Fh(Q)2314 2123 y Fk(:)2463 2039 y Fr(\(2)p Fk(:)p Fr(7)q(\))133
+2279 y(Our)23 b(demand)g(that)h(the)f(co)r(ordinate)g(family)i(exhibit)f(a)g
+(certain)f(asymptotic)h(b)r(eha)n(vior)g(as)g(w)n(e)0 2383
+y(approac)n(h)18 b(the)e(b)r(oundary)i(of)g(mo)r(duli)f(space)g(has)h(b)r
+(oth)f(a)h(ph)n(ysical)h(motiv)l(ation)f(\(it)f(giv)n(es)i(the)d(correct)0
+2487 y(b)r(eha)n(vior)i(for)g(dilaton)g(correlation)g(functions\))f(and)h(a)f
+(mathematical)g(motiv)l(ation.)29 b(When)17 b(w)n(e)g(think)0
+2592 y(ab)r(out)26 b(the)f(plum)n(bing)h(construction)g(as)g(gluing)h(a)f
+(certain)g Fl(\014xtur)m(e)f Fr({)h(a)g(3-punctured)e(sphere)h
+Fl(with)0 2696 y Fr(co)r(ordinates)j({)g(on)n(to)g(the)f(rest)h(of)g(the)f
+(surface,)i(it)g(mak)n(es)e(sense)g(to)h(demand)f(that)g(the)h(resulting)0
+2800 y(sewn)h(surface)g(b)r(e)f(the)h(same,)h(regardless)g(of)f(whic)n(h)g
+(puncture)f(w)n(e)h(c)n(hose)g(to)g(attac)n(h)g(to)g(the)f(rest)0
+2904 y(of)k(the)f(surface.)57 b(In)32 b(other)f(w)n(ords,)j(w)n(e)d(demand)g
+(in)n(v)l(ariance)h(under)e(\(a)i(subgroup)g(of)5 b(\))32 b(m\033bius)0
+3008 y(transformations)24 b(of)f(the)f(3-punctures)g(sphere.)32
+b(As)23 b(in)g(the)f(b)r(osonic)h(string)h([6)p
+ (#reference.6) [[434 177 440 189] [1 1 1 [3 3]] [0 0 1]] pdfm (,16)p
+ (#reference.16) [[443 177 455 189] [1 1 1 [3 3]] [0 0 1]] pdfm (],)h(this)f
+(leads)f(to)g(a)0 3112 y(de\014nite)f(c)n(hoice)h(for)h(the)e(\014rst)h(few)g
+(co)r(e\016cien)n(ts)f(in)i(\(1.5)p
+ (#equation.1.5) [[316 158 331 170] [1 1 1 [3 3]] [0 0 1]] pdfm (\),\(1.6)p
+ (#equation.1.6) [[344 158 359 170] [1 1 1 [3 3]] [0 0 1]] pdfm (\).)35
+b(Still,)25 b(one)e(migh)n(t)g(b)r(e)f(puzzled)g(that)0 3216
+y(the)d(measure)g(formed)g(with)h(SPSs)g(should)h(b)r(e)e(sensitiv)n(e)h(at)g
+(all)h(to)f(the)g(asymptotic)f(b)r(eha)n(vior)h(of)h(the)0
+3320 y(co)r(ordinate)h(family)-6 b(.)31 b(W)-6 b(e)22 b(will)i(defer)d(a)i
+(discussion)g(of)f(this)h(p)r(oin)n(t)f(to)g(section)g(3.)133
+3425 y(Of)k(the)g(t)n(w)n(o)h(terms)f(in)h(\(2.7)p
+ (#equation.2.7) [[212 102 227 114] [1 1 1 [3 3]] [0 0 1]] pdfm (\),)h(the)e
+Fk(G)1105 3390 y Fe(\()p Fh(Q)p Fe(\))1105 3452 y Fd(\000)1155
+3434 y Fc(1)p 1155 3442 V 1155 3468 a(2)1192 3425 y Fk(G)1244
+3390 y Fe(\()p Fh(P)7 b Fe(\))1244 3452 y Fd(\000)1294 3434
+y Fc(1)p 1294 3442 V 1294 3468 a(2)1357 3425 y Fr(is)27 b(precisely)f(what)h
+(is)g(exp)r(ected)d(from)j(a)g(na)-7 b(\177)-26 b(\020v)n(e)0
+3544 y(analysis)18 b(of)f(the)f(collision)i(of)f(t)n(w)n(o)g(v)n(ertex)f(op)r
+(erators.)28 b(Indeed,)17 b(the)e Fk(G)1766 3509 y Fe(\()p
+Fh(P)7 b Fe(\))1766 3571 y Fd(\000)1816 3553 y Fc(1)p 1816
+3561 V 1816 3587 a(2)1869 3544 y Fr(com)n(bines)16 b(with)g(the)g
+Fk(\016)s Fr([)p Fk(\014)2497 3509 y Fe(\()p Fh(P)7 b Fe(\))2493
+3571 y Fd(\000)2542 3553 y Fc(1)p 2542 3561 V 2542 3587 a(2)2582
+3544 y Fr(])1283 3719 y(8)p eop
+%%Page: 9 10
+9 9 bop 0 66 a Fr(to)24 b(form)g(a)g(picture-c)n(hanging)g(op)r(erator,)h
+(whic)n(h)f(con)n(v)n(erts)g(the)f(state)h(at)g Fk(P)33 b Fr(from)24
+b(the)f(\()p Fi(\000)p Fr(1\))h(to)g(the)0 172 y(\(0\))f(picture)f(\(and)h
+(similarly)h(for)g(the)e(state)h(at)g Fk(Q)p Fr(\).)31 b(The)23
+b Fk(L)1537 138 y Fe(\()p Fh(P)7 b Fe(\))1537 190 y Fd(\000)p
+Fe(1)1646 172 y Fr(term)21 b(is)j(new)e(and,)i(as)g(w)n(e)e(shall)i(see,)0
+278 y(pla)n(ys)f(the)e(role)i(of)f(the)g(\\con)n(tact)f(term")g(p)r
+(ostulated)h(b)n(y)h(Green)e(and)h(Seib)r(erg.)133 384 y(First,)i(let)f(us)g
+(see)g(that)f(it)i(mak)n(es)e(sense)g(b)n(y)i(examining)f(the)f
+(transformation)i(of)f(the)f(measure)0 490 y(under)16 b(the)f(co)r(ordinate)h
+(transformation)h(in)f(\(1.10)p
+ (#equation.1.10) [[280 630 301 642] [1 1 1 [3 3]] [0 0 1]] pdfm (\).)29
+b(There)15 b(are)h(three)g(con)n(tributions)g(to)h(the)e(c)n(hange.)0
+596 y(The)21 b(\014rst)h(is)g(the)f(ho)n(w)h(the)f(in)n(tegration)i(measure)d
+([)5 b(d)t Ff(e)-38 b Fk(r)16 b Fi(^)j Fr(d)p 1513 540 32 3
+v 4 w Ff(e)-38 b Fk(r)q Fi(j)5 b Fr(d)i Ff(e)-41 b Fk(\032)p
+Fr(])22 b(transforms)g(to)g([)5 b(d)s Fk(t)14 b Fi(^)19 b Fr(d)p
+2297 547 24 3 v 3 w Fk(t)o Fi(j)5 b Fr(d)s Fk(\034)j Fr(].)30
+b(The)0 702 y(c)n(hange)22 b(of)g(v)l(ariables)i(requires)d(the)h(in)n(tro)r
+(duction)g(of)h(a)f(Jacobian)h(\(Berezinian\),)514 917 y([)5
+b(d)t Ff(e)-38 b Fk(r)17 b Fi(^)j Fr(d)p 728 861 32 3 v 4 w
+Ff(e)-38 b Fk(r)q Fi(j)5 b Fr(d)i Ff(e)-41 b Fk(\032)p Fr(])19
+b(=)f(sdet)1092 823 y Ff(\022)1162 847 y Fh(@)p Ff(e)-34 b
+Fh(r)p 1162 858 58 3 v 1165 896 a(@)s(t)1305 844 y(@)r Ff(e)e
+Fh(\032)p 1305 858 59 3 v 1309 896 a(@)s(t)1162 955 y(@)p Ff(e)i
+Fh(r)p 1160 965 62 3 v 1160 1004 a(@)s(\034)1305 951 y(@)r
+Ff(e)e Fh(\032)p 1304 965 V 1304 1004 a(@)s(\034)1384 823 y
+Ff(\023)1433 917 y Fr(det)1536 823 y Ff(\022)1593 872 y Fk(@)p
+1632 816 32 3 v 5 w Ff(e)e Fk(r)p 1593 901 71 3 v 1597 963
+a(@)p 1636 915 24 3 v 4 w(t)1672 823 y Ff(\023)1721 917 y Fr([)5
+b(d)s Fk(t)14 b Fi(^)20 b Fr(d)p 1926 868 V 3 w Fk(t)o Fi(j)5
+b Fr(d)s Fk(\034)j Fr(])p Fk(:)378 b Fr(\(2)p Fk(:)p Fr(8)q(\))0
+1131 y(Using)23 b(\(1.10)p
+ (#equation.1.10) [[110 514 131 526] [1 1 1 [3 3]] [0 0 1]] pdfm (\),)g(this)
+g(results)f(in)692 1330 y([)5 b(d)t Ff(e)-38 b Fk(r)17 b Fi(^)i
+Fr(d)p 905 1274 32 3 v 4 w Ff(e)-38 b Fk(r)r Fi(j)5 b Fr(d)i
+Ff(e)-41 b Fk(\032)p Fr(])19 b(=)1149 1285 y(4)p Fi(j)p Fk(t)p
+Fi(j)1242 1261 y Fe(2)p 1149 1315 124 3 v 1199 1376 a Fk(t)1281
+1276 y Ff(\000)1311 1330 y Fr(1)c(+)1433 1285 y Fk(\032\034)p
+1433 1315 71 3 v 1440 1376 a Fr(2)p Fk(t)1512 1276 y Ff(\001)1543
+1330 y Fr([)5 b(d)s Fk(t)14 b Fi(^)20 b Fr(d)p 1748 1281 24
+3 v 3 w Fk(t)p Fi(j)5 b Fr(d)s Fk(\034)j Fr(])p Fk(:)555 b
+Fr(\(2)p Fk(:)p Fr(9)q(\))0 1513 y(But)31 b(the)f Fk(B)35 b
+Fr(insertions)d(\(2.2)p
+ (#equation.2.2) [[195 446 210 458] [1 1 1 [3 3]] [0 0 1]] pdfm (\))f(also)h
+(c)n(hange,)h(in)n(tro)r(ducing)f(a)f(comp)r(ensating)f(Jacobian)i(in)f
+(\(2.4)p (#equation.2.4) [[517 446 532 458] [1 1 1 [3 3]] [0 0 1]] pdfm
+(\).)0 1619 y(Finally)-6 b(,)25 b(c)n(hanging)e(v)l(ariables)g(to)f
+Fk(t)g Fr(and)g Fk(\034)30 b Fr(also)23 b(c)n(hanges)f(the)f(state)h
+Fi(h)p Fr(\006)p Fi(j)p Fr(.)30 b(Equation)23 b(\(1.3)p
+ (#equation.1.3) [[471 427 486 439] [1 1 1 [3 3]] [0 0 1]] pdfm (\))g(giv)n
+(es)117 1783 y Fi(h)p Fr(\006)p Fk(;)11 b(z)18 b Fi(\000)e
+Ff(e)-39 b Fk(r)17 b Fr(+)i Ff(e)-42 b Fk(\032)q(\022)r Fi(j)19
+b Fr(=)o Fi(h)p Fr(\006)p Fk(;)11 b(z)18 b Fi(\000)e Ff(e)-38
+b Fk(r)r Fi(j)873 1729 y Ff(\000)903 1783 y Fr(1)15 b Fi(\000)g
+Fr(2)t Ff(e)-41 b Fk(\032G)1137 1801 y Fd(\000)1187 1783 y
+Fc(1)p 1187 1791 23 3 v 1187 1817 a(2)1221 1729 y Ff(\001)1270
+1783 y Fr(=)18 b Fi(h)p Fr(\006)p Fk(;)11 b(z)18 b Fi(\000)c
+Fr(\()p Fk(r)j Fr(+)d Fk(t)1721 1755 y Fe(2)1751 1783 y Fr(\))g
+Fi(\000)h Fk(t\032\034)22 b Fi(\000)15 b Fr(\()p Fk(\032)g
+Fi(\000)f Fk(t\034)8 b Fr(\))p Fk(\022)r Fi(j)553 1909 y Fr(=)o
+Fi(h)p Fr(\006)p Fk(;)j(z)18 b Fi(\000)d Fr(\()p Fk(r)h Fr(+)f
+Fk(t)986 1881 y Fe(2)1015 1909 y Fr(\))p Fi(j)1059 1855 y Ff(\000)1090
+1909 y Fr(1)g(+)f Fk(t\032\034)8 b(L)1344 1927 y Fd(\000)p
+Fe(1)1431 1909 y Fr(+)14 b(2\()p Fk(\032)h Fi(\000)g Fk(t\034)8
+b Fr(\))p Fk(G)1811 1927 y Fd(\000)1860 1909 y Fc(1)p 1860
+1917 V 1860 1943 a(2)1893 1855 y Ff(\001)1924 1909 y Fk(:)2430
+1848 y Fr(\(2)p Fk(:)p Fr(10)q(\))0 2076 y(In)23 b(this)h(form)n(ula,)h(w)n
+(e)e(see)f(the)h(consequences)e(of)j(the)f(non-split)h(nature)f(of)h(\(1.10)p
+ (#equation.1.10) [[430 344 451 356] [1 1 1 [3 3]] [0 0 1]] pdfm (\).)35
+b(The)22 b Fk(L)2368 2094 y Fd(\000)p Fe(1)2463 2076 y Fr(term)0
+2182 y(w)n(ould)30 b(not)f(b)r(e)f(there)g(for)h(some)f(split)i
+(transformation.)51 b(So,)32 b(though)c(the)h(measure)e(is)j(p)r(erfectly)0
+2288 y(con)n(tin)n(uous,)24 b(the)f(app)r(earance)e(of)j(the)f(extra)f(term)g
+(in)i(\(2.7)p (#equation.2.7) [[332 306 348 318] [1 1 1 [3 3]] [0 0 1]] pdfm
+(\))f(is)h(a)f(consequence)e(of)j(expanding)f(it)h(in)0 2394
+y(co)r(ordinates)i(appropriate)g(to)g(the)f(neigh)n(b)r(orho)r(o)r(d)h(of)g
+(the)f(b)r(oundary)h(of)g(mo)r(duli)g(space)g(when)f(the)0
+2500 y(t)n(w)n(o)d(punctures)f(collide.)133 2606 y(Recall)16
+b(that)g(our)g(goal)i(is)e(to)h(p)r(erform)e(an)h(op)r(erator)g(pro)r(duct)g
+(expansion,)i(whic)n(h)e(in)g(this)h(con)n(text)0 2712 y(amoun)n(ts)e(to)g
+(rewriting)h(the)e(state)h(that)f(arises)i(from)f(the)g(collision)h(of)g(t)n
+(w)n(o)g(op)r(erators)f(as)g(the)g(insertion)0 2818 y(of)25
+b(a)g(single)g(op)r(erator)f(at)h(the)f(collision)i(p)r(oin)n(t.)38
+b(The)24 b(result)g(in)h(Green)f(and)g(Seib)r(erg)g(w)n(as)h(that)g(the)0
+2924 y(na)-7 b(\177)-26 b(\020v)n(e)29 b(OPE)g(resulted)g(in)g(a)g(state)g
+(that)g(w)n(as)g(not)g(the)g(highest)g(comp)r(onen)n(t)e(of)j(a)f(sup)r
+(er\014eld)f(and)0 3030 y(hence)18 b(violated)j(sup)r(ersymmetry)-6
+b(.)28 b(Restoring)20 b(sup)r(ersymmetry)e(required)h(adding)i(a)g(con)n
+(tact)e(term.)0 3136 y(Ho)n(w)n(ev)n(er,)33 b(as)f(w)n(e)e(will)j(shortly)e
+(see,)i(the)d(state)h(that)g(w)n(e)f(\014nd)h Fl(is)h Fr(the)e(highest)h
+(comp)r(onen)n(t)e(of)j(a)0 3242 y(sup)r(er\014eld)16 b(inserted)g(at)g(the)g
+(collision)j(p)r(oin)n(t,)f(and)f(th)n(us,)h(no)f(con)n(tact)f(term)f(is)i
+(needed.)27 b(It)16 b(is)h(precisely)0 3348 y(the)23 b(\\extra")i
+Fk(L)402 3366 y Fd(\000)p Fe(1)497 3348 y Fr(term)e(that)h(restores)g(sup)r
+(ersymmetry)-6 b(.)34 b(The)23 b(k)n(ey)h(p)r(oin)n(t)h(is)g(to)f(appreciate)
+f(what)0 3454 y(\\taking)31 b(the)e(OPE")h(means)f(in)i(the)e(op)r(erator)g
+(formalism:)46 b(tak)n(e)30 b(the)f(t)n(w)n(o)i(states)e(at)h
+Fk(P)39 b Fr(and)30 b Fk(Q)p Fr(,)0 3560 y(con)n(tract)c(them)f(with)i(the)f
+(state)h(asso)r(ciated)g(to)g(the)f(3-punctured)f(sphere,)j(and)f(insert)f
+(the)g(state)1283 3719 y(9)p eop
+%%Page: 10 11
+10 10 bop 0 66 a Fr(that)20 b(results)f(at)h(the)f(nec)n(k)g(where)g(the)g
+(3-punctured)f(sphere)h(is)i(joined)f(on)n(to)g(the)f(rest)g(of)h(the)f
+(surface)0 166 y(\(Fig.)24 b(1\).)31 b(In)22 b(doing)h(so,)h(it)e(is)h(vital)
+h(to)e(use)h(the)e(co)r(ordinates)i(appropriate)f(to)h(this)f(sup)r
+(erconformal)0 266 y(geometry)-6 b(.)28 b(In)18 b(particular,)i(to)e(see)g
+(that)g(the)g(state)g(inserted)f(at)i(the)e(nec)n(k)h(is)h(the)e(highest)i
+(comp)r(onen)n(t)0 366 y(of)25 b(a)f(sup)r(er\014eld,)h(w)n(e)f(need)f(to)h
+(use)g(a)g(con)n(tour-deformation,)h(or)g(more)e(p)r(edan)n(tically)-6
+b(,)26 b(to)f(mak)n(e)e(use)0 466 y(of)k(the)f(Borel-am)n(biguit)n(y)i(asso)r
+(ciated)e(to)h(the)f(3-punctured)f(sphere.)43 b(F)-6 b(rom)27
+b(the)f(Nev)n(eu-Sc)n(h)n(w)n(artz)0 566 y(algebra,)d(w)n(e)f(ha)n(v)n(e)859
+666 y Fk(L)904 684 y Fd(\000)p Fe(1)994 666 y Fr(=)c(2)p Fi(f)p
+Fk(G)1182 684 y Fd(\000)1233 666 y Fc(1)p 1233 674 23 3 v 1233
+700 a(2)1266 666 y Fk(;)11 b(G)1347 684 y Fd(\000)1398 666
+y Fc(1)p 1398 674 V 1398 700 a(2)1432 666 y Fi(g)18 b Fr(=)g(4)p
+Fk(G)1638 639 y Fe(2)1638 688 y Fd(\000)1688 671 y Fc(1)p 1688
+679 V 1688 704 a(2)1722 666 y Fk(:)0 787 y Fr(Th)n(us,)23 b(\(2.7)p
+ (#equation.2.7) [[110 576 125 588] [1 1 1 [3 3]] [0 0 1]] pdfm (\))f(b)r
+(ecomes)160 833 y Ff(Z)226 870 y(\002)258 924 y Fr(d)s Fk(r)16
+b Fi(^)k Fr(d)p 448 880 32 3 v 3 w Fk(r)c Fi(^)k Fr(d)s Fk(t)14
+b Fi(^)20 b Fr(d)p 740 875 24 3 v 3 w Fk(t)p Fi(j)5 b Fr(d)s
+Fk(\032)g Fr(d)s Fk(\034)943 870 y Ff(\003)991 924 y Fr(4)p
+Fk(\032\034)j Fi(j)p Fk(t)p Fi(j)1155 896 y Fe(2)1186 924 y
+Fi(h)p Fr(\006)p Fk(;)j(\033)1327 941 y Fh(P)1361 948 y Fc(0)1391
+924 y Fk(;)g(\033)1458 941 y Fh(Q)1500 948 y Fc(0)1529 924
+y Fi(j)1547 870 y Ff(\000)1578 924 y Fk(G)1630 889 y Fe(\()p
+Fh(P)c Fe(\))1630 951 y Fd(\000)1680 933 y Fc(1)p 1680 941
+23 3 v 1680 967 a(2)1731 924 y Fr(+)14 b Fk(G)1849 889 y Fe(\()p
+Fh(Q)p Fe(\))1849 951 y Fd(\000)1899 933 y Fc(1)p 1899 941
+V 1899 967 a(2)1936 870 y Ff(\001)1966 924 y Fk(G)2018 889
+y Fe(\()p Fh(P)7 b Fe(\))2018 951 y Fd(\000)2068 933 y Fc(1)p
+2068 941 V 2068 967 a(2)984 1077 y Fi(\002)14 b Fk(b)1079 1042
+y Fe(\()p Fh(P)7 b Fe(\))1079 1094 y Fd(\000)p Fe(1)1162 1059
+y Fr(\026)1165 1077 y Fk(b)1194 1042 y Fe(\()p Fh(P)g Fe(\))1194
+1094 y Fd(\000)p Fe(1)1279 1077 y Fk(\016)s Fr([)p Fk(\014)1372
+1042 y Fe(\()p Fh(P)g Fe(\))1368 1104 y Fd(\000)1417 1086 y
+Fc(1)p 1417 1094 V 1417 1120 a(2)1456 1077 y Fr(])p Fk(b)1503
+1042 y Fe(\()p Fh(Q)p Fe(\))1503 1094 y Fd(\000)p Fe(1)1588
+1059 y Fr(\026)1590 1077 y Fk(b)1619 1042 y Fe(\()p Fh(Q)p
+Fe(\))1619 1094 y Fd(\000)p Fe(1)1705 1077 y Fk(\016)s Fr([)p
+Fk(\014)1798 1042 y Fe(\()p Fh(Q)p Fe(\))1794 1104 y Fd(\000)1843
+1086 y Fc(1)p 1843 1094 V 1843 1120 a(2)1883 1077 y Fr(])p
+Fi(j)p Fk( )r Fi(i)1990 1049 y Fh(P)2051 1077 y Fi(\012)14
+b(j)p Fk( )r Fi(i)2206 1049 y Fh(Q)2252 1077 y Fk(:)2430 993
+y Fr(\(2)p Fk(:)p Fr(11)q(\))0 1218 y(The)28 b(factor)h(of)g(\()p
+Fk(G)500 1184 y Fe(\()p Fh(P)7 b Fe(\))500 1245 y Fd(\000)550
+1228 y Fc(1)p 550 1236 V 550 1261 a(2)605 1218 y Fr(+)19 b
+Fk(G)728 1184 y Fe(\()p Fh(Q)p Fe(\))728 1245 y Fd(\000)778
+1228 y Fc(1)p 778 1236 V 778 1261 a(2)815 1218 y Fr(\))29 b(is)g(equiv)l
+(alen)n(t)g(\(up)f(to)h(the)f(Borel-am)n(biguit)n(y)i(asso)r(ciated)f(to)g
+(the)0 1337 y(3-punctured)23 b(sphere\))h(to)h(an)f(insertion)i
+Fk(G)1118 1303 y Fe(\()p Fh(N)5 b Fe(\))1118 1364 y Fd(\000)1167
+1347 y Fc(1)p 1167 1355 V 1167 1380 a(2)1210 1337 y Fr(,)25
+b(on)g(the)f(nec)n(k)g(of)h(the)f(sphere)g(that)g(is)i(pinc)n(hing)f(o\013.)0
+1437 y(E\013ectiv)n(ely)-6 b(,)20 b(w)n(e)f(can)f(replace)g(the)g(sum)h(of)g
+(t)n(w)n(o)g(con)n(tours)g(surrounding)h Fk(P)27 b Fr(and)19
+b Fk(Q)g Fr(with)g(one)f(con)n(tour)0 1537 y(surrounding)23
+b(b)r(oth)f(and)g(deformed)f(this)h(con)n(tour)g(on)n(to)g(the)g(nec)n(k)f
+(\(Fig.)i(2\).)266 2161 y(Fig.)g(2:Con)n(tour)g(manipulations.)133
+2315 y(The)c Fk(b)g Fr(and)g Fk(\016)s Fr(\()p Fk(\014)t Fr(\))e(insertions)k
+(ha)n(v)n(e)e(remo)n(v)n(ed)f(the)h(ghost)h(dep)r(endence)c(in)k(our)g(SPSs)g
+(and)f(w)n(e)g(are)0 2415 y(left)j(with)h(a)f(state)g Fi(j)516
+2398 y Ff(e)504 2415 y Fk( )s Fi(i)576 2433 y Fh(M)657 2415
+y Fr(in)g(the)f(matter)g(theory)-6 b(,)23 b(inserted)e(on)i(the)e(nec)n(k,)h
+(giv)n(en)g(b)n(y)622 2538 y Fi(j)653 2520 y Ff(e)640 2538
+y Fk( )t Fi(i)713 2556 y Fh(M)790 2538 y Fr(=)c Fk(G)912 2503
+y Fe(\()p Fh(N)5 b Fe(\))912 2565 y Fd(\000)962 2547 y Fc(1)p
+962 2555 V 962 2581 a(2)1004 2538 y Fi(j)p Fk(\033)1060 2556
+y Fh(N)1111 2538 y Fi(ih)p Fk(\033)1201 2556 y Fh(P)1245 2538
+y Fk(;)11 b(\033)1312 2556 y Fh(Q)1357 2538 y Fi(j)p Fk(G)1427
+2503 y Fe(\()p Fh(P)c Fe(\))1427 2565 y Fd(\000)1477 2547 y
+Fc(1)p 1477 2555 V 1477 2581 a(2)1514 2538 y Fi(j)p Fk( )r
+Fi(i)1603 2510 y Fh(P)1603 2556 y(M)1677 2538 y Fi(\012)15
+b(j)p Fk( )r Fi(i)1833 2506 y Fh(Q)1833 2557 y(M)1959 2538
+y Fk(:)453 b Fr(\(2)p Fk(:)p Fr(12)q(\))0 2661 y(Here)19 b
+Fi(j)p Fk(\033)211 2678 y Fh(N)262 2661 y Fi(ih)p Fk(\033)352
+2678 y Fh(P)396 2661 y Fk(;)11 b(\033)463 2678 y Fh(Q)509 2661
+y Fi(j)21 b Fr(is)g(the)f(state)g(asso)r(ciated)h(to)f(the)g(3-punctured)g
+(sphere,)g(view)n(ed)g(as)h(an)g(elemen)n(t)0 2760 y(of)f Fi(H)11
+b(\012)f(H)259 2736 y Fd(\003)299 2760 y Fi(\012)g(H)418 2736
+y Fd(\003)449 2760 y Fr(.)29 b(Since)19 b Fi(j)697 2743 y Ff(e)685
+2760 y Fk( )s Fi(i)757 2778 y Fh(M)836 2760 y Fr(is)h(the)f(highest)h(comp)r
+(onen)n(t)e(of)j(a)f(sup)r(er\014eld)f(\()p Fl(i.e.)h Fr(it)g(is)g
+Fk(G)2319 2778 y Fd(\000)2369 2761 y Fc(1)p 2369 2769 V 2369
+2794 a(2)2423 2760 y Fr(acting)0 2860 y(on)i(the)g(lo)n(w)n(est)g(comp)r
+(onen)n(t)f(of)h(a)h(sup)r(er\014eld\),)e(it)i(is)f(sup)r(ersymmetric.)133
+2960 y(Th)n(us)e(w)n(e)g(ha)n(v)n(e)h(main)n(tained)f(w)n(orld-sheet)g(sup)r
+(ersymmetry)e Fl(without)i Fr(adding)h(an)g(explicit)f(con-)0
+3060 y(tact)26 b(term)g(when)g(the)g(t)n(w)n(o)h(v)n(ertex)f(op)r(erators)h
+(coincide.)43 b(The)27 b(correction)f(to)g(the)h(\\na)-7 b(\177)-26
+b(\020v)n(e")27 b(result)0 3160 y(\(of)20 b(taking)g(the)f(OPE)h(of)g(t)n(w)n
+(o)g(\(0\)-picture)f(v)n(ertex)g(op)r(erators\))g(arises)h(not)g(from)f(an)h
+(explicit)g(con)n(tact)0 3260 y(term,)h(but)g(rather)h(from)f(a)h(prop)r(er)g
+(accoun)n(t)f(of)h(the)f(sup)r(erconformal)g(geometry)g(asso)r(ciated)h(to)g
+(the)0 3360 y(collision)31 b(of)f(t)n(w)n(o)g(punctures.)51
+b(Since)29 b(the)g(correction)f(is)i(prop)r(ortional)h(to)f
+Fk(L)2051 3326 y Fe(\()p Fh(P)7 b Fe(\))2051 3378 y Fd(\000)p
+Fe(1)2137 3360 y Fr(,)31 b(it)f(lo)r(oks)h(lik)n(e)f(a)0 3460
+y(total)c(deriv)l(ativ)n(e)g(in)g(the)e(mo)r(dulus)h(asso)r(ciated)h(to)f
+(the)g(lo)r(cation)h(of)g Fk(P)9 b Fr(.)39 b(Hence)24 b(its)i(e\013ects)e
+(can)h(b)r(e)0 3560 y Fl(simulate)m(d)d Fr(b)n(y)g(adding)h(a)f
+Fk(\016)s Fr(-function)f(con)n(tact)h(term)e(at)j(the)e(b)r(oundary)h(of)h
+(mo)r(duli)f(space.)1267 3719 y(10)p eop
+%%Page: 11 12
+11 11 bop 0 66 a Fg(3.)34 b(Concluding)28 b(Remarks)133 216
+y Fr(One)20 b(sligh)n(tly)i(puzzling)e(feature)g(of)h(our)g(calculation)h(is)
+f(that)f(the)g(dep)r(endence)e(of)j(\(2.6)p
+ (#equation.2.6) [[483 679 499 691] [1 1 1 [3 3]] [0 0 1]] pdfm (\))g(on)g
+(the)0 324 y(co)r(ordinate)h(family)h(used)e(to)h(construct)f(the)h(measure)f
+(dropp)r(ed)g(out)h(only)h(for)f(co)r(ordinate)g(families)0
+432 y(with)16 b(the)e(correct)h(asymptotic)g(b)r(eha)n(vior.)28
+b(In)15 b(the)g(b)r(osonic)h(string,)h(one)f(can)f(pro)n(v)n(e)g(that)h(the)e
+(measure)0 540 y(for)20 b(SPSs)g(is)g(completely)e(insensitiv)n(e)i(to)g(the)
+f(co)r(ordinate)g(family)h(c)n(hosen.)29 b(But)19 b(the)g(argumen)n(t)f
+(rests)0 648 y(on)24 b(the)f(fact)h(that)g(\012)g(is)h(the)e(pullbac)n(k)h
+(of)h(a)f(di\013eren)n(tial)g(form)g(on)g Fi(P)1781 666 y Fh(g)r(;n)1885
+648 y Fr(whic)n(h,)h(for)f(SPSs,)h(has)g(the)0 756 y(prop)r(ert)n(y)f(that)f
+(a\))i(it)f(is)h(constan)n(t)f(along)h(the)e(\014b)r(ers)h(of)g
+Fi(P)1510 774 y Fh(g)r(;n)1612 756 y Fi(!)e(M)1780 774 y Fh(g)r(;n)1883
+756 y Fr(and)i(b\))g(it)h(annihilates)g(the)0 863 y(v)n(ertical)c
+(directions.)30 b(In)21 b(the)g(sup)r(er)f(case,)i(ho)n(w)n(ev)n(er,)f(\012)g
+(is)h(in)g(no)f(sense)g(a)g(pullbac)n(k)h(of)f(a)h(di\013eren)n(tial)0
+971 y(form)h(on)264 954 y Ff(b)251 971 y Fi(P)297 989 y Fh(g)r(;n)376
+971 y Fr(.)33 b(Rather)22 b([17)p
+ (#reference.17) [[192 543 204 555] [1 1 1 [3 3]] [0 0 1]] pdfm (],)j(it)e
+(is)g(a)g(section)g(of)g(the)f(sheaf)h Fa(ber)34 b Fr(of)23
+b(Berezin)f(forms)h(on)2327 954 y Ff(c)2311 971 y Fi(M)2391
+989 y Fh(g)r(;n)2493 971 y Fr(and)0 1079 y(has)j(no)g(in)n(v)l(arian)n
+(tly-de\014ned)g(precursor)g(\\upstairs")g(on)1509 1062 y Ff(b)1496
+1079 y Fi(P)1542 1097 y Fh(g)r(;n)1622 1079 y Fr(.)41 b(So)25
+b(the)g(corresp)r(onding)h(argumen)n(t)0 1187 y(cannot)21 b(b)r(e)f(made)h
+(in)g(the)g(sup)r(er)g(case.)29 b(Nev)n(ertheless,)20 b(w)n(e)h(ha)n(v)n(e)g
+(seen)g(that)g(merely)f(demanding)h(the)0 1295 y(correct)h(asymptotic)i(b)r
+(eha)n(vior)g(of)g(the)f(co)r(ordinate)h(family)g(is)h(enough)e(in)i(this)f
+(case)f(to)h(remo)n(v)n(e)f(all)0 1403 y(dep)r(endence)13 b(on)j(the)f
+(\\shap)r(e")h(of)h(the)e(co)r(ordinate)h(family)g(c)n(hosen.)28
+b(P)n(erhaps)16 b(a)g(generalization)g(of)h(the)0 1510 y(argumen)n(ts)22
+b(of)h([7)p (#reference.7) [[147 446 153 458] [1 1 1 [3 3]] [0 0 1]] pdfm
+(])h(w)n(ould)f(allo)n(w)i(this)e(to)f(b)r(e)g(extended)f(globally)k(o)n(v)n
+(er)e(mo)r(duli)g(space.)31 b(If)23 b(not,)g(then)0 1618 y(it)h(migh)n(t)f
+(still)i(b)r(e)e(the)g(case)g(that)g(these)g(un)n(w)n(an)n(ted)g(con)n
+(tributions)h(are)f(actually)h(total)g(deriv)l(ativ)n(es)0
+1726 y(in)32 b(the)e(mo)r(duli)i(and,)i(hence,)e(decouple)f(an)n(yw)n(a)n(y)
+-6 b(,)35 b(although)d(that)f(is)h(hard)g(to)f(see)g(explicitly)h(in)0
+1834 y(this)23 b(particular)h(calculation.)33 b(Finally)-6
+b(,)26 b(let)d(us)g(note)g(that)g(the)f(p)r(ossible)i(dep)r(endence)c(of)j
+(the)f(string)0 1942 y(measure)d(on)g(the)h(co)r(ordinate)f(family)i(is)f
+(quite)g(distinct)g(from)f(the)g(\\in)n(tegration)i(am)n(biguit)n(y")g
+(raised)0 2050 y(in)k(the)f(literature)h(\(see)f([18)p
+ (#reference.18) [[188 349 200 361] [1 1 1 [3 3]] [0 0 1]] pdfm (,19)p
+ (#reference.19) [[203 349 215 361] [1 1 1 [3 3]] [0 0 1]] pdfm (])j(and)e
+(references)e(therein\))h(a)h(few)g(y)n(ears)g(ago.)39 b(F)-6
+b(or)26 b(the)e(in)n(tegration)0 2157 y(am)n(biguit)n(y)j(w)n(as)g(not)f
+(really)h(an)g(am)n(biguit)n(y)g(in)g(the)e(measure)g([20)p
+ (#reference.20) [[369 330 381 342] [1 1 1 [3 3]] [0 0 1]] pdfm (],)30
+b(but)c(rather,)h(an)g(am)n(biguit)n(y)g(in)0 2265 y(the)21
+b(region)h(of)g(in)n(tegration.)31 b(Here)20 b(the)h(region)h(of)g(in)n
+(tegration)h(\(de\014ned)d(b)n(y)i(some)f(cuto\013)f Fi(j)p
+Fk(t)p Fi(j)g Fk(>)e(\017)p Fr(\))j(is)0 2373 y(the)f(same;)h(it)g(is)h
+(really)f(the)f(measure)g(that)g(su\013ers)h(from)f(a)h(p)r(oten)n(tial)g(am)
+n(biguit)n(y)-6 b(.)31 b(W)-6 b(e)21 b(b)r(eliev)n(e)f(that)0
+2481 y(there)c(is,)j(in)e(fact,)i(no)e(am)n(biguit)n(y)g(so)h(long)f(as)h
+(one)e(restricts)h(oneself)g(to)g(co)r(ordinate)g(families)h(with)f(the)0
+2589 y(correct)i(asymptotic)g(b)r(eha)n(vior)h(at)g(in\014nit)n(y)h(\()p
+Fl(i.e.)f Fr(co)r(ordinate)f(families)i(whic)n(h)f(also)h(giv)n(e)f(the)f
+(correct)0 2697 y(dilaton)k(insertions\).)31 b(A)21 b(more)h(careful)g(in)n
+(v)n(estigation)h(of)g(this)g(question)f(w)n(ould)g(b)r(e)g(desirable.)133
+2805 y(What)g(are)f(the)g(implications)i(of)f(our)g(results)g(for)g
+(calculating)g(string)h(scattering)e(amplitudes?)0 2913 y(The)j(simplest)g
+(scattering)f(amplitude)h(where)f(these)g(issues)i(arise)f(is)h(the)f(4-p)r
+(oin)n(t)g(function)g(on)h(the)0 3021 y(sphere.)259 3004 y
+Ff(c)243 3021 y Fi(M)323 3039 y Fe(0)p Fh(;)p Fe(4)421 3021
+y Fr(has)h(dimension)f(1)p Fi(j)p Fr(2,)j(and)e(the)f(b)r(oundary)g(of)1638
+3004 y Ff(c)1622 3021 y Fi(M)1702 3039 y Fe(0)p Fh(;)p Fe(4)1800
+3021 y Fr(consists)h(of)g(three)e(divisors)j(of)0 3129 y(dimension)19
+b(0)p Fi(j)p Fr(2.)30 b(Eac)n(h)18 b(b)r(oundary)h(comp)r(onen)n(t)f(corresp)
+r(onds)g(to)h(the)f(sphere)g(pinc)n(hing)h(in)h(t)n(w)n(o,)g(with)0
+3237 y(t)n(w)n(o)f(punctures)f(landing)i(on)g(either)e(side)h(of)h(the)e
+(pinc)n(h.)29 b(When)19 b(all)h(of)g(the)e(punctures)g(are)h(far)g(apart,)0
+3344 y(w)n(e)27 b(can)g(c)n(ho)r(ose)g(co)r(ordinates)g(for)h(sup)r(ermo)r
+(duli)f(space)g(b)n(y)h(sa)n(ying)g(that)g(the)e(four)i(punctures)e(are)0
+3452 y(lo)r(cated)j(at)h(\(0)p Fk(;)11 b Fr(0\))31 b(\(1)p
+Fk(;)11 b(\032)627 3470 y Fe(1)658 3452 y Fr(\))p Fk(;)41 b
+Fr(\()p Fk(r)n(;)11 b Fr(0\))30 b(and)g(\()p Fi(1)p Fk(;)11
+b(\032)1207 3470 y Fe(2)1238 3452 y Fr(\).)53 b(W)-6 b(e)30
+b(also)h(demand)e(that)h(the)f(lo)r(cal)h(co)r(ordinate)0 3560
+y(at)d(eac)n(h)f(puncture)f(dep)r(end)g(only)i(on)g(the)e(mo)r(duli)i(asso)r
+(ciated)g(to)f(that)h(puncture.)41 b(Near)27 b(eac)n(h)e(of)1267
+3719 y(11)p eop
+%%Page: 12 13
+12 12 bop 0 66 a Fr(the)29 b(b)r(oundaries)g(of)h(sup)r(ermo)r(duli)e(space,)
+j(ho)n(w)n(ev)n(er,)g(these)e(co)r(ordinates)g(degenerate,)g(and)h(m)n(ust)0
+173 y(b)r(e)25 b(replaced)f(b)n(y)i(those)f(asso)r(ciated)g(to)g(the)g(pinc)n
+(hing)h(geometry)-6 b(.)39 b(The)24 b(transformations)j(b)r(et)n(w)n(een)0
+279 y(the)e(co)r(ordinates)h(\()p Fk(r)n(;)11 b(\032)592 297
+y Fe(1)623 279 y Fk(;)g(\032)686 297 y Fe(2)717 279 y Fr(\))26
+b(and)g(those)g(appropriate)g(near)g(the)f(b)r(oundary)i(m)n(ust)e(in)n(v)n
+(olv)n(e)i(a)g(non-)0 385 y(split)h(transformation)f(for)g(at)g(least)g(one)f
+(of)h(the)f(comp)r(onen)n(ts)f(of)i(the)f(b)r(oundary)-6 b(.)44
+b(In)27 b(the)f(case)g(at)0 491 y(hand,)34 b(it)e(is)g Fk(r)k
+Fi(!)f Fr(0)c(whic)n(h)h(in)n(v)n(olv)n(es)h(the)e(nonsplit)h(transformation)
+g(but,)i(ho)n(w)n(ev)n(er)d(w)n(e)g(c)n(ho)r(ose)0 598 y(to)i(co)r
+(ordinatize)f(the)g(in)n(terior)i(of)f(sup)r(ermo)r(duli)f(space,)k(it)d(is)g
+(imp)r(ossible)g(to)g(a)n(v)n(oid)h(a)f(nonsplit)0 704 y(transformation)d
+(somewhere)e([20)p
+ (#reference.20) [[220 591 232 603] [1 1 1 [3 3]] [0 0 1]] pdfm (].)52
+b(In)30 b(constructing)f(the)f(corresp)r(onding)h(string)h(measure,)h(this)0
+810 y(nonsplit)i(transformation)f(manifests)g(itself)h(as)f(a)g(correction)f
+(to)h(the)f(\\na)-7 b(\177)-26 b(\020v)n(e")33 b(measure,)g(whic)n(h)0
+917 y(restores)18 b(the)f(sup)r(erconformal)h(W)-6 b(ard)19
+b(iden)n(tities.)29 b(The)18 b(calculation)h(of)g(the)e(measure)g(in)i(the)e
+(in)n(terior)0 1023 y(of)23 b(mo)r(duli)g(space)f(is)h(easily)g(translated)g
+(in)n(to)g(the)f(con)n(v)n(en)n(tional)h(picture-c)n(hanging)g(language.)32
+b(The)0 1129 y(v)n(ertex)19 b(op)r(erators)g(at)g(1)p Fk(;)11
+b Fi(1)21 b Fr(are)e(in)h(the)f(\(0\)-picture,)g(while)h(the)e(v)n(ertex)h
+(op)r(erators)g(at)h(0)p Fk(;)11 b(r)22 b Fr(are)d(in)h(the)0
+1235 y(\()p Fi(\000)p Fr(1\)-picture.)34 b(But)23 b(the)h(picture-c)n
+(hanging)f(is)i(to)r(o)e(na)-7 b(\177)-26 b(\020v)n(e,)25 b(and)f(in)g(need)f
+(of)h(corrections)g(when)f(the)0 1342 y(t)n(w)n(o)f(\()p Fi(\000)p
+Fr(1\)-picture)f(v)n(ertex)h(op)r(erators)g(run)g(in)n(to)g(eac)n(h)g(other.)
+133 1448 y(The)i(real)i(p)r(oin)n(t)f(of)h(this)g(is)f(that,)i(in)e(general,)
+h(w)n(e)f(need)f(to)h(cut)g(o\013)g(the)g(in)n(tegration)g(b)r(ecause)0
+1554 y(the)30 b(kinematics)g(ma)n(y)g(b)r(e)g(suc)n(h)g(that)g(the)g(measure)
+f(div)n(erges)i(near)f(some)f(b)r(oundary)i(of)g(mo)r(duli)0
+1660 y(space.)e(If)20 b(w)n(e)f(simply)i(imp)r(ose)e(a)h(cuto\013)f(\()p
+Fi(j)p Fk(r)r Fi(j)g Fk(>)f(\017)p Fr(\),)j(in)f(the)f(picture-c)n(hanging)h
+(formalism,)h(w)n(e)f(obtain)0 1767 y(a)26 b(surface)g(term)e(whic)n(h)i(not)
+g(sup)r(erconformally)g(co)n(v)l(arian)n(t)g([5)p
+ (#reference.5) [[359 400 365 412] [1 1 1 [3 3]] [0 0 1]] pdfm (].)43
+b(T)-6 b(o)26 b(it,)i(Green)d(and)h(Seib)r(erg)f(w)n(ere)0
+1873 y(forced)i(to)h(add)f(a)h(con)n(tact)e(term.)45 b(A)28
+b(b)r(etter)e(approac)n(h)h(is)h(to)g(imp)r(ose)f(a)h(cuto\013)e(on)i(the)f
+(pinc)n(hing)0 1979 y(parameter)c(\()p Fi(j)p Fk(t)p Fi(j)f
+Fk(>)g(\017)p Fr(\).)35 b(The)24 b(measure)e(constructed)h(in)h(the)g(op)r
+(erator)g(formalism)g(is)h Fl(automatic)m(al)s(ly)0 2086 y
+Fr(sup)r(erconformally)e(in)n(v)l(arian)n(t.)35 b(With)24 b(this)g(c)n(hoice)
+e(of)i(cuto\013,)f(no)h(extra)f(con)n(tact)f(term)g(is)i(required.)0
+2192 y(In)f(particular,)i(the)d(con)n(tact)h(term)f(w)n(as)i(required)e(to)i
+(remo)n(v)n(e)e(the)g(con)n(tribution)i(of)g(states)f(lik)n(e)h(the)0
+2298 y(b)r(osonic)f(string)g(tac)n(h)n(y)n(on)f(whic)n(h)h(are)f(not)h(ev)n
+(en)e(in)i(the)f(sp)r(ectrum)e(of)j(the)f(fermionic)g(string)i(theory)-6
+b(.)0 2404 y(In)25 b(the)f(presen)n(t)f(formalism,)k(suc)n(h)d(states)g(are)h
+(already)g(pro)t(jected)e(out.)38 b(The)24 b Fl(only)h Fr(div)n(ergences)e
+(of)0 2511 y(the)e(string)i(measure)e(in)h(the)g(presen)n(t)f(formalism)i
+(are)f(due)f(to)h Fl(physic)m(al)g Fr(on-shell)h(p)r(oles.)1000
+2856 y Fg(Ac)n(kno)n(wledgmen)n(ts)133 2962 y Fr(W)-6 b(e)16
+b(w)n(ould)h(lik)n(e)g(to)g(thank)f(D.)g(Kutaso)n(v,)h(P)-6
+b(.)18 b(Nelson)e(and)h(H.)f(V)-6 b(erlinde)17 b(for)f(useful)h(con)n(v)n
+(ersations.)0 3068 y(This)23 b(w)n(ork)f(w)n(as)h(supp)r(orted)e(b)n(y)h(NSF)
+h(gran)n(t)f(PHY90-21984.)1267 3719 y(12)p eop
+%%Page: 13 14
+13 13 bop 1121 66 a Fg(References)7 223 y Fr([1])57 b(P)-6
+b(.)19 b(Deligne)f(and)g(D.)h(Mumford,)f(\\The)f(irreducibilit)n(y)j(of)e
+(the)g(space)f(of)i(curv)n(es)e(of)i(giv)n(en)f(gen)n(us,")133
+313 y(IHES)k(Publ.)h(Math.)f Fg(36)h Fr(\(1969\),)g(75.)7 402
+y([2])57 b(F.)41 b(Kn)n(udsen)e(and)g(D.)i(Mumford,)e(\\The)h(pro)t(jectivit)
+n(y)g(of)g(the)f(mo)r(duli)h(space)f(of)i(stable)133 492 y(curv)n(es,)22
+b(I,")h(Math.)f(Scand.)g Fg(39)h Fr(\(1976\))f(19.)7 582 y([3])57
+b(J.)22 b(P)n(olc)n(hinski,)h(\\F)-6 b(actorization)23 b(of)f(b)r(osonic)g
+(string)g(amplitudes,")g(Nucl.)g(Ph)n(ys.)g Fg(B307)h Fr(\(1988\))133
+672 y(61.)7 761 y([4])57 b(P)-6 b(.)31 b(Nelson,)g(\\Co)n(v)l(arian)n(t)g
+(insertions)g(of)g(general)f(v)n(ertex)f(op)r(erators,")h(Ph)n(ys.)h(Rev.)f
+(Lett.)g Fg(62)133 851 y Fr(\(1989\))22 b(993.)7 941 y([5])57
+b(H.S.)26 b(La)f(and)h(P)-6 b(.)26 b(Nelson,)g(\\E\013ectiv)n(e)f(\014eld)g
+(equations)h(for)g(fermionic)f(strings,")i(Nucl.)f(Ph)n(ys.)133
+1031 y Fg(B332)d Fr(\(1990\))g(83.)7 1120 y([6])57 b(J.)19
+b(Distler)g(and)g(P)-6 b(.)20 b(Nelson,)f(\\T)-6 b(op)r(ological)22
+b(couplings)d(and)g(con)n(tact)f(terms)g(in)h(2d)g(\014eld)f(theory)-6
+b(,")133 1210 y(Comm)n(un.)21 b(Math.)i(Ph)n(ys.)g Fg(138)f
+Fr(\(1991\))h(273.)7 1300 y([7])57 b(M.)30 b(Do)n(yle,)g(\\Dilaton)h(con)n
+(tact)e(terms)g(in)h(the)f(b)r(osonic)h(and)g(heterotic)e(strings,")j
+(Princeton)133 1390 y(preprin)n(t)22 b(PUPT-1296,)h(hepth)f(9201076,)i
+(submitted)d(to)h(Nucl.)g(Ph)n(ys.)h Fg(B)p Fr(.)7 1479 y([8])57
+b(J.)17 b(Distler)f(and)h(P)-6 b(.)17 b(Nelson,)g(\\The)f(dilaton)h(equation)
+f(in)h(semirigid)g(string)g(theory)-6 b(,")17 b(Nucl.)f(Ph)n(ys.)133
+1569 y Fg(B366)23 b Fr(\(1991\))g(255.)7 1659 y([9])57 b(E.)32
+b(W)-6 b(ong,)33 b(\\Recursion)e(relations)h(in)g(semirigid)g(top)r(ological)
+h(gra)n(vit)n(y",)g(P)n(enn)f(U.)f(preprin)n(t)133 1749 y(UPR-0491T,)23
+b(No)n(v.)g(1991.)-26 1838 y([10])57 b(R.)25 b(Dijkgraaf)i(and)e(E.)h
+(Witten,)f(\\Mean)g(\014eld)g(theory)-6 b(,)26 b(top)r(ological)g(\014eld)f
+(theory)-6 b(,)26 b(and)f(m)n(ulti-)133 1928 y(matrix)d(mo)r(dels,")g(Nucl.)g
+(Ph)n(ys.)i Fg(B342)f Fr(\(1990\))f(486.)-26 2018 y([11])57
+b(E.)17 b(V)-6 b(erlinde)16 b(and)g(H.)g(V)-6 b(erlinde,)17
+b(\\A)f(solution)h(of)g(t)n(w)n(o-dimensional)g(top)r(ological)h(gra)n(vit)n
+(y)-6 b(,")18 b(Nucl.)133 2108 y(Ph)n(ys.)23 b Fg(B348)g Fr(\(1991\))g(457.)
+-26 2197 y([12])57 b(M.)26 b(Green)e(and)i(N.)g(Seib)r(erg,)f(\\Con)n(tact)g
+(in)n(teractions)h(in)g(sup)r(erstring)f(theory)-6 b(,")26
+b(Nucl.)g(Ph)n(ys.)133 2287 y Fg(B299)d Fr(\(1988\))g(559.)-26
+2377 y([13])57 b(L.)24 b(Alv)l(arez-Gaum)n(\023)-31 b(e,)24
+b(C.)h(Gomez,)f(P)-6 b(.)25 b(Nelson,)g(G.)g(Sierra,)g(and)g(C.)f(V)-6
+b(afa,)26 b(\\F)-6 b(ermionic)25 b(strings)133 2466 y(in)d(the)g(op)r(erator)
+g(formalism,")h(Nucl.)f(Ph)n(ys.)h Fg(B311)g Fr(\(1988\))g(333.)-26
+2556 y([14])57 b(J.)16 b(Cohn,)h(\\Mo)r(dular)f(geometry)f(of)h(sup)r
+(erconformal)g(\014eld)f(theory)-6 b(,")17 b(Nucl.)f(Ph)n(ys.)h
+Fg(B306)g Fr(\(1988\))133 2646 y(239.)-26 2736 y([15])57 b(H.)22
+b(V)-6 b(erlinde,)23 b(priv)l(ate)f(comm)n(unication.)-26 2825
+y([16])57 b(H.)22 b(Sono)r(da)g(and)g(B.)h(Zw)n(eibac)n(h,)f(\\Co)n(v)l
+(arian)n(t)h(closed)f(string)h(theory)e(cannot)h(b)r(e)f(cubic,")h(Nucl.)133
+2915 y(Ph)n(ys.)h Fg(B336)g Fr(\(1990\))g(185.)-26 3005 y([17])57
+b(M.)22 b(Rothstein,)h(T)-6 b(rans.)23 b(AMS.)f Fg(299)h Fr(\(1987\))f(387.)
+-26 3095 y([18])57 b(J.)23 b(A)n(tic)n(k,)f(J.)h(Rabin)f(and)g(A.)h(Sen,)f
+(Nucl.)g(Ph)n(ys.)h Fg(B299)g Fr(\(1988\))g(279;)133 3184 y(H.)16
+b(V)-6 b(erlinde,)16 b(\\A)f(note)g(on)h(the)f(in)n(tegral)h(o)n(v)n(er)g
+(the)f(fermionic)g(sup)r(ermo)r(duli,")h(Utrec)n(h)n(t)e(preprin)n(t,)133
+3274 y(THU-87/26)23 b(\(1987\).)-26 3364 y([19])57 b(J.)23
+b(A)n(tic)n(k,)f(G.)h(Mo)r(ore)f(and)g(A.)g(Sen,)g(\\Catoptric)g(tadp)r
+(oles,")h(Nucl.)f(Ph)n(ys.)i Fg(B307)f Fr(\(1988\))f(221.)-26
+3454 y([20])57 b(P)-6 b(.)22 b(Nelson,)f(\\Lectures)f(on)h(sup)r(ermanifolds)
+g(&)f(strings,")j(Pro)r(ceedings)d(of)i(the)e(T)-6 b(ASI)21
+b(Summer)133 3543 y(Sc)n(ho)r(ol,)i(\(1988\).)1267 3719 y(13)p
+eop
+%%Trailer
+end
+
+userdict /end-hook known{end-hook}if
+%%EOF
+end
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/vms_build.com b/support/hypertex/tanmoy/ghostview-1.5-hacked/vms_build.com
new file mode 100644
index 0000000000..df3867c764
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/vms_build.com
@@ -0,0 +1,37 @@
+$ @lsrc:[x11]logicals.com !<<< change for your system!
+$ copy/log x11_xmu:xmushr.psects,x11_xaw:xawshr.psects,x11_xaw:user.opt gv.opt
+$ get_run = 0
+$ get_ad2c = 0
+$ if f$search("run-ad2c.").eqs."" then get_run = 1
+$ if f$search("ad2c.").eqs."" then get_ad2c = 1
+$ if get_run then cms fetch run-ad2c.
+$ if get_ad2c then cms fetch ad2c.
+$ posix/run posix$bin:sh. run-ad2c
+$ if get_run then delete run-ad2c.;*
+$ if get_ad2c then delete ad2c.;*
+$ CC /NOLIST/OBJECT=MAIN.OBJ MAIN.C
+$ If "''F$Search("GV.OLB")'" .EQS. "" Then LIBRARY/Create GV.OLB
+$ LIBRARY/REPLACE GV.OLB MAIN.OBJ
+$ CC /NOLIST/OBJECT=MISC.OBJ MISC.C
+$ If "''F$Search("GV.OLB")'" .EQS. "" Then LIBRARY/Create GV.OLB
+$ LIBRARY/REPLACE GV.OLB MISC.OBJ
+$ CC /NOLIST/OBJECT=CALLBACKS.OBJ CALLBACKS.C
+$ If "''F$Search("GV.OLB")'" .EQS. "" Then LIBRARY/Create GV.OLB
+$ LIBRARY/REPLACE GV.OLB CALLBACKS.OBJ
+$ CC /NOLIST/OBJECT=ACTIONS.OBJ ACTIONS.C
+$ If "''F$Search("GV.OLB")'" .EQS. "" Then LIBRARY/Create GV.OLB
+$ LIBRARY/REPLACE GV.OLB ACTIONS.OBJ
+$ CC /NOLIST/OBJECT=DIALOGS.OBJ DIALOGS.C
+$ If "''F$Search("GV.OLB")'" .EQS. "" Then LIBRARY/Create GV.OLB
+$ LIBRARY/REPLACE GV.OLB DIALOGS.OBJ
+$ CC /NOLIST/OBJECT=GHOSTVIEW.OBJ GHOSTVIEW.C
+$ If "''F$Search("GV.OLB")'" .EQS. "" Then LIBRARY/Create GV.OLB
+$ LIBRARY/REPLACE GV.OLB GHOSTVIEW.OBJ
+$ CC /NOLIST/OBJECT=PS.OBJ PS.C
+$ If "''F$Search("GV.OLB")'" .EQS. "" Then LIBRARY/Create GV.OLB
+$ LIBRARY/REPLACE GV.OLB PS.OBJ
+$ CC /NOLIST/OBJECT=STRCASECMP.OBJ STRCASECMP.C
+$ If "''F$Search("GV.OLB")'" .EQS. "" Then LIBRARY/Create GV.OLB
+$ LIBRARY/REPLACE GV.OLB STRCASECMP.OBJ
+$ continue
+$ LINK /TRACE/NOMAP/EXEC=GV.EXE /exe=gv.exe gv.olb/include=main/library,gv.opt/opt
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/vms_types.h b/support/hypertex/tanmoy/ghostview-1.5-hacked/vms_types.h
new file mode 100644
index 0000000000..c14395da15
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/vms_types.h
@@ -0,0 +1,351 @@
+/* DEC/CMS REPLACEMENT HISTORY, Element VMS_TYPES.H */
+/* *4 13-AUG-1992 12:49:50 TP "Added IOSB_GET_T" */
+/* *3 10-AUG-1992 14:20:29 TP "MOVE" */
+/* *2 10-AUG-1992 14:19:45 TP "MOVE" */
+/* *1 10-AUG-1992 14:19:31 TP "VMS data type definitions and macros" */
+/* DEC/CMS REPLACEMENT HISTORY, Element VMS_TYPES.H */
+/* VMS_TYPES.H
+**=============================================================================
+** Copyright (C) 1989 Jym Dyer (jym@wheaties.ai.mit.edu)
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 1, or (at your option)
+** any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**-----------------------------------------------------------------------------
+** Version: V1.0-001
+**-----------------------------------------------------------------------------
+** Facility: None
+**-----------------------------------------------------------------------------
+** Prefix: None
+**-----------------------------------------------------------------------------
+** Abstract
+** ~~~~~~~~
+** These are typedefs and macro functions for various VMS data types.
+**-----------------------------------------------------------------------------
+** Contents
+** ~~~~~~~~
+** EXIT_BLOCK_T
+** IOSB_T
+** IOSB_ACP_T
+** IOSB_CR_T
+** IOSB_DISK_T
+** IOSB_DISK_SENSEMODE_T
+** IOSB_LPA_T
+** IOSB_LP_WRITE_T
+** IOSB_LP_SETMODE_T
+** IOSB_MBX_READ_T
+** IOSB_MBX_WRITE_T
+** IOSB_MBX_SETPROTECTION_T
+** IOSB_MT_T
+** IOSB_TTY_ITEMLIST_READ_T
+** IOSB_TTY_READ_T
+** IOSB_TTY_SETSENSE_T
+** IOSB_TTY_WRITE_T
+** ITEM_2_T
+** ITEM_3_T
+** ITEM_LIST_2_T()
+** ITEM_LIST_3_T()
+**-----------------------------------------------------------------------------
+** Environment
+** ~~~~~~~~~~~
+** Should be portable to any compiler running on VMS.
+**-----------------------------------------------------------------------------
+** Author: Jym Dyer - 15-May-1989
+**-----------------------------------------------------------------------------
+** Modifications
+** ~~~~~~~~~~~~~
+** 1.0-001 - Original version. {Jym 15-May-1989}
+** 1.0-002 - Added IOSB_GET_T {Terry Poot <tp@mccall.com> 8/10/1992}
+**=============================================================================
+*/
+
+#ifndef __VMS_TYPES_H__
+#define __VMS_TYPES_H__
+
+/* -=- MACRO FUNCTIONS AND TYPEDEFS -=- */
+
+/* --- Exit Handler Block --- */
+
+/* The exit handler block is a variable-length structure. What we provide
+** here is a header for that structure. For the simplest uses (exit
+** handlers that don't take arguments) the typedef alone will suffice:
+**
+** extern void exit_function(unsigned int * status_p);
+** unsigned int exh_status;
+** . . .
+** EXIT_BLOCK_T exit_block =
+** {NULL,exit_function,0,{0,0,0},&exh_status};
+** . . .
+** void
+** exit_function(status_p)
+** unsigned int * status_p;
+** {
+** . . .
+**
+** For more complicated uses (when you want to pass several arguments to
+** the exit handler) the typedef can be used as a header in a structure:
+**
+** extern void exit_function(
+** unsigned int * status_p,int * yin_p,int * yang_p
+** );
+** unsigned int exh_status;
+** int that;
+** int this;
+** . . .
+** struct
+** {
+** EXIT_BLOCK_T header;
+** int * this_p;
+** int * that_p;
+** } = {{NULL,exit_function,0,{0,0,0},&exh_status},&this,&that};
+** . . .
+** void
+** exit_function(status_p,yin_p,yang_p)
+** unsigned int * status_p;
+** int * yin_p;
+** int * yang_p;
+** {
+** . . .
+*/
+
+typedef struct
+{
+ void * flink_p;
+ void (*exit_handler_p)();
+ unsigned char arg_count;
+ unsigned char must_be_zero[3];
+ unsigned int * status_p;
+} EXIT_BLOCK_T;
+
+/* --- All-Purpose IOSB --- */
+
+/* This all-purpose IOSB can be used for any IO function (though it could
+** be a bit of a hassle with terminal set and sense functions). Just be
+** careful with the device dependent data, remembering to use casts where
+** appropriate. Use of the other IOSB typedefs is recommended over use of
+** this one, as their fields have more relevant names.
+*/
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned short int count;
+ unsigned char device_dependent_data[4];
+} IOSB_T;
+
+/* --- Ancillary Control Process (ACP) IOSB --- */
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned short int not_used_0;
+ unsigned long int not_used_1;
+} IOSB_ACP_T;
+
+/* --- CR11 Card Reader IOSB --- */
+
+/* Identical to the all-purpose IOSB.
+*/
+
+#define IOSB_CR_T IOSB_T
+
+/* --- Disk Device IOSBs --- */
+
+/* IOSB_DISK_T is for all disk device functions except for sense mode;
+** IOSB_DISK_SENSEMODE_T is for sense mode.
+*/
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned short int byte_count_low_order;
+ unsigned short int byte_count_high_order;
+ unsigned short int zero;
+} IOSB_DISK_T;
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned short int zero;
+ unsigned char sectors;
+ unsigned char tracks;
+ unsigned short int cylinders;
+} IOSB_DISK_SENSEMODE_T;
+
+/* --- Laboratory Peripheral Accelarator (LPA) IOSB --- */
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned short int byte_count;
+ unsigned short int ready_out;
+ unsigned short int maintenance_status;
+} IOSB_LPA_T;
+
+/* --- Line Printer IOSBs --- */
+
+/* IOSB_LP_WRITE_T is for write functions; IOSB_LP_SETMODE_T is for
+** set mode functions. IOSB_LP_SETMODE_T is identical to IOSB_ACP_T.
+*/
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned short int byte_count;
+ unsigned long int num_lines_paper_moved;
+} IOSB_LP_WRITE_T;
+
+#define IOSB_LP_SETMODE_T IOSB_ACP_T
+
+/* --- Magnetic Tape IOSB --- */
+
+/* Identical to the all-purpose IOSB.
+*/
+
+#define IOSB_MT_T IOSB_T
+
+/* --- Mailbox (MBX) IOSBs --- */
+
+/* IOSB_MBX_READ_T is for the read function; IOSB_MBX_WRITE_T
+** is for the write function; IOSB_MBX_SETPROTECTION_T is for
+** the set protection function.
+*/
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned short int byte_count;
+ unsigned long int sender_pid;
+} IOSB_MBX_READ_T;
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned short int byte_count;
+ unsigned long int receiver_pid;
+} IOSB_MBX_WRITE_T;
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned short int zero;
+ unsigned long int protection_mask_value;
+} IOSB_MBX_SETPROTECTION_T;
+
+/* --- Terminal (TTY) IOSBs --- */
+
+/* IOSB_TTY_READ_T is for the read function; IOSB_TTY_ITEMLIST_READ_T
+** is for the itemlist read function; IOSB_TTY_WRITE_T is for the
+** write function; IOSB_TTY_SETSENSE_T is for the set mode, set
+** characteristscs, sense mode, and sense characteristics functions.
+*/
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned short int offset_to_terminator;
+ unsigned short int terminator;
+ unsigned short int terminator_size;
+} IOSB_TTY_READ_T;
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned short int offset_to_terminator;
+ unsigned char terminator_character;
+ unsigned char reserved;
+ unsigned char terminator_length;
+ unsigned char cursor_position_from_eol;
+} IOSB_TTY_ITEMLIST_READ_T;
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned short int byte_count;
+ unsigned short int zero_0;
+ unsigned short int zero_1;
+} IOSB_TTY_WRITE_T;
+
+typedef struct
+{
+ unsigned short int status;
+ unsigned char transmit_speed;
+ unsigned char receive_speed;
+ unsigned char cr_fill_count;
+ unsigned char lf_fill_count;
+ unsigned char parity_flags;
+ unsigned char zero;
+} IOSB_TTY_SETSENSE_T;
+
+/* Many of the VMS GETxxx system services also use IOSB's, but they are laid
+** out differently. IOSB_GET_T is such a structure. The first longword (not
+** word) is the status code, and the second word is reserved to DEC.
+*/
+
+typedef struct
+{
+ unsigned long int status;
+ unsigned long int reserved;
+} IOSB_GET_T;
+
+/* --- Item Lists --- */
+
+/* The item list structures change dynamically according to the number
+** of items in them. For this reason, typedefs (ITEM_2_T and ITEM_3_T)
+** are provided for the items, and macro functions (ITEM_LIST_2_T() and
+** ITEM_LIST_3_T()) are provided for the item lists. Here is an example
+** showing the usage of an item list macro function:
+**
+** static const ITEM_LIST_3_T(item_list,2) =
+** {
+** {
+** {sizeof pid,JPI$_PID,&pid,NULL},
+** {sizeof username,JPI$_USERNAME,&username,&username_length}
+** },
+** 0
+** };
+**
+** The number 2 means, of course, that there are two items in the
+** itemlist (i.e., the PID and the username).
+*/
+
+typedef struct
+{
+ unsigned short int component_size;
+ unsigned short int item_code;
+ void * component_p;
+} ITEM_2_T;
+
+typedef struct
+{
+ unsigned short int buffer_size;
+ unsigned short int item_code;
+ void * buffer_p;
+ unsigned short int * buffer_length_p;
+} ITEM_3_T;
+
+#define ITEM_LIST_2_T(variable_name,num_items) \
+ struct \
+ { \
+ ITEM_2_T item[num_items]; \
+ int terminating_zero; \
+ } variable_name
+
+#define ITEM_LIST_3_T(variable_name,num_items) \
+ struct \
+ { \
+ ITEM_3_T item[num_items]; \
+ int terminating_zero; \
+ } variable_name
+
+#endif /* !__VMS_TYPES_H__ */
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/xstat.h b/support/hypertex/tanmoy/ghostview-1.5-hacked/xstat.h
new file mode 100644
index 0000000000..2b4826e29b
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/xstat.h
@@ -0,0 +1,23 @@
+#include <sys/stat.h>
+#if !defined(S_ISDIR) && defined(S_IFDIR)
+#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif
+#if !defined(S_ISREG) && defined(S_IFREG)
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#endif
+#if !defined(S_ISSOCK) && defined(S_IFSOCK)
+#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+#endif
+
+#ifndef S_IXUSR
+#define S_IXUSR 0100
+#endif
+#ifndef S_IXGRP
+#define S_IXGRP 0010
+#endif
+#ifndef S_IXOTH
+#define S_IXOTH 0001
+#endif
+
+#define S_ISXXX(m) ((m) & (S_IXUSR | S_IXGRP | S_IXOTH))
+
diff --git a/support/hypertex/tanmoy/hlatex.tex b/support/hypertex/tanmoy/hlatex.tex
new file mode 100644
index 0000000000..36ddb39e50
--- /dev/null
+++ b/support/hypertex/tanmoy/hlatex.tex
@@ -0,0 +1,2 @@
+\expandafter\everyjob\expandafter{\the\everyjob\input hyperlatex\relax}%
+\dump
diff --git a/support/hypertex/tanmoy/hyperbasics.1.tex b/support/hypertex/tanmoy/hyperbasics.1.tex
new file mode 100644
index 0000000000..52653afef0
--- /dev/null
+++ b/support/hypertex/tanmoy/hyperbasics.1.tex
@@ -0,0 +1,206 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is written by Tanmoy Bhattacharya <tanmoy@qcd.lanl.gov> and %
+% is in the public domain for what it is worth. It is an interface to the %
+% xhdvi hypertext dvi previewer written by %
+% Arthur Smith <asmith@bigsky.chem.washington.edu> and available from %
+% ftp://snorri.cpac.washington.edu/pub/hypertex/xhdvi.tar.Z %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Only \hyperdef, \hyperref and \hyperREF are user callable. %
+% Usage: \hyperdef\TeXcs{category}{name}{text} %
+% Usage: \hyperREF{url}{text} %
+% Usage: \hyperref{filename}{category}{name}{text} %
+% or \hyperref\TeXcs{text} %
+% where \TeXcs has been defined by a hyperdef. %
+% %
+% Note: The token following \hyperref is expanded completely first.%
+% Really perverse forms like %
+% \csname perverse\endcsname %
+% will give an error %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The following might be useful to other macros interfacing in. %
+% Usage: \hyper@nchor{name="#myname" href="#refer"}{text} %
+% Usage: \hyperlink{target_name}{text} %
+% Usage: \hypertarget{myname}{text} %
+% In cases where there is a possibility of premature expansion use %
+% \hyper@\hyperpr@ref instead of \hyperref %
+% and \hyper@\hyperpr@def instead of \hyperdef %
+% These macros increase enormously in size when expanded, but the expanded%
+% token sequence always ends in \hyperpr@ref and \hyperpr@def respectively%
+% Macro writers might want to make use of the macro \hyperv@rsion %
+% which is undefined in version 0 and is the version number otherwise %
+% \hyper@nique is exactly like \hyperdef except no special are written %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Save the current catcode of @ and redefine @ to be a letter
+%
+\expandafter\edef\csname hypers@fe\endcsname{\catcode
+ `\noexpand@=\the\catcode`\@}%
+\catcode`\@=11
+%
+% Check if the file is already included
+%
+\ifx\hyperd@ne\hyper@ndefined
+ \global\let\hyperd@ne=\relax
+\else
+ \errhelp{hyperbasics.tex needs to be included only once outside
+ of any {...} or \begingroup...\endgroup. You have tried to
+ include it more than once. If the previous include was indeed
+ outside any groupings, continue and all will be well.}%
+ \errmessage{Input this file only once!}%
+ \endinput
+\fi
+%
+% Version number
+%
+\def\hyperv@rsion{6}%
+%
+% Check and input a previous .hrf file if it exists
+%
+\newread\hyperf@le
+\def\hyperf@lename{\jobname.hrf}%
+\immediate\openin\hyperf@le\hyperf@lename\relax
+\ifeof\hyperf@le\relax
+ \immediate\closein\hyperf@le\relax
+\else
+ \immediate\closein\hyperf@le\relax
+ \input \hyperf@lename
+\fi
+%
+% Open a new .hrf file
+%
+\newwrite\hyperf@le
+\immediate\openout\hyperf@le\hyperf@lename
+%%%%
+% MAIN SECTION
+%%%%
+%
+% define a token register
+%
+\newtoks\hypert@ks
+%
+% Define a convenient macro to hold the character #
+%
+\edef\hypert@mp{\catcode`\noexpand\#=\the\catcode`\#}%
+\catcode`\#=12
+\def\hyperh@sh{#}%
+\hypert@mp
+\let\hypert@mp=\relax
+\let\hyper@nd=\relax
+\def\hyperstr@pquote"#1"#2\hyper@nd{\ifx\hyper@ndefined#2\hyper@ndefined#1\else
+ \ifx\hyper@ndefined#1\hyper@ndefined
+ \hyperstr@pquote#2"\hyper@nd\else
+ #1\hyperstr@pquote"#2"\hyper@nd\fi\fi}%
+\def\hyperstr@pblank" #1 #2\hyper@nd"{\ifx\hyper@ndefined#2\hyper@ndefined#1\else
+ \ifx\hyper@ndefined#1\hyper@ndefined
+ \hyperstr@pblank"#2 \hyper@nd"\else
+ #1\hyperstr@pblank" #2 \hyper@nd"\fi\fi}
+%
+\long\def\hyper@nchor#1#2{\edef\hyperm@cro{html:<A #1>}%
+ \special\expandafter{\hyperm@cro}%
+ {#2}\special{html:</A>}}%
+%
+\def\hyper@atm@ning#1->#2\hyper@nd{#2}
+\def\hyperlink#1{\edef\hypert@mp{#1}%
+ \edef\hypert@mp{\expandafter\hyper@atm@ning\meaning\hypert@mp
+ \hyper@nd}%
+ \edef\hypert@mp"{ \expandafter\hyperstr@pquote\expandafter"%
+ \hypert@mp"\hyper@nd}%
+ \edef\hypert@mp{\expandafter\hyperstr@pblank\expandafter%
+ "\hypert@mp" \hyper@nd"}%
+ \hyper@nchor{href=\expandafter"\hypert@mp"}}%
+%
+\def\hypertarget#1{\edef\hypert@mp{#1}%
+ \edef\hypert@mp{\expandafter\hyper@atm@ning\meaning\hypert@mp
+ \hyper@nd}%
+ \edef\hypert@mp"{ \expandafter\hyperstr@pquote\expandafter"%
+ \hypert@mp"\hyper@nd}%
+ \edef\hypert@mp{\expandafter\hyperstr@pblank\expandafter%
+ "\hypert@mp" \hyper@nd"}%
+ \hyper@nchor{name=\expandafter"\hypert@mp"}}%
+%
+\def\hyperref{\afterassignment\hyperr@f\let\hyperp@ram}
+\def\hyperr@f{\ifx\hyperp@ram{\iffalse}\fi
+ \expandafter\expandafter\expandafter\hyperr@@
+ \expandafter{%
+ \else
+ \iffalse}\fi
+ \ifx\hyperp@ram\hyper@ndefined
+ \message{Undefined reference}%
+ \def\hyperp@r@m{{}{undefined}{}}%
+ \else
+ \edef\hyperp@r@m{\hyperp@ram}%
+ \fi
+ \expandafter\expandafter\expandafter\hyperr@@
+ \expandafter\hyperp@r@m
+ \fi}%
+% refer to #1, \hyperh@sh#2.#3 or #1\hyperh@sh#2.#3
+% depending on what is blank/nonblank
+\def\hyperr@@#1#2#3{\ifx\hyper@ndefined#1\hyper@ndefined
+ \hypert@ks\expandafter{\hyperh@sh#2.#3}%
+ \else
+ \ifx\hyper@ndefined#2#3\hyper@ndefined
+ \hypert@ks{#1}%
+ \else
+ \def\hypert@mp{#1}%
+ \hypert@ks\expandafter\expandafter\expandafter
+ {\expandafter\hypert@mp\hyperh@sh#2.#3}%
+ \fi
+ \fi
+ \hyperlink{\the\hypert@ks}}%
+%
+\def\hyperREF#1{\hyperlink{#1}}%
+%
+\def\hyperdef#1#2#3{{\global\escapechar=`\\\relax
+ \edef\hypert@mp{\hyperstr@pquote"#2.#3"\hyper@nd}%
+ \expandafter\ifx\csname hyperd@\meaning\hypert@mp
+ \endcsname
+ \relax
+ \expandafter\gdef\csname hyperd@\meaning\hypert@mp
+ \endcsname{}%
+ \gdef#1{{}{\hyperstr@pquote"#2"\hyper@nd}%
+ {\hyperstr@pquote"#3"\hyper@nd}}%
+ \immediate\write\hyperf@le{\def\noexpand#1{#1}}%
+ \xdef\hypert@mp{\global\let\noexpand\hypert@mp=\relax
+ \noexpand\hypertarget{\hypert@mp}}%
+ \global\hypert@ks={\hypert@mp}%
+ \else
+ \message\expandafter{'\hypert@mp' duplicate}%
+ \global\let\hypert@mp=\relax
+ \global\hypert@ks={\hyperdef{#1}{#2}{#3@}}%
+ \fi}\the\hypert@ks}%
+
+\def\hyper@nique#1#2#3#4{\global\escapechar=`\\\relax
+ \edef\hypert@mp{\hyperstr@pquote"#2.#3"\hyper@nd}%
+ \expandafter\ifx\csname hyperd@\meaning\hypert@mp
+ \endcsname
+ \relax
+ \gdef#1{{}{\hyperstr@pquote"#2"\hyper@nd}%
+ {\hyperstr@pquote"#3"\hyper@nd}}%
+ \global\let\hypert@mp=\relax
+ #4%
+ \else
+ \global\let\hypert@mp=\relax
+ \hyper@nique{#1}{#2}{#3@}{#4}%
+ \fi
+ }%
+
+%%%
+% protection macros
+%%%
+\let\hyper@@@@=\relax
+\def\hyper@@{\let\hyper@@@=\relax}%
+\hyper@@
+\def\hyper@{\relax\let\hyper@@@\noexpand\hyper@\noexpand}%
+\def\hyperpr@ref{\hyper@@\hyperref}
+\def\hyperpr@def{\hyper@@\hyperdef}
+
+%
+% Restore the catcode of @
+%
+\hypers@fe
+\endinput
+% A line after endinput to avoid both msdos gremlins and an incomplete
+% last line
diff --git a/support/hypertex/tanmoy/hyperbasics.new.tex b/support/hypertex/tanmoy/hyperbasics.new.tex
new file mode 100644
index 0000000000..874cda1850
--- /dev/null
+++ b/support/hypertex/tanmoy/hyperbasics.new.tex
@@ -0,0 +1,232 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is written by Tanmoy Bhattacharya <tanmoy@qcd.lanl.gov> and %
+% is in the public domain for what it is worth. It inserts \specials that %
+% are interpreted by (a) the xhdvi hypertex dvi previewer, (b) nextstep %
+% HyperTeXview.app dvi previewer, and (c) the dvipdf driver %
+% For more info, see http://xxx.lanl.gov/hypertex/ %
+% or ftp://xxx.lanl.gov/pub/hypertex/index.html %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Only \hyperdef, \hyperref , \href , and \hname are user callable. %
+% Usage: \hyperdef\TeXcs{category}{name}{text} %
+% Usage: \href{url}{text} %
+% Usage: \hyperref{filename}{category}{name}{text} %
+% or \hyperref\TeXcs{text} %
+% where \TeXcs has been defined by a hyperdef. %
+% %
+% Note: The token following \hyperref is expanded completely first.%
+% Really perverse forms like %
+% \csname perverse\endcsname %
+% will give an error %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The following might be useful to other macros interfacing in. %
+% Usage: \hyper@nchor{name="#myname" href="#refer"}{text} %
+% Usage: \hyperlink{target_name}{text} %
+% Usage: \hypertarget{myname}{text} %
+% In cases where there is a possibility of premature expansion use %
+% \hyper@\hyperpr@ref instead of \hyperref %
+% and \hyper@\hyperpr@def instead of \hyperdef %
+% These macros increase enormously in size when expanded, but the expanded%
+% token sequence always ends in \hyperpr@ref and \hyperpr@def respectively%
+% Macro writers might want to make use of the macro \hyperv@rsion %
+% which is undefined in version 0 and is the version number otherwise %
+% \hyper@nique is exactly like \hyperdef except no special are written %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Save the current catcode of @ and redefine @ to be a letter
+%
+\expandafter\edef\csname hypers@fe\endcsname{\catcode
+ `\noexpand @=\the\catcode`\@}%
+\catcode`\@=11
+%
+% Check if the file is already included
+%
+% hack to allow \allowoncemore
+\ifx\hyper@utoprocess\hyper@ndefined
+\else
+ \expandafter\hyper@utoprocess\fi
+\ifx\hyperd@ne\hyper@ndefined
+ \global\let\hyperd@ne=\relax
+\else
+ \hypers@fe
+ \errhelp{hyperbasics.tex needs to be included only once outside
+ of any {...} or \begingroup...\endgroup. You have tried to
+ include it more than once. If the previous include was indeed
+ outside any groupings, continue and all will be well.}%
+ \errmessage{Input this file only once!}%
+ \expandafter\endinput\fi
+%
+% Version number
+%
+\def\hyperv@rsion{9}%
+%
+% Check and input a previous .hrf file if it exists
+%
+\newread\hyperf@le
+\def\hyperf@lename{\jobname.hrf}%
+\immediate\openin\hyperf@le\hyperf@lename\relax
+\ifeof\hyperf@le\relax
+ \immediate\closein\hyperf@le\relax
+\else
+ \immediate\closein\hyperf@le\relax
+ \input \hyperf@lename
+\fi
+%
+% Open a new .hrf file
+%
+\newwrite\hyperf@le
+\immediate\openout\hyperf@le\hyperf@lename
+%%%%
+% MAIN SECTION
+%%%%
+%
+% define a token register
+%
+\newtoks\hypert@ks
+%
+% Define a convenient macro to hold the character #
+%
+\edef\hypert@mp{\catcode`\noexpand\%=\the\catcode`\%}
+\catcode`\%=12
+\def\hyperp@rcent{%}
+\hypert@mp
+\edef\hypert@mp{\catcode`\noexpand\#=\the\catcode`\#}%
+\catcode`\#=12
+\def\hyperh@sh{#}%
+\hypert@mp
+\let\hypert@mp=\relax
+\let\hyper@nd=\relax
+\def\hyperbl@nk{ }
+\def\hyperstr@pquote#1"#2\hyper@nd{% Call \hyperstr@pquote..."\hyper@nd
+ #1% #1 can not contain "
+ \ifx\hyper@nd#2\hyper@nd% #2 cannot contain \hyper@nd and
+ % must end in " if non-empty
+ \else\hyperp@rcent22\hyperstr@pquote#2\hyper@nd\fi}%
+\def\hyperstr@pblank#1 #2\hyper@nd{% Call \hyperstr@pblank... \hyper@nd
+ #1% #1 cannot contain a space
+ \ifx\hyper@nd#2\hyper@nd% #2 canot contain \hyper@nd and
+ % and must end in blank if nonempty
+ \else\hyperp@rcent20\hyperstr@pblank#2\hyper@nd\fi}
+%
+\long\def\hyper@nchor#1#2{\edef\hyperm@cro{html:<A #1>}%
+ \special\expandafter{\hyperm@cro}%
+ {#2}\special{html:</A>}}%
+%
+\def\hyper@atm@ning#1->#2\hyper@nd{#2}
+\def\hyperlink{\protect\hyperlink@}
+\def\hyperlink@{{\catcode`\#=12 \catcode`\%=12 \catcode`\~=12
+ \expandafter}\hyperlink@@}
+\def\hyperlink@@#1{\protect\hyperlink@@@{#1}}
+\def\hyperlink@@@#1{\edef\hypert@mp{#1}%
+ \edef\hypert@mp{\expandafter\hyper@atm@ning\meaning\hypert@mp
+ \hyper@nd}%
+ \edef\hypert@mp{\expandafter\hyperstr@pquote%
+ \hypert@mp"\hyper@nd}%
+ \edef\hypert@mp{\expandafter\expandafter\expandafter
+ \hyperstr@pblank\expandafter%
+ \hypert@mp\hyperbl@nk\hyper@nd}%
+ \hyper@nchor{href=\expandafter"\hypert@mp"}}%
+%
+\def\hypertarget#1{\edef\hypert@mp{#1}%
+ \edef\hypert@mp{\expandafter\hyper@atm@ning\meaning\hypert@mp
+ \hyper@nd}%
+ \edef\hypert@mp{\expandafter\hyperstr@pquote%
+ \hypert@mp"\hyper@nd}%
+ \edef\hypert@mp{\expandafter\expandafter\expandafter
+ \hyperstr@pblank\expandafter%
+ \hypert@mp\hyperbl@nk\hyper@nd}%
+ \hyper@nchor{name=\expandafter"\hypert@mp"}}%
+%
+\def\hyperref{\afterassignment\hyperr@f\let\hyperp@ram}
+\def\hyperr@f{\ifx\hyperp@ram{\iffalse}\fi
+ \expandafter\expandafter\expandafter\hyperr@@
+ \expandafter{%
+ \else
+ \iffalse}\fi
+ \ifx\hyperp@ram\hyper@ndefined
+ \message{Undefined reference}%
+ \def\hyperp@r@m{{}{undefined}{}}%
+ \else
+ \edef\hyperp@r@m{\hyperp@ram}%
+ \fi
+ \expandafter\expandafter\expandafter\hyperr@@
+ \expandafter\hyperp@r@m
+ \fi}%
+% refer to #1, \hyperh@sh#2.#3 or #1\hyperh@sh#2.#3
+% depending on what is blank/nonblank
+\def\hyperr@@#1#2#3{\ifx\hyper@ndefined#1\hyper@ndefined
+ \hypert@ks\expandafter{\hyperh@sh#2.#3}%
+ \else
+ \ifx\hyper@ndefined#2#3\hyper@ndefined
+ \hypert@ks{#1}%
+ \else
+ \def\hypert@mp{#1}%
+ \hypert@ks\expandafter\expandafter\expandafter
+ {\expandafter\hypert@mp\hyperh@sh#2.#3}%
+ \fi
+ \fi
+ \expandafter\hyperlink\expandafter{\the\hypert@ks}}%
+%
+% \def\hyperREF#1{\hyperlink{#1}}% % Disabled as per pg's suggestion
+%
+\def\hyperdef#1#2#3{{\escapechar=`\\\relax
+ \edef\hypert@mp{\hyperstr@pquote#2.#3"\hyper@nd}%
+ \expandafter\ifx\csname hyperd@\meaning\hypert@mp
+ \endcsname
+ \relax
+ \expandafter\gdef\csname hyperd@\meaning\hypert@mp
+ \endcsname{}%
+ \gdef#1{{}{\hyperstr@pquote#2"\hyper@nd}%
+ {\hyperstr@pquote#3"\hyper@nd}}%
+ \immediate\write\hyperf@le{\def\noexpand#1{{}%
+ {\noexpand\hyperstr@pquote#2"\noexpand\hyper@nd}%
+ {\noexpand\hyperstr@pquote#3"\noexpand\hyper@nd}}}%
+ \xdef\hypert@mp{\global\let\noexpand\hypert@mp=\relax
+ \noexpand\hypertarget{\hypert@mp}}%
+ \global\hypert@ks={\hypert@mp}%
+ \else
+ \message\expandafter{'\hypert@mp' duplicate}%
+ \global\let\hypert@mp=\relax
+ \global\hypert@ks={\hyperdef{#1}{#2}{#3@}}%
+ \fi}\the\hypert@ks}%
+
+\def\hyper@nique#1#2#3#4{{\escapechar=`\\\relax
+ \edef\hypert@mp{\hyperstr@pquote#2.#3"\hyper@nd}%
+ \expandafter\ifx\csname hyperd@\meaning\hypert@mp
+ \endcsname
+ \relax
+ \gdef#1{{}{\hyperstr@pquote#2"\hyper@nd}%
+ {\hyperstr@pquote#3"\hyper@nd}}%
+ \global\let\hypert@mp=\relax
+ #4%
+ \else
+ \global\let\hypert@mp=\relax
+ \hyper@nique{#1}{#2}{#3@}{#4}%
+ \fi}}%
+
+%%%
+% protection macros
+%%%
+\ifx\protect\hyper@ndefined\let\protect=\relax\fi
+\let\hyper@@@@=\relax
+\def\hyper@@{\let\hyper@@@=\relax}%
+\hyper@@
+\def\hyper@{\relax\let\hyper@@@\noexpand\hyper@\noexpand}%
+\def\hyperpr@ref{\hyper@@\hyperref}
+\def\hyperpr@def{\hyper@@\hyperdef}
+
+% As per pg's suggestion
+\let\href\hyperlink
+\let\hname\hypertarget
+% Hack to allow auto-processing
+\def\allowoncemore{\def\hyper@utopr@cess{\let\hyper@utoprocess=\hyper@ndefined
+ \hypers@fe\endinput}}%
+%
+% Restore the catcode of @
+%
+\hypers@fe
+\endinput
+% A line after endinput to avoid both msdos gremlins and an incomplete
+% last line
diff --git a/support/hypertex/tanmoy/hyperbasics.old.tex b/support/hypertex/tanmoy/hyperbasics.old.tex
new file mode 100644
index 0000000000..e49f9ecdc9
--- /dev/null
+++ b/support/hypertex/tanmoy/hyperbasics.old.tex
@@ -0,0 +1,190 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is written by Tanmoy Bhattacharya <tanmoy@qcd.lanl.gov> and %
+% is in the public domain for what it is worth. It is an interface to the %
+% xhdvi hypertext dvi previewer written by %
+% Arthur Smith <asmith@bigsky.chem.washington.edu> and available from %
+% ftp://snorri.cpac.washington.edu/pub/hypertex/xhdvi.tar.Z %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Only \hyperdef, \hyperref and \hyperREF are user callable. %
+% Usage: \hyperdef\TeXcs{category}{name}{text} %
+% Usage: \hyperREF{url}{text} %
+% Usage: \hyperref{filename}{category}{name}{text} %
+% or \hyperref\TeXcs{text} %
+% where \TeXcs has been defined by a hyperdef. %
+% %
+% Note: The token following \hyperref is expanded completely first.%
+% Really perverse forms like %
+% \csname perverse\endcsname %
+% will give an error %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The following might be useful to other macros interfacing in. %
+% Usage: \hyper@nchor{name="#myname" href="#refer"}{text} %
+% Usage: \hyperlink{target_name}{text} %
+% Usage: \hypertarget{myname}{text} %
+% In cases where there is a possibility of premature expansion use %
+% \hyper@\hyperpr@ref instead of \hyperref %
+% and \hyper@\hyperpr@def instead of \hyperdef %
+% These macros increase enormously in size when expanded, but the expanded%
+% token sequence always ends in \hyperpr@ref and \hyperpr@def respectively%
+% Macro writers might want to make use of the macro \hyperv@rsion %
+% which is undefined in version 0 and is the version number otherwise %
+% \hyper@nique is exactly like \hyperdef except no special are written %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Save the current catcode of @ and redefine @ to be a letter
+%
+\expandafter\edef\csname hypers@fe\endcsname{\catcode
+ `\noexpand@=\the\catcode`\@}%
+\catcode`\@=11
+%
+% Check if the file is already included
+%
+\ifx\hyperd@ne\hyper@ndefined
+ \global\let\hyperd@ne=\relax
+\else
+ \errhelp{hyperbasics.tex needs to be included only once outside
+ of any {...} or \begingroup...\endgroup. You have tried to
+ include it more than once. If the previous include was indeed
+ outside any groupings, continue and all will be well.}%
+ \errmessage{Input this file only once!}%
+ \endinput
+\fi
+%
+% Version number
+%
+\def\hyperv@rsion{3}%
+%
+% Check and input a previous .hrf file if it exists
+%
+\newread\hyperf@le
+\def\hyperf@lename{\jobname.hrf}%
+\immediate\openin\hyperf@le\hyperf@lename\relax
+\ifeof\hyperf@le\relax
+ \immediate\closein\hyperf@le\relax
+\else
+ \immediate\closein\hyperf@le\relax
+ \input \hyperf@lename
+\fi
+%
+% Open a new .hrf file
+%
+\newwrite\hyperf@le
+\immediate\openout\hyperf@le\hyperf@lename
+%%%%
+% MAIN SECTION
+%%%%
+%
+% define a token register
+%
+\newtoks\hypert@ks
+%
+% Define a convenient macro to hold the character #
+%
+\edef\hypert@mp{\catcode`\noexpand\#=\the\catcode`\#}%
+\catcode`\#=12
+\def\hyperh@sh{#}%
+\hypert@mp
+\let\hypert@mp=\relax
+\let\hyper@nd=\relax
+\def\hyperstr@pquote"#1"#2\hyper@nd{\ifx\hyper@ndefined#2\hyper@ndefined#1\else
+ \ifx\hyper@ndefined#1\hyper@ndefined
+ \hyperstr@pquote#2"\hyper@nd\else
+ #1\hyperstr@pquote"#2"\hyper@nd\fi\fi}%
+%
+\long\def\hyper@nchor#1#2{\edef\hyperm@cro{html:<A #1>}%
+ \special\expandafter{\hyperm@cro}%
+ {#2}\special{html:</A>}}%
+%
+\def\hyperlink#1{\edef\hypert@mp{#1}%
+ \hyper@nchor{href="\expandafter\hyperstr@pquote
+ \expandafter"\hypert@mp"\hyper@nd"}}%
+%
+\def\hypertarget#1{\edef\hypert@mp{#1}%
+ \hyper@nchor{name="\expandafter\hyperstr@pquote
+ \expandafter"\hypert@mp"\hyper@nd"}}%
+%
+\def\hyperref{\afterassignment\hyperr@f\let\hyperp@ram}
+\def\hyperr@f{\ifx\hyperp@ram{\iffalse}\fi
+ \expandafter\expandafter\expandafter\hyperr@@
+ \expandafter{%
+ \else
+ \iffalse}\fi
+ \ifx\hyperp@ram\hyper@ndefined
+ \message{Undefined reference}%
+ \def\hyperp@r@m{{}{undefined}{}}%
+ \else
+ \edef\hyperp@r@m{\hyperp@ram}%
+ \fi
+ \expandafter\expandafter\expandafter\hyperr@@
+ \expandafter\hyperp@r@m
+ \fi}%
+% refer to #1, \hyperh@sh#2.#3 or #1\hyperh@sh#2.#3
+% depending on what is blank/nonblank
+\def\hyperr@@#1#2#3{\ifx\hyper@ndefined#1\hyper@ndefined
+ \hypert@ks\expandafter{\hyperh@sh#2.#3}%
+ \else
+ \ifx\hyper@ndefined#2#3\hyper@ndefined
+ \hypert@ks{#1}%
+ \else
+ \def\hypert@mp{#1}%
+ \hypert@ks\expandafter\expandafter\expandafter
+ {\expandafter\hypert@mp\hyperh@sh#2.#3}%
+ \fi
+ \fi
+ \hyperlink{\the\hypert@ks}}%
+%
+\def\hyperREF#1{\hyperlink{#1}}%
+%
+\def\hyperdef#1#2#3{{\global\escapechar=`\\\relax
+ \edef\hypert@mp{\hyperstr@pquote"#2.#3"\hyper@nd}%
+ \expandafter\ifx\csname hyperd@\meaning\hypert@mp
+ \endcsname
+ \relax
+ \expandafter\gdef\csname hyperd@\meaning\hypert@mp
+ \endcsname{}%
+ \gdef#1{{}{\hyperstr@pquote"#2"\hyper@nd}%
+ {\hyperstr@pquote"#3"\hyper@nd}}%
+ \immediate\write\hyperf@le{\def\noexpand#1{#1}}%
+ \xdef\hypert@mp{\global\let\noexpand\hypert@mp=\relax
+ \noexpand\hypertarget{\hypert@mp}}%
+ \global\hypert@ks={\hypert@mp}%
+ \else
+ \message\expandafter{'\hypert@mp' duplicate}%
+ \global\let\hypert@mp=\relax
+ \global\hypert@ks={\hyperdef{#1}{#2}{#3@}}%
+ \fi}\the\hypert@ks}%
+
+\def\hyper@nique#1#2#3#4{\global\escapechar=`\\\relax
+ \edef\hypert@mp{\hyperstr@pquote"#2.#3"\hyper@nd}%
+ \expandafter\ifx\csname hyperd@\meaning\hypert@mp
+ \endcsname
+ \relax
+ \gdef#1{{}{\hyperstr@pquote"#2"\hyper@nd}%
+ {\hyperstr@pquote"#3"\hyper@nd}}%
+ \global\let\hypert@mp=\relax
+ #4%
+ \else
+ \global\let\hypert@mp=\relax
+ \hyper@nique{#1}{#2}{#3@}{#4}%
+ \fi
+ }%
+
+%%%
+% protection macros
+%%%
+\def\hyper@@{\let\hyper@@@=\relax}%
+\hyper@@
+\def\hyper@{\relax\let\hyper@@@\noexpand\hyper@\noexpand}%
+\def\hyperpr@ref{\hyper@@\hyperref}
+\def\hyperpr@def{\hyper@@\hyperdef}
+
+%
+% Restore the catcode of @
+%
+\hypers@fe
+\endinput
+% A line after endinput to avoid both msdos gremlins and an incomplete
+% last line
diff --git a/support/hypertex/tanmoy/hyperbasics.tex b/support/hypertex/tanmoy/hyperbasics.tex
new file mode 100644
index 0000000000..d0ead6383f
--- /dev/null
+++ b/support/hypertex/tanmoy/hyperbasics.tex
@@ -0,0 +1,210 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is written by Tanmoy Bhattacharya <tanmoy@qcd.lanl.gov> and %
+% is in the public domain for what it is worth. It inserts \specials that %
+% are interpreted by (a) the xhdvi hypertex dvi previewer, (b) nextstep %
+% HyperTeXview.app dvi previewer, and (c) the dvipdf driver %
+% For more info, see http://xxx.lanl.gov/hypertex/ %
+% or ftp://xxx.lanl.gov/pub/hypertex/index.html %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Only \hyperdef, \hyperref , \href , and \hname are user callable. %
+% Usage: \hyperdef\TeXcs{category}{name}{text} %
+% Usage: \href{url}{text} %
+% Usage: \hyperref{filename}{category}{name}{text} %
+% or \hyperref\TeXcs{text} %
+% where \TeXcs has been defined by a hyperdef. %
+% %
+% Note: The token following \hyperref is expanded completely first.%
+% Really perverse forms like %
+% \csname perverse\endcsname %
+% will give an error %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The following might be useful to other macros interfacing in. %
+% Usage: \hyper@nchor{name="#myname" href="#refer"}{text} %
+% Usage: \hyperlink{target_name}{text} %
+% Usage: \hypertarget{myname}{text} %
+% In cases where there is a possibility of premature expansion use %
+% \hyper@\hyperpr@ref instead of \hyperref %
+% and \hyper@\hyperpr@def instead of \hyperdef %
+% These macros increase enormously in size when expanded, but the expanded%
+% token sequence always ends in \hyperpr@ref and \hyperpr@def respectively%
+% Macro writers might want to make use of the macro \hyperv@rsion %
+% which is undefined in version 0 and is the version number otherwise %
+% \hyper@nique is exactly like \hyperdef except no special are written %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Save the current catcode of @ and redefine @ to be a letter
+%
+\expandafter\edef\csname hypers@fe\endcsname{\catcode
+ `\noexpand @=\the\catcode`\@}%
+\catcode`\@=11
+%
+% Check if the file is already included
+%
+\ifx\hyperd@ne\hyper@ndefined
+ \global\let\hyperd@ne=\relax
+\else
+ \errhelp{hyperbasics.tex needs to be included only once outside
+ of any {...} or \begingroup...\endgroup. You have tried to
+ include it more than once. If the previous include was indeed
+ outside any groupings, continue and all will be well.}%
+ \errmessage{Input this file only once!}%
+ \endinput
+\fi
+%
+% Version number
+%
+\def\hyperv@rsion{8}%
+%
+% Check and input a previous .hrf file if it exists
+%
+\newread\hyperf@le
+\def\hyperf@lename{\jobname.hrf}%
+\immediate\openin\hyperf@le\hyperf@lename\relax
+\ifeof\hyperf@le\relax
+ \immediate\closein\hyperf@le\relax
+\else
+ \immediate\closein\hyperf@le\relax
+ \input \hyperf@lename
+\fi
+%
+% Open a new .hrf file
+%
+\newwrite\hyperf@le
+\immediate\openout\hyperf@le\hyperf@lename
+%%%%
+% MAIN SECTION
+%%%%
+%
+% define a token register
+%
+\newtoks\hypert@ks
+%
+% Define a convenient macro to hold the character #
+%
+\edef\hypert@mp{\catcode`\noexpand\#=\the\catcode`\#}%
+\catcode`\#=12
+\def\hyperh@sh{#}%
+\hypert@mp
+\let\hypert@mp=\relax
+\let\hyper@nd=\relax
+\def\hyperstr@pquote"#1"#2\hyper@nd{\ifx\hyper@ndefined#2\hyper@ndefined#1\else
+ \ifx\hyper@ndefined#1\hyper@ndefined
+ \hyperstr@pquote#2"\hyper@nd\else
+ #1\hyperstr@pquote"#2"\hyper@nd\fi\fi}%
+\def\hyperstr@pblank" #1 #2\hyper@nd"{\ifx\hyper@ndefined#2\hyper@ndefined#1\else
+ \ifx\hyper@ndefined#1\hyper@ndefined
+ \hyperstr@pblank"#2 \hyper@nd"\else
+ #1\hyperstr@pblank" #2 \hyper@nd"\fi\fi}
+%
+\long\def\hyper@nchor#1#2{\edef\hyperm@cro{html:<A #1>}%
+ \special\expandafter{\hyperm@cro}%
+ {#2}\special{html:</A>}}%
+%
+\def\hyper@atm@ning#1->#2\hyper@nd{#2}
+\def\hyperlink#1{\edef\hypert@mp{#1}%
+ \edef\hypert@mp{\expandafter\hyper@atm@ning\meaning\hypert@mp
+ \hyper@nd}%
+ \edef\hypert@mp"{ \expandafter\hyperstr@pquote\expandafter"%
+ \hypert@mp"\hyper@nd}%
+ \edef\hypert@mp{\expandafter\hyperstr@pblank\expandafter%
+ "\hypert@mp" \hyper@nd"}%
+ \hyper@nchor{href=\expandafter"\hypert@mp"}}%
+%
+\def\hypertarget#1{\edef\hypert@mp{#1}%
+ \edef\hypert@mp{\expandafter\hyper@atm@ning\meaning\hypert@mp
+ \hyper@nd}%
+ \edef\hypert@mp"{ \expandafter\hyperstr@pquote\expandafter"%
+ \hypert@mp"\hyper@nd}%
+ \edef\hypert@mp{\expandafter\hyperstr@pblank\expandafter%
+ "\hypert@mp" \hyper@nd"}%
+ \hyper@nchor{name=\expandafter"\hypert@mp"}}%
+%
+\def\hyperref{\afterassignment\hyperr@f\let\hyperp@ram}
+\def\hyperr@f{\ifx\hyperp@ram{\iffalse}\fi
+ \expandafter\expandafter\expandafter\hyperr@@
+ \expandafter{%
+ \else
+ \iffalse}\fi
+ \ifx\hyperp@ram\hyper@ndefined
+ \message{Undefined reference}%
+ \def\hyperp@r@m{{}{undefined}{}}%
+ \else
+ \edef\hyperp@r@m{\hyperp@ram}%
+ \fi
+ \expandafter\expandafter\expandafter\hyperr@@
+ \expandafter\hyperp@r@m
+ \fi}%
+% refer to #1, \hyperh@sh#2.#3 or #1\hyperh@sh#2.#3
+% depending on what is blank/nonblank
+\def\hyperr@@#1#2#3{\ifx\hyper@ndefined#1\hyper@ndefined
+ \hypert@ks\expandafter{\hyperh@sh#2.#3}%
+ \else
+ \ifx\hyper@ndefined#2#3\hyper@ndefined
+ \hypert@ks{#1}%
+ \else
+ \def\hypert@mp{#1}%
+ \hypert@ks\expandafter\expandafter\expandafter
+ {\expandafter\hypert@mp\hyperh@sh#2.#3}%
+ \fi
+ \fi
+ \expandafter\hyperlink\expandafter{\the\hypert@ks}}%
+%
+% \def\hyperREF#1{\hyperlink{#1}}% % Disabled as per pg's suggestion
+%
+\def\hyperdef#1#2#3{{\global\escapechar=`\\\relax
+ \edef\hypert@mp{\hyperstr@pquote"#2.#3"\hyper@nd}%
+ \expandafter\ifx\csname hyperd@\meaning\hypert@mp
+ \endcsname
+ \relax
+ \expandafter\gdef\csname hyperd@\meaning\hypert@mp
+ \endcsname{}%
+ \gdef#1{{}{\hyperstr@pquote"#2"\hyper@nd}%
+ {\hyperstr@pquote"#3"\hyper@nd}}%
+ \immediate\write\hyperf@le{\def\noexpand#1{#1}}%
+ \xdef\hypert@mp{\global\let\noexpand\hypert@mp=\relax
+ \noexpand\hypertarget{\hypert@mp}}%
+ \global\hypert@ks={\hypert@mp}%
+ \else
+ \message\expandafter{'\hypert@mp' duplicate}%
+ \global\let\hypert@mp=\relax
+ \global\hypert@ks={\hyperdef{#1}{#2}{#3@}}%
+ \fi}\the\hypert@ks}%
+
+\def\hyper@nique#1#2#3#4{\global\escapechar=`\\\relax
+ \edef\hypert@mp{\hyperstr@pquote"#2.#3"\hyper@nd}%
+ \expandafter\ifx\csname hyperd@\meaning\hypert@mp
+ \endcsname
+ \relax
+ \gdef#1{{}{\hyperstr@pquote"#2"\hyper@nd}%
+ {\hyperstr@pquote"#3"\hyper@nd}}%
+ \global\let\hypert@mp=\relax
+ #4%
+ \else
+ \global\let\hypert@mp=\relax
+ \hyper@nique{#1}{#2}{#3@}{#4}%
+ \fi
+ }%
+
+%%%
+% protection macros
+%%%
+\let\hyper@@@@=\relax
+\def\hyper@@{\let\hyper@@@=\relax}%
+\hyper@@
+\def\hyper@{\relax\let\hyper@@@\noexpand\hyper@\noexpand}%
+\def\hyperpr@ref{\hyper@@\hyperref}
+\def\hyperpr@def{\hyper@@\hyperdef}
+
+% As per pg's suggestion
+\let\href\hyperlink
+\let\hname\hypertarget
+%
+% Restore the catcode of @
+%
+\hypers@fe
+\endinput
+% A line after endinput to avoid both msdos gremlins and an incomplete
+% last line
diff --git a/support/hypertex/tanmoy/hypercwebmac.tex b/support/hypertex/tanmoy/hypercwebmac.tex
new file mode 100644
index 0000000000..619d305f82
--- /dev/null
+++ b/support/hypertex/tanmoy/hypercwebmac.tex
@@ -0,0 +1,296 @@
+\input hyperbasics
+% standard macros for WEB listings (in addition to PLAIN.TEX)
+% $Revision: 2.1$ % Don Knuth, July 1990
+
+\parskip 0pt % no stretch between paragraphs
+\parindent 1em % for paragraphs and for the first line of C text
+
+\font\ninerm=cmr9
+\let\mc=\ninerm % medium caps
+\def\Cee{{\mc C}}
+\def\UNIX{{\mc UNIX}}
+\font\eightrm=cmr8
+\let\sc=\eightrm % small caps (NOT a caps-and-small-caps font)
+\let\mainfont=\tenrm
+\font\titlefont=cmr7 scaled\magstep4 % title on the contents page
+\font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title
+\font\tentex=cmtex10 % TeX extended character set (used in strings)
+\fontdimen7\tentex=0pt % no double space after sentences
+
+\def\\#1{\leavevmode\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\|#1{\leavevmode\hbox{$#1$}} % one-letter identifiers look better this way
+\def\&#1{\leavevmode\hbox{\bf
+ \def\_{\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em}%
+ #1\/\kern.05em}} % boldface type for reserved words
+\def\.#1{\leavevmode\hbox{\tentex % typewriter type for strings
+ \let\\=\BS % backslash in a string
+ \let\{=\LB % left brace in a string
+ \let\}=\RB % right brace in a string
+ \let\~=\TL % tilde in a string
+ \let\ =\SP % space in a string
+ \let\_=\UL % underline in a string
+ \let\&=\AM % ampersand in a string
+ \let\^=\CF % circumflex in a string
+ #1}}
+\def\){\discretionary{\hbox{\tentex\BS}}{}{}}
+\def\AT{@} % at sign for control text
+
+\chardef\AM=`\& % ampersand character in a string
+\chardef\BS=`\\ % backslash in a string
+\chardef\LB=`\{ % left brace in a string
+\chardef\RB=`\} % right brace in a string
+\def\SP{{\tt\char`\ }} % (visible) space in a string
+\chardef\TL=`\~ % tilde in a string
+\chardef\UL=`\_ % underline character in a string
+\chardef\CF=`\^ % circumflex character in a string
+
+\newbox\PPbox % symbol for ++
+\setbox\PPbox=\hbox{\kern.5pt\raise1pt\hbox{\sevenrm+\kern-1pt+}\kern.5pt}
+\def\PP{\copy\PPbox}
+\newbox\MMbox \setbox\MMbox=\hbox{\kern.5pt\raise1pt\hbox{\sevensy\char0
+ \kern-1pt\char0}\kern.5pt}
+\def\MM{\copy\MMbox}
+\newbox\MGbox % symbol for ->
+\setbox\MGbox=\hbox{\kern-2pt\lower3pt\hbox{\teni\char'176}\kern1pt}
+\def\MG{\copy\MGbox}
+\let\GG=\gg
+\let\LL=\ll
+\let\NULL=\Lambda
+\mathchardef\AND="2026 % bitwise and; also \& (unary operator)
+\let\OR=\mid % bitwise or
+\let\XOR=\oplus % bitwise exclusive or
+\def\CM{{\sim}} % bitwise complement
+\newbox\MODbox \setbox\MODbox=\hbox{\eightrm\%}
+\def\MOD{\mathbin{\copy\MODbox}}
+
+\newbox\bak \setbox\bak=\hbox to -1em{} % backspace one em
+\newbox\bakk\setbox\bakk=\hbox to -2em{} % backspace two ems
+
+\newcount\ind % current indentation in ems
+\def\1{\global\advance\ind by1\hangindent\ind em} % indent one more notch
+\def\2{\global\advance\ind by-1} % indent one less notch
+\def\3#1{\hfil\penalty#10\hfilneg} % optional break within a statement
+\def\4{\copy\bak} % backspace one notch
+\def\5{\hfil\penalty-1\hfilneg\kern2.5em\copy\bakk\ignorespaces}% optional break
+\def\6{\ifmmode\else\par % forced break
+ \hangindent\ind em\noindent\kern\ind em\copy\bakk\ignorespaces\fi}
+\def\7{\Y\6} % forced break and a little extra space
+\def\8{\hskip-\ind em\hskip 2em} % no indentation
+
+\let\yskip=\smallskip
+\def\?{\mathrel?}
+\let\hyperdoend=\relax
+\def\note#1{\Y\noindent{\def\hyperdoend{.\par}%
+ \hangindent2em\baselineskip10pt\eightrm#1%
+ \catcode`\,=\active\let\hyperjunk=}~\secref%
+ }
+\def\lapstar{\rlap{*}}
+\def\stsec{\Q\noindent{\let\*=\empty\bf\hyperdef\hypernoname
+ {section}{\modstar}{\let\*=\lapstar\modstar.}\quad}}
+\let\startsection=\stsec
+\def\defin#1{\global\advance\ind by 2 \1\&{#1 }} % begin `define' or `format'
+\def\A{\note{See also section}} % crossref for doubly defined section name
+\def\As{\note{See also sections}} % crossref for multiply defined section name
+%\def\B{\mathopen{\.{@\{}}} % begin controlled comment
+\def\C#1{\5\5\quad$/\ast\,$#1$\,\ast/$}
+\def\D{\defin{\#define}} % macro definition
+\def\ET{ and~} % conjunction between two section numbers
+\def\ETs{, and~} % conjunction between the last two of several section numbers
+\def\F{\defin{format}} % format definition
+\let\G=\ge % greater than or equal sign
+\let\I=\ne % unequal sign
+\def\J{\.{@\&}} % TANGLE's join operation
+\let\K== % can be changed to left arrow, if desired
+\let\L=\le % less than or equal sign
+\outer\def\M#1.{\MN#1.\ifon\vfil\penalty-100\vfilneg % beginning of section
+ \vskip12ptminus3pt\startsection\ignorespaces}
+\outer\def\N#1.#2.{\MN#1.\vfil\eject % beginning of starred section
+ \def\rhead{\uppercase{\ignorespaces#2}} % define running headline
+ \message{*\modno} % progress report
+ \edef\next{\write\cont{\Z{#2}{\modno}{\the\pageno}}}\next % to contents file
+ \ifon\startsection{\bf\ignorespaces#2.\quad}\ignorespaces}
+\def\MN#1.{\par % common code for \M, \N
+ {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}}
+ \ifx\modno\modstar \onmaybe \else\ontrue \fi \mark{\modno}}
+\def\O#1{\leavevmode % octal, hex or decimal constant
+ \hbox{${\def\?{\kern.2em}%
+ \def\${\ell}% long constant
+ \def\_{\cdot 10^{\aftergroup}}% power of ten
+ \def\~{\hbox{\rm\char'23\kern-.2em\it\aftergroup\?\aftergroup}}% octal
+ \def\^{\hbox{\rm\char"7D\tt\aftergroup}}#1}$}}% double quotes for hex constant
+\def\P{\rightskip=0pt plus 100pt minus 10pt % go into C mode
+ \sfcode`;=3000
+ \pretolerance 10000
+ \hyphenpenalty 9999 % so strings can be broken (a discretionary \ is inserted)
+ \exhyphenpenalty 10000
+ \global\ind=2 \1\ \unskip}
+\def\Q{\rightskip=0pt % get out of C mode
+ \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50 }
+\let\R=\lnot % logical not
+\let\S=\equiv % equivalence sign
+%\def\T{\mathclose{\.{@\ast/}}} % terminate controlled comment
+\def\U{\note{This code is used in section}} % xref for use of a section
+\def\Us{\note{This code is used in sections}} % xref for uses of a section
+\let\V=\lor % logical or
+\let\W=\land % logical and
+\def\X{{\iffalse}\fi\catcode`\,=\active\relax\Xone}
+\def\Xone#1:{\iffalse{\fi}\Xtwo#1:}
+\def\Xtwo#1:#2\X{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % section name
+ \XX$\langle\,${#2\eightrm\kern.5em{\def\hyperdoend{}%
+ \secref#1.}\iffalse}\fi$\,\rangle$\XX}
+\def\Y{\par\yskip}
+\let\Z=\let % now you can \send the control sequence \Z
+\def\=#1{\leavevmode\hbox{\kern2pt\vrule\vtop{\vbox{\hrule
+ \hbox{\strut\kern2pt\.{#1}\kern2pt}}
+ \hrule}\vrule\kern2pt}} % verbatim string
+\let\*=*
+
+\def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue
+\newif\ifon \newif\iftitle \newif\ifpagesaved
+\def\lheader{\mainfont\hyperdef\hypernoname{page}{\the\pageno}%
+ {\the\pageno}\eightrm\qquad\rhead\hfill\title\qquad
+ \tensy x\mainfont\topmark} % top line on left-hand pages
+\def\rheader{\tensy x\mainfont\topmark\eightrm\qquad\title\hfill\rhead
+ \qquad\mainfont\hyperdef\hypernoname{page}{\the\pageno}%
+ {\the\pageno}} % top line on right-hand pages
+\def\page{\box255 }
+\newbox\hyperbox
+\newif\iffooter\footerfalse
+\def\normaloutput#1#2#3{\shipout\vbox{
+ \ifodd\pageno\hoffset=\pageshift\fi
+ \vbox to\fullpageheight{
+ \iftitle\global\titlefalse
+ \else\hbox to\pagewidth{\vbox to10pt{}\ifodd\pageno #3\else#2\fi}\fi
+ \vfill#1\iffooter\vfill\box\hyperbox\fi}} % parameter #1 is the page itself
+ \global\advance\pageno by1}
+
+\def\rhead{\.{CWEB} OUTPUT} % this running head is reset by starred sections
+\def\title{} % an optional title can be set by the user
+\def\topofcontents{\centerline{\titlefont\title}
+ \vfill} % this material will start the table of contents page
+\def\botofcontents{\vfill} % this material will end the table of contents page
+\def\contentspagenumber{0} % default page number for table of contents
+\newdimen\pagewidth \pagewidth=6.5in % the width of each page
+{\boxmaxdepth=0pt\relax\global
+\setbox\hyperbox\hbox to \pagewidth{GO TO:\hfil\hyperref{}{page}{1}{first
+ page}\hfil\hyperref{}{section}{INDEX}{Index}\hfil\hyperref{}{section}%
+ {SECTIONS}{Section Names}\hfil\hyperref{}{section}{CONTENTS}{Contents}}}
+\newdimen\pageheight \pageheight=8.7in % the height of each page
+\iffooter\advance\pageheight by -\ht\hyperbox\relax\fi
+\newdimen\fullpageheight \fullpageheight=9in % page height including headlines
+\newdimen\pageshift \pageshift=0in % shift righthand pages wrt lefthand ones
+\def\magnify#1{\mag=#1\pagewidth=6.5truein\pageheight=8.7truein
+ \fullpageheight=9truein\setpage}
+\def\setpage{\hsize\pagewidth\vsize\pageheight} % use after changing page size
+\def\contentsfile{\jobname.toc} % file that gets table of contents info
+\def\readcontents{\input \jobname.toc}
+
+\newwrite\cont
+\output{\setbox0=\page % the first page is garbage
+ \openout\cont=\contentsfile
+ \write\cont{\catcode `\noexpand\@=11\relax} % \makeatletter
+ \global\output{\normaloutput\page\lheader\rheader}}
+\setpage
+\vbox to \vsize{} % the first \topmark won't be null
+
+\def\ch{\note{The following sections were changed by the change file:}
+ \let\*=\relax}
+\newbox\sbox % saved box preceding the index
+\newbox\lbox % lefthand column in the index
+\def\comma{,}
+\def\hypernoblanks#1{#1}
+\def\hypereatup#1{}
+{\global\futurelet\hyperfunny} %
+\def\hyperglobal{\ifx\hyperfunny\hyperblank
+ \global\futurelet\hyperblank\hypereatup\hyperblank
+ \else\global\let\hyperblank=\relax\fi}
+\def\hyperblankonly#1{{\setbox0=\hbox{\futurelet\hyperblank\hyperglobal#1}%
+ \hyperblank}}
+\def\hypersecref#1\hyperjunk{\def\[##1]{##1}\hyperblankonly{#1}%
+ \let\preserve=\*\let\*=\empty
+ \hyperref{}{section}%
+ {\hypernoblanks#1}{\let\*=\preserve\let\[=\hyperrestore\hypernoblanks#1}}%
+{\catcode`,=\active\relax
+\gdef\secref#1.{\let\hyperjunk=\relax%
+ \edef,{\hyperjunk\comma\noexpand\noexpand\noexpand\hypersecref}%
+ \edef\ET{\hyperjunk\ET\noexpand\noexpand\noexpand\hypersecref}%
+ \edef\ETs{\hyperjunk\ETs\noexpand\noexpand\noexpand\hypersecref}%
+ \let\hyperrestore=\[\let\[=\relax%]]
+ {\let\hyperblankonly=\relax
+ \xdef\expanded{#1\hyperjunk}}%
+ \expandafter\hypersecref\expanded\let\hyperjunk={\hyperdoend}%
+ }%
+}
+\def\inx{\par\vskip6pt plus 1fil % we are beginning the index
+ \write\cont{} % ensure that the contents file isn't empty
+ \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother
+ \closeout\cont % the contents information has been fully gathered
+ \output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi
+ \global\setbox\sbox=\page \global\pagesavedtrue}
+ \pagesavedfalse \eject % eject the page-so-far and predecessors
+ \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box
+ \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height
+ \hsize=.5\pagewidth \advance\hsize by -10pt
+ % column width for the index (20pt between cols)
+ \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines
+ \def\lr{L} % this tells whether the left or right column is next
+ \output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R}
+ \else\normaloutput{\vbox to\pageheight{\box\sbox\vss
+ \hbox to\pagewidth{\box\lbox\hfil\page}}}\lheader\rheader
+ \global\vsize\pageheight\gdef\lr{L}\global\pagesavedfalse\fi}
+ \message{Index:}
+ \parskip 0pt plus .5pt
+ \outer\def\:##1, {\par\hangindent2em\noindent##1:{\kern1em
+ \catcode`\,=\active\relax\iffalse}\fi\def\hyperdoend{}\secref} % index entry
+ \def\[##1]{$\underline{##1}$} % underlined index item
+ \hyperdef\hypernoname{section}{INDEX}{}%
+ \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar
+ \hyphenpenalty 10000 \parindent0pt}
+\def\fin{\par\vfill\eject % this is done when we are ending the index
+ \ifpagesaved\null\vfill\eject\fi % output a null index column
+ \if L\lr\else\null\vfill\eject\fi % finish the current page
+ \parfillskip 0pt plus 1fil
+ \def\rhead{NAMES OF THE SECTIONS}
+ \message{Section names:}
+ \output{\normaloutput\page\lheader\rheader}
+ \setpage
+ \def\note##1{\quad{\eightrm##1~%
+ \catcode`\,=\active\let\hyperjunk=}\def\hyperdoend{}\secref}
+ \hyperdef\hypernoname{section}{SECTIONS}{}%
+ \def\U{\note{Used in section}} % crossref for use of a section
+ \def\Us{\note{Used in sections}} % crossref for uses of a section
+ \def\:{\par\hangindent 2em}\let\*=*}
+\def\con{\par\vfill\eject % finish the section names
+ \rightskip 0pt \hyphenpenalty 50 \tolerance 200
+ \setpage
+ \output{\normaloutput\page\lheader\rheader}
+ \titletrue % prepare to output the table of contents
+ \pageno=\contentspagenumber \def\rhead{TABLE OF CONTENTS}
+ \message{Table of contents:}
+ \hyperdef\hypernoname{section}{CONTENTS}{}
+ \topofcontents
+ \line{\hfil Section\hbox to3em{\hss Page}}
+ \def\Z##1##2##3{\line{\ignorespaces##1
+ \leaders\hbox to .5em{.\hfil}\hfil\ \let\preserve=\*\let\*=\empty
+ \hyperref{}{section}{##2}{\let\*=\preserve##2}%
+ \hbox to3em{\hss\hyperref{}{page}{##3}{##3}}}}
+ \readcontents\relax % read the contents info
+ \botofcontents \end} % print the contents page(s) and terminate
+\def\noinx{\let\inx=\end} % no indexes or table of contents
+\def\nomods{\let\FIN=\fin \def\fin{\let\parfillskip=\end \FIN}}
+ % no index of module names or table of contents
+\def\nocon{\let\con=\end} % no table of contents
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\newcount\twodigits
+\def\hours{\twodigits=\time \divide\twodigits by 60 \printtwodigits
+ \multiply\twodigits by-60 \advance\twodigits by\time \printtwodigits}
+\def\gobbleone1{}
+\def\printtwodigits{\advance\twodigits100
+ \expandafter\gobbleone\number\twodigits
+ \advance\twodigits-100 }
+\def\datethis{\def\startsection{\leftline{\sc\today\ at \hours}\bigskip
+ \let\startsection=\stsec\stsec}}
+ % say `\datethis' in limbo, to get your listing timestamped
diff --git a/support/hypertex/tanmoy/hyperlatex.tex b/support/hypertex/tanmoy/hyperlatex.tex
new file mode 100644
index 0000000000..d2189980d5
--- /dev/null
+++ b/support/hypertex/tanmoy/hyperlatex.tex
@@ -0,0 +1,263 @@
+\input hyperbasics
+
+\expandafter\edef\csname hypers@fe\endcsname{\catcode
+ `\noexpand @=\the\catcode`\@}%
+\catcode`\@=11
+{\setbox0=\hbox{
+\errhelp{lhyper needs a higher revision of hyperbasics.}
+\ifx\hyperv@rsion\hyper@ndefined
+ \errmessage{Need at least version 1 of hyperbasics. You have %
+ version 0}%
+ \egroup\egroup\expandafter\stop
+\else
+ \ifnum2>\hyperv@rsion
+ \errmessage{Need at least version 1 of hyperbasics. You have %
+ version \hyperv@rsion}%
+ \egroup\egroup\expandafter\expandafter\expandafter\stop
+ \fi
+\fi}}
+
+\let\hypernoname=\relax
+% Change all places where \@currentlabel is being set.
+% Tempoarily, put a \hyperdef at precisely those points.
+\def\refstepcounter#1{\stepcounter{#1}\let\@tempa\protect
+\def\protect{\noexpand\protect\noexpand}%
+\hyperdef\hypernoname{#1}{\csname the#1\endcsname}{}%
+\edef\@currentlabel{\hyper@\hyperpr@ref\hypernoname%
+ {\csname p@#1\endcsname\csname the#1\endcsname}}%
+\let\protect\@tempa}%
+
+% Equations are special too
+\def\equation{$$% $$ BRACE MATCHING HACK
+\let\hyper@n@=\hyperdef
+\let\hyperdef=\hyper@nique\refstepcounter{equation}%
+\let\hyperdef=\hyper@n@\let\hyper@qn@=\theequation
+\def\theequation{\hyperdef\hypernoname{equation}{\hyper@qn@}{\hyper@qn@}}%
+}
+
+
+\def\eqnarray{\stepcounter{equation}%
+\global\@eqnswtrue\m@th
+\global\@eqcnt\z@\tabskip\@centering\let\\\@eqncr
+\let\hyper@qn@=\theequation
+\hyper@nique\hypernoname{equation}{\hyper@qn@}{}%
+\edef\@currentlabel{%
+\hyper@\hyperpr@ref\hypernoname{\theequation}}%
+$$%
+\def\theequation{\hyperdef\hypernoname{equation}{\hyper@qn@}{\hyper@qn@}}%
+\edef\@currentlabel{%
+\hyper@\hyperpr@ref\noexpand\hypernoname{\noexpand\hyper@qn@}}%
+\halign to\displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+% footnotes are special. We simply redefine all occurances of \@thefnmark.
+
+\def\footnote{\@ifnextchar[{\@xfootnote}{\stepcounter{\@mpfn}%
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \begingroup\let\protect\noexpand
+ \xdef\@thefnmark{{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}}\endgroup
+ \@footnotemark\@footnotetext}}
+
+\def\@xfootnote[#1]{
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \begingroup \csname c@\@mpfn\endcsname #1\relax
+ \let\protect\noexpand
+ \xdef\@thefnmark{{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}}\endgroup
+ \@footnotemark\@footnotetext}
+
+\def\footnotemark{\@ifnextchar[{\@xfootnotemark}{\stepcounter{footnote}%
+ \hyper@nique\hypernoname{footnote}{\thefootnote}{}%
+ \begingroup\let\protect\noexpand
+ \xdef\@thefnmark{{\hyper@\hyperpr@ref\hypernoname
+ {\thefootnote}}}\endgroup
+ \@footnotemark}}
+
+\def\@xfootnotemark[#1]{\begingroup \c@footnote #1\relax
+ \hyper@nique\hypernoname{footnote}{\thefootnote}{}%
+ \let\protect\noexpand
+ \xdef\@thefnmark{{\hyper@\hyperpr@ref\hypernoname
+ {\thefootnote}}}\endgroup \@footnotemark}
+
+\def\footnotetext{\@ifnextchar [{\@xfootnotenext}%
+ {\begingroup\let\protect\noexpand
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \xdef\@thefnmark{{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}}\endgroup
+ \@footnotetext}}
+
+\def\@xfootnotenext[#1]{\begingroup \csname c@\@mpfn\endcsname #1\relax
+ \let\protect\noexpand
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \xdef\@thefnmark{{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}}\endgroup \@footnotetext}
+
+
+% The footnote has to be defined when insertion being generated.
+\def\hyper@eat#1\hyperpr@ref#2#3#4#5{#5}%
+\def\hyperstr@pcurly#1{#1}%
+\long\def\@footnotetext#1{\insert\footins{\reset@font\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
+ {\edef\@thefnmark{\expandafter\expandafter\expandafter
+ \hyper@eat\expandafter\hyperstr@pcurly\@thefnmark}%
+ \edef\@thefnmark{\noexpand\hyperdef\noexpand\hypernoname{footnote}%
+ {\@thefnmark}{\@thefnmark}}%
+ \@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}}
+
+% Similarly references are special
+\def\@lbibitem[#1]#2{\item[{\def\protect{}\xdef\hypert@mp{#1}}%
+ \edef\hypert@mp{\hypert@mp}%
+ \edef\hypert@mp{\hypert@mp}%
+ \hyperdef\hypernoname{reference}{\hypert@mp}%
+ {\@biblabel{#1}}\global\let\hypert@mp=\relax\hfill]\if@filesw
+ {\def\protect##1{\string ##1\space}\immediate
+ \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
+
+\def\@bibitem#1{\@noitemargtrue\@item
+ [\hyperdef\hypernoname{reference}{\the\value{\@listctr}}%
+ {\the\value{\@listctr}}]\if@filesw \immediate\write\@auxout
+ {\string\bibcite{#1}{\the\value{\@listctr}}}\fi\ignorespaces}
+
+\def\bibcite#1#2{\expandafter\xdef\csname b@#1\endcsname{\hyper@\hyperpr@ref
+ {}{reference}{#2}{#2}}%
+ \expandafter\gdef\csname hyperb@#1\endcsname{#2}}
+
+
+%
+% Sectioning macros
+%
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty\else
+ \let\hyper@n@=\hyperdef
+ \let\hyperdef=\hyper@nique
+ \refstepcounter{#1}%
+ \let\hyperdef=\relax\let\hypernoname=\relax
+ \edef\@svsec{\hyperdef\hypernoname{#1}%
+ {\csname the#1\endcsname}{\csname the#1\endcsname\hskip 1em}}%
+ \let\hyperdef=\hyper@n@\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\hbox{\hskip1pt\relax\csname the#1\endcsname}%
+ }\hskip-1pt\relax}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\relax %% \relax added 2 May 90
+ \@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\hbox{\hskip1pt\relax\csname the#1\endcsname}%
+ }\hskip-1pt\relax}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+%
+% Captions
+%
+\def\caption{\let\hyper@n@=\hyperdef
+ \let\hyperdef=\hyper@nique
+ \refstepcounter\@captype
+ \let\hyperdef=\hyper@n@
+ \@dblarg{\@caption\@captype}}
+\long\def\@caption#1[#2]#3{\par\begingroup
+ \@parboxrestore
+ \normalsize
+ \@makecaption{\hyperdef\hypernoname{#1}{\csname the#1\endcsname}%
+ {\csname fnum@#1\endcsname}}{\ignorespaces #3}\par
+ \addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}%
+ \endgroup}
+
+%
+% toc
+%
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\reset@font %% RmS 91/08/15
+ \normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth
+ {\let\label\@gobble \let\index\@gobble
+ \let\glossary\@gobble %% 21 Jun 91
+ {\edef\thepage{\noexpand\hyperdef
+ \noexpand\hyperj@nk
+ {page}{\thepage}{\thepage}}%
+ \@thehead}}}% %% 22 Feb 87
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\let\label\@gobble
+ \let\index\@gobble %% 22 Feb 87
+ \let\glossary\@gobble %% 21 Jun 91
+ {\edef\thepage{\noexpand\hyperdef
+ \noexpand\hyperj@nk{page}{\thepage}{\thepage}}%
+ \@thefoot}%
+ }}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
+
+
+\edef\contentsline#1#2#3{\noexpand\hyper@nique\noexpand\hypernoname
+ {page}{#3}{}%
+ \noexpand\csname l@#1\noexpand\endcsname{#2}%
+ {\hyper@\hyperpr@ref\noexpand\hypernoname{#3}}}
+
+% Some style files change this setup. After loading a style file check if
+% the corresponding .hty file exists. Load it in that case.
+\newread\hyper@inputcheck
+\def\hyper@nput #1.sty{\input #1.sty\relax
+ \immediate\openin\hyper@inputcheck #1.hty\relax
+ \ifeof\hyper@inputcheck\relax
+ \immediate\closein\hyper@inputcheck\relax
+ \else\immediate\closein\hyper@inputcheck\relax
+ \input #1.hty\relax
+ \fi}%
+\def\@documentstyle[#1]#2{\makeatletter
+ \def\@optionlist{#1}\gdef\@optionfiles{}\hyper@nput #2.sty\relax
+ \let\@elt\hyper@nput \@optionfiles \let\@elt\relax \makeatother}
+
+\def\hyper@pen#1{\immediate\openin\hyper@inputcheck #1.hty\relax
+ \ifeof\hyper@inputcheck\relax
+ \immediate\closein\hyper@inputcheck\relax
+ \else\immediate\closein\hyper@inputcheck\relax
+ \input #1.hty\relax
+ \fi}
+
+\def\enddocument{\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef {hyperb}}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+\hypers@fe
+\endinput
+% Leave this line in the file
diff --git a/support/hypertex/tanmoy/hyperncwebmac.tex b/support/hypertex/tanmoy/hyperncwebmac.tex
new file mode 100644
index 0000000000..67c24623c1
--- /dev/null
+++ b/support/hypertex/tanmoy/hyperncwebmac.tex
@@ -0,0 +1,373 @@
+% standard macros for CWEB listings (in addition to plain.tex)
+% Version 3.0 --- June 1993
+\ifx\documentstyle\undefined\else\endinput\fi % LaTeX will use other macros
+\xdef\fmtversion{\fmtversion+CWEB3.0}
+\input hyperbasics.tex
+
+\let\:=\. % preserve a way to get the dot accent
+ % (all other accents will still work as usual)
+
+\parskip 0pt % no stretch between paragraphs
+\parindent 1em % for paragraphs and for the first line of C text
+
+\font\ninerm=cmr9
+\let\mc=\ninerm % medium caps
+\def\CEE/{{\mc C\spacefactor1000}}
+\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}}
+\def\TEX/{\TeX}
+\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}}
+\def\Cee{\CEE/} % for backward compatibility
+\def\9#1{}
+\font\eightrm=cmr8
+\let\sc=\eightrm % small caps (NOT a caps-and-small-caps font)
+\let\mainfont=\tenrm
+\let\cmntfont\tenrm
+%\font\tenss=cmss10 \let\cmntfont\tenss % alternative comment font
+\font\titlefont=cmr7 scaled\magstep4 % title on the contents page
+\font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title
+\font\tentex=cmtex10 % TeX extended character set (used in strings)
+\fontdimen7\tentex=0pt % no double space after sentences
+
+\def\\#1{\leavevmode\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\|#1{\leavevmode\hbox{$#1$}} % one-letter identifiers look better this way
+\def\&#1{\leavevmode\hbox{\bf
+ \def\_{\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em}%
+ #1\/\kern.05em}} % boldface type for reserved words
+\def\.#1{\leavevmode\hbox{\tentex % typewriter type for strings
+ \let\\=\BS % backslash in a string
+ \let\{=\LB % left brace in a string
+ \let\}=\RB % right brace in a string
+ \let\~=\TL % tilde in a string
+ \let\ =\SP % space in a string
+ \let\_=\UL % underline in a string
+ \let\&=\AM % ampersand in a string
+ \let\^=\CF % circumflex in a string
+ #1\kern.05em}}
+\def\){\discretionary{\hbox{\tentex\BS}}{}{}}
+\def\AT{@} % at sign for control text (not needed in versions >= 2.9)
+\def\ATL{\par\noindent\bgroup\catcode`\_=12 \postATL} % print @l in limbo
+\def\postATL#1 #2 {\bf letter \\{\uppercase{\char"#1}}
+ tangles as \tentex "#2"\egroup\par}
+\def\noATL#1 #2 {}
+\def\noatl{\let\ATL=\noATL} % suppress output from @l
+\def\ATH{\X\kern-.5em:Preprocessor definitions\X}
+\let\PB=\relax % hook for program brackets |...| in TeX part or section name
+
+\chardef\AM=`\& % ampersand character in a string
+\chardef\BS=`\\ % backslash in a string
+\chardef\LB=`\{ % left brace in a string
+\chardef\RB=`\} % right brace in a string
+\def\SP{{\tt\char`\ }} % (visible) space in a string
+\chardef\TL=`\~ % tilde in a string
+\chardef\UL=`\_ % underline character in a string
+\chardef\CF=`\^ % circumflex character in a string
+
+\newbox\PPbox % symbol for ++
+\setbox\PPbox=\hbox{\kern.5pt\raise1pt\hbox{\sevenrm+\kern-1pt+}\kern.5pt}
+\def\PP{\copy\PPbox}
+\newbox\MMbox \setbox\MMbox=\hbox{\kern.5pt\raise1pt\hbox{\sevensy\char0
+ \kern-1pt\char0}\kern.5pt}
+\def\MM{\copy\MMbox}
+\newbox\MGbox % symbol for ->
+\setbox\MGbox=\hbox{\kern-2pt\lower3pt\hbox{\teni\char'176}\kern1pt}
+\def\MG{\copy\MGbox}
+\def\MRL#1{\mathrel{\let\K==#1}}
+%\def\MRL#1{\KK#1}\def\KK#1#2{\buildrel\;#1\over{#2}}
+\let\GG=\gg
+\let\LL=\ll
+\let\NULL=\Lambda
+\mathchardef\AND="2026 % bitwise and; also \& (unary operator)
+\let\OR=\mid % bitwise or
+\let\XOR=\oplus % bitwise exclusive or
+\def\CM{{\sim}} % bitwise complement
+\newbox\MODbox \setbox\MODbox=\hbox{\eightrm\%}
+\def\MOD{\mathbin{\copy\MODbox}}
+\def\DC{\kern.1em{::}\kern.1em} % symbol for ::
+\def\PA{\mathbin{.*}} % symbol for .*
+\def\MGA{\mathbin{\MG*}} % symbol for ->*
+\def\this{\&{this}}
+
+\newbox\bak \setbox\bak=\hbox to -1em{} % backspace one em
+\newbox\bakk\setbox\bakk=\hbox to -2em{} % backspace two ems
+
+\newcount\ind % current indentation in ems
+\def\1{\global\advance\ind by1\hangindent\ind em} % indent one more notch
+\def\2{\global\advance\ind by-1} % indent one less notch
+\def\3#1{\hfil\penalty#10\hfilneg} % optional break within a statement
+\def\4{\copy\bak} % backspace one notch
+\def\5{\hfil\penalty-1\hfilneg\kern2.5em\copy\bakk\ignorespaces}% optional break
+\def\6{\ifmmode\else\par % forced break
+ \hangindent\ind em\noindent\kern\ind em\copy\bakk\ignorespaces\fi}
+\def\7{\Y\6} % forced break and a little extra space
+\def\8{\hskip-\ind em\hskip 2em} % no indentation
+
+\newcount\gdepth % depth of current major group, plus one
+\newcount\secpagedepth
+\secpagedepth=3 % page breaks will occur for depths -1, 0, and 1
+\newtoks\gtitle % title of current major group
+\newskip\intersecskip \intersecskip=12pt minus 3pt % space between sections
+\let\yskip=\smallskip
+\def\?{\mathrel?}
+\def\note#1{\Y\noindent{\def\hyperdoend{.\par}%
+ \hangindent2em\baselineskip10pt\eightrm#1%
+ \catcode`\,=\active\let\hyperjunk=}~\secref%
+ }
+\def\lapstar{\rlap{*}}
+\def\stsec{\rightskip=0pt % get out of C mode (cf. \B)
+ \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50
+ \noindent{\let\*=\empty\bf\hyperdef\hypernoname
+ {section}{\secstar}{\let\*=\lapstar\bf\secstar.}\quad}}
+\let\startsection=\stsec
+\def\defin#1{\global\advance\ind by 2 \1\&{#1 } } % begin `define' or `format'
+\def\A{\note{See also section}} % xref for doubly defined section name
+\def\As{\note{See also sections}} % xref for multiply defined section name
+\def\B{\rightskip=0pt plus 100pt minus 10pt % go into C mode
+ \sfcode`;=3000
+ \pretolerance 10000
+ \hyphenpenalty 9999 % so strings can be broken (discretionary \ is inserted)
+ \exhyphenpenalty 10000
+ \global\ind=2 \1\ \unskip}
+\def\C#1{\5\5\quad$/\ast\,${\cmntfont #1}$\,\ast/$}
+\let\SHC\C % "// short comments" treated like "/* ordinary comments */"
+%\def\C#1{\5\5\quad$\triangleright\,${\cmntfont#1}$\,\triangleleft$}
+%\def\SHC#1{\5\5\quad$\diamond\,${\cmntfont#1}}
+\def\D{\defin{\#define}} % macro definition
+\let\E=\equiv % equivalence sign
+\def\ET{ and~} % conjunction between two section numbers
+\def\ETs{, and~} % conjunction between the last two of several section numbers
+\def\F{\defin{format}} % format definition
+\let\G=\ge % greater than or equal sign
+% \H is long Hungarian umlaut accent
+\let\I=\ne % unequal sign
+\def\J{\.{@\&}} % TANGLE's join operation
+\let\K== % assignment operator
+%\let\K=\leftarrow % "honest" alternative to standard assignment operator
+% \L is Polish letter suppressed-L
+\outer\def\M#1{\MN{#1}\ifon\vfil\penalty-100\vfilneg % beginning of section
+ \vskip\intersecskip\startsection\ignorespaces}
+\outer\def\N#1#2#3.{\gdepth=#1\gtitle={#3}\MN{#2}% beginning of starred section
+ \ifon\ifnum#1<\secpagedepth \vfil\eject % force page break if depth is small
+ \else\vfil\penalty-100\vfilneg\vskip\intersecskip\fi\fi
+ \message{*\secno} % progress report
+ \edef\next{\write\cont{\ZZ{#3}{#1}{\secno}% write to contents file
+ {\noexpand\the\pageno}}}\next % \ZZ{title}{depth}{sec}{page}
+ \ifon\startsection{\bf#3.\quad}\ignorespaces}
+\def\MN#1{\par % common code for \M, \N
+ {\xdef\secstar{#1}\let\*=\empty\xdef\secno{#1}}% remove \* from section name
+ \ifx\secno\secstar \onmaybe \else\ontrue \fi
+ \mark{{{\tensy x}\secno}{\the\gdepth}{\the\gtitle}}}
+% each \mark is {section reference or null}{depth plus 1}{group title}
+% \O is Scandinavian letter O-with-slash
+% \P is paragraph sign
+\def\Q{\note{This code is cited in section}} % xref for mention of a section
+\def\Qs{\note{This code is cited in sections}} % xref for mentions of a section
+\let\R=\lnot % logical not
+% \S is section sign
+\def\T#1{\leavevmode % octal, hex or decimal constant
+ \hbox{$\def\?{\kern.2em}%
+ \def\$##1{\egroup_{\,\rm##1}\bgroup}% suffix to constant
+ \def\_{\cdot 10^{\aftergroup}}% power of ten (via dirty trick)
+ \let\~=\oct \let\^=\hex {#1}$}}
+\def\U{\note{This code is used in section}} % xref for use of a section
+\def\Us{\note{This code is used in sections}} % xref for uses of a section
+\let\V=\lor % logical or
+\let\W=\land % logical and
+\def\X{{\iffalse}\fi\catcode`\,=\active\relax\Xone}
+\def\Xone#1:{\iffalse{\fi}\Xtwo#1:}
+\def\Xtwo#1:#2\X{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % section name
+ \XX$\langle\,${#2\eightrm\kern.5em{\def\hyperdoend{}%
+ \secref#1.}\iffalse}\fi$\,\rangle$\XX}
+\def\Y{\par\yskip}
+\let\Z=\le
+\let\ZZ=\let % now you can \write the control sequence \ZZ
+\let\*=*
+
+%\def\oct{\hbox{\rm\char'23\kern-.2em\it\aftergroup\?\aftergroup}} % WEB style
+%\def\hex{\hbox{\rm\char"7D\tt\aftergroup}} % WEB style
+\def\oct{\hbox{$^\circ$\kern-.1em\it\aftergroup\?\aftergroup}}% CWEB style
+\def\hex{\hbox{$^{\scriptscriptstyle\#}$\tt\aftergroup}} % CWEB style
+\def\vb#1{\leavevmode\hbox{\kern2pt\vrule\vtop{\vbox{\hrule
+ \hbox{\strut\kern2pt\.{#1}\kern2pt}}
+ \hrule}\vrule\kern2pt}} % verbatim string
+
+\def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue
+\newif\ifon \newif\iftitle \newif\ifpagesaved
+
+\def\lheader{\mainfont\hyperdef\hypernoname{page}{\the\pageno}%
+ {\the\pageno}\eightrm\qquad\grouptitle\hfill\title\qquad
+ \mainfont\topsecno} % top line on left-hand pages
+\def\rheader{\mainfont\topsecno\eightrm\qquad\title\hfill\grouptitle
+ \qquad\mainfont\hyperdef\hypernoname{page}{\the\pageno}%
+ {\the\pageno}} % top line on right-hand pages
+\def\grouptitle{\let\i=I\let\j=J\uppercase\expandafter{\expandafter
+ \takethree\topmark}}
+\def\topsecno{\expandafter\takeone\topmark}
+\def\takeone#1#2#3{#1}
+\def\taketwo#1#2#3{#2}
+\def\takethree#1#2#3{#3}
+\def\nullsec{\eightrm\kern-2em} % the \kern-2em cancels \qquad in headers
+
+\let\page=\pagebody \raggedbottom
+% \def\page{\box255 }\normalbottom % faster, but loses plain TeX footnotes
+\def\normaloutput#1#2#3{\shipout\vbox{
+ \ifodd\pageno\hoffset=\pageshift\fi
+ \vbox to\fullpageheight{
+ \iftitle\global\titlefalse
+ \else\hbox to\pagewidth{\vbox to10pt{}\ifodd\pageno #3\else#2\fi}\fi
+ \vfill#1}} % parameter #1 is the page itself
+ \global\advance\pageno by1}
+
+\gtitle={\.{CWEB} output} % this running head is reset by starred sections
+\mark{\noexpand\nullsec0{\the\gtitle}}
+\def\title{\expandafter\uppercase\expandafter{\jobname}}
+\def\topofcontents{\centerline{\titlefont\title}\vskip.7in
+ \vfill} % this material will start the table of contents page
+\def\botofcontents{\vfill
+ \centerline{\covernote}} % this material will end the table of contents page
+\def\covernote{}
+\def\contentspagenumber{0} % default page number for table of contents
+\newdimen\pagewidth \pagewidth=6.5in % the width of each page
+\newdimen\pageheight \pageheight=8.7in % the height of each page
+\newdimen\fullpageheight \fullpageheight=9in % page height including headlines
+\newdimen\pageshift \pageshift=0in % shift righthand pages wrt lefthand ones
+\def\magnify#1{\mag=#1\pagewidth=6.5truein\pageheight=8.7truein
+ \fullpageheight=9truein\setpage}
+\def\setpage{\hsize\pagewidth\vsize\pageheight} % use after changing page size
+\def\contentsfile{\jobname.toc} % file that gets table of contents info
+\def\readcontents{\input \contentsfile}
+\def\readindex{\input \jobname.idx}
+\def\readsections{\input \jobname.scn}
+
+\newwrite\cont
+\output{\setbox0=\page % the first page is garbage
+ \openout\cont=\contentsfile
+ \write\cont{\catcode `\noexpand\@=11\relax} % \makeatletter
+ \global\output{\normaloutput\page\lheader\rheader}}
+\setpage
+\vbox to \vsize{} % the first \topmark won't be null
+
+\def\ch{\note{The following sections were changed by the change file:}
+ \let\*=\relax}
+\newbox\sbox % saved box preceding the index
+\newbox\lbox % lefthand column in the index
+\def\comma{,}
+\def\hypernoblanks#1{#1}
+\def\hypereatup#1{}
+{\global\futurelet\hyperfunny} %
+\def\hyperglobal{\ifx\hyperfunny\hyperblank
+ \global\futurelet\hyperblank\hypereatup\hyperblank
+ \else\global\let\hyperblank=\relax\fi}
+\def\hyperblankonly#1{{\setbox0=\hbox{\futurelet\hyperblank\hyperglobal#1}%
+ \hyperblank}}
+\def\hypersecref#1\hyperjunk{\def\[##1]{##1}\hyperblankonly{#1}%
+ \let\preserve=\*\let\*=\empty
+ \hyperref{}{section}%
+ {\hypernoblanks#1}{\let\*=\preserve\let\[=\hyperrestore\hypernoblanks#1}}%
+{\catcode`,=\active\relax
+\gdef\secref#1.{\let\hyperjunk=\relax%
+ \edef,{\hyperjunk\comma\noexpand\noexpand\noexpand\hypersecref}%
+ \edef\ET{\hyperjunk\ET\noexpand\noexpand\noexpand\hypersecref}%
+ \edef\ETs{\hyperjunk\ETs\noexpand\noexpand\noexpand\hypersecref}%
+ \let\hyperrestore=\[\let\[=\relax%]]
+ {\let\hyperblankonly=\relax
+ \xdef\expanded{#1\hyperjunk}}%
+ \expandafter\hypersecref\expanded\let\hyperjunk={\hyperdoend}%
+ }%
+}
+\def\inx{\par\vskip6pt plus 1fil % we are beginning the index
+ \def\page{\box255 } \normalbottom
+ \write\cont{} % ensure that the contents file isn't empty
+ \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother
+ \closeout\cont % the contents information has been fully gathered
+ \output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi
+ \global\setbox\sbox=\page \global\pagesavedtrue}
+ \pagesavedfalse \eject % eject the page-so-far and predecessors
+ \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box
+ \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height
+ \hsize=.5\pagewidth \advance\hsize by -10pt
+ % column width for the index (20pt between cols)
+ \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines
+ \def\lr{L} % this tells whether the left or right column is next
+ \output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R}
+ \else\normaloutput{\vbox to\pageheight{\box\sbox\vss
+ \hbox to\pagewidth{\box\lbox\hfil\page}}}\lheader\rheader
+ \global\vsize\pageheight\gdef\lr{L}\global\pagesavedfalse\fi}
+ \message{Index:}
+ \parskip 0pt plus .5pt
+ \outer\def\I##1, {\par\hangindent2em\noindent##1:{\kern1em
+ \catcode`\,=\active\relax\iffalse}\fi\def\hyperdoend{}\secref} % index entry
+ \def\[##1]{$\underline{##1}$} % underlined index item
+ \hyperdef\hypernoname{section}{INDEX}{}%
+ \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar
+ \hyphenpenalty 10000 \parindent0pt
+ \readindex}
+\def\fin{\par\vfill\eject % this is done when we are ending the index
+ \ifpagesaved\null\vfill\eject\fi % output a null index column
+ \if L\lr\else\null\vfill\eject\fi % finish the current page
+ \parfillskip 0pt plus 1fil
+ \def\grouptitle{NAMES OF THE SECTIONS}
+ \let\topsecno=\nullsec
+ \message{Section names:}
+ \output={\normaloutput\page\lheader\rheader}
+ \setpage
+ \def\note##1{\quad{\eightrm##1~%
+ \catcode`\,=\active\let\hyperjunk=}\def\hyperdoend{}\secref}
+ \hyperdef\hypernoname{section}{SECTIONS}{}%
+ \def\Q{\note{Cited in section}} % crossref for mention of a section
+ \def\Qs{\note{Cited in sections}} % crossref for mentions of a section
+ \def\U{\note{Used in section}} % crossref for use of a section
+ \def\Us{\note{Used in sections}} % crossref for uses of a section
+ \def\I{\par\hangindent 2em}\let\*=*
+ \readsections}
+\def\con{\par\vfill\eject % finish the section names
+% \ifodd\pageno\else\titletrue\null\vfill\eject\fi % for duplex printers
+ \rightskip 0pt \hyphenpenalty 50 \tolerance 200
+ \setpage \output={\normaloutput\page\lheader\rheader}
+ \titletrue % prepare to output the table of contents
+ \pageno=\contentspagenumber
+ \def\grouptitle{TABLE OF CONTENTS}
+ \message{Table of contents:}
+ \hyperdef\hypernoname{section}{CONTENTS}{}
+ \topofcontents
+ \line{\hfil Section\hbox to3em{\hss Page}}
+ \let\ZZ=\contentsline
+ \readcontents\relax % read the contents info
+ \botofcontents \end} % print the contents page(s) and terminate
+\def\contentsline#1#2#3#4{\ifnum#2=0 \smallbreak\fi
+ \line{\consetup{#2}#1
+ \rm\leaders\hbox to .5em{.\hfil}\hfil\ %
+ \let\preserve=\*\let\*=\empty
+ \hyperref{}{section}{#3}{\let\*=\preserve#3}\hbox to3em{\hss
+ \hyperref{}{page}{#4}{\let\*=\preserve#4}}}}
+\def\consetup#1{\ifcase#1 \bf % depth -1 (@**)
+ \or % depth 0 (@*)
+ \or \hskip2em % depth 1 (@*1)
+ \or \hskip4em % depth 2 (@*2)
+ \or \hskip6em % depth 3 (@*3)
+ \or \hskip8em % depth 4 (@*4)
+ \or \hskip10em % depth 5 (@*5)
+ \else \hskip12em \fi} % depth 6 or more
+\def\noinx{\let\inx=\end} % no indexes or table of contents
+\def\nosecs{\let\FIN=\fin \def\fin{\let\parfillskip=\end \FIN}}
+ % no index of section names or table of contents
+\def\nocon{\let\con=\end} % no table of contents
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\newcount\twodigits
+\def\hours{\twodigits=\time \divide\twodigits by 60 \printtwodigits
+ \multiply\twodigits by-60 \advance\twodigits by\time :\printtwodigits}
+\def\gobbleone1{}
+\def\printtwodigits{\advance\twodigits100
+ \expandafter\gobbleone\number\twodigits
+ \advance\twodigits-100 }
+\def\TeX{{\ifmmode\it\fi
+ \leavevmode\hbox{T\kern-.1667em\lower.424ex\hbox{E}\hskip-.125em X}}}
+\def\,{\relax\ifmmode\mskip\thinmuskip\else\thinspace\fi}
+\def\datethis{\def\startsection{\leftline{\sc\today\ at \hours}\bigskip
+ \let\startsection=\stsec\stsec}}
+ % say `\datethis' in limbo, to get your listing timestamped before section 1
+\def\datecontentspage{%
+ \def\topofcontents{\leftline{\sc\today\ at \hours}\bigskip
+ \centerline{\titlefont\title}\vfill}} % timestamps the contents page
diff --git a/support/hypertex/tanmoy/hypertest.tex b/support/hypertex/tanmoy/hypertest.tex
new file mode 100644
index 0000000000..5023c8cb74
--- /dev/null
+++ b/support/hypertex/tanmoy/hypertest.tex
@@ -0,0 +1,39 @@
+\input hyperbasics
+
+This page just has a \hyperdef\targetone{test}{1}{target}.
+
+This page has a \hyperref\targetone{reference to this page}.
+
+This page has a \hyperref\targettwo{reference to page two}.
+
+This page has a \hyperref\targetthree{reference to page three}.
+
+\vfill\eject
+
+This page has a \hyperref\targetone{reference to page one}.
+
+This page just has a \hyperdef\targettwo{test}{2}{target}.
+
+This page has a \hyperref\targettwo{reference to this page}.
+
+This page has a \hyperref\targetthree{reference to page three}.
+
+\vfill\eject
+
+This page has a \hyperref\targetone{reference to page one}.
+
+This page has a \hyperref\targettwo{reference to page two}.
+
+This page just has a \hyperdef\targetthree{test}{3}{target}.
+
+This page has a \hyperref\targetthree{reference to this page}.
+
+\vfill\eject
+
+This page has a \hyperref\targetone{reference to page one}.
+
+This page has a \hyperref\targettwo{reference to page two}.
+
+This page has a \hyperref\targetthree{reference to page three}.
+
+\end
diff --git a/support/hypertex/tanmoy/hyperwebmac.tex b/support/hypertex/tanmoy/hyperwebmac.tex
new file mode 100644
index 0000000000..7df692303a
--- /dev/null
+++ b/support/hypertex/tanmoy/hyperwebmac.tex
@@ -0,0 +1,254 @@
+\input hyperbasics
+% standard macros for WEB listings (in addition to PLAIN.TEX)
+\xdef\fmtversion{\fmtversion+WEBMAC4.0} % identifies current set of macros
+\parskip 0pt % no stretch between paragraphs
+\parindent 1em % for paragraphs and for the first line of Pascal text
+
+\font\eightrm=cmr8
+\let\sc=\eightrm \let\mainfont=\tenrm
+\font\titlefont=cmr7 scaled\magstep4 % title on the contents page
+\font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title
+\font\tentex=cmtex10 % TeX extended character set (used in strings)
+
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\|#1{\hbox{$#1$}} % one-letter identifiers look a bit better this way
+\def\&#1{\hbox{\bf#1\/}} % boldface type for reserved words
+\def\.#1{\hbox{\tentex % typewriter type for strings
+ \let\\=\BS % backslash in a string
+ \let\'=\RQ % right quote in a string
+ \let\`=\LQ % left quote in a string
+ \let\{=\LB % left brace in a string
+ \let\}=\RB % right brace in a string
+ \let\~=\TL % tilde in a string
+ \let\ =\SP % space in a string
+ \let\_=\UL % underline in a string
+ \let\&=\AM % ampersand in a string
+ #1}}
+\def\#{\hbox{\tt\char`\#}} % parameter sign
+\def\${\hbox{\tt\char`\$}} % dollar sign
+\def\%{\hbox{\tt\char`\%}} % percent sign
+\def\^{\ifmmode\mathchar"222 \else\char`^ \fi} % pointer or hat
+% circumflex accents can be obtained from \^^D instead of \^
+\def\AT!{@} % at sign for control text
+
+\chardef\AM=`\& % ampersand character in a string
+\chardef\BS=`\\ % backslash in a string
+\chardef\LB=`\{ % left brace in a string
+\def\LQ{{\tt\char'22}} % left quote in a string
+\chardef\RB=`\} % right brace in a string
+\def\RQ{{\tt\char'23}} % right quote in a string
+\def\SP{{\tt\char`\ }} % (visible) space in a string
+\chardef\TL=`\~ % tilde in a string
+\chardef\UL=`\_ % underline character in a string
+
+\newbox\bak \setbox\bak=\hbox to -1em{} % backspace one em
+\newbox\bakk\setbox\bakk=\hbox to -2em{} % backspace two ems
+
+\newcount\ind % current indentation in ems
+\def\1{\global\advance\ind by1\hangindent\ind em} % indent one more notch
+\def\2{\global\advance\ind by-1} % indent one less notch
+\def\3#1{\hfil\penalty#10\hfilneg} % optional break within a statement
+\def\4{\copy\bak} % backspace one notch
+\def\5{\hfil\penalty-1\hfilneg\kern2.5em\copy\bakk\ignorespaces}% optional break
+\def\6{\ifmmode\else\par % forced break
+ \hangindent\ind em\noindent\kern\ind em\copy\bakk\ignorespaces\fi}
+\def\7{\Y\6} % forced break and a little extra space
+
+\let\yskip=\smallskip
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+\let\hyperdoend=\relax
+\def\note#1{\Y\noindent{\def\hyperdoend{.\par}%
+ \hangindent2em\baselineskip10pt\eightrm#1%
+ \catcode`\,=\active\let\hyperjunk=}~\secref%
+ }
+\def\lapstar{\rlap{*}}
+\def\startsection{\Q\noindent{\let\*=\empty\bf\hyperdef\hypernoname
+ {section}{\modstar}{\let\*=\lapstar\modstar.}\quad}}
+\def\defin#1{\global\advance\ind by 2 \1\&{#1 }} % begin `define' or `format'
+\def\A{\note{See also section}} % crossref for doubly defined section name
+\def\As{\note{See also sections}} % crossref for multiply defined section name
+\def\B{\mathopen{\.{@\{}}} % begin controlled comment
+\def\C#1{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % Pascal comments
+ \XX\hfil\penalty-1\hfilneg\quad$\{\,$#1$\,\}$\XX}
+\def\D{\defin{define}} % macro definition
+\def\E{\cdot10^} % exponent in floating point constant
+\def\ET{ and~} % conjunction between two section numbers
+\def\ETs{, and~} % conjunction between the last two of several section numbers
+\def\F{\defin{format}} % format definition
+\let\G=\ge % greater than or equal sign
+\def\H#1{\hbox{\rm\char"7D\tt#1}} % hexadecimal constant
+\let\I=\ne % unequal sign
+\def\J{\.{@\&}} % TANGLE's join operation
+\let\K=\gets % left arrow
+\let\L=\le % less than or equal sign
+\outer\def\M#1.{\MN#1.\ifon\vfil\penalty-100\vfilneg % beginning of section
+ \vskip12ptminus3pt\startsection\ignorespaces}
+\outer\def\N#1.#2.{\MN#1.\vfil\eject % beginning of starred section
+ \def\rhead{\uppercase{\ignorespaces#2}} % define running headline
+ \message{*\modno} % progress report
+ \edef\next{\write\cont{\Z{#2}{\modno}{\the\pageno}}}\next % to contents file
+ \ifon\startsection{\bf\ignorespaces#2.\quad}\ignorespaces}
+\def\MN#1.{\par % common code for \M, \N
+ {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}}
+ \ifx\modno\modstar \onmaybe \else\ontrue \fi \mark{\modno}}
+\def\O#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant
+\def\P{\rightskip=0pt plus 100pt minus 10pt % go into Pascal mode
+ \sfcode`;=3000
+ \pretolerance 10000
+ \hyphenpenalty 10000 \exhyphenpenalty 10000
+ \global\ind=2 \1\ \unskip}
+\def\Q{\rightskip=0pt % get out of Pascal mode
+ \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50 }
+\let\R=\lnot % logical not
+\let\S=\equiv % equivalence sign
+\def\T{\mathclose{\.{@\}}}} % terminate controlled comment
+\def\U{\note{This code is used in section}} % crossref for use of a section
+\def\Us{\note{This code is used in sections}} % crossref for uses of a section
+\let\V=\lor % logical or
+\let\W=\land % logical and
+\def\X{{\iffalse}\fi\catcode`\,=\active\relax\Xone}
+\def\Xone#1:{\iffalse{\fi}\Xtwo#1:}
+\def\Xtwo#1:#2\X{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % section name
+ \XX$\langle\,$#2{\eightrm\kern.5em{\def\hyperdoend{}%
+ \secref#1.}\iffalse}\fi$\,\rangle$\XX}
+\def\Y{\par\yskip}
+\let\Z=\let % now you can \send the control sequence \Z
+\def\){\hbox{\.{@\$}}} % sign for string pool check sum
+\def\]{\hbox{\.{@\\}}} % sign for forced line break
+\def\=#1{\kern2pt\hbox{\vrule\vtop{\vbox{\hrule
+ \hbox{\strut\kern2pt\.{#1}\kern2pt}}
+ \hrule}\vrule}\kern2pt} % verbatim string
+\let\~=\ignorespaces
+\let\*=*
+
+\def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue
+\newif\ifon \newif\iftitle \newif\ifpagesaved
+\def\lheader{\mainfont\hyperdef\hypernoname{page}{\the\pageno}%
+ {\the\pageno}\eightrm\qquad\rhead\hfill\title\qquad
+ \tensy x\mainfont\topmark} % top line on left-hand pages
+\def\rheader{\tensy x\mainfont\topmark\eightrm\qquad\title\hfill\rhead
+ \qquad\mainfont\hyperdef\hypernoname{page}{\the\pageno}%
+ {\the\pageno}} % top line on right-hand pages
+\def\page{\box255 }
+\newbox\hyperbox
+\newif\iffooter\footerfalse
+\def\normaloutput#1#2#3{\ifodd\pageno\hoffset=\pageshift\fi
+ \shipout\vbox{
+ \vbox to\fullpageheight{
+ \iftitle\global\titlefalse
+ \else\hbox to\pagewidth{\vbox to10pt{}\ifodd\pageno #3\else#2\fi}\fi
+ \vfill#1\iffooter\vfill\box\hyperbox\fi}} %parameter #1 is the page itself
+ \global\advance\pageno by1}
+
+\def\rhead{\.{WEB} OUTPUT} % this running head is reset by starred sections
+\def\title{} % an optional title can be set by the user
+\def\topofcontents{\centerline{\titlefont\title}
+ \vfill} % this material will start the table of contents page
+\def\botofcontents{\vfill} % this material will end the table of contents page
+\def\contentspagenumber{0} % default page number for table of contents
+\newdimen\pagewidth \pagewidth=6.5in % the width of each page
+{\boxmaxdepth=0pt\relax\global
+\setbox\hyperbox\hbox to \pagewidth{GO TO:\hfil\hyperref{}{page}{1}{first
+ page}\hfil\hyperref{}{section}{INDEX}{Index}\hfil\hyperref{}{section}%
+ {SECTIONS}{Section Names}\hfil\hyperref{}{section}{CONTENTS}{Contents}}}
+\newdimen\pageheight \pageheight=8.7in % the height of each page
+\iffooter\advance\pageheight by -\ht\hyperbox\relax\fi
+\newdimen\fullpageheight \fullpageheight=9in % page height including headlines
+\newdimen\pageshift \pageshift=0in % shift righthand pages wrt lefthand ones
+\def\magnify#1{\mag=#1\pagewidth=6.5truein\pageheight=8.7truein
+ \fullpageheight=9truein\setpage}
+\def\setpage{\hsize\pagewidth\vsize\pageheight} % use after changing page size
+\def\contentsfile{CONTENTS} % file that gets table of contents info
+\def\readcontents{\input CONTENTS}
+
+\newwrite\cont
+\output{\setbox0=\page % the first page is garbage
+ \openout\cont=\contentsfile
+ \global\output{\normaloutput\page\lheader\rheader}}
+\setpage
+\vbox to \vsize{} % the first \topmark won't be null
+
+\def\ch{\note{The following sections were changed by the change file:}
+ \let\*=\relax}
+\newbox\sbox % saved box preceding the index
+\newbox\lbox % lefthand column in the index
+\def\comma{,}
+\def\hypernoblanks#1{#1}
+\def\hypereatup#1{}
+{\global\futurelet\hyperfunny} %
+\def\hyperglobal{\ifx\hyperfunny\hyperblank
+ \global\futurelet\hyperblank\hypereatup\hyperblank
+ \else\global\let\hyperblank=\relax\fi}
+\def\hyperblankonly#1{{\setbox0=\hbox{\futurelet\hyperblank\hyperglobal#1}%
+ \hyperblank}}
+\def\hypersecref#1\hyperjunk{\def\[##1]{##1}\hyperblankonly{#1}%
+ \let\preserve=\*\let\*=\empty
+ \hyperref{}{section}%
+ {\hypernoblanks#1}{\let\*=\preserve\let\[=\hyperrestore\hypernoblanks#1}}%
+{\catcode`,=\active\relax
+\gdef\secref#1.{\let\hyperjunk=\relax%
+ \edef,{\hyperjunk\comma\noexpand\noexpand\noexpand\hypersecref}%
+ \edef\ET{\hyperjunk\ET\noexpand\noexpand\noexpand\hypersecref}%
+ \edef\ETs{\hyperjunk\ETs\noexpand\noexpand\noexpand\hypersecref}%
+ \let\hyperrestore=\[\let\[=\relax%]]
+ {\let\hyperblankonly=\relax
+ \xdef\expanded{#1\hyperjunk}}%
+ \expandafter\hypersecref\expanded\let\hyperjunk={\hyperdoend}%
+ }%
+}
+\def\inx{\par\vskip6pt plus 1fil % we are beginning the index
+ \write\cont{} % ensure that the contents file isn't empty
+ \closeout\cont % the contents information has been fully gathered
+ \output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi
+ \global\setbox\sbox=\page \global\pagesavedtrue}
+ \pagesavedfalse \eject % eject the page-so-far and predecessors
+ \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box
+ \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height
+ \hsize=.5\pagewidth \advance\hsize by -10pt
+ % column width for the index (20pt between cols)
+ \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines
+ \def\lr{L} % this tells whether the left or right column is next
+ \output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R}
+ \else\normaloutput{\vbox to\pageheight{\box\sbox\vss
+ \hbox to\pagewidth{\box\lbox\hfil\page}}}\lheader\rheader
+ \global\vsize\pageheight\gdef\lr{L}\global\pagesavedfalse\fi}
+ \message{Index:}
+ \parskip 0pt plus .5pt
+ \outer\def\:##1, {\par\hangindent2em\noindent##1:{\kern1em
+ \catcode`\,=\active\relax\iffalse}\fi\def\hyperdoend{}\secref} % index entry
+ \let\ttentry=\. \def\.##1{\ttentry{##1\kern.2em}} % give \tt a little room
+ \def\[##1]{$\underline{##1}$} % underlined index item
+ \hyperdef\hypernoname{section}{INDEX}{}%
+ \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar
+ \hyphenpenalty 10000 \parindent0pt}
+\def\fin{\par\vfill\eject % this is done when we are ending the index
+ \ifpagesaved\null\vfill\eject\fi % output a null index column
+ \if L\lr\else\null\vfill\eject\fi % finish the current page
+ \parfillskip 0pt plus 1fil
+ \def\rhead{NAMES OF THE SECTIONS}
+ \message{Section names:}
+ \output{\normaloutput\page\lheader\rheader}
+ \setpage
+ \def\note##1{\hfil\penalty-1\hfilneg\quad{\eightrm##1 %
+ \catcode`\,=\active\let\hyperjunk=}\def\hyperdoend{}\secref}
+ \linepenalty=10 % try to conserve lines
+ \hyperdef\hypernoname{section}{SECTIONS}{}%
+ \def\U{\note{Used in section}} % crossref for use of a section
+ \def\Us{\note{Used in sections}} % crossref for uses of a section
+ \def\:{\par\hangindent 2em}\let\*=*\let\.=\ttentry}
+\def\con{\par\vfill\eject % finish the section names
+ \rightskip 0pt \hyphenpenalty 50 \tolerance 200
+ \setpage
+ \output{\normaloutput\page\lheader\rheader}
+ \titletrue % prepare to output the table of contents
+ \pageno=\contentspagenumber \def\rhead{TABLE OF CONTENTS}
+ \message{Table of contents:}
+ \hyperdef\hypernoname{section}{CONTENTS}{}
+ \topofcontents
+ \line{\hfil Section\hbox to3em{\hss Page}}
+ \def\Z##1##2##3{\line{\ignorespaces##1
+ \leaders\hbox to .5em{.\hfil}\hfil\ \let\preserve=\*\let\*=\empty
+ \hyperref{}{section}{##2}{\let\*=\preserve##2}%
+ \hbox to3em{\hss\hyperref{}{page}{##3}{##3}}}}
+ \readcontents\relax % read the contents info
+ \botofcontents \end} % print the contents page(s) and terminate
diff --git a/support/hypertex/tanmoy/ichep.hty b/support/hypertex/tanmoy/ichep.hty
new file mode 100644
index 0000000000..312e444126
--- /dev/null
+++ b/support/hypertex/tanmoy/ichep.hty
@@ -0,0 +1,59 @@
+\def\leqnarray{\stepcounter{equation}%
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip
+\let\hyper@qn@=\theequation
+\hyper@nique\hypernoname{equation}{\hyper@qn@}{}%
+\edef\@currentlabel{%
+\hyper@\hyperpr@ref\hypernoname{\theequation}}%
+$$%
+\def\theequation{\hyperdef\hypernoname{equation}{\hyper@qn@}{\hyper@qn@}}%
+\edef\@currentlabel{%
+\hyper@\hyperpr@ref\noexpand\hypernoname{\noexpand\hyper@qn@}}%
+\halign to
+\columnwidth\bgroup\@eqnsel$\displaystyle\tabskip\z@
+ {##{}}$&\global\@eqcnt\@ne
+ $\displaystyle{{}##{}}$\hfil %\hfil delete before 2nd $
+ &\global\@eqcnt\tw@ $\displaystyle{{}##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\def\footnote{\@ifnextchar[{\@xfootnote}{\stepcounter{\@mpfn}%
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \begingroup\let\protect\noexpand
+ \xdef\@thefnmark{{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}}\endgroup
+ \@footnotemark\@footnotetext}}
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty\else
+ \let\hyper@n@=\hyperdef
+ \let\hyperdef=\hyper@nique
+ \refstepcounter{#1}%
+ \let\hyperdef=\relax\let\hypernoname=\relax
+ \edef\@svsec{\hyperdef\hypernoname{#1}%
+ {\csname the#1\endcsname}{\csname the#1\endcsname.\hskip 1em}}%
+ \let\hyperdef=\hyper@n@\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \noindent{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\hbox{\hskip0pt\relax\csname the#1\endcsname}%
+ }\hskip-0pt\relax}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\relax %% \relax added 2 May 90
+ \@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\hbox{\hskip0pt\relax\csname the#1\endcsname}%
+ }\hskip-0pt\relax}\fi
+ #7}}\fi
+ \@xsect{#5}}
+%
diff --git a/support/hypertex/tanmoy/lhyper.1.tex b/support/hypertex/tanmoy/lhyper.1.tex
new file mode 100644
index 0000000000..ba00d719e1
--- /dev/null
+++ b/support/hypertex/tanmoy/lhyper.1.tex
@@ -0,0 +1,260 @@
+\input hyperbasics
+
+\expandafter\edef\csname hypers@fe\endcsname{\catcode
+ `\noexpand@=\the\catcode`\@}%
+\catcode`\@=11
+{\setbox0=\hbox{
+\errhelp{lhyper needs a higher revision of hyperbasics.}
+\ifx\hyperv@rsion\hyper@ndefined
+ \errmessage{Need at least version 1 of hyperbasics. You have %
+ version 0}%
+ \egroup\egroup\expandafter\stop
+\else
+ \ifnum2>\hyperv@rsion
+ \errmessage{Need at least version 1 of hyperbasics. You have %
+ version \hyperv@rsion}%
+ \egroup\egroup\expandafter\expandafter\expandafter\stop
+ \fi
+\fi}}
+
+\let\hypernoname=\relax
+% Change all places where \@currentlabel is being set.
+% Tempoarily, put a \hyperdef at precisely those points.
+\def\refstepcounter#1{\stepcounter{#1}\let\@tempa\protect
+\def\protect{\noexpand\protect\noexpand}%
+\hyperdef\hypernoname{#1}{\csname the#1\endcsname}{}%
+\edef\@currentlabel{\hyper@\hyperpr@ref\hypernoname%
+ {\csname p@#1\endcsname\csname the#1\endcsname}}%
+\let\protect\@tempa}%
+
+% Equations are special too
+\def\equation{$$% $$ BRACE MATCHING HACK
+\let\hyper@n@=\hyperdef
+\let\hyperdef=\hyper@nique\refstepcounter{equation}%
+\let\hyperdef=\hyper@n@\let\hyper@qn@=\theequation
+\def\theequation{\hyperdef\hypernoname{equation}{\hyper@qn@}{\hyper@qn@}}%
+}
+
+
+\def\eqnarray{\stepcounter{equation}%
+\global\@eqnswtrue\m@th
+\global\@eqcnt\z@\tabskip\@centering\let\\\@eqncr
+\let\hyper@qn@=\theequation
+\hyper@nique\hypernoname{equation}{\hyper@qn@}{}%
+\edef\@currentlabel{%
+\hyper@\hyperpr@ref\hypernoname{\theequation}}%
+$$%
+\def\theequation{\hyperdef\hypernoname{equation}{\hyper@qn@}{\hyper@qn@}}%
+\edef\@currentlabel{%
+\hyper@\hyperpr@ref\noexpand\hypernoname{\noexpand\hyper@qn@}}%
+\halign to\displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+% footnotes are special. We simply redefine all occurances of \@thefnmark.
+
+\def\footnote{\@ifnextchar[{\@xfootnote}{\stepcounter{\@mpfn}%
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \begingroup\let\protect\noexpand
+ \xdef\@thefnmark{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}\endgroup
+ \@footnotemark\@footnotetext}}
+
+\def\@xfootnote[#1]{
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \begingroup \csname c@\@mpfn\endcsname #1\relax
+ \let\protect\noexpand
+ \xdef\@thefnmark{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}\endgroup
+ \@footnotemark\@footnotetext}
+
+\def\footnotemark{\@ifnextchar[{\@xfootnotemark}{\stepcounter{footnote}%
+ \hyper@nique\hypernoname{footnote}{\thefootnote}{}%
+ \begingroup\let\protect\noexpand
+ \xdef\@thefnmark{\hyper@\hyperpr@ref\hypernoname
+ {\thefootnote}}\endgroup
+ \@footnotemark}}
+
+\def\@xfootnotemark[#1]{\begingroup \c@footnote #1\relax
+ \hyper@nique\hypernoname{footnote}{\thefootnote}{}%
+ \let\protect\noexpand
+ \xdef\@thefnmark{\hyper@\hyperpr@ref\hypernoname
+ {\thefootnote}}\endgroup \@footnotemark}
+
+\def\footnotetext{\@ifnextchar [{\@xfootnotenext}%
+ {\begingroup\let\protect\noexpand
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \xdef\@thefnmark{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}\endgroup
+ \@footnotetext}}
+
+\def\@xfootnotenext[#1]{\begingroup \csname c@\@mpfn\endcsname #1\relax
+ \let\protect\noexpand
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \xdef\@thefnmark{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}\endgroup \@footnotetext}
+
+
+% The footnote has to be defined when insertion being generated.
+\def\hyper@eat#1\hyperpr@ref#2#3#4#5{#5}%
+\long\def\@footnotetext#1{\insert\footins{\reset@font\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
+ {\edef\@thefnmark{\expandafter\hyper@eat\@thefnmark}%
+ \edef\@thefnmark{\noexpand\hyperdef\noexpand\hypernoname{footnote}%
+ {\@thefnmark}{\@thefnmark}}%
+ \@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}}
+
+% Similarly references are special
+\def\@lbibitem[#1]#2{\item[{\def\protect{}\xdef\hypert@mp{#1}}%
+ \edef\hypert@mp{\hypert@mp}%
+ \edef\hypert@mp{\hypert@mp}%
+ \hyperdef\hypernoname{reference}{\hypert@mp}%
+ {\@biblabel{#1}}\global\let\hypert@mp=\relax\hfill]\if@filesw
+ {\def\protect##1{\string ##1\space}\immediate
+ \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
+
+\def\@bibitem#1{\@noitemargtrue\@item
+ [\hyperdef\hypernoname{reference}{\the\value{\@listctr}}%
+ {\the\value{\@listctr}}]\if@filesw \immediate\write\@auxout
+ {\string\bibcite{#1}{\the\value{\@listctr}}}\fi\ignorespaces}
+
+\def\bibcite#1#2{\expandafter\xdef\csname b@#1\endcsname{\hyper@\hyperpr@ref
+ {}{reference}{#2}{#2}}%
+ \expandafter\gdef\csname hyperb@#1\endcsname{#2}}
+
+
+%
+% Sectioning macros
+%
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty\else
+ \let\hyper@n@=\hyperdef
+ \let\hyperdef=\hyper@nique
+ \refstepcounter{#1}%
+ \let\hyperdef=\relax\let\hypernoname=\relax
+ \edef\@svsec{\hyperdef\hypernoname{#1}%
+ {\csname the#1\endcsname}{\csname the#1\endcsname\hskip 1em}}%
+ \let\hyperdef=\hyper@n@\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\hbox{\hskip1pt\relax\csname the#1\endcsname}%
+ }\hskip-1pt\relax}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\relax %% \relax added 2 May 90
+ \@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\hbox{\hskip1pt\relax\csname the#1\endcsname}%
+ }\hskip-1pt\relax}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+%
+% Captions
+%
+\def\caption{\let\hyper@n@=\hyperdef
+ \let\hyperdef=\hyper@nique
+ \refstepcounter\@captype
+ \let\hyperdef=\hyper@n@
+ \@dblarg{\@caption\@captype}}
+\long\def\@caption#1[#2]#3{\par\begingroup
+ \@parboxrestore
+ \normalsize
+ \@makecaption{\hyperdef\hypernoname{#1}{\csname the#1\endcsname}%
+ {\csname fnum@#1\endcsname}}{\ignorespaces #3}\par
+ \addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}%
+ \endgroup}
+
+%
+% toc
+%
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\reset@font %% RmS 91/08/15
+ {\let\hyperdef\relax\let\hyperref\relax\let\hypernoname\relax\setbox0=\hbox{\@thefoot}%
+ \global\ifnum\wd0=0\let\hyper@mpty=\hss\else\let\hyper@mpty=\relax
+ \fi}%
+ \normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth
+ {\let\label\@gobble \let\index\@gobble
+ \let\glossary\@gobble %% 21 Jun 91
+ \@thehead}}% %% 22 Feb 87
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\let\label\@gobble
+ \let\index\@gobble %% 22 Feb 87
+ \let\glossary\@gobble %% 21 Jun 91
+ \hyperdef\hyperj@nk{page}{\thepage}%
+ {\hyper@mpty\@thefoot}%
+ }}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
+
+
+\edef\contentsline#1#2#3{\noexpand\hyper@nique\noexpand\hypernoname
+ {page}{#3}{}%
+ \noexpand\csname l@#1\noexpand\endcsname{#2}%
+ {\hyper@\hyperpr@ref\noexpand\hypernoname{#3}}}
+
+% Some style files change this setup. After loading a style file check if
+% the corresponding .hty file exists. Load it in that case.
+\newread\hyper@inputcheck
+\def\hyper@nput #1.sty{\input #1.sty\relax
+ \immediate\openin\hyper@inputcheck #1.hty\relax
+ \ifeof\hyper@inputcheck\relax
+ \immediate\closein\hyper@inputcheck\relax
+ \else\immediate\closein\hyper@inputcheck\relax
+ \input #1.hty\relax
+ \fi}%
+\def\@documentstyle[#1]#2{\makeatletter
+ \def\@optionlist{#1}\gdef\@optionfiles{}\hyper@nput #2.sty\relax
+ \let\@elt\hyper@nput \@optionfiles \let\@elt\relax \makeatother}
+
+\def\hyper@pen#1{\immediate\openin\hyper@inputcheck #1.hty\relax
+ \ifeof\hyper@inputcheck\relax
+ \immediate\closein\hyper@inputcheck\relax
+ \else\immediate\closein\hyper@inputcheck\relax
+ \input #1.hty\relax
+ \fi}
+
+\def\enddocument{\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef {hyperb}}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+\hypers@fe
+\endinput
+% Leave this line in the file
diff --git a/support/hypertex/tanmoy/lhyper.old.tex b/support/hypertex/tanmoy/lhyper.old.tex
new file mode 100644
index 0000000000..5341b47c67
--- /dev/null
+++ b/support/hypertex/tanmoy/lhyper.old.tex
@@ -0,0 +1,257 @@
+\input hyperbasics
+
+\expandafter\edef\csname hypers@fe\endcsname{\catcode
+ `\noexpand@=\the\catcode`\@}%
+\catcode`\@=11
+{\setbox0=\hbox{
+\errhelp{lhyper needs a higher revision of hyperbasics.}
+\ifx\hyperv@rsion\hyper@ndefined
+ \errmessage{Need at least version 1 of hyperbasics. You have %
+ version 0}%
+ \egroup\egroup\expandafter\stop
+\else
+ \ifnum2>\hyperv@rsion
+ \errmessage{Need at least version 1 of hyperbasics. You have %
+ version \hyperv@rsion}%
+ \egroup\egroup\expandafter\expandafter\expandafter\stop
+ \fi
+\fi}}
+
+\let\hypernoname=\relax
+% Change all places where \@currentlabel is being set.
+% Tempoarily, put a \hyperdef at precisely those points.
+\def\refstepcounter#1{\stepcounter{#1}\let\@tempa\protect
+\def\protect{\noexpand\protect\noexpand}%
+\hyperdef\hypernoname{#1}{\csname the#1\endcsname}{}%
+\edef\@currentlabel{\hyper@\hyperpr@ref\hypernoname%
+ {\csname p@#1\endcsname\csname the#1\endcsname}}%
+\let\protect\@tempa}%
+
+% Equations are special too
+\def\equation{$$% $$ BRACE MATCHING HACK
+\let\hyper@n@=\hyperdef
+\let\hyperdef=\hyper@nique\refstepcounter{equation}%
+\let\hyperdef=\hyper@n@\let\hyper@qn@=\theequation
+\def\theequation{\hyperdef\hypernoname{equation}{\hyper@qn@}{\hyper@qn@}}%
+}
+
+
+\def\eqnarray{\stepcounter{equation}%
+\global\@eqnswtrue\m@th
+\global\@eqcnt\z@\tabskip\@centering\let\\\@eqncr
+\let\hyper@qn@=\theequation
+\hyper@nique\hypernoname{equation}{\hyper@qn@}{}%
+\edef\@currentlabel{%
+\hyper@\hyperpr@ref\hypernoname{\theequation}}%
+$$%
+\def\theequation{\hyperdef\hypernoname{equation}{\hyper@qn@}{\hyper@qn@}}%
+\edef\@currentlabel{%
+\hyper@\hyperpr@ref\noexpand\hypernoname{\noexpand\hyper@qn@}}%
+\halign to\displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+% footnotes are special. We simply redefine all occurances of \@thefnmark.
+
+\def\footnote{\@ifnextchar[{\@xfootnote}{\stepcounter{\@mpfn}%
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \begingroup\let\protect\noexpand
+ \xdef\@thefnmark{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}\endgroup
+ \@footnotemark\@footnotetext}}
+
+\def\@xfootnote[#1]{
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \begingroup \csname c@\@mpfn\endcsname #1\relax
+ \let\protect\noexpand
+ \xdef\@thefnmark{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}\endgroup
+ \@footnotemark\@footnotetext}
+
+\def\footnotemark{\@ifnextchar[{\@xfootnotemark}{\stepcounter{footnote}%
+ \hyper@nique\hypernoname{footnote}{\thefootnote}{}%
+ \begingroup\let\protect\noexpand
+ \xdef\@thefnmark{\hyper@\hyperpr@ref\hypernoname
+ {\thefootnote}}\endgroup
+ \@footnotemark}}
+
+\def\@xfootnotemark[#1]{\begingroup \c@footnote #1\relax
+ \hyper@nique\hypernoname{footnote}{\thefootnote}{}%
+ \let\protect\noexpand
+ \xdef\@thefnmark{\hyper@\hyperpr@ref\hypernoname
+ {\thefootnote}}\endgroup \@footnotemark}
+
+\def\footnotetext{\@ifnextchar [{\@xfootnotenext}%
+ {\begingroup\let\protect\noexpand
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \xdef\@thefnmark{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}\endgroup
+ \@footnotetext}}
+
+\def\@xfootnotenext[#1]{\begingroup \csname c@\@mpfn\endcsname #1\relax
+ \let\protect\noexpand
+ \hyper@nique\hypernoname{footnote}{\thempfn}{}%
+ \xdef\@thefnmark{\hyper@\hyperpr@ref\hypernoname
+ {\thempfn}}\endgroup \@footnotetext}
+
+
+% The footnote has to be defined when insertion being generated.
+\def\hyper@eat#1\hyperpr@ref#2#3#4#5{#5}%
+\long\def\@footnotetext#1{\insert\footins{\reset@font\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
+ {\edef\@thefnmark{\expandafter\hyper@eat\@thefnmark}%
+ \edef\@thefnmark{\noexpand\hyperdef\noexpand\hypernoname{footnote}%
+ {\@thefnmark}{\@thefnmark}}%
+ \@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}}
+
+% Similarly references are special
+\def\@lbibitem[#1]#2{\item[\hyperdef\hypernoname{reference}{#1}%
+ {\@biblabel{#1}}\hfill]\if@filesw
+ {\def\protect##1{\string ##1\space}\immediate
+ \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
+
+\def\@bibitem#1{\@noitemargtrue\@item
+ [\hyperdef\hypernoname{reference}{\the\value{\@listctr}}%
+ {\the\value{\@listctr}}]\if@filesw \immediate\write\@auxout
+ {\string\bibcite{#1}{\the\value{\@listctr}}}\fi\ignorespaces}
+
+\def\bibcite#1#2{\expandafter\xdef\csname b@#1\endcsname{\hyper@\hyperpr@ref
+ {}{reference}{#2}{#2}}%
+ \expandafter\gdef\csname hyperb@#1\endcsname{#2}}
+
+
+%
+% Sectioning macros
+%
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty\else
+ \let\hyper@n@=\hyperdef
+ \let\hyperdef=\hyper@nique
+ \refstepcounter{#1}%
+ \let\hyperdef=\relax\let\hypernoname=\relax
+ \edef\@svsec{\hyperdef\hypernoname{#1}%
+ {\csname the#1\endcsname}{\csname the#1\endcsname\hskip 1em}}%
+ \let\hyperdef=\hyper@n@\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\hbox{\hskip1pt\relax\csname the#1\endcsname}%
+ }\hskip-1pt\relax}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\relax %% \relax added 2 May 90
+ \@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\hbox{\hskip1pt\relax\csname the#1\endcsname}%
+ }\hskip-1pt\relax}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+%
+% Captions
+%
+\def\caption{\let\hyper@n@=\hyperdef
+ \let\hyperdef=\hyper@nique
+ \refstepcounter\@captype
+ \let\hyperdef=\hyper@n@
+ \@dblarg{\@caption\@captype}}
+\long\def\@caption#1[#2]#3{\par\begingroup
+ \@parboxrestore
+ \normalsize
+ \@makecaption{\hyperdef\hypernoname{#1}{\csname the#1\endcsname}%
+ {\csname fnum@#1\endcsname}}{\ignorespaces #3}\par
+ \addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}%
+ \endgroup}
+
+%
+% toc
+%
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\reset@font %% RmS 91/08/15
+ {\let\hyperdef\relax\let\hyperref\relax\let\hypernoname\relax\setbox0=\hbox{\@thefoot}%
+ \global\ifnum\wd0=0\let\hyper@mpty=\hss\else\let\hyper@mpty=\relax
+ \fi}%
+ \normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth
+ {\let\label\@gobble \let\index\@gobble
+ \let\glossary\@gobble %% 21 Jun 91
+ \@thehead}}% %% 22 Feb 87
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\let\label\@gobble
+ \let\index\@gobble %% 22 Feb 87
+ \let\glossary\@gobble %% 21 Jun 91
+ \hyperdef\hypernoname{page}{\thepage}%
+ {\hyper@mpty\@thefoot}%
+ }}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
+
+
+\edef\contentsline#1#2#3{\noexpand\hyper@nique\noexpand\hypernoname
+ {page}{#3}{}%
+ \noexpand\csname l@#1\noexpand\endcsname{#2}%
+ {\hyper@\hyperpr@ref\noexpand\hypernoname{#3}}}
+
+% Some style files change this setup. After loading a style file check if
+% the corresponding .hty file exists. Load it in that case.
+\newread\hyper@inputcheck
+\def\hyper@nput #1.sty{\input #1.sty\relax
+ \immediate\openin\hyper@inputcheck #1.hty\relax
+ \ifeof\hyper@inputcheck\relax
+ \immediate\closein\hyper@inputcheck\relax
+ \else\immediate\closein\hyper@inputcheck\relax
+ \input #1.hty\relax
+ \fi}%
+\def\@documentstyle[#1]#2{\makeatletter
+ \def\@optionlist{#1}\gdef\@optionfiles{}\hyper@nput #2.sty\relax
+ \let\@elt\hyper@nput \@optionfiles \let\@elt\relax \makeatother}
+
+\def\hyper@pen#1{\immediate\openin\hyper@inputcheck #1.hty\relax
+ \ifeof\hyper@inputcheck\relax
+ \immediate\closein\hyper@inputcheck\relax
+ \else\immediate\closein\hyper@inputcheck\relax
+ \input #1.hty\relax
+ \fi}
+
+\def\enddocument{\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef {hyperb}}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+\hypers@fe
+\endinput
+% Leave this line in the file
diff --git a/support/hypertex/tanmoy/prabib.hty b/support/hypertex/tanmoy/prabib.hty
new file mode 100644
index 0000000000..a23a94fde4
--- /dev/null
+++ b/support/hypertex/tanmoy/prabib.hty
@@ -0,0 +1,19 @@
+\let\hypernoname=\relax
+\def\@bibitem#1{\@noitemargtrue\@item
+ [\hyperdef\hypernoname{reference}{\the\value{\@listctr}}%
+ {\the\value{\@listctr}}]\if@filesw \immediate\write\@auxout
+{\string\bibcite{#1}{\the\value{\@listctr}}}\fi\ignorespaces}
+
+\def\bibcite#1#2{\expandafter\xdef\csname b@#1\endcsname{\hyper@\hyperpr@ref
+ {}{reference}{#2}{#2}}%
+ \expandafter\gdef\csname hyperb@#1\endcsname{#2}%
+ \@SetMaxRefLabel{#1}}
+
+\def\@lbibitem[#1]#2{\item[{\def\protect{}\xdef\hypert@mp{#1}}%
+ \edef\hypert@mp{\hypert@mp}%
+ \edef\hypert@mp{\hypert@mp}%
+ \hyperdef\hypernoname{reference}{\hypert@mp}%
+ {\@BIBLABEL{#1}}\global\let\hypert@mp=\relax]\if@filesw
+{\def\protect##1{\string ##1\space}\immediate
+\write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
+
diff --git a/support/hypertex/tanmoy/prabib.old.hty b/support/hypertex/tanmoy/prabib.old.hty
new file mode 100644
index 0000000000..60e0c7088f
--- /dev/null
+++ b/support/hypertex/tanmoy/prabib.old.hty
@@ -0,0 +1,16 @@
+\let\hypernoname=\relax
+\def\@bibitem#1{\@noitemargtrue\@item
+ [\hyperdef\hypernoname{reference}{\the\value{\@listctr}}%
+ {\the\value{\@listctr}}]\if@filesw \immediate\write\@auxout
+{\string\bibcite{#1}{\the\value{\@listctr}}}\fi\ignorespaces}
+
+\def\bibcite#1#2{\expandafter\xdef\csname b@#1\endcsname{\hyper@\hyperpr@ref
+ {}{reference}{#2}{#2}}%
+ \expandafter\gdef\csname hyperb@#1\endcsname{#2}%
+ \@SetMaxRefLabel{#1}}
+
+\def\@lbibitem[#1]#2{\item[\hyperdef\hypernoname{reference}{#1}%
+ {\@BIBLABEL{#1}}]\if@filesw
+{\def\protect##1{\string ##1\space}\immediate
+\write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
+
diff --git a/support/hypertex/tanmoy/report.hty b/support/hypertex/tanmoy/report.hty
new file mode 100644
index 0000000000..c616929a22
--- /dev/null
+++ b/support/hypertex/tanmoy/report.hty
@@ -0,0 +1,9 @@
+\long\def\@makecaption#1#2{%
+ \vskip 10\p@
+ \setbox\@tempboxa\hbox{#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ \unhbox\@tempboxa\par
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi}
+
diff --git a/support/hypertex/tanmoy/revtex.hty b/support/hypertex/tanmoy/revtex.hty
new file mode 100644
index 0000000000..286d7d3f6e
--- /dev/null
+++ b/support/hypertex/tanmoy/revtex.hty
@@ -0,0 +1 @@
+\hyper@pen{\@society}
diff --git a/support/hypertex/tanmoy/vanilla.hty b/support/hypertex/tanmoy/vanilla.hty
new file mode 100644
index 0000000000..598b20e234
--- /dev/null
+++ b/support/hypertex/tanmoy/vanilla.hty
@@ -0,0 +1,8 @@
+\let\hypernoname=\relax
+\def\footnote@@"#1"#2{\makefootnote@{\hyperdef\hypernoname{footnote}{#1}%
+ {#1}}{#2}\hyperref\hypernoname{#1}\@sf\relax}
+\def\footnote@@@#1{{${\number\footmarkcount@}$}\makefootnote@
+ {\hyperdef\hypernoname{footnote}{\number\foormarkcount}%
+ {${\number\footmarkcount@}$}}{#1}%
+ \hyperref\hypernoname{\number\footmarkcount}%
+ \global\advance\footmarkcount@ by 1 }
diff --git a/support/hypertex/tanmoy/world_sci.hty b/support/hypertex/tanmoy/world_sci.hty
new file mode 100644
index 0000000000..0c7086b880
--- /dev/null
+++ b/support/hypertex/tanmoy/world_sci.hty
@@ -0,0 +1,54 @@
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \let\hyper@n@=\hyperdef
+ \let\hyperdef=\hyper@nique
+ \refstepcounter{#1}%
+ \let\hyperdef=\relax\let\hypernoname=\relax
+ \edef\@svsec{\hyperdef\hypernoname{#1}%
+ {\ifnum #2=1 \@sectname\fi
+ \csname the#1\endcsname}{\ifnum #2=1 \@sectname\fi
+ \csname the#1\endcsname.\hskip 1em}}%
+ \let\hyperdef=\hyper@n@\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\csname the#1\endcsname}}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\hyper@\hyperpr@ref\hypernoname
+ {\csname the#1\endcsname}}\fi
+ #7}}\fi
+ \@xsect{#5}}
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@ifundefined
+ {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+ {\setbox\z@\hbox{\global\@tempcntc0\csname hyperb@\@citeb\endcsname\relax}%
+ \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne
+ \@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}%
+ \else
+ \advance\@tempcntb\@ne
+ \ifnum\@tempcntb=\@tempcntc\let\@cited\@citeb
+ \else\advance\@tempcntb\m@ne\@citeo\let\@citec\@citeb\let\@cited\@citeb
+ \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}}
+\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else\@citea\def\@citea{,}%
+ \ifnum\@tempcnta=\@tempcntb\csname b@\@citec\endcsname\else
+ {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else \def\@citea{--}\fi
+ \advance\@tempcnta\m@ne\csname b@\@citec\endcsname\@citea
+ \csname b@\@cited\endcsname}\fi\fi}
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{\def\hyperdef##1##2##3##4{##4}\small #1. #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \small #1. #2\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\hbox{\small #1. #2}\hfil}
+ \fi}