diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/hypertex/tanmoy |
Initial commit
Diffstat (limited to 'support/hypertex/tanmoy')
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 Binary files differnew file mode 100644 index 0000000000..980bc473c5 --- /dev/null +++ b/support/hypertex/tanmoy/examples/Anomalkap.dvi 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 Binary files differnew file mode 100644 index 0000000000..595b217744 --- /dev/null +++ b/support/hypertex/tanmoy/examples/ambjorn.dvi 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\{\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\{\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\{\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} |