summaryrefslogtreecommitdiff
path: root/Master/tlpkg/dviout/GRAPHIC/PBM/pbmf.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/dviout/GRAPHIC/PBM/pbmf.sty')
-rw-r--r--Master/tlpkg/dviout/GRAPHIC/PBM/pbmf.sty478
1 files changed, 478 insertions, 0 deletions
diff --git a/Master/tlpkg/dviout/GRAPHIC/PBM/pbmf.sty b/Master/tlpkg/dviout/GRAPHIC/PBM/pbmf.sty
new file mode 100644
index 00000000000..3696f6cedae
--- /dev/null
+++ b/Master/tlpkg/dviout/GRAPHIC/PBM/pbmf.sty
@@ -0,0 +1,478 @@
+% PBM macro for DVIOUT/DVIPRT version 0.5e
+% based on eclepsf.sty by Kazuhiro Kazama and modified by Hideki ISOZAKI
+% and psfig.tex by Trevor J. Darrell.
+%
+% All software, documentation, and related files in this distribution of
+% psfig/tex are Copyright (c) 1987 Trevor J. Darrell
+%
+% Permission is granted for use and non-profit distribution of psfig/tex
+% providing that this notice be clearly maintained, but the right to
+% distribute any portion of psfig/tex for profit or as part of any commercial
+% product is specifically reserved for the author.
+%
+%
+% ☆scaleオプション指定での基準サイズ(scale=1での出力)
+%   \realscaletrue時、PBMデータ1dotをプリンタ出力の1dotとして出力
+%   \realscalefalse時、PBMデータ1dotを 1pt x 1pt の点として出力
+%
+% ☆\realscaletrue時用に、プリンタの解像度を\pbmhdpiと\pbmvdpiで設定します。
+%   Ex. \pbmhdpi=300\pbmvdpi=300
+%
+% \pbmfile
+% usage : \pbmfile{file=foo.pbm,width=5cm,height=3.5cm}
+% usage : \pbmfile{file=foo.pbm,width=100pt,height=70pt}
+% usage : \pbmfile{file=foo.pbm,scale=2}
+% usage : \pbmfile{file=foo.pbm,hscale=1.5,vscale=1.2}
+% ^^ ^^
+%                オプション間に、空白を入れないで下さい。
+%
+% \pbmfat
+% usage : \pbmfile[\pbmfat(10mm,12mm){テスト}]{file=foo.pbm}
+%
+% \pbmfon
+% usage : \pbmfile[\pbmfon(10mm,12mm){テスト}]{file=foo.pbm}
+%
+% \ovpbmfon
+% usage : \pbmfile[\ovpbmfon(10mm,12mm){テスト}]{file=foo.pbm}
+% ^^^^^^^^^
+% 座標指定
+%
+%
+% \giffile
+%
+% ・orgsizeオプションを使う場合
+% usage : \giffile{file=foo.gif,orgsize=640x400,scale=2}
+% usage : \giffile{file=foo.gif,orgsize=200x200,hscale=3,vscale=2}
+%
+% ・使わない場合、scaleオプションは使用不可。width=とheight=は省略不可
+% usage : \giffile{file=foo.gif,width=5cm,height=3.5cm}
+% usage : \giffile{file=foo.gif,width=100pt,height=70pt}
+%
+% Oct. 25, 1993 by Yakumo
+%
+\endlinechar=-1
+\typeout{PBM macro ver. 0.5e - Released Oct. 25, 1993}
+\newcount\pbmhdpi
+\newcount\pbmvdpi
+\pbmhdpi=360%<---- プリンタ水平方向解像度のデフォルト値
+\pbmvdpi=360%<---- プリンタ垂直方向解像度のデフォルト値
+\newif\ifrealscale
+\realscaletrue
+\newif\ifset@vscale
+\newif\ifset@hscale
+\set@vscalefalse\set@hscalefalse
+\newif\ifset@orgsize
+\set@orgsizefalse
+\newdimen\@pbmhsize
+\newdimen\@pbmvsize
+\newcount\@bmarga
+\newcount\@bmargb
+\newcount\@bmsum
+\newcount\@bmrema
+\newcount\@bmremb
+\newcount\@bmctmpa
+\newcount\@bmctmpb
+\newcount\@bmctmpc
+\newdimen\@bmdarg
+\newif\ifcontinue
+
+\def\@setpbmfile#1{
+ \def\@pbmfile{#1}
+ \pbmbb@search
+}
+\def\@setpbmheight#1{
+ \@bmdarg=#1\relax
+ \edef\@pbmheight{\number\@bmdarg}
+}
+\def\@setpbmwidth#1{
+ \@bmdarg=#1\relax
+ \edef\@pbmwidth{\number\@bmdarg}
+}
+\def\@setpbmscale#1{
+ \def\@pbmhscale{#1}
+ \def\@pbmvscale{#1}
+ \set@vscaletrue\set@hscaletrue
+}
+\def\@setpbmhscale#1{
+ \def\@pbmhscale{#1}
+ \set@hscaletrue
+}
+\def\@setpbmvscale#1{
+ \def\@pbmvscale{#1}
+ \set@vscaletrue
+}
+\def\parse@pbm@parms#1{
+ \def\@bbw{0}\def\@bbh{0}
+ \def\@pbmhscale{1}\def\@pbmvscale{1}
+ \def\@pbmheight{0}\def\@pbmwidth{0}
+ \@for\@pbmopt:=#1\do
+ {\expandafter\@bmsetparms\@pbmopt,}}
+
+\def\@bmsetparms#1=#2,{\@nameuse{@setpbm#1}{#2}}
+%
+% \pbmin@compute performs #1 * (#2 / #3)
+% then leaves the result in @result
+%
+\def\@divmod#1#2{
+ \@bmctmpa=#1\relax
+ \divide\@bmctmpa by#2\relax
+ \edef\@quotient{\number\@bmctmpa\relax}
+ \multiply\@bmctmpa by#2\relax
+ \@bmctmpb=#1\relax
+ \advance\@bmctmpb by -\@bmctmpa
+ \edef\@remaindar{\number\@bmctmpb}}
+%
+\def\pbmin@compute#1#2#3{
+ \ifnum#3>\z@
+ \@divmod{#1}{#3}
+ \@bmsum=\@quotient
+ \multiply\@bmsum by#2\relax
+ \@bmrema=\@remaindar\relax
+ \ifnum\@bmrema>\z@
+ \@divmod{#2}{#3}
+ \@bmctmpc=\@quotient
+ \multiply\@bmctmpc by\@bmrema
+ \advance\@bmsum by\@bmctmpc
+ \@bmremb=\@remaindar\relax
+ \ifnum\@bmremb>\z@
+ \ifnum#3<32769
+ \multiply\@bmrema by\@bmremb
+ \divide\@bmrema by#3\relax
+ \advance\@bmsum by\@bmrema
+ \else
+ \edef\bm@digit{1}
+ \@bmarga=0\relax
+ \loop
+ \edef\bm@digit{\bm@digit0}
+ \@divmod{\the\@bmremb0}{#3}
+ \@bmremb=\@remaindar\relax
+ \@bmargb=\@bmrema
+ \multiply\@bmargb by\@quotient
+ \advance\@bmargb by\@bmarga
+ \@divmod{\@bmargb}{\bm@digit}
+ \advance\@bmsum by\@quotient
+ \@bmarga=\@remaindar0\relax
+ \ifnum\bm@digit<\@bmrema
+ \repeat
+ \fi
+ \fi
+ \fi
+ \else
+ \errmessage{pbm: Illegal parameter}
+ \fi
+ \edef\@result{\number\@bmsum}
+}
+\def\bmcompute@handw{
+ \ifnum\@pbmheight=\z@
+ \ifnum\@pbmwidth=\z@
+ \@bmdarg=\@bbh sp \@bmdarg=\@pbmvscale\@bmdarg
+ \edef\@pbmheight{\number\@bmdarg}
+ \@bmdarg=\@bbw sp \@bmdarg=\@pbmhscale\@bmdarg
+ \edef\@pbmwidth{\number\@bmdarg}
+ \multiply\@pbmhsize by\@pbmhscale
+ \multiply\@pbmvsize by\@pbmvscale
+ \else
+ \pbmin@compute{\number\@pbmwidth}{\number\@pbmvsize}{\number\@pbmhsize}
+ \edef\@pbmheight{\@result}
+ \fi
+ \else
+ \ifnum\@pbmwidth=\z@
+ \pbmin@compute{\number\@pbmheight}{\number\@pbmhsize}{\number\@pbmvsize}
+ \edef\@pbmwidth{\@result}
+ \fi
+ \fi
+ \ifnum\@pbmheight<\z@
+ \errmessage{pbm: Illegal height}
+ \fi
+ \ifnum\@pbmwidth<\z@
+ \errmessage{pbm: Illegal width}
+ \fi
+}
+
+\def\pbmfile{\@ifnextchar[{\@pbmfile}{\@pbmfile[]}}
+\def\@pbmfile[#1]#2{{
+ \parse@pbm@parms{#2}
+ \bmcompute@handw
+ {\@bmarga=\@pbmwidth \divide\@bmarga by 186468\relax
+ \@bmargb=\@pbmheight \divide\@bmargb by 186468\relax
+ \message{becomes \the\@bmarga mm x \the\@bmargb mm}}
+ \@bmarga=\@pbmheight \divide\@bmarga by 65536\relax
+ \edef\@bmvsize{\number\@bmarga}
+ \@bmarga=\@pbmwidth \divide\@bmarga by 65536\relax
+ \edef\@bmhsize{\number\@bmarga}
+ \leavevmode
+ \hbox to \@pbmwidth sp{
+ \vrule\@width\z@\@height\@pbmheight sp\@depth\z@
+ \raise\@pbmheight sp
+ \hbox to\z@{
+ \ifrealscale
+ \special{pbmfile=\@pbmfile\space
+ \ifset@hscale hsize=\number\@pbmhsize dot/\the\pbmhdpi dpi
+ \else hsize=\@bmhsize\fi\space
+ \ifset@vscale vsize=\number\@pbmvsize dot/\the\pbmvdpi dpi
+ \else vsize=\@bmvsize\fi\space
+ }
+ \else
+ \special{pbmfile=\@pbmfile\space
+ \ifset@hscale hscale=\@pbmhscale
+ \else hsize=\@bmhsize\fi\space
+ \ifset@vscale vscale=\@pbmvscale
+ \else vsize=\@bmvsize\fi\space
+ }
+ \fi
+ }
+ \vrule\@width\z@\@height\@pbmheight sp \@depth\z@
+ \hbox to\z@{#1}\hfil
+ }
+}}
+
+\newread\pbm@stream
+\catcode`\#=11\relax
+\def\pbmbb@search{\continuetrue
+ \typeout{analyzing \@pbmfile}
+ \openin\pbm@stream=\@pbmfile\relax
+ \ifeof\pbm@stream\errmessage{pbm: \@pbmfile\space not found}\fi
+ \read\pbm@stream to \pbm@line
+ \expandafter\id@pbmplus\pbm@line.
+ \ifnum4=\@magic \message{PBM(P4-type) }
+ \else \ifnum1=\@magic \errmessage{pbm: P1-type not supported}
+ \else \errmessage{pbm: \@pbmfile\space is not PBM file}\fi\fi
+ \loop
+ \read\pbm@stream to \pbm@line
+ \if\expandafter\next@char\pbm@line\end@getbb #\else\continuefalse\fi
+ \ifeof\pbm@stream\errmessage{pbm: \@pbmfile\space has no data}\fi
+ \ifcontinue \repeat
+ \expandafter\pbm@getbb\pbm@line.
+ \closein\pbm@stream
+}
+\catcode`\#=6\relax
+\def\next@char#1#2\end@getbb{#1}
+\def\id@pbmplus#1#2.{\edef\@magic{\if#1P\next@char#2\end@getbb\else0\fi}}
+%
+%
+\def\pbm@getbb#1 #2.{
+ \@bmdarg=#1pt\ifrealscale\divide\@bmdarg by \pbmhdpi\@bmdarg=72.27\@bmdarg\fi
+ \edef\@bbw{\number\@bmdarg}\@pbmhsize=#1sp
+ \@bmdarg=#2pt\ifrealscale\divide\@bmdarg by \pbmvdpi\@bmdarg=72.27\@bmdarg\fi
+ \edef\@bbh{\number\@bmdarg}\@pbmvsize=#2sp
+ \message{original: #1 x #2}
+}
+%
+% You can put anything on the picture using \pbmfat , \pbmfon , \ovpbmfon
+%
+\def\pbmfat(#1,#2)#3{\@killglue{
+ \smash{\raise#2\hbox to \z@{\kern#1 \relax#3\hss}}}\ignorespaces}
+%
+\newbox\@strbox
+%
+\def\pbmfon(#1,#2)#3{
+ \setbox\@strbox=\hbox{#3}
+ \@bmctmpa=\number\wd\@strbox
+ \@bmctmpb=\number\ht\@strbox
+ \@bmctmpc=\number\dp\@strbox
+ \advance\@bmctmpc by\@bmctmpb
+ \divide\@bmctmpc by 4736\relax
+ \divide\@bmctmpa by 4736\relax
+ \pbmfat(#1,#2){
+ \raise\@bmctmpb sp\hbox to\z@{
+ \special{pn 0}\special{sh 0}
+ \special{pa 0 0}\special{pa \the\@bmctmpa\space 0}
+ \special{pa \the\@bmctmpa\space \the\@bmctmpc}\special{pa 0 \the\@bmctmpc}
+ \special{pa 0 0}
+ \special{ip}}#3
+ }
+}
+%
+\newdimen\ovrulewidth
+\newdimen\ovradius
+\ovrulewidth=0.4pt
+\ovradius=2mm
+\def\hornlength{5}
+%
+\def\ovpbmfon{\@ifnextchar({\@ovpbmfon{}}{\@ovpbmfon}}
+\def\@ovpbmfon#1(#2,#3)#4{
+ \setbox\@strbox=\hbox{#4}
+ \@bmctmpa=\number\wd\@strbox
+ \@bmctmpb=\number\ht\@strbox
+ \@bmctmpc=\number\dp\@strbox
+ \@bmremb=\number\ovrulewidth
+ \@bmarga=\number\ovradius
+ \divide\@bmarga by 4736\relax
+ \edef\CoRadius{\the\@bmarga}
+ \divide\@bmarga by 2\relax
+ \edef\CoBase{\the\@bmarga}
+ \@bmdarg=\ovradius
+ \advance\@bmdarg by\@bmremb sp
+ \@bmarga=\number\@bmdarg
+ \advance\@bmctmpc by\@bmctmpb
+ \advance\@bmctmpb by\@bmarga
+ \divide\@bmctmpc by 4736\relax
+ \divide\@bmctmpa by 4736\relax
+ \divide\@bmarga by 4736\relax
+ \divide\@bmremb by 4736\relax
+ \advance\@bmctmpa by\@bmarga
+ \@bmargb=\@bmctmpa
+ \advance\@bmargb by\@bmarga
+ \advance\@bmctmpc by\@bmarga
+ \@bmrema=\@bmctmpc
+ \advance\@bmrema by\@bmarga
+ \advance\@bmargb by-\@bmremb
+ \advance\@bmrema by-\@bmremb
+ \if#1\@empty\else
+ \@bmsum=\@bmarga
+ \divide\@bmsum by 10\relax
+ \multiply\@bmsum by\hornlength
+ \edef\@hornlg{\the\@bmsum}
+ \if#1a\@bmsum=\@bmremb
+ \advance\@bmsum by -\@hornlg\relax
+ \edef\@hornx{\the\@bmsum}
+ \else\if#1b\@bmsum=\@bmargb
+ \advance\@bmsum by \@hornlg\relax
+ \edef\@hornx{\the\@bmsum}
+ \@bmsum=\@bmremb
+ \advance\@bmsum by -\@hornlg\relax
+ \edef\@horny{\the\@bmsum}
+ \else\if#1c\@bmsum=\@bmargb
+ \advance\@bmsum by \@hornlg\relax
+ \edef\@hornx{\the\@bmsum}
+ \@bmsum=\@bmrema
+ \advance\@bmsum by \@hornlg\relax
+ \edef\@horny{\the\@bmsum}
+ \else\if#1d\@bmsum=\@bmremb
+ \advance\@bmsum by -\@hornlg\relax
+ \edef\@hornx{\the\@bmsum}
+ \@bmsum=\@bmrema
+ \advance\@bmsum by \@hornlg\relax
+ \edef\@horny{\the\@bmsum}
+ \else\multiply\@bmsum by 3\relax
+ \edef\@hornlg{\the\@bmsum}
+ \if#1A\pbm@horn\@bmctmpa\@bmremb{-\@hornlg}
+ \else\if#1B\pbm@horn\@bmctmpc\@bmargb{\@hornlg}
+ \else\if#1C\pbm@horn\@bmctmpa\@bmrema{\@hornlg}
+ \else\if#1D\pbm@horn\@bmctmpc\@bmremb{-\@hornlg}
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \pbmfat(#2,#3){
+ \raise\@bmctmpb sp\hbox to\z@{
+ \special{pn \the\@bmremb}\special{sh 0}
+ \special{pa \the\@bmarga\space \the\@bmremb}
+ \if#1A\special{pa \@horni\space \the\@bmremb}
+ \special{pa \@hornx\space \@horny}
+ \special{pa \@hornii\space \the\@bmremb}\fi
+ \special{pa \the\@bmctmpa\space \the\@bmremb}
+ \if#1b\special{pa \@hornx\space \@horny}\fi
+ \special{pa \the\@bmargb\space \the\@bmarga}
+ \if#1B\special{pa \the\@bmargb\space \@horni}
+ \special{pa \@horny\space \@hornx}
+ \special{pa \the\@bmargb\space \@hornii}\fi
+ \special{pa \the\@bmargb\space \the\@bmctmpc}
+ \if#1c\special{pa \@hornx\space \@horny}\fi
+ \special{pa \the\@bmctmpa\space \the\@bmrema}
+ \if#1C\special{pa \@hornii\space \the\@bmrema}
+ \special{pa \@hornx\space \@horny}
+ \special{pa \@horni\space \the\@bmrema}\fi
+ \special{pa \the\@bmarga\space \the\@bmrema}
+ \if#1d\special{pa \@hornx\space \@horny}\fi
+ \special{pa \the\@bmremb\space \the\@bmctmpc}
+ \if#1D\special{pa \the\@bmremb\space \@hornii}
+ \special{pa \@horny\space \@hornx}
+ \special{pa \the\@bmremb\space \@horni}\fi
+ \special{pa \the\@bmremb\space \the\@bmarga}
+ \if#1a\special{pa \@hornx\space \@hornx}\fi
+ \special{pa \the\@bmarga\space \the\@bmremb}
+ \ifnum\@bmremb>0\special{fp}\else\special{ip}\fi
+ \if#1a\else\special{sh 0}
+ \special{ia \the\@bmarga\space \the\@bmarga\space
+ \CoRadius\space \CoRadius\space 0.0 6.28319}
+ \ifnum\@bmremb>0\special{ar \the\@bmarga\space \the\@bmarga\space
+ \CoRadius\space \CoRadius\space 3.14159 4.71239}\fi\fi
+ \if#1b\else\special{sh 0}
+ \special{ia \the\@bmctmpa\space \the\@bmarga\space
+ \CoRadius\space \CoRadius\space 0.0 6.28319}
+ \ifnum\@bmremb>0\special{ar \the\@bmctmpa\space \the\@bmarga\space
+ \CoRadius\space \CoRadius\space 4.71239 6.28319}\fi\fi
+ \if#1c\else\special{sh 0}
+ \special{ia \the\@bmctmpa\space \the\@bmctmpc\space
+ \CoRadius\space \CoRadius\space 0.0 6.28319}
+ \ifnum\@bmremb>0\special{ar \the\@bmctmpa\space \the\@bmctmpc\space
+ \CoRadius\space \CoRadius\space 0.0 1.5708}\fi\fi
+ \if#1d\else\special{sh 0}
+ \special{ia \the\@bmarga\space \the\@bmctmpc\space
+ \CoRadius\space \CoRadius\space 0.0 6.28319}
+ \ifnum\@bmremb>0\special{ar \the\@bmarga\space \the\@bmctmpc\space
+ \CoRadius\space \CoRadius\space 1.5708 3.14159}\fi\fi
+ }\hbox to\z@{\kern\the\@bmdarg\relax #4\hss}
+ }
+}
+\def\pbm@horn#1#2#3{
+ \@bmsum=#1\relax
+ \advance\@bmsum by \@bmarga
+ \divide\@bmsum by 2\relax
+ \advance\@bmsum by -\CoBase\relax
+ \edef\@horni{\the\@bmsum}
+ \advance\@bmsum by \CoBase\relax
+ \edef\@hornx{\the\@bmsum}
+ \advance\@bmsum by \CoBase\relax
+ \edef\@hornii{\the\@bmsum}
+ \@bmsum=#2\relax
+ \advance\@bmsum by #3\relax
+ \edef\@horny{\the\@bmsum}
+}
+%
+% GIF macros
+%
+\def\@setpbmorgsize#1{
+ \gif@search#1.
+ \set@orgsizetrue
+}
+\def\gif@search#1x#2.{\pbm@getbb#1 #2.}
+\def\giffile{\@ifnextchar[{\@giffile}{\@giffile[]}}
+\def\@giffile[#1]#2{{
+ \def\@setpbmfile##1{\def\@pbmfile{##1}}
+ \typeout{input GIF file}
+ \parse@pbm@parms{#2}
+ \ifset@orgsize
+ \bmcompute@handw
+ {\@bmarga=\@pbmwidth \divide\@bmarga by 186468\relax
+ \@bmargb=\@pbmheight \divide\@bmargb by 186468\relax
+ \message{becomes \the\@bmarga mm x \the\@bmargb mm}}
+ \else
+ \ifset@hscale\errmessage{gif(\@pbmfile): You must set orgsize option}\fi
+ \ifset@vscale\errmessage{gif(\@pbmfile): You must set orgsize option}\fi
+ \ifnum\@pbmheight<1\errmessage{gif(\@pbmfile): You should set the height}\fi
+ \ifnum\@pbmwidth<1\errmessage{gif(\@pbmfile): You should set the width}\fi
+ \fi
+ \@bmarga=\@pbmheight \divide\@bmarga by 65536\relax
+ \edef\@bmvsize{\number\@bmarga}
+ \@bmarga=\@pbmwidth \divide\@bmarga by 65536\relax
+ \edef\@bmhsize{\number\@bmarga}
+ \leavevmode
+ \hbox to \@pbmwidth sp{
+ \vrule\@width\z@\@height\@pbmheight sp\@depth\z@
+ \raise\@pbmheight sp
+ \hbox to\z@{
+ \ifrealscale
+ \special{giffile=\@pbmfile\space
+ \ifset@hscale hsize=\number\@pbmhsize dot/\the\pbmhdpi dpi
+ \else hsize=\@bmhsize\fi\space
+ \ifset@vscale vsize=\number\@pbmvsize dot/\the\pbmvdpi dpi
+ \else vsize=\@bmvsize\fi\space
+ }
+ \else
+ \special{pbmfile=\@pbmfile\space
+ \ifset@hscale hscale=\@pbmhscale
+ \else hsize=\@bmhsize\fi\space
+ \ifset@vscale vscale=\@pbmvscale
+ \else vsize=\@bmvsize\fi\space
+ }
+ \fi
+ }
+ \vrule\@width\z@\@height\@pbmheight sp \@depth\z@
+ \hbox to\z@{#1}\hfil
+ }
+}}
+\def\giffat{\pbmfat}
+\def\giffon{\pbmfon}
+\def\ovgiffon{\ovpbmfon}
+%
+\endlinechar=13\relax
+\endinput