# HG changeset patch # User gongo # Date 1215962871 -32400 # Node ID d40dd97c0a50d430dbc1fa02506c7844885a4f16 Initial revision diff -r 000000000000 -r d40dd97c0a50 Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Makefile Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,79 @@ +TARGET = ess2008 + +LATEX = platex-utf8 +BIBTEX = jbibtex +DVIPS = dvips +DVIPDFM = dvipdfmx +RM = rm -f + +# Option definitions +DVIPDFMOPT = +DVIPSOPT = -D 720 -mode esphi -O 0mm,0mm -N0 + +# Suffixes definitions +.SUFFIXES: .tex .dvi + +# Recipes +all: pdf# $(TARGET).ps + open $(TARGET).pdf +dvi: + @echo "----------- make dvi file ($(TARGET).dvi) ----------" + $(LATEX) $(TARGET) + $(BIBTEX) $(TARGET) + $(LATEX) $(TARGET) + $(LATEX) $(TARGET) +pdf: dvi + $(DVIPDFM) $(DVIPDFMOPT) $(TARGET) +ps: dvi + $(DVIPS) $(DVIPSOPT) $(TARGET) + +clean: + $(RM) *~ \#* + @if [ -f $(TARGET).aux ];\ + then $(RM) $(TARGET).aux;\ + fi + @if [ -f $(TARGET).log ];\ + then $(RM) $(TARGET).log;\ + fi + @if [ -f $(TARGET).toc ];\ + then $(RM) $(TARGET).toc;\ + fi + @if [ -f $(TARGET).lof ];\ + then $(RM) $(TARGET).lof;\ + fi + @if [ -f $(TARGET).lot ];\ + then $(RM) $(TARGET).lot;\ + fi + @if [ -f $(TARGET).big ];\ + then $(RM) $(TARGET).big;\ + fi + @if [ -f $(TARGET).bbl ];\ + then $(RM) $(TARGET).bbl;\ + fi + @if [ -f $(TARGET).ilg ];\ + then $(RM) $(TARGET).ilg;\ + fi + @if [ -f $(TARGET).idx ];\ + then $(RM) $(TARGET).idx;\ + fi + @if [ -f $(TARGET).ind ];\ + then $(RM) $(TARGET).ind;\ + fi + @if [ -f $(TARGET).dvi ];\ + then $(RM) $(TARGET).dvi;\ + fi + @if [ -f $(TARGET).ps ];\ + then $(RM) $(TARGET).ps;\ + fi + @if [ -f $(TARGET).pdf ];\ + then $(RM) $(TARGET).pdf;\ + fi + @if [ -f $(TARGET).out ];\ + then $(RM) $(TARGET).out;\ + fi + @if [ -f $(TARGET).bbl ];\ + then $(RM) $(TARGET).bbl;\ + fi + @if [ -f $(TARGET).blg ];\ + then $(RM) $(TARGET).blg;\ + fi diff -r 000000000000 -r d40dd97c0a50 bibsample.bib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bibsample.bib Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,198 @@ +@book{total, + author = "$B0KF#(B $BOB?M(B", + yomi = "Kazuto Itoh", + title = "{\LaTeX} $B%H!<%?%k%,%$%I(B", + publisher = "$B=(OB%7%9%F%`%H%l!<%G%#%s%0(B", + year = 1991} +@book{latex, + author = "Leslie Lamport", + title = "A Document Preparation System {\LaTeX} User's Guide + \& Reference Manual", + publisher = "Addison Wesley", + address = "Reading, Massachusetts", + year = 1986, + note = "(Cooke, E., et al.$BLu!'J8=q=hM}%7%9%F%`(B {\LaTeX}$B!$(B" # + "$B%"%9%-!<=PHG6I(B (1990))"} +@book{nodera, + author = "$BLn;{(B $BN4;V(B", + yomi = "Takashi Nodera", + title = "$B3Z!9(B {\LaTeX}", + publisher = "$B6&N)=PHG(B", + year = 1990} +@book{okumura, + author = "$B1|B<(B $B@2I'(B", + yomi = "Haruhiko Okudera", + title = "{\LaTeX} $BH~J8=q:n@.F~Lg(B", + publisher = "$B5;=QI>O@ZL@(B, " # + "$BF|K\%3%s%T%e!<%?6(2q(B (1983))"} +@booklet{booklet1, + author = "$B?7@$Be%3%s%T%e!<%?5;=Q3+H/5!9=(B", + title = "$BBh8^@$Be%3%s%T%e!<%?%W%m%8%'%/%H$N35MW(B", + howpublished = "{FGCS'92}$B$K$FG[I[(B", + year = 1992} + +@inbook{inbook1, + author = "Knuth, D. E.", + title = "Fundamental Algorithms", + series = "Art of Computer Programming", + volume = 1, + chapter = 2, + pages = "371--381", + publisher = "Addison-Wesley", + address = "Reading, Massachusetts", + edition = "2nd", + year = 1973} + +@incollection{incollection1, + author = "Schwartz, Aaaa Jjjj", + title = "Subdividing B{\'e}zier Curves and Surfaces", + booktitle = "Geometric Modeling: Algorithms and New Trends", + editor = "Farin, G. E.", + publisher = "SIAM", + address = "Philadelphia", + pages = "55--66", + year = 1987} + +@inproceedings{inproceedings1, + author = "Baraff, D", + title = "Curved Surfaces and Coherence for Non-penetrating + Rigid Body Simulation", + booktitle = "SIGGRAPH '90 Proceedings", + pages = "19--28", + editor = "Beach, R. J.", + address = "Dallas, Texas", + organization = "ACM", + publisher = "Addison-Wesley", + year = 1990} + +@manual{manual1, + organization = "Adobe Systems Inc.", + title = "PostScript Language Reference Manual", + publisher = "Addison-Wesley", + address = "Reading, Massachusetts", + year = 1985} + +@mastersthesis{mastersthesis1, + author = "$B;32<(B $B5A9T(B", + yomi = "Yamashita, Y", + title = "$BJ8L.<+M3J8K!$X$NH]Dj$NF3F~(B", + school = "$BC^GHBg3XBg3X1!9)3X8&5f2J(B", + year = 1989} + + +@misc{misc1, + author = "$B@FF#(B $B9/8J(B and $BCfEg(B $B9@(B", + title = "{{\tt ipsjpapers.sty}}", + note = "($B>pJs=hM}3X2qO@J8;oMQ%9%?%$%k%U%!%$%k!$(B" # + "$BO@J8Cx <6> <7> <8> <9> <10> sgen*min + <10.95><12><14.4><17.28><20.74><24.88> min10 + <-> min10}{} +\DeclareFontShape{JT1}{mc}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*tmin + <10.95><12><14.4><17.28><20.74><24.88> tmin10 + <-> tmin10}{} +\DeclareRelationFont{JY1}{mc}{sl}{}{OT1}{cmr}{sl}{} +\DeclareRelationFont{JT1}{mc}{sl}{}{OT1}{cmr}{sl}{} +\DeclareFontShape{JY1}{mc}{m}{sl}{<5> <6> <7> <8> <9> <10> sgen*min + <10.95><12><14.4><17.28><20.74><24.88> min10 + <-> min10}{} +\DeclareFontShape{JT1}{mc}{m}{sl}{<5> <6> <7> <8> <9> <10> sgen*tmin + <10.95><12><14.4><17.28><20.74><24.88> tmin10 + <-> tmin10}{} +\DeclareRelationFont{JY1}{mc}{sc}{}{OT1}{cmr}{sc}{} +\DeclareRelationFont{JT1}{mc}{sc}{}{OT1}{cmr}{sc}{} +\DeclareFontShape{JY1}{mc}{m}{sc}{<5> <6> <7> <8> <9> <10> sgen*min + <10.95><12><14.4><17.28><20.74><24.88> min10 + <-> min10}{} +\DeclareFontShape{JT1}{mc}{m}{sc}{<5> <6> <7> <8> <9> <10> sgen*tmin + <10.95><12><14.4><17.28><20.74><24.88> tmin10 + <-> tmin10}{} +\DeclareRelationFont{JY1}{gt}{it}{}{OT1}{cmbx}{it}{} +\DeclareRelationFont{JT1}{gt}{it}{}{OT1}{cmbx}{it}{} +\DeclareFontShape{JY1}{mc}{bx}{it}{<5> <6> <7> <8> <9> <10> sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> goth10 + <-> goth10}{} +\DeclareFontShape{JT1}{mc}{bx}{it}{<5> <6> <7> <8> <9> <10> sgen*tgoth + <10.95><12><14.4><17.28><20.74><24.88> tgoth10 + <-> tgoth10}{} +\DeclareRelationFont{JY1}{gt}{sl}{}{OT1}{cmbx}{sl}{} +\DeclareRelationFont{JT1}{gt}{sl}{}{OT1}{cmbx}{sl}{} +\DeclareFontShape{JY1}{mc}{bx}{sl}{<5> <6> <7> <8> <9> <10> sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> goth10 + <-> goth10}{} +\DeclareFontShape{JT1}{mc}{bx}{sl}{<5> <6> <7> <8> <9> <10> sgen*tgoth + <10.95><12><14.4><17.28><20.74><24.88> tgoth10 + <-> tgoth10}{} +\DeclareRelationFont{JY1}{gt}{sc}{}{OT1}{cmbx}{sc}{} +\DeclareRelationFont{JT1}{gt}{sc}{}{OT1}{cmbx}{sc}{} +\DeclareFontShape{JY1}{mc}{bx}{sc}{<5> <6> <7> <8> <9> <10> sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> goth10 + <-> goth10}{} +\DeclareFontShape{JT1}{mc}{bx}{sc}{<5> <6> <7> <8> <9> <10> sgen*tgoth + <10.95><12><14.4><17.28><20.74><24.88> tgoth10 + <-> tgoth10}{} +\DeclareRelationFont{JY1}{gt}{it}{}{OT1}{cmr}{it}{} +\DeclareRelationFont{JT1}{gt}{it}{}{OT1}{cmr}{it}{} +\DeclareFontShape{JY1}{gt}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> goth10 + <-> goth10}{} +\DeclareFontShape{JT1}{gt}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*tgoth + <10.95><12><14.4><17.28><20.74><24.88> tgoth10 + <-> tgoth10}{} +\endinput +%%%% end of jdummy.def diff -r 000000000000 -r d40dd97c0a50 ebibsample.bib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ebibsample.bib Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,139 @@ +@book{companion, + author = "Michael Goossens and Frank Mittelbach and + Alexander Samarin", + title = "The LaTeX Companion", + publisher = "Addison Wesley", + address = "Reading, Massachusetts", + year = 1993} +@book{latex, + author = "Leslie Lamport", + title = "A Document Preparation System {\LaTeX} User's Guide + \& Reference Manual", + publisher = "Addison Wesley", + address = "Reading, Massachusetts", + year = 1986} +@article{article1, + author = "Ssss Itoh and Nnnn Goto", + title = "An Adaptive Noiseless Coding for Sources with Big + Alphabet Size", + journal = "Trans. IEICE", + volume = "E74", + number = 9, + pages = "2495--2503", + year = 1991, + month = sep} +@article{article2, + author = "K. Abrahamson and N. Dadoun and " # + "D. G. Kirkpatrick and T. Przytycka", + title = "A Simple Parallel Tree Contraction Algorithm", + journal = "J. Algorithms", + volume = 10, + number = 2, + pages = "287--302", + year = 1989} + +@book{book1, + author = "J. D. Foley and others", + title = "Computer Graphics --- Principles and Practice", + series = "System Programming Series", + publisher = "Addison-Wesley", + address = "Reading, Massachusetts", + edition = "2nd", + year = 1990} +@book{book2, + author = "Chang, C. L. and Lee, R. C. T.", + title = "Symbolic Logic and Mechanical Theorem Proving", + publisher = "Academic Press", + address = "New York", + year = 1973} + +@booklet{booklet1, + author = "{Institute for New Generation Computer Technology}", + title = "Overview of the Fifth Generation Computer Project", + howpublished = "distributed in {FGCS'92}", + year = 1992, + note = "(in Japanese)"} + +@inbook{inbook1, + author = "Knuth, D. E.", + title = "Fundamental Algorithms", + series = "Art of Computer Programming", + volume = 1, + chapter = 2, + pages = "371--381", + publisher = "Addison-Wesley", + address = "Reading, Massachusetts", + edition = "2nd", + year = 1973} + +@incollection{incollection1, + author = "Schwartz, Aaaa Jjjj", + title = "Subdividing B{\'e}zier Curves and Surfaces", + booktitle = "Geometric Modeling: Algorithms and New Trends", + editor = "Farin, G. E.", + publisher = "SIAM", + address = "Philadelphia", + pages = "55--66", + year = 1987} + +@inproceedings{inproceedings1, + author = "Baraff, D", + title = "Curved Surfaces and Coherence for Non-penetrating + Rigid Body Simulation", + booktitle = "SIGGRAPH '90 Proceedings", + pages = "19--28", + editor = "Beach, R. J.", + address = "Dallas, Texas", + organization = "ACM", + publisher = "Addison-Wesley", + year = 1990} + +@manual{manual1, + organization = "Adobe Systems Inc.", + title = "PostScript Language Reference Manual", + publisher = "Addison-Wesley", + address = "Reading, Massachusetts", + year = 1985} + +@mastersthesis{mastersthesis1, + author = "Kazuhiro Ohno", + title = "Efficient Message Communication of Concurrent Logic + Programming Language KL1 Based on Static Analysis", + school = "Dept. Information Science, Kyoto University", + year = 1995} + +@misc{misc1, + author = "Yasuki Saito and Hiroshi Nakashima", + title = "{{\tt ipsjpapers.sty}}", + note = "(Style file for Trans. IPSJ distributed to authors.)", + year = 1995} + +@phdthesis{phdthesis1, + author = "Weihl, W.", + title = "Specification and Implementation of + Atomic Data Types", + school = "MIT", + address = "Boston", + year = 1984} + +@proceedings{proceedings1, + title = "Proc. Intl. Conf. on Fifth Generation Computer + Systems", + organization = "Institute for New Generation Computer Technology", + volume = 1, + year = 1992} + +@techreport{WarD:WAM-1, + author = "David H. D. Warren", + title = "An Abstract {Prolog} Instruction Set", + type = "Technical Report", + number = 309, + institution = "Artificial Intelligence Center, SRI International", + year = 1983, + month = oct} + +@unpublished{unpublished, + author = "{Editorial Board of Trans. IPSJ}", + title = "How to Typeset Your Papers in {\LaTeX} (Version 1)", + note = "(distributed to authors)", + year = 1995} diff -r 000000000000 -r d40dd97c0a50 ess2008.bib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ess2008.bib Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,63 @@ +@article{akira, +author = "{Akira KAMIZATO}", +title = "{Cell を用いたゲームフレームワークの提案}", +journal = "{琉球大学理工学研究科情報工学専攻 平成19年度学位論文}", +year = 2008 +} + +@book{amdahl, +author = "{Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, and Doug Lea}", +title = "{Java Concurrency in Prac-tice}", +publisher = "{Addison-Wesley Professional}", +year = "2005" +} + +@misc{gongo, +author = "", +title = "{SourceForge.JP: Project Info - Cerium Rendering Engine}", +howpublished = "\url{https://sourceforge.jp/projects/cerium/}" +} + +@misc{spurs, +author = "{Keisuke Inoue}", +title = "{SPU Centric Execution Model}", +text = "SACSIS 2006", +year = 2006 +} + +@misc{cell, +author = "{Sony Corporation}", +title = "{Cell broadband engine architecture}", +year = 2005 +} + +@journal{chiaki, +author = "{Chiaki SUGIYAMA}", +title = "{SceneGraph と StatePattern を用いたゲームフレームワークの設計と実装}", +journal = "{琉球大学工学部情報工学科 平成19年度卒業論文}", +year = 2008 +} + +@misc{blender, +title = "{Blender.jp - Blender Japanese Website}", +howpublished = "\url{http://blender.jp/}" +} + +@manual{libspe2, +author = "{International Business Machines Corporation, Sony Computer Entertainment Incorporated, Toshiba Corporation}", +title = "{SPE Runtime Management Library}", +year = 2006 +} + +@article{kono, +author = "{Shinji KONO}", +title = "{検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation ba sed C と、その Cell への応用}", +journal = "{電子情報通信学会VLSI設計技術研究会}", +year = 2008 +} + +@manual{mailbox, +author = "{Sony Corporation}", +title = "{Cell BroadbandEngine アーキテクチャ}", +year = 2006 +} diff -r 000000000000 -r d40dd97c0a50 ess2008.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ess2008.tex Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,82 @@ +%\documentstyle{ipsjpapers} +\documentclass{ipsjpapers} +\usepackage[dvipdfm]{graphicx} +\usepackage{url} + +\input{dummy.tex} %% font + +% ユーザが定義したマクロなど. +\makeatletter +\let\@ARRAY\@array \def\@array{\def\<{\inhibitglue}\@ARRAY} +\def\<{\(\langle\)} +\def\>{\(\rangle\)} +\def\|{\verb|} +\def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline} +\def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\} +\def\LATEX{\iLATEX\Large} +\def\LATEx{\iLATEX\normalsize} +\def\LATex{\iLATEX\small} +\def\iLATEX#1{L\kern-.36em\raise.3ex\hbox{#1\bf A}\kern-.15em + T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX} +\def\LATEXe{\ifx\LaTeXe\undefined \LaTeX 2e\else\LaTeXe\fi} +\def\LATExe{\ifx\LaTeXe\undefined \iLATEX\scriptsize 2e\else\LaTeXe\fi} +\def\Quote{\list{}{}\item[]} +\let\endQuote\endlist +\def\TT{\if@LaTeX@e\tt\fi} +\def\CS#1{\if@LaTeX@e\tt\expandafter\string\csname#1\endcsname\else + $\backslash$#1\fi} + +%\checklines % 行送りを確認する時に使用 +\begin{document}%{ +% 和文表題 +\title{Cell 用の Fine-Grain Task Manager の実装} +% 英文表題 +\etitle{Implementation of Fine-grain Task Manager for Cell} +% 所属ラベルの定義 +\affilabel{ie.u-ryukyu1}{琉球大学理工学研究科情報工学専攻\\Interdisciplinary Infomation Engineering, Graduate School of Engineering and Science, University of the Ryukyus} +\affilabel{ie.u-ryukyu2}{琉球大学工学部情報工学科\\Infomation Engineering, University of the Ryukyus} +% 和文著者名 +\author{宮國 渡\affiref{ie.u-ryukyu1}\and + 河野 真治\affiref{ie.u-ryukyu2}} + +% 英文著者名 +\eauthor{Wataru MIYAGUNI\affiref{ie.u-ryukyu1}\and + Shinji KONO\affiref{ie.u-ryukyu2}} + +% 和文概要 +\begin{abstract} +近年、CPU の性能向上は、クロックサイクルをあげることよりも、 +複数の CPU コア (Many Core Architecture) を導入することにより +得られるようになって来ている。しかし、Many Core Architecture のプログラムは +複雑であり、その信頼性を確保することは難しい。 +本研究では Many Core Architecture 向けの Fine Grain Task Manager を設計する。 +例題として、Rendering を含む PS3 上のゲームプログラム用フレームワークである +Cerium を用いる +\end{abstract} +% 英文概要 +\begin{eabstract} +CPU performance is achieved in Many Core Architecture rather than high clock speed recently. The complicated nature of this architecture makes reliable program difficult. +In this paper, we implemented Fine Grain Task Manager for Many Core +Architecture. +We use this method for "Cerium" that is the framework for the game program on PS3 including Rendering. + +\end{eabstract} + +% 表題などの出力 +\maketitle + +% 本文はここから始まる + +\input{introduction} % 研究目的 +\input{cell} % Cell +\input{manycore} % many core system +\input{task_manager} % Task Manager +\input{dev} % 開発過程 +\input{cerium} % Cerium +\input{compare} % 評価と考察 +\input{conclusion} % まとめ + +\bibliographystyle{ipsjunsrt} +\bibliography{ess2008} + +\end{document} diff -r 000000000000 -r d40dd97c0a50 figure/amdahl.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/amdahl.bb Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./amdahl.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 360 252 +%%CreationDate: Sun Jul 13 15:54:37 2008 + diff -r 000000000000 -r d40dd97c0a50 figure/amdahl.eps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/amdahl.eps Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,723 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: amdahl.eps +%%Creator: gnuplot 4.2 patchlevel 3 +%%CreationDate: Sun Jul 13 15:53:35 2008 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 410 302 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following 6 true/false flags may be edited by hand if required +% The unit line width may also be changed +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +Level1 {} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (amdahl.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.2 patchlevel 3 ) + /Author (Wataru MIYAGUNI) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Sun Jul 13 15:53:35 2008) + /DOCINFO pdfmark +end +} ifelse +% +% Gnuplot Prolog Version 4.2 (August 2006) +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + gsave 1 setgray fill grestore clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +end +%%EndProlog +gnudict begin +gsave +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +546 420 M +63 0 V +6353 0 R +-63 0 V +462 420 M +( 0) Rshow +1.000 UL +LTb +546 1162 M +63 0 V +6353 0 R +-63 0 V +-6437 0 R +( 1) Rshow +1.000 UL +LTb +546 1904 M +63 0 V +6353 0 R +-63 0 V +-6437 0 R +( 2) Rshow +1.000 UL +LTb +546 2646 M +63 0 V +6353 0 R +-63 0 V +-6437 0 R +( 3) Rshow +1.000 UL +LTb +546 3388 M +63 0 V +6353 0 R +-63 0 V +-6437 0 R +( 4) Rshow +1.000 UL +LTb +546 4130 M +63 0 V +6353 0 R +-63 0 V +-6437 0 R +( 5) Rshow +1.000 UL +LTb +546 4872 M +63 0 V +6353 0 R +-63 0 V +-6437 0 R +( 6) Rshow +1.000 UL +LTb +546 420 M +0 63 V +0 4389 R +0 -63 V +546 280 M +( 0) Cshow +1.000 UL +LTb +1188 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 0.1) Cshow +1.000 UL +LTb +1829 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 0.2) Cshow +1.000 UL +LTb +2471 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 0.3) Cshow +1.000 UL +LTb +3112 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 0.4) Cshow +1.000 UL +LTb +3754 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 0.5) Cshow +1.000 UL +LTb +4396 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 0.6) Cshow +1.000 UL +LTb +5037 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 0.7) Cshow +1.000 UL +LTb +5679 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 0.8) Cshow +1.000 UL +LTb +6320 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 0.9) Cshow +1.000 UL +LTb +6962 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 1) Cshow +1.000 UL +LTb +1.000 UL +LTb +546 4872 N +546 420 L +6416 0 V +0 4452 V +-6416 0 V +Z stroke +LCb setrgbcolor +140 2646 M +currentpoint gsave translate 90 rotate 0 0 M +(effect of paralleling) Cshow +grestore +LTb +LCb setrgbcolor +3754 70 M +(parallelization ratio) Cshow +LTb +1.000 UP +1.000 UL +LTb +1.000 UL +LT0 +LTb +6311 4739 M +(6 CPU) Rshow +LT0 +6395 4739 M +399 0 V +546 1162 M +65 6 V +65 7 V +64 6 V +65 7 V +65 7 V +65 6 V +65 7 V +64 8 V +65 7 V +65 7 V +65 8 V +65 7 V +65 8 V +64 8 V +65 8 V +65 8 V +65 9 V +65 9 V +64 8 V +65 9 V +65 9 V +65 10 V +65 9 V +64 10 V +65 10 V +65 10 V +65 10 V +65 11 V +64 11 V +65 11 V +65 11 V +65 12 V +65 11 V +64 13 V +65 12 V +65 13 V +65 13 V +65 13 V +65 14 V +64 14 V +65 14 V +65 15 V +65 15 V +65 15 V +64 16 V +65 17 V +65 17 V +65 17 V +65 18 V +64 18 V +65 19 V +65 20 V +65 20 V +65 20 V +64 22 V +65 22 V +65 22 V +65 24 V +65 24 V +64 25 V +65 26 V +65 27 V +65 28 V +65 29 V +65 29 V +64 32 V +65 32 V +65 33 V +65 35 V +65 36 V +64 38 V +65 40 V +65 41 V +65 43 V +65 45 V +64 47 V +65 49 V +65 52 V +65 54 V +65 57 V +64 60 V +65 63 V +65 67 V +65 71 V +65 75 V +64 79 V +65 85 V +65 90 V +65 96 V +65 103 V +65 110 V +64 118 V +65 128 V +65 137 V +65 150 V +65 162 V +64 178 V +65 194 V +65 214 V +stroke +LTb +546 4872 N +546 420 L +6416 0 V +0 4452 V +-6416 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica diff -r 000000000000 -r d40dd97c0a50 figure/amdahl.pdf Binary file figure/amdahl.pdf has changed diff -r 000000000000 -r d40dd97c0a50 figure/cbe-spe.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/cbe-spe.bb Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./cbe-spe.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 271 359 +%%CreationDate: Mon Mar 24 01:57:05 2008 + diff -r 000000000000 -r d40dd97c0a50 figure/cbe-spe.graffle Binary file figure/cbe-spe.graffle has changed diff -r 000000000000 -r d40dd97c0a50 figure/cbe-spe.pdf Binary file figure/cbe-spe.pdf has changed diff -r 000000000000 -r d40dd97c0a50 figure/cbe.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/cbe.bb Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./cbe.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 485 264 +%%CreationDate: Sun Mar 23 17:15:49 2008 + diff -r 000000000000 -r d40dd97c0a50 figure/cbe.graffle Binary file figure/cbe.graffle has changed diff -r 000000000000 -r d40dd97c0a50 figure/cbe.pdf Binary file figure/cbe.pdf has changed diff -r 000000000000 -r d40dd97c0a50 figure/cerium.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/cerium.bb Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./cerium.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 470 535 +%%CreationDate: Mon Mar 24 11:12:47 2008 + diff -r 000000000000 -r d40dd97c0a50 figure/cerium.graffle Binary file figure/cerium.graffle has changed diff -r 000000000000 -r d40dd97c0a50 figure/cerium.pdf Binary file figure/cerium.pdf has changed diff -r 000000000000 -r d40dd97c0a50 figure/manager-pipeline.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/manager-pipeline.bb Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./manager-pipeline.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 557 405 +%%CreationDate: Mon Mar 24 22:06:15 2008 + diff -r 000000000000 -r d40dd97c0a50 figure/manager-pipeline.graffle Binary file figure/manager-pipeline.graffle has changed diff -r 000000000000 -r d40dd97c0a50 figure/manager-pipeline.pdf Binary file figure/manager-pipeline.pdf has changed diff -r 000000000000 -r d40dd97c0a50 figure/scene_graph.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/scene_graph.bb Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./scene_graph.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 542 288 +%%CreationDate: Mon Mar 24 02:27:40 2008 + diff -r 000000000000 -r d40dd97c0a50 figure/scene_graph.graffle Binary file figure/scene_graph.graffle has changed diff -r 000000000000 -r d40dd97c0a50 figure/scene_graph.pdf Binary file figure/scene_graph.pdf has changed diff -r 000000000000 -r d40dd97c0a50 figure/span.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/span.bb Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./span.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 413 247 +%%CreationDate: Mon Mar 24 10:02:16 2008 + diff -r 000000000000 -r d40dd97c0a50 figure/span.graffle Binary file figure/span.graffle has changed diff -r 000000000000 -r d40dd97c0a50 figure/span.pdf Binary file figure/span.pdf has changed diff -r 000000000000 -r d40dd97c0a50 figure/spurs-pipeline.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/spurs-pipeline.bb Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./spurs-pipeline.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 551 205 +%%CreationDate: Tue Mar 25 11:56:24 2008 + diff -r 000000000000 -r d40dd97c0a50 figure/spurs-pipeline.graffle Binary file figure/spurs-pipeline.graffle has changed diff -r 000000000000 -r d40dd97c0a50 figure/spurs-pipeline.pdf Binary file figure/spurs-pipeline.pdf has changed diff -r 000000000000 -r d40dd97c0a50 figure/spurs_task.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/spurs_task.bb Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./spurs_task.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 507 229 +%%CreationDate: Tue Mar 25 12:01:26 2008 + diff -r 000000000000 -r d40dd97c0a50 figure/spurs_task.graffle Binary file figure/spurs_task.graffle has changed diff -r 000000000000 -r d40dd97c0a50 figure/spurs_task.pdf Binary file figure/spurs_task.pdf has changed diff -r 000000000000 -r d40dd97c0a50 figure/sync.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/sync.bb Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./sync.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 577 554 +%%CreationDate: Sat Mar 29 08:29:28 2008 + diff -r 000000000000 -r d40dd97c0a50 figure/sync.graffle Binary file figure/sync.graffle has changed diff -r 000000000000 -r d40dd97c0a50 figure/sync.pdf Binary file figure/sync.pdf has changed diff -r 000000000000 -r d40dd97c0a50 introduction.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/introduction.tex Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,21 @@ +\section{研究の目的} +本研究では、Many Core Architecture 向けの Fine Grain Task Manager を設計する。 +Fine Grain Task の単位はサブルーチンまたは関数とし、 +全ての Core が絶えず動くようにすることで全体の並列化率を高める。 + +Fine Grain Task 自身や、タスク全体のデバッグを容易にするために、 +同じタスクが Mac OS X や Linux、PS3 上など複数の環境で動くようにする。 +また、Thread を多用せず、細粒度タスク内での同期は行わない。 +これにより、並列プログラミングの経験の低いプログラマでも容易に使用できる。 + +例題として、本研究室で作成した、Rendering を含む PS3 上のゲームプログラム用 +フレームワークである Cerium を用いる。Cerium は、次の 3 つから構成される。 + +\begin{itemize} + \item Scene Graph + \item Rendering Engine + \item Fine Grain Task Manager +\end{itemize} + +Cerium は学生実験で使用しており、並列プログラミング経験の浅い学生でも、 +移植や改良、拡張が容易に行えるツールを目的としている diff -r 000000000000 -r d40dd97c0a50 ipsjcommon.sty --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsjcommon.sty Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,858 @@ +% Copyright (C) 1995,1996,1997,1998,1999,2000,2001 +% by Hiroshi Nakashima, Yasuki Saito and +% The Editorial Board of the IPSJ Journal +% +% ipsjcommon.sty 15-May-01 by Hiroshi Nakashima (ver 2.08) +% (revision history deleted) +% ipsjcommon.sty 24-Apr-95 by Hiroshi Nakashima (ver 1.0) + +%%%%%% Sectioning Commands %%%%%% + +% \section: 2$B9T \the [`.' if \section] <1 Kanji sp> +% Nothe that <1 Kanji sp> is that of \normalsize. + +\def\section{\@startsection + {section}{1}{\@mojihaba}{\sec@aboveskip}{\sec@belowskip}{\fs@sec\bf}} +\let\ipsj@section\section % 2.04(1) +\def\subsection{\@startsection + {subsection}{2}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}} +\def\subsubsection{\@startsection + {subsubsection}{3}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}} +\def\paragraph{\@startsection + {paragraph}{4}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}} +\def\subparagraph{\@startsection + {subparagraph}{5}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}} + +\newcounter{section} +\newcounter{subsection}[section] +\newcounter{subsubsection}[subsection] +\newcounter{paragraph}[subsubsection] +\newcounter{subparagraph}[paragraph] + +\def\thesection{\arabic{section}} +\def\sec@section@postfix{.} +\def\thesubsection{\thesection.\arabic{subsection}} +\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} +\def\theparagraph{\thesubsubsection.\arabic{paragraph}} +\def\thesubparagraph{\theparagraph.\arabic{subparagraph}} + +\setcounter{secnumdepth}{5} + +\def\appendix{\let\sec@sec\section + \def\section{\@startsection + {section}{1}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}% + \def\thesection{\appendixprefix\arabic{section}}% + \def\sec@section@postfix{\appendixpostfix}% + \stepcounter{section}\setcounter{section}{0}% + \@ifnextchar[%] + {\sec@oappendix}{\sec@xappendix}} +\def\sec@xappendix{\@ifstar{\let\section\sec@sec}% + {\sec@sec*{\ifDS@english Appendix\else $BIUO?(B\fi}}} +\def\sec@oappendix[#1]{\sec@sec*{\ifDS@english Appendix: \else + $BIUO?(B\hskip\jspaceskip\fi #1}} +\def\appendixprefix{A.} +\def\appendixpostfix{} + +\def\acknowledgment{\par + {\bf \ifDS@english Acknowledgments\else $B<U<-(B\fi}\hskip\@mojihaba + \ignorespaces} +\let\endacknowledgment\par + +\newif\ifipsj@recommendation \ipsj@recommendationfalse % 2.04(1) >> +\def\recommendation#1{\global\ipsj@recommendationtrue + \ifDS@draft\else \ra@putrcvacc\fi + \ipsj@section*{#1} +} +\def\endrecommendation{\par\vskip\baselineskip\penalty\opt@magicpenalty} + % 2.04(1) << + +% Modified \@startsection has a trick for 2$B9T<h$j(B of \section, which must +% work even if \section appears the top of a page. The BEFORESKIP must be +% inserted with respect to the previous baseline. So, we must go back to +% the imaginary previous baseline at the top of a page. That is, we do; +% \vskip\baselineskip \vspace*{-\baselineskip} +% which resuls; +% <a> do nothing at midpage +% <b> go to the first baseline by \topskip, then go back to 0th +% baseline by \vspace*. +% The trick "\vskip-\prevdepth \prevdepth\z@" will assure exact vertical +% space even when the last line has much depth. +% +% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE} +\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi + \par \@tempskipa #4\relax + \@afterindenttrue + \ifdim\@tempskipa<\z@ \@tempskipa-\@tempskipa \@afterindentfalse\fi + \if@nobreak \everypar{}\else \addpenalty{\@secpenalty}\fi + \ifdim\@tempskipa>\z@ +% Here is the trick for \section. + \vskip-\prevdepth \prevdepth\z@ \vskip\baselineskip + \vspace*{-\baselineskip}\vskip\@tempskipa\fi + \@ifstar + {\@ssect{#3}{#4}{#5}{#6}}{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}} + +% \@sect is modified to cope with `.' for \section and $BJ8;z<h$j(B +% +% \@sect{NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}[TITLE]{TITLE} +\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth + \def\@svsec{}\else + \refstepcounter{#1} + % 2.00(1)>> + \let\@@protect\protect \def\protect{\noexpand\protect\noexpand} + \edef\@svsec{\csname the#1\endcsname \csname sec@#1@postfix\endcsname + \hskip\@mojihaba} \let\protect\@@protect\fi % 2.00(1)<< + \@tempskipa #5\relax + \ifdim \@tempskipa<\z@ + \def\@svsechd{#6\hskip #3\relax\@svsec #8} % 2.00(1) + \else + \begingroup #6\relax + \@hangfrom{\hskip #3\relax\@svsec}% + {\interlinepenalty\@M \sec@mojidori{#8}\par}% + \endgroup + \fi \@xsect{#5}} + +% \@ssect is modified to cope with $BJ8;z<h$j(B +% +% \@sect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}{TITLE} +\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax + \ifdim \@tempskipa<\z@ \def\@svsechd{#4\hskip #1\relax #5}% + \else \begingroup #4% + \@hangfrom{\hskip #1}{\interlinepenalty\@M + \sec@mojidori{#5}\par}\endgroup + \fi \@xsect{#3}} + +%% Modify \@xsect to avoid (buggy) \clubpenalty=10000. (H.N.) +\def\@xsect#1{\@tempskipa #1\relax + \ifdim \@tempskipa<\z@ + \glboal\@nobreakfalse \global\@noskipsectrue + \everypar{\global\@noskipsecfalse \hskip-\parindent + \begingroup \@svsechd \endgroup \unskip + \hskip -#1\everypar{}}% + \else + \par \nobreak + \vskip \@tempskipa \global\@nobreaktrue + \everypar{\global\@nobreakfalse + \if@afterindent\else {\setbox0\lastbox}\fi \everypar{}} + \fi\ignorespaces} + +% Here is a trick for $BJ8;z<h$j(B of sectioning tilte. The rule is; +% 2 - 4 Kanji char -> 5 Kanji char +% otherwise -> natural width +% +\def\sec@mojidori#1{\setbox0\hbox{#1}\settowidth\@tempdimb{$B$"(B}% + \ifdim\wd0>4.5\@tempdimb #1\else + \ifdim\wd0<1.5\@tempdimb #1\else + \jintercharskip\fill \jasciikanjiskip\fill \jmathkanjiskip\fill + \leavevmode\hbox to5\@tempdimb{#1\hfil}\fi\fi} + +%%%%%% List-like Environments %%%%%% +% +% LM RM LW LS LPI II +% default 2K 0 0.75K 0.25K 0 0 +% \enumerate 3K 0 3K 0 0 0 +% \Enumerate 0 0 3K 0 0 3K +% \ENUMERATE 0 0 3K 0 0 4K +% \enumerate* 1K 0 3K 0 0 2K +% \itemize 2K 0 2K 0 0 0 +% \Itemize 0 0 2K 0 0 2K +% \ITEMIZE 0 0 2K 0 0 3K +% \itemize* 1K 0 2K 0 0 1K +% \description 2K 0 0 1K 0 -1K +% \Description 0 0 0 1K 0 1K +% \DESCRIPTION 0 0 0 1K 0 2K +% \description* 1K 0 0 1K 0 0 +% \verse 3K 2K 0.75K 0.25K -1K -1K +% \quotation 2K 2K 0.75K 0.25K 1K 1K +% \quote 2K 2K 0.75K 0.25K 0 0 +% +% where LM is \leftmargin, RM is \rightmargin, LW is \labelwidth, LS is +% \labelsep, \LPI is \listparindent, II is \itemindent, and K is Kanji char +% width (\@mojihaba). +% +% All vertical space parameters, \topsep, \partopsep, \itemsep and \parsep, +% are 0pt. + +\leftmargini2\@mojihaba +\leftmarginii2\@mojihaba +\leftmarginiii2\@mojihaba +\leftmarginiv2\@mojihaba +\leftmarginv2\@mojihaba +\leftmarginvi2\@mojihaba + +\def\lst@listi{\labelsep.75\@mojihaba \labelwidth.25\@mojihaba + \rightmargin\z@ \listparindent\z@ \itemindent\z@ + \partopsep\z@ \parsep\z@ \topsep\z@ \itemsep\z@} +\def\@listi{\leftmargin\leftmargini \lst@listi} +\def\@listii{\leftmargin\leftmarginii \lst@listi} +\def\@listiii{\leftmargin\leftmarginiii \lst@listi} +\def\@listiv{\leftmargin\leftmarginiv \lst@listi} +\def\@listv{\leftmargin\leftmarginv \lst@listi} +\def\@listvi{\leftmargin\leftmarginvi \lst@listi} + +\@listi + +\def\labelenumi{(\,\theenumi\,)} +\def\theenumi{\arabic{enumi}} +\def\labelenumii{(\,\theenumii\,)} +\def\theenumii{\alph{enumii}} +\def\p@enumii{\theenumi} +\def\labelenumiii{(\,\theenumiii\,)} +\def\theenumiii{\roman{enumiii}} +\def\p@enumiii{\theenumi(\theenumii)} +\def\labelenumiv{(\,\theenumiv\,)} +\def\theenumiv{\Alph{enumiv}} +\def\p@enumiv{\p@enumiii\theenumiii} +\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else + \advance\@enumdepth \@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth} + \list{\csname label\@enumctr\endcsname}{\usecounter + {\@enumctr}\def\makelabel##1{##1\hss}% + \leftmargin3\@mojihaba \labelwidth3\@mojihaba \labelsep\z@}\fi} +\let\endenumerate\endlist + +\def\labelitemi{$\bullet$} +\def\labelitemii{\bf --} +\def\labelitemiii{$\ast$} +\def\labelitemiv{$\cdot$} +\def\itemize{\ifnum \@itemdepth >3 \@toodeep\else \advance\@itemdepth \@ne + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + \list{\csname\@itemitem\endcsname}{\def\makelabel##1{\hss##1\hss}% + \labelwidth2\@mojihaba \labelsep\z@}\fi} +\let\enditemize\endlist + +\def\description{\list{}{\labelwidth\z@ \labelsep\@mojihaba + \itemindent\labelsep \advance\itemindent-\leftmargin + \def\makelabel##1{\bf ##1}}} +\let\enddescription\endlist + +\let\latex@trivlist\@trivlist +\def\lst@trivlist#1#2{\leftmargin#1\relax + \itemindent\labelwidth \advance\itemindent\labelsep + \advance\itemindent#2\relax + \let\@trivlist\latex@trivlist \@trivlist} + +\def\lst@Trivlist{\def\@trivlist{\lst@trivlist\z@\z@}} +\def\Enumerate{\lst@Trivlist \enumerate} +\let\endEnumerate\endlist +\def\Itemize{\lst@Trivlist \itemize} +\let\endItemize\endlist +\def\Description{\lst@Trivlist \description} +\let\endDescription\endlist + +\def\lst@TRIVLIST{\def\@trivlist{\lst@trivlist\z@\@mojihaba}} +\def\ENUMERATE{\lst@TRIVLIST \enumerate} +\let\endENUMERATE\endlist +\def\ITEMIZE{\lst@TRIVLIST \itemize} +\let\endITEMIZE\endlist +\def\DESCRIPTION{\lst@TRIVLIST \description} +\let\endDESCRIPTION\endlist + +\def\lst@strivlist{\def\@trivlist{\lst@trivlist\@mojihaba{-\@mojihaba}}} +\@namedef{enumerate*}{\lst@strivlist \enumerate} +\@namedef{endenumerate*}{\endlist} +\@namedef{itemize*}{\lst@strivlist \itemize} +\@namedef{enditemize*}{\endlist} +\@namedef{description*}{\lst@strivlist \description} +\@namedef{enddescription*}{\endlist} + +\def\verse{\let\\=\@centercr + \list{}{\itemindent-\@mojihaba \listparindent\itemindent + \rightmargin\leftmargin \advance\leftmargin\@mojihaba}\item[]} +\let\endverse\endlist +\def\quotation{\list{}{\listparindent\@mojihaba \itemindent\listparindent + \rightmargin\leftmargin}\item[]} +\let\endquotation\endlist +\def\quote{\list{}{\rightmargin\leftmargin}\item[]} +\let\endquote\endlist + +\def\newtheorem{\@ifstar + {\theo@newtheorem{\theo@it}{\ }}{\theo@newtheorem{}{\theo@sp}}} +\def\theo@newtheorem#1#2#3{\@namedef{theo@it@#3}{#1}\@namedef{theo@sp@#3}{#2}% + \@ifnextchar[%] + {\@othm{#3}}{\@nthm{#3}}} +\def\@begintheorem#1#2{\DESCRIPTION \csname theo@it@\@currenvir\endcsname + \item[#1\csname theo@sp@\@currenvir\endcsname #2]} +\def\@opargbegintheorem#1#2#3{\DESCRIPTION + \csname theo@style@\@currenvir\endcsname + \item[#1\csname theo@sp@\@currenvir\endcsname #2\ (#3)]} +\let\@endtheorem\endlist % 1.02(2) +\ifDS@english +\let\theo@it\it \let\theo@sp\ % +\else +\let\theo@it\relax \let\theo@sp\relax +\fi + +%%%%%% Bibliography %%%%%% +% +% 1. Label format is "<nn>)". +% 2. \leftmargin 24Q (or 2K) +% 3. \labelsep is 6Q (or 0.5K) +% 4. \baselineskip is 16Q(j)/15Q(e)/normal(d) +% 5. ~ and \ can be shrunk to 0pt. + +\def\thebibliography#1{% + \section*{\hskip-\@mojihaba\hfill\hbox{\bib@refname}\hfill\hskip\z@} + \ifDS@draft \@tempdima\@mojihaba \else\@tempdima12\@Q\fi + \list{\arabic{enumi}\rlap{%( + )}}% + {\fs@bibliography \leftmargin2\@tempdima \labelwidth\z@ + \labelsep\@tempdima \itemindent.5\@tempdima + \usecounter{enumi}\def\makelabel##1{\hss\llap{##1}}} + \def\newblock{\hskip .11em plus .33em minus .07em} + \sloppy \frenchspacing + \def\ {\hskip\fontdimen\tw@\font plus\fontdimen\thr@@\font + minus\fontdimen\tw@\font\relax}} +\ifDS@english +\def\bib@refname{References} +\else +{\fs@sec \@tempdima7\jspaceskip +\xdef\bib@refname{\hbox to\the\@tempdima{\jintercharskip\fill $B;29MJ88%(B}}} +\fi +\newdimen\bib@adjustheight \bib@adjustheight-\maxdimen +\def\endthebibliography{\endlist \par \@normalsize + \@tempdima\@colht \advance\@tempdima-\@colroom + \advance\@tempdima\pagetotal \advance\@tempdima-\prevdepth + \advance\@tempdima-\topskip + \@tempdimb\@tempdima \divide\@tempdima\baselineskip + \@tempcnta\@tempdima \@tempdima\@tempcnta\baselineskip + \advance\@tempdima-\@tempdimb + \ifdim\@tempdima<\z@ \advance\@tempdima\baselineskip \fi + \vskip-\prevdepth \vskip\@tempdima \prevdepth\z@ + \bib@adjustheight\@tempdimb \advance\bib@adjustheight\@tempdima + \global\advance\bib@adjustheight\topskip + \if@firstcolumn\else\global\advance\bib@adjustheight\@M pt\fi} + + +%%%%%% Floats %%%%%% + +% You may need to change following parameters +\setcounter{topnumber}{4} +\setcounter{bottomnumber}{4} +\setcounter{totalnumber}{8} +\setcounter{dbltopnumber}{4} +\def\topfraction{.9} +\def\bottomfraction{.9} +\def\textfraction{.1} +\def\dbltopfraction{.9} +\def\floatpagefraction{.9} +\def\dblfloatpagefraction{.9} + +\newcounter{figure} +\newcounter{table} +\def\thefigure{\@arabic\c@figure} +\def\thetable{\@arabic\c@table} +\def\fps@figure{tbp} +\def\fps@table{tbp} +\def\ftype@figure{1} +\def\ftype@table{2} +\def\fnum@figure{\fname@figure\thefigure} +\def\fnum@table{\fname@table\thetable} +\ifDS@english +\def\fname@figure{Fig.\,} % 2.06(1) +\def\fname@Figure{Figure~} +\def\fname@table{Table~} +\else +\def\fname@figure{$B?^(B\fref@nobreak} % 1.06(1) +\let\fname@Figure\fname@figure +\def\fname@table{$BI=(B\fref@nobreak} % 1.06(1) +\fi +\def\fnum@efigure{Fig.\,\thefigure} % 2.06(1) +\def\fnum@etable{Table~\thetable} + +% 1.06(3) >> +\def\figure{\let\cap@afterskip\relax \let\flt@fontsize\relax \@float{figure}} +\def\endfigure{\end@float} +\@namedef{figure*}{\let\cap@afterskip\relax \let\flt@fontsize\relax + \@dblfloat{figure}} +\@namedef{endfigure*}{\end@dblfloat} + +%% Default font for table env. is \footnotesize (H.N.) +\def\table{\let\cap@beforeskip\relax \let\flt@fontsize\fs@table + \@float{table}} +\def\endtable{\end@float} +\@namedef{table*}{\let\cap@beforeskip\relax \let\flt@fontsize\fs@table + \@dblfloat{table}} % 2.01(2) +\@namedef{endtable*}{\end@dblfloat} +% 1.06(3) << + +\let\latex@float\@float +\let\latex@dbflt\@dbflt +\def\@float{\cap@linewidth\hsize \cap@hsize\hsize \latex@float} +\def\@dbflt{\cap@linewidth.8\textwidth \cap@hsize.667\textwidth \latex@dbflt} +\let\latex@xfloat\@xfloat % 1.06(3) +\def\@xfloat#1[#2]{\latex@xfloat#1[#2]\flt@fontsize} + % 1.06(3) +\def\end@float{\flt@endfloat + \ifdim\bib@adjustheight=-\maxdimen\else + \advance\bib@adjustheight\@tempdima + \global\advance\bib@adjustheight\baselineskip \fi + \ifnum\@floatpenalty <\z@ + \@nameuse{@largefloatcheck}% % 2.00(2) + \@cons\@currlist\@currbox + \ifdim \ht\@currbox >\textheight + \ht\@currbox\textheight \fi + \ifnum\@floatpenalty < -\@Mii + \penalty -\@Miv + \@tempdima\prevdepth \vbox{} \prevdepth\@tempdima + \penalty\@floatpenalty + \else \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@esphack + \fi\fi} +\def\end@dblfloat{\if@twocolumn \flt@endfloat + \ifnum\@floatpenalty <\z@ \@cons\@dbldeferlist\@currbox\fi + \ifnum \@floatpenalty =-\@Mii \@esphack\fi\else\end@float\fi} +\def\flt@endfloat{\par \vskip\z@ + \global\@minipagefalse \@nameuse{outer@nobreak}\egroup % 2.00(2) + \@nameuse{color@endbox}\@normalsize % 2.00(2) + \@tempdima\ht\@currbox \advance\@tempdima\dp\@currbox + \divide\@tempdima\baselineskip \@tempcnta\@tempdima + \advance\@tempcnta\@ne \@tempdima\@tempcnta\baselineskip + \global\setbox\@currbox\vbox to\@tempdima{\vfil\box\@currbox\vfil}} + +\def\cap@beforeskip{\nointerlineskip\vskip5pt} +\def\cap@afterskip{\nointerlineskip\vskip5pt} +\long\def\@caption#1[#2]#3{\par\begingroup + \fs@caption \cap@beforeskip + \@makecaption{{\bf \csname fnum@#1\endcsname}}{\ignorespaces#3}\par + \ifDS@english \cap@afterskip \fi + \endgroup} +\def\ecaption{\@dblarg{\@ecaption\@captype}} +\long\def\@ecaption#1[#2]#3{\par + \begingroup \fs@caption + \@makecaption{\csname fnum@e#1\endcsname}{\ignorespaces #3}\par + \cap@afterskip + \endgroup} + +\newif\ifcap@sw +\newdimen\cap@linewidth +\newdimen\cap@hsize +\newcount\cap@prevgraf +\newbox\cap@box +\let\latex@label\label +\long\def\@makecaption#1#2{\begingroup \gdef\cap@label{}\let\label\@gobble + \setbox0\hbox{#1\hskip\jspaceskip} + \advance\cap@linewidth-\wd0 \advance\cap@hsize-\wd0 + \cap@makepar\cap@linewidth{#2}{\def\label##1{{% %1.03(1) + \def\protect{\noexpand\protect\noexpand} %1.03(1) + \xdef\cap@label{\cap@label\protect\label{##1}}}}} %1.03(1) + \cap@swtrue + \ifnum\cap@prevgraf=\@ne + \setbox1\vbox{\unvcopy1\cap@getbox1 + \ifhbox1 \global\setbox\cap@box\hbox{\unhbox1} + \ifdim\wd\cap@box>\cap@linewidth\else + \global\cap@swfalse \fi\fi} + \ifcap@sw\else + \cap@put{\vtop{\box\cap@box\hbox{}}} + \fi\fi + \ifcap@sw \cap@makepar\cap@hsize{#2}\relax + \ifnum\cap@prevgraf=\tw@ + \setbox1\vbox{\unvcopy1\cap@getbox2\cap@getbox3 + \ifhbox2\ifhbox3 + \setbox2\hbox{\unhbox2}\setbox3\hbox{\unhbox3} + \ifdim\wd2>\cap@hsize\else + \ifdim\wd3>\cap@hsize\else + \global\cap@swfalse + \global\setbox\cap@box\vtop{\box3\box2\hbox{}} + \fi\fi\fi\fi}\fi + \ifcap@sw \setbox1\vtop{\hsize\cap@hsize + \@parboxrestore #2\par\hbox{}}\cap@put{\box1} + \else\cap@put{\box\cap@box}\fi + \fi + \endgroup \cap@label} +\long\def\cap@makepar#1#2#3{\setbox1\vbox{\hsize#1\@parboxrestore + \rightskip\@flushglue \hfuzz\maxdimen + \exhyphenpenalty\z@ \finalhyphendemerits\z@ + \let\@@par\cap@par \let\par\cap@par \global\cap@prevgraf\z@ + #3#2\cap@par}} +\let\cap@@par\@@par +\def\cap@par{\cap@@par\global\advance\cap@prevgraf\prevgraf \prevgraf\z@} +\def\cap@put#1{\hbox to\hsize{\hss\box0#1\hss} + \vskip-\baselineskip\prevdepth\z@} +\def\cap@getbox#1{\@tempcnta10\relax\@whilenum\@tempcnta>0\do{% + \unskip\unkern\unpenalty\advance\@tempcnta\m@ne}\setbox#1\lastbox} + +\def\figref{\fref@ref\fname@figure} +\def\Figref{\fref@ref\fname@Figure} +\def\tabref{\fref@ref\fname@table} +\let\Tabref\tabref +\def\fref@ref#1{\@ifstar{\fref@sref{#1}}{\fref@iref\bf{#1}}} +\def\fref@iref#1#2#3{{\@ifundefined{fref@r@#3}% + {#1#2\fref@doref{#3}\global\@namedef{fref@r@#3}{}}{#2\fref@doref{#3}}}} +\def\fref@sref#1#2{#1\fref@doref{#2}} +\def\fref@doref#1{{\let\null\relax\ref{#1}}} % 1.06(2) +\def\fref@nobreak{\nobreak\ifASCII\else\hskip\@@jasciikanjiskip\fi} + % 1.06(1) + +\def\fig@extraspace{3mm} %1.04(4) +\def\figspace#1{\vskip#1\vskip\fig@extraspace} %1.04(4) + +%%%%%% Footnote %%%%%% + +%% The following codes are from pfnote.sty, by H. Nakashima of Kyoto Univ., +%% to reset footnote counter at the begining of every page. (H.N.) + +% 1.04(2c)>> +\def\footnote{\@ifnextchar[%] + {\@xfootnote}{{\PF@adjustfnote \stepcounter{\@mpfn}% + \xdef\@thefnmark{\thempfn}}\@footnotemark\@footnotetext}} +\def\footnotemark{\@ifnextchar[%] + {\@xfootnotemark}{{\PF@adjustfnote \stepcounter{footnote}% + \xdef\@thefnmark{\thefootnote}}\@footnotemark}} +% 1.04(2c)<< + +\newcount\PF@fnotectr\global\PF@fnotectr=\z@ +\newcount\PF@page\global\PF@page=-\@M +\def\PF@thepage{\number\c@page} +\def\PF@adjustfnote{\global\advance\PF@fnotectr\@ne + \expandafter\ifx\csname PF@fn\number\PF@fnotectr\endcsname\relax + \global\c@footnote\z@\else + \expandafter\@tempcnta\csname PF@fn\number\PF@fnotectr\endcsname\relax + \ifnum\@tempcnta=\PF@page\else + \global\PF@page\@tempcnta \global\c@footnote\z@ \fi\fi +% 1.04(2a)>> + \expandafter\ifx\csname PF@fnpage\number\PF@page\endcsname\relax \else + \expandafter\@tempcnta\csname PF@fnpage\number\PF@page\endcsname\relax + % 2.00(4)>> + \ifnum\@tempcnta>\tw@ \global\let\thefootnote\thefootnotemany + \else \global\let\thefootnote\thefootnoteord \fi\fi % 2.00(4)<< + \@tempcnta\c@footnote \multiply\@tempcnta\@M + \advance\@tempcnta\PF@fnotectr + \if@filesw{\let\PF@thepage\relax + \xdef\@gtempa{\write\@auxout{\string\PF@fnpage + {\number\@tempcnta}{\PF@thepage}}}}% + \@gtempa\fi} +% 1.04(2a)<< + +% 1.04(2a)>> +\def\PF@fnpage#1#2{\@tempcnta#1\relax \@tempcntb\@tempcnta \divide\@tempcnta\@M + \expandafter\xdef\csname PF@fnpage#2\endcsname{\number\@tempcnta} + \multiply\@tempcnta\@M \advance\@tempcntb-\@tempcnta + \global\@namedef{PF@fn\number\@tempcntb}{#2}} +% 1.04(2a)<< +%% End of quote from pfnote.sty. (H.N.) + +\long\def\@makefntext#1{\leftskip20\@Q + \noindent\llap{\@makefnmarkforfn\hskip-\scriptspace\hskip5\@Q}#1} + % 1.04(2e) +\def\@makefnmarkstar{$^{\hbox{\tiny\fn@fontv\@thefnmark}}$} % 1.04(2d) +\def\@makefnmarkdagger{$\@thefnmark$} +\let\@makefnmarkforfn\@makefnmarkstar + +\def\@makefnmark{\smash{\hbox{\scriptsize\fn@fontvi$^{\@thefnmark}$}}} + % 1.04(2d) + % smashed to make it + % zero height + +%% Awful definition of \thefootnote to put subsequent $B!y(B's. (H.N.) +\def\thefootnote{\leavevmode\hbox{% + \ifcase\c@footnote\or $B!y(B\or $B!y!y(B\or $B!y!y!y(B\else \thefootnotemany\fi}} + % 1.04(2b) +\def\thefootnotemany{\hbox{$B!y(B\hskip\z@\number\c@footnote}} % 1.04(2b) + % 2.05(3) +\let\thefootnoteord\thefootnote + + +%%%%%% Citation %%%%%% + +%% The following codes for \cite are from overcite.sty by D. Arseneau, but +%% modified for Trans. IPSJ (H.N.) +% O V E R C I T E . S T Y +% +% version 3.2 (Mar 1993) +% +% Compressed, sorted lists of superscript numerical citations. +% see also CITE.STY and DRFTCITE.STY +% +% Copyright (C) 1989-1993 by Donald Arseneau +% These macros may be freely transmitted, reproduced, or modified for +% non-commercial purposes provided that this notice is left intact. +% +\def\cite{\protect\@p@cite} +\def\@p@cite{\let\@citeY\@citey \@p@@cite} +\def\Cite{\protect\@p@Cite} +\def\@p@Cite{\let\@citeY\@Citey \@p@@cite} +\def\@p@@cite{\@ifnextchar[%] + {\@tempswatrue\@citex}{\@tempswafalse\@citex[]}} +\def\@citex[#1]#2{\@citeY{\@p@citen{#2}}\if@tempswa\space[#1]\fi} +\def\@citey#1{\leavevmode\unskip\kern\z@$\let\@cite@tiestyle\scriptstyle +% % 2.06(2) + \def\@cite@punct{,}\m@th^{\hbox{\scriptsize#1}}$\spacefactor\@m} +\def\@Citey#1{\let\@cite@tiestyle\textstyle + \ifDS@english \def\@cite@punct{,\space\penalty\@highpenalty}%1.04(1) + \else\def\@cite@punct{$B!$(B}\fi#1\spacefactor\@m} %1.04(1) + +\def\@p@citen#1{% + \edef\@tempa{\@ignspaftercomma,#1, \@end, }% + \edef\@tempa{\expandafter\@ignendcommas\@tempa\@end}% + \if@filesw \immediate\write\@auxout{\string\citation{\@tempa}}\fi + \@tempcntb\m@ne \let\@h@ld\relax \let\@citea\@empty + \let\@celt\relax \def\@cite@list{}% % 2.06(3) + \@for\@citeb:=\@tempa\do{\@make@cite@list}% + \@tempcnta\m@ne \let\@celt\@compress@cite \@cite@list + \@h@ld} +\def\@ignspaftercomma#1, {\ifx\@end#1\@empty\else + #1,\expandafter\@ignspaftercomma\fi} +\def\@ignendcommas,#1,\@end{#1} + +%( +\let\@cite@rp) +\chardef\@cite@escape`\\ +\def\@make@cite@list{% + \expandafter\let\expandafter\@B@citeB\csname b@\@citeb\endcsname + \ifx\@B@citeB\relax + \@citea {\bf ?}\@cite@rp \let\@citea\@cite@punct + \@latex@warning{Citation `\@citeb' on page \thepage\space undefined}% + % 2.00(3) + \global\@namedef{b@\@citeb}{{\bf ?}}% + \else + \ifcat \@cite@escape\ifnum\z@<0\@B@citeB \@cite@escape\else A\fi + \@tempcnta\@B@citeB \relax + \ifnum \@tempcnta>\@tempcntb + \edef\@cite@list{\@cite@list \@celt{\@B@citeB}}% + \@tempcntb\@tempcnta + \else + \edef\@cite@list{\expandafter\@sort@celt\@cite@list\@gobble @}% + \fi + \else \@citea \@B@citeB \@cite@rp \let\@citea\@cite@punct + \fi\fi} + +\def\@sort@celt#1#2{\ifx \@celt #1% parameters are \@celt {num} + \ifnum #2<\@tempcnta % number goes later in list + \@celt{#2}\expandafter\expandafter\expandafter\@sort@celt + \else \@celt{\number\@tempcnta}\@celt{#2}\fi\fi} + +\def\@compress@cite#1{\advance\@tempcnta\@ne + \ifnum #1=\@tempcnta + \ifx\@h@ld\relax \edef\@h@ld{\@citea #1\@cite@rp}% + \else \edef\@h@ld{\hbox{$\@cite@tiestyle\sim$}% + \penalty\@highpenalty #1\@cite@rp}\fi + \else \@h@ld \@citea #1\@cite@rp + \let\@h@ld\relax + \fi \@tempcnta#1\relax \let\@citea\@cite@punct} + +%% End of quote from overcite.sty. (H.N.) + +\def\multicite{\protect\@p@multicite} +\def\@p@multicite#1#2{\@citey{\@p@citen{#1}$\scriptstyle\sim$\@p@citen{#2}}} +\def\multiCite{\protect\@p@multiCite} +\def\@p@multiCite#1#2{\@Citey{\@p@citen{#1}$\sim$\penalty\@highpenalty + \@p@citen{#2}}} + + +%%%%%% Box Height Adjustment and Displayed Math %%%%%% + +\newbox\adj@boxa \newbox\adj@boxb +\newdimen\adj@height +\@tempdima\baselineskip \advance\@tempdima-\topskip +\edef\adj@minaboveclearance{\the\@tempdima} +\@tempdima\baselineskip \advance\@tempdima-1ex +\edef\adj@maxaboveclearance{\the\@tempdima} +\ifDS@english +\setbox0\hbox{A} +\else +\setbox0\hbox{$B$"(B} +\fi +\@tempdima\baselineskip \advance\@tempdima-\ht0 \advance\@tempdima\dp0 +\edef\adj@bhd{\the\@tempdima} + +% 2.01(1) >> +\def\adjustvboxheight{\ifinner \let\@tempa\relax + \let\endadjustvboxheight\relax \let\@endadjustvboxheight\relax + \else \let\@tempa\@adjustvboxheight \fi \@tempa} +\def\@adjustvboxheight{\par\penalty\z@ + \global\setbox\adj@boxa\vbox\bgroup\relax % 1.01(3) + \let\@footnotetext\@mpfootnotetext % 2.02(1) +% % 2.05(1) + \hsize\columnwidth} +% 2.01(1) << +\def\endadjustvboxheight{\adj@closebox \adj@putbox + \ifvoid\@mpfootins\else\insert\footins{\unvbox\@mpfootins}\fi +% % 2.02(1) + \global\@ignoretrue\@endparenv} +\def\adj@closebox{\egroup \normalsize \boxmaxdepth\@maxdepth % 1.01(1,3) + \setbox\adj@boxa\vbox{\unvbox\adj@boxa} % 1.01(3) + \adj@height\ht\adj@boxa + \advance\adj@height\adj@minaboveclearance\relax + \@tempdima\adj@height \divide\adj@height\baselineskip + \@tempcnta\adj@height \adj@height\@tempcnta\baselineskip + \ifdim\adj@height<\@tempdima \advance\adj@height\baselineskip\fi} +\def\adj@putbox{\vskip-\prevdepth \prevdepth\z@ \vskip\baselineskip + \vspace*{-\baselineskip}\advance\@tempdima-\adj@height + \@tempdima-\@tempdima \advance\@tempdima\adj@minaboveclearance\relax + \@tempdimb\dp\adj@boxa + \ifdim\@tempdima>\adj@maxaboveclearance\relax + \advance\@tempdima-\@tempdimb \advance\@tempdima\adj@bhd\relax + \divide\@tempdima\tw@ + \vbox to\adj@height{\vskip\@tempdima \box\adj@boxa \vss} + \else \vbox to\adj@height{\vfil\box\adj@boxa\vskip-\@tempdimb}\fi} + +\newcount\adj@deadcycle +\@namedef{adjustvboxheight*}{\adjustvboxheight} +\@namedef{endadjustvboxheight*}{\@endadjustvboxheight} +\def\@endadjustvboxheight{\global\adj@deadcycle10\relax + \@iendadjustvboxheight + \ifvoid\@mpfootins\else\insert\footins{\unvbox\@mpfootins}\fi +% % 2.05(2) + \global\@ignoretrue\@endparenv} +\def\@iendadjustvboxheight{\adj@closebox + \ifnum\adj@deadcycle<\@ne + \ipsj@error{I cannot adjust too tall/deep box}{\@ehd}\fi % 2.00(3) + \global\advance\adj@deadcycle\m@ne + \ifdim\pagegoal=\maxdimen + \@tempdimb\@colht \advance\@tempdimb-\topskip + \advance\@tempdimb\baselineskip + \else \@tempdimb\pagegoal + \advance\@tempdimb-\pagetotal \advance\@tempdimb-\pagedepth + \advance\@tempdimb\prevdepth \fi % 1.01(4a) + \let\next\relax + \ifdim\adj@height<\@tempdimb \adj@putbox \else + \ifdim\adj@height=\@tempdimb \adj@putbox \else + \divide\@tempdimb\baselineskip \@tempcnta\@tempdimb % 1.01(4b)>> + \@tempdimb\@tempcnta\baselineskip + \advance\@tempdimb-\adj@minaboveclearance\relax % 1.01(4b)<< + \setbox\adj@boxa\vbox{\allowbreak\unvbox\adj@boxa} + \vbadness\@M \splittopskip\z@ \splitmaxdepth\@maxdepth %1.01(1) + \setbox\@tempboxa\vsplit\adj@boxa to\@tempdimb + \setbox\adj@boxb\copy\adj@boxa + \setbox\@tempboxa\vbox{\unvbox\@tempboxa} + \@tempdimb\ht\@tempboxa \advance\@tempdimb\dp\@tempboxa + \ifdim\@tempdimb>\z@ + \setbox\adj@boxa\vbox\bgroup\unvbox\@tempboxa + \adj@closebox \adj@putbox \newpage + \else \newpage \fi + \setbox\adj@boxa\vbox\bgroup\unvbox\adj@boxb + \let\next\@iendadjustvboxheight \fi\fi \next} + +\def\adj@eqindent{2\@mojihaba} +\def\[{\adjustvboxheight\advance\@totalleftmargin\adj@eqindent\relax + \hbox to\hsize\bgroup\hskip\@totalleftmargin$\displaystyle} +\def\]{$\hfill\egroup\endadjustvboxheight\@doendpe\ignorespaces} % 2.03(1) +\def\equation{\refstepcounter{equation}\[} +\def\endequation{\hfill\@eqnnum$\egroup\endadjustvboxheight} +\def\theequation{\arabic{equation}} +\def\@eqnnum{{\rm (\theequation)\hskip\@mojihaba}} + +\def\adj@eqnlineskip{3pt} +\def\adj@eqnlineskiplimit{2pt} +\def\eqnarray{\futurelet\@tempa\adj@eqnarray} +\def\adj@eqnarray{\ifx\@tempa[%] + \let\next\adj@ieqnarray\else\let\next\adj@xeqnarray\fi\next} +\def\adj@ieqnarray[#1]{\@ifundefined{adj@xeqnarray#1}% + {\ipsj@warning{Unknown eqnarray option `#1'}\adj@xeqnarray}% 2.00(3) + {\@nameuse{adj@xeqnarray#1}}} +\def\adj@xeqnarray{\adjustvboxheight + \advance\@totalleftmargin\adj@eqindent\relax + \stepcounter{equation}\let\@currentlabel=\theequation + \global\@eqnswtrue + \global\@eqcnt\z@\tabskip\z@\let\\=\@eqncr + \lineskip\adj@eqnlineskip \lineskiplimit\adj@eqnlineskiplimit \jot\z@ + \halign to \hsize\bgroup\@eqnsel\hskip\@totalleftmargin + \hfil$\displaystyle{##}$&\global\@eqcnt\@ne % 1.01(2) + \hfil$\displaystyle{}\mathrel{##}{}$\hfil + &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil + \tabskip\@centering&\llap{##}\tabskip\z@\cr} +\def\adj@xeqnarrays{\let\endadjustvboxheight\@endadjustvboxheight + \adj@xeqnarray} +\@namedef{adj@xeqnarrays!}{\par\let\adjustvboxheight\relax + \let\endadjustvboxheight\relax \adj@xeqnarray} +\def\endeqnarray{\@@eqncr \egroup \global\advance\c@equation\m@ne + \endadjustvboxheight} + + +%%%%%% Kinsoku Parameters %%%%%% + +% 1.04(3)>> +\ifASCII +\postbreakpenalty`\`=\@M +\prebreakpenalty`'=\@M +\prebreakpenalty`)=\@M +\postbreakpenalty`(=\@M +\prebreakpenalty`]=\@M +\postbreakpenalty`[=\@M +\prebreakpenalty`\}=\@M +\postbreakpenalty`\{=\@M + +\prebreakpenalty`$B!&(B=\@M +\prebreakpenalty`$B!'(B=\@M +\prebreakpenalty`$B!((B=\@M +\prebreakpenalty`$B!)(B=\@M +\prebreakpenalty`$B!*(B=\@M + +\prebreakpenalty\jis"212D=\@M % $B!-(B +\postbreakpenalty\jis"212E=\@M % $B!.(B +\postbreakpenalty\jis"2146=\@M % $B!F(B +\prebreakpenalty\jis"2147=\@M % $B!G(B +\postbreakpenalty\jis"2148=\@M % $B!H(B +\prebreakpenalty\jis"2149=\@M % $B!I(B + +\prebreakpenalty`$B!K(B=\@M +\postbreakpenalty`$B!J(B=\@M +\prebreakpenalty`$B!Q(B=\@M +\postbreakpenalty`$B!P(B=\@M +\prebreakpenalty`$B!O(B=\@M +\postbreakpenalty`$B!N(B=\@M +\postbreakpenalty`$B!F(B=\@M +\prebreakpenalty`$B!G(B=\@M + +\postbreakpenalty\jis"214C=\@M %$B!L(B +\prebreakpenalty\jis"214D=\@M % $B!M(B +\postbreakpenalty\jis"2152=\@M % $B!R(B +\prebreakpenalty\jis"2153=\@M % $B!S(B +\postbreakpenalty\jis"2154=\@M % $B!T(B +\prebreakpenalty\jis"2155=\@M % $B!U(B +\postbreakpenalty\jis"2156=\@M % $B!V(B +\prebreakpenalty\jis"2157=\@M % $B!W(B +\postbreakpenalty\jis"2158=\@M % $B!X(B +\prebreakpenalty\jis"2159=\@M % $B!Y(B +\postbreakpenalty\jis"215A=\@M % $B!Z(B +\prebreakpenalty\jis"215B=\@M % $B![(B + +\prebreakpenalty`$B$!(B=\@M +\prebreakpenalty`$B$#(B=\@M +\prebreakpenalty`$B$%(B=\@M +\prebreakpenalty`$B$'(B=\@M +\prebreakpenalty`$B$)(B=\@M +\prebreakpenalty`$B$C(B=\@M +\prebreakpenalty`$B$c(B=\@M +\prebreakpenalty`$B$e(B=\@M +\prebreakpenalty`$B$g(B=\@M +\prebreakpenalty\jis"246E=\@M % $B$n(B +\prebreakpenalty`$B%!(B=\@M +\prebreakpenalty`$B%#(B=\@M +\prebreakpenalty`$B%%(B=\@M +\prebreakpenalty`$B%'(B=\@M +\prebreakpenalty`$B%)(B=\@M +\prebreakpenalty`$B%C(B=\@M +\prebreakpenalty`$B%c(B=\@M +\prebreakpenalty`$B%e(B=\@M +\prebreakpenalty`$B%g(B=\@M +\prebreakpenalty\jis"256E=\@M % $B%n(B +\prebreakpenalty\jis"2575=\@M % $B%u(B +\prebreakpenalty\jis"2576=\@M % $B%v(B + +\fi +% 1.04(3)<< + + +%%%%%% Miscellaneous %%%%%% + +%% \doublerulesep is 1pt (H.N.) +\arraycolsep5pt \tabcolsep6pt \arrayrulewidth.4pt \doublerulesep1pt +\tabbingsep.5\@mojihaba + +\skip\@mpfootins\skip\footins +\fboxsep3pt \fboxrule.4pt + +%% We simply allow (not encourage) club and widow lines. (H.N.) +\clubpenalty\z@ \widowpenalty\z@ \displaywidowpenalty\z@ + +% The following redefinition influences \linebreak etc. +\def\sloppy{\tolerance9999\hbadness9999\hfuzz.5\p@ \vfuzz.5\p@} + +\endinput diff -r 000000000000 -r d40dd97c0a50 ipsjpapers.cls --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsjpapers.cls Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,17 @@ +% Copyright (C) 1995,1996,1997,1998,1999,2000,2001 +% by Hiroshi Nakashima, Yasuki Saito and +% The Editorial Board of the IPSJ Journal +% +% ipsjpapers.cls 15-May-01 by Hiroshi Nakashima (ver 2.08) +% (revision history deleted) +% ipsjpapers.cls 1-Apr-96 by Hiroshi Nakashima (ver 2.00) + +\ifx\pfmtname\undefined +\NeedsTeXFormat{LaTeX2e} +\else +\NeedsTeXFormat{pLaTeX2e} +\fi + +\ProvidesClass{ipsjpapers}[2001/05/01 ver 2.08] +\input{ipsjpapers.sty} +\endinput diff -r 000000000000 -r d40dd97c0a50 ipsjpapers.sty --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsjpapers.sty Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,1810 @@ +% Copyright (C) 1995,1996 by Editorial Board of the Trans. IPSJ +% +% ipsjpapers.sty 16-Jul-96 by Hiroshi Nakashima (ver 2.01) +% ipsjpapers.sty 1-Jun-96 by Hiroshi Nakashima (ver 2.00) +% ipsjpapers.sty 22-Feb-96 by Hiroshi Nakashima (ver 1.06) +% ipsjpapers.sty 16-Nov-95 by Hiroshi Nakashima (ver 1.05) +% ipsjpapers.sty 2-Oct-95 by Hiroshi Nakashima (ver 1.04) +% ipsjpapers.sty 1-Sep-95 by Hiroshi Nakashima (ver 1.03) +% ipsjpapers.sty 4-Aug-95 by Hiroshi Nakashima (ver 1.02) +% ipsjpapers.sty 6-Jul-95 by Hiroshi Nakashima (ver 1.01) +% ipsjpapers.sty 24-Apr-95 by Hiroshi Nakashima (ver 1.0) +% ipsjpapers.sty 30-Nov-93 by Hiroshi Nakashima +% ipsjpapers.sty 3-Feb-93 by Yaski Saito +% compsoft.sty 22-April-92 by Yaski Saito +% compsoft.sty 18-July-90 by Hideki Isozaki +% j-article.sty 10-Feb-89 from report.sty 16-Mar-88 + +% REVISION +% ver 2.01 16-Jul-96 by Hiroshi Nakashima +% (1) If a float column follows a page which has footnote in the same +% column, \footnoterule is mistakingly displayed. To cope with it, +% \@vtryfc is modified so that \if@{left|right}footnoteexist is set to +% false (because a float column cannot have any footnotes.) +% +% ver 2.00 1-Jun-96 by Hiroshi Nakashima +% (1) Introduce a new flag \if@LaTeX@eN which is true if LaTeX2e is used in +% native mode. Now, ipsjpapers and related styles are compatible to +% LaTeX 2.09 and LaTeX2e (both native and compatible modes). Note that +% LaTeX2e mode test cannot be done by \if@compatibility because it is +% not \let-equal to \iftrue/\iffallse in LaTeX 2.09. LaTeX version +% check is moved to the beginning of the file. +% (2) In 2e-native mode, options are declared by \DeclareOption and +% processed by related macros. The banner is not put in native mode. +% (3) Introduce \ipsj@warning and \ipsj@error which call \ClassWarning and +% \ClassError in 2e-native mode. Since some warnings are put by +% \@latex@warning, it is \let-equal to \@warning in 2.09. +% (4) In 2e, fonts are loaded using NFSS. For ASCII-printer version, +% Japanese fonts are re-declared, except for some special fonts which +% are loaded out of NFSS. In other cases, standard fonts are used +% rather than loading explicitly. +% (5) To give aliases to a font, \ipsj@declare@font is introduced. +% (6) Definitions of skips and macros for NTT/ASCII compatibility are moved +% in order to do them both in 2.09 and 2e. +% (7) \defjintercharskip and its relatives, which are moved by 1.06(3), are +% moved again. Since \ipsj@declare@font is used to specify font names +% and it loads fonts, \defintercharskip etc. should be work well. +% To cope with old NTT versions, \defintercharskip etc. and \setjglue are +% sorrounded by availability check. +% (8) For 2e-native, \DeclareOldFontCommand's are added. In 2e (incl. +% compatibility mode), \dm and \dg are \def'ed as \mc and \gt. +% (9) In 2e, \vpt etc. (not \old@vpt etc.) are \let-equal to \old@somept. +%(10) In 2e, \normalsize is \let-equal to \@normalsize. +%(11) In 2e, redefinition of \bf may not work well. So, it is done in 2.09 +% only. +%(12) In 2e, \@makecol has \color@begingroup/endgroup and some codes for +% \enlargethispage. Since they are useless/harmful for ipsjpapers, they +% are omitted and \enlargethispage is redefined to put a warning. +%(13) In ASCII 2e (older than <1996/03/05>), \@outputpage has a bug which +% nullifies \topmargin. A straightforward fix, set \@@topmargin to +% \topmargin, for the bug is added in our own \@outputpage. +%(14) Since 2e-native doesn't have \@maxsep and \@dblmaxsep, they are +% \let-equal to a dummy skip register \old@latex@skip. +%(15) `Jun.' and `Jul.' in \@monthyear are replaced with `June' and `July' +% respectively to meet the format tradition. +%(16) \pageref should show the value of \c@volpage rather than \c@page. To +% cope with it easily, \c@page is set to \c@volpageoffset in \document. +% Thus, now \c@volpage and \thevolpage are useless and are replaced with +% \c@page and \thepage. The trick to flip odd/even page in +% \@outputpage, which was introduced in ver 1.04(2), is removed because +% it is no longer necessary (but harmful now). +% +% ver 1.06 22-Feb-96 by Hiroshi Nakashima +% (1) Introduce a new flag \if@LaTeX@e which is true if LaTeX2e is used. +% Although this modification is to cope with LaTeX2e, of course, note +% that this version may NOT be compatible to LaTeX2e but is (hopefully) +% compatible to its LaTeX 2.09 compatible mode. +% (2) \jfsize is available only in NTT jTeX-1.5 (or older versions). Thus, +% \newcount\jfsize is done if it is \undefined. The \newcount in +% \ifASCII section in "Fonts" becomes redundant and thus is removed. +% (3) In NTT version, the first \@normalsize seems to reset special Kanji +% skips. Thus, \defjintercharskip and \setjglues are moved below the +% first \@normalsize. The shrink of \@@jintercharskip is set to 0.5pt +% (0.14pt before) to avoid frequent overfulls. \defjasciikanjiskip and +% \defjmathkanjiskip are added to set corresponding skips to the values +% similar to the value of \xkanjiskip. +% (4) LaTeX2e's \@setsize doesn't expand its 3rd argument (e.g. \xpt), but +% this expansion is necessary to chage the combinations of CM and Kanji +% fonts. Thus, \@setsize is redefined so that it expand its 3rd +% argument after \@setfontsize is executed. However, since this +% expansion is only necessary for the combination change, \old@vpt and +% its relatives, which are called in our own \vpt and relatives, don't +% have to do anything except for setting \jspaceskip to 1zw in ASCII +% version. +% (5) \boldmath for 9pt fonts are available in LaTeX2e, and 2.09 style +% \(un)boldmath definition is incomatible. Thus, \@ixptboldmath is set +% to \relax. +% (6) \pbf (and its relatives) is not available in LaTeX2e. Since \bf is +% definied and well-protected in both LaTeX2e and 2.09, our own \bf can +% expand LaTeX's \bf in its body. Note that \dg in \bf's body works +% well because; (a) \dg is defined as \protect\pdg in ASCII and NTT-2.09; +% (b) \dg does "normal" operation in NTT-2e but CM/Kanji combination in +% NTT is also "normal". +% +% ver 1.05 16-Nov-95 by Hiroshi Nakashima +% (1) Set \lineskiplimit to \normallineskiplimit at the beginning of +% \@makecol to fix a bug of LaTeX 2.09. \lineskiplimit may set some +% unusually small value (e.g. -\maxdimen in \ooalign) at a critical +% timing at which \output routine is invoked. +% (2) New document style option `techrep' is introduced for SIG technical +% reports. This style is different from the default in the following +% points: +% (a) \baselineskip for \normalsize is 17Q in both Japanese/English. +% (b) \textheight is 50\baselineskip+\topskip (i.e. 51 lines) in both +% Japanese/English. Other page layout parameters are those for +% Japanese default. +% (c) Page headers/footers are always empty. +% (d) Page corner markers are always printed. +% (e) Page number is put below the bottom margin. +% (f) \hrule at the bottom of final page is omitted. +% +% ver 1.04 2-Oct-95 by Hiroshi Nakashima +% (1) As usual footnotes, if four or more affiliations are declared, +% footnote marks for them are \dagger1, \dagger2, \dagger3, \dagger4, +% ..., instead of \dagger, \dagger\dagger, \dagger\dagger\dagger, +% \dagger\dagger\dagger\dagger, ..., in order to keep marks from +% invading into margins. To do this, footnote mechanism is drastically +% changed as follows: +% (a) \stepcounter{affi@footnote} is added into \affilabel to count +% number of declarations. The value of counter is referred in +% \@maketitle just before it calls \@affilabels to choose usual +% style of new style for four or more declarations. If the value is +% greater than 3, \theaffi@footnote is made \let equal to +% \theaffi@footnotemany. +% (b) \theaffi@footnotemany, which produces ``\dagger<n>'' where <n> is +% affiliation number, is added. Four and five sequence of \dagger's +% in \theaffi@footnote is removed. +% (c) \dagger's in \theaffi@footnote are enclosed in { and } in order to +% keep it from acting Bin operator and avoid extra spaces. This and +% 1.04(2e) of ipsjcommon keep three \dagger's from invading into +% margin. +% (d) In \affi@label, space after ``$B8=:_(B'' for presen affiliation is +% replaced by Japanese comma. +% (2) In \@outputpage, \@oddhead and \@evenhead are exchanged if +% volpageoffset is even, so that headers for a paper which starts from +% even page are put properly. +% (3) Definitions for standerd pt-size options are added to cope with some +% style files (e.g. amssymbol) which refer these definitions. +% +% ver 1.03 1-Sep-95 by Hiroshi Nakashima +% (1) \tenmib, \tensyb and \tenlyb in \@ixptboldmath for non-printer version +% are replaced with \ninmib, \ninsyb and \ninlyb repectively. In old +% version, 10pt \boldmath will misunderstand that it has already been +% called if 9pt \boldmath was called and defined \tenmib. +% +% ver 1.02 4-Aug-95 by Hiroshi Nakashima +% (1) Add copyright. +% (2) Make \boldmath available for \ixpt (Japanese \normalsize). With +% printer option, \boldmath uses scale 900 10pt bold math fonts. +% Without printer option, it uses 10pt bold math fonts. +% +% ver 1.01, 6-Jul-95 by Hiroshi Nakashima +% (1) \maxdepth=0pt in \@addtobot is removed. This operation is +% unnecessary because we have enough space (= \baselineskip) between +% main text and bottom figures. This modification will usually add one +% more line to a page having bottom figures. Note that this +% modification is not incorporated into "ipsjdrafts", because adding one +% line to a draft page is not urgently required. +% (2) \@combinefloats is modified in order to cancel the depth of main text +% if a page has bottom figures. This modification avoids overfull in +% output routine which would be caused by the revision (1). +% (3) \maxdepth in \@outputdoublecol is replaced with \@maxdepth. This +% modification, however, will be redundant. + +%%%%%% LaTeX Version %%%%%% + +% 2.00(1) >> +%% \ifASCII is true if ASCII version Japanese TeX, which doesn't have +%% \jintercharskip (H.N.) +\newif\ifASCII \ASCIIfalse +\ifx\jintercharskip\undefined\ASCIItrue\fi +\newif\if@LaTeX@e \@LaTeX@efalse % 1.06(1) +\newif\if@LaTeX@eN \@LaTeX@eNfalse % 2.00(1) +\def\@tempa{LaTeX2e} % 1.06(1) +\ifx\fmtname\@tempa \@LaTeX@etrue % 1.06(1) +\ifx\xpt\undefined \@LaTeX@eNtrue \fi\fi % 2.00(1) +% 2.00(1) << + + +%%%%%% Document Styles %%%%%% + +% 2.00(2) >> +\newif\ifDS@printer \DS@printerfalse +\newif\ifDS@english \DS@englishfalse +\newif\ifDS@technote \DS@technotefalse +\newif\ifDS@preface \DS@prefacefalse +\newif\ifDS@draft \DS@draftfalse +\newif\ifDS@techrep \DS@techrepfalse % 1.05(2) + +\if@LaTeX@eN +\DeclareOption{printer}{\DS@printertrue} +\DeclareOption{english}{\DS@englishtrue} +\DeclareOption{technote}{\DS@technotetrue} +\DeclareOption{preface}{\DS@prefacetrue} +\DeclareOption{draft}{\DS@drafttrue} +\DeclareOption{techrep}{\DS@techreptrue} +\DeclareOption{10pt}{\def\@ptsize{0}} +\DeclareOption{11pt}{\def\@ptsize{1}} +\DeclareOption{12pt}{\def\@ptsize{2}} +\ExecuteOptions{10pt} +\ProcessOptions +\def\ipsj@warning{\ClassWarning{ipsjpapers}} % 2.00(3) +\def\ipsj@error{\ClassError{ipsjpapers}} % 2.00(3) +\newskip \old@latex@skip % 2.00(14) +\let\@maxsep\old@latex@skip % 2.00(14) +\let\@dblmaxsep\old@latex@skip % 2.00(14) + +\else +\expandafter\ifx\csname ver@ipsjpapers.cls\endcsname\relax +\typeout{Document Style `ipsjpapers' (ver 2.01) <16 Jul 96>.} +\fi + +\def\ds@printer{\DS@printertrue} +\def\ds@english{\DS@englishtrue} +\def\ds@technote{\DS@technotetrue} +\def\ds@preface{\DS@prefacetrue} +\def\ds@draft{\DS@drafttrue} +\def\ds@techrep{\DS@techreptrue} % 1.05(2) + +% 1.04(3)>> +\def\@ptsize{0} +\@namedef{ds@11pt}{\def\@ptsize{1}} +\@namedef{ds@12pt}{\def\@ptsize{2}} +% 1.04(3)<< + +\@options +\let\ipsj@warning\@warning % 2.00(3) +\let\@latex@warning\@warning % 2.00(3) +\def\ipsj@error#1#2{\errhlp{#2}\errmessge{#1}} % 2.00(3) +\fi +% 2.00(2) << + + +%%%%%% Basics %%%%%% + +\newdimen\@Q \@Q=0.25mm + +\lineskip\z@ \normallineskip\z@ +\lineskiplimit\z@ \normallineskiplimit\z@ +\abovedisplayskip\z@ \belowdisplayskip\z@ +\abovedisplayshortskip\z@ \belowdisplayshortskip\z@ + +\def\baselinestretch{1} +\jot\z@ + +\ifDS@draft\def\next{\input{ipsjdrafts.sty}\endinput}\else\let\next\relax\fi +\next + +\@twosidetrue + +%%%%%% Fonts %%%%%% +% \finvedm(dg) dm5 \vpt \tiny fn-mark +% \sixdm(dg) dm6 \vipt \scriptsize +% \sevendm(dg) dm7 \vipt \footnotesize f-note, capt +% 10Q = 7.11304pt -> w(min7) = 6.73550pt +% \eightdm(dg) dm8 \viiipt \small abst, header +% 11Q = 7.82434pt -> w(min8) = 7.69772pt +% \eightdm(dg)half dm9 \ixpt \normalsize main text +% 12Q = 8.53564pt -> w(min9) = 8.65994 +% \tendm(dg) dm10 \xpt \large sec title +% 13Q = 9.24695pt -> w(min10) = 9.62216pt +% \tendm(dg)half dm10*1095 \xipt \Large author names +% 15Q =10.66956pt -> w(min10*1095) = 10.53625pt +% (\twlvdm) (dm12) \xiipt \LARGE e-title +% \twelvedm(dg)half dm12*1095 \xivpt \huge title +% min10*1440 +% 18Q =12.80347pt -> w(min10*1440) = 13.8559pt +% +% Note that cm fonts follows LaTeX standard. (e.g. \viiipt -> cmr8, etc.) + +% 2.00(4)>> +\if@LaTeX@e +\ifASCII +\def\ipsj@declare@font#1#2#3{{\fontsize{#3}{\z@}#2\selectfont % 2.00(5)>> + \edef\@tempa{\the\jfont} + \expandafter\global\expandafter\let\expandafter#1\@tempa}} % 2.00(5)<< + +\ifDS@printer % ASCII LaTeX2e printer +\DeclareFontShape{JY1}{mc}{m}{n}{% + <5> sfixed* [5.175] min5 % 7Q/w5 = 4.97922/4.81108=1.035 + <6> sfixed* [5.916] min6 % 8Q/w6 = 5.69055/5.77328=0.986 + <7> sfixed* [7.392] min7 %10Q/w7 = 7.11304/6.73550=1.056 + <8> sfixed* [8.128] min8 %11Q/w8 = 7.82434/7.69772=1.016 + <9> sfixed* [8.872] min8 %12Q/w8 = 8.53564/7.69772=1.109 + <10> sfixed* [9.610] min10 %13Q/w10= 9.24695/9.62216=0.961 + <10.95> sfixed* [11.09] min10 %15Q/w10=10.66956/9.62216=1.109 + <12> sfixed* [11.83] min10 %16Q/w10=11.38110/9.62216=1.183 + <14.4> sfixed* [13.31] min10 %18Q/w10=12.80347/9.62216=1.331 +}{} +\DeclareFontShape{JY1}{gt}{m}{n}{% + <5> sfixed* [5.175] goth5 % 7Q/w5 = 4.97922/4.81108=1.035 + <6> sfixed* [5.916] goth6 % 8Q/w6 = 5.69055/5.77328=0.986 + <7> sfixed* [7.392] goth7 %10Q/w7 = 7.11304/6.73550=1.056 + <8> sfixed* [8.128] goth8 %11Q/w8 = 7.82434/7.69772=1.016 + <9> sfixed* [8.872] goth8 %12Q/w8 = 8.53564/7.69772=1.109 + <10> sfixed* [9.610] goth10 %13Q/w10= 9.24695/9.62216=0.961 + <10.95> sfixed* [11.09] goth10 %15Q/w10=10.66956/9.62216=1.109 + <12> sfixed* [11.83] goth10 %16Q/w10=11.38110/9.62216=1.183 + <14.4> sfixed* [13.31] goth10 %18Q/w10=12.80347/9.62216=1.331 +}{} + +\ipsj@declare@font\fn@fontvii\mcfamily\@vpt + +%% The following fonts are out of NFSS scheme +\font\fn@fontv min5 scaled739 % 5Q/w5 = 3.55658/4.81108=0.739 +\font\fn@fontvi min5 scaled887 % 6Q/w5 = 4.26790/4.81108=0.887 +\font\fn@fontxv goth10 scaled1035 %14Q/w10= 9.95846/9.62216=1.035 + +\else % ASCII LaTeX2e non-printer +\ipsj@declare@font\fn@fontv\mcfamily\@vpt +\ipsj@declare@font\fn@fontvi\mcfamily\@vpt +\ipsj@declare@font\fn@fontvii\mcfamily\@vpt +\ipsj@declare@font\fn@fontxv\gtfamily\@xipt +\fi + +\else % NTT LaTeX2e +\def\ipsj@declare@font#1#2#3{{\fontsize{#3}{\z@}#2\selectfont % 2.00(5) + \xdef#1{\expandafter\noexpand\csname\jf@ntn@me\endcsname}}} % 2.00(5) +\ipsj@declare@font\fn@fontv\dm\@vpt +\ipsj@declare@font\fn@fontvi\dm\@vpt +\ipsj@declare@font\fn@fontvii\dm\@vpt +\ipsj@declare@font\fn@fontxv\dg\@xipt +\fi +% 2.00(4) << + +\else % LaTeX 2.09 % 2.00(4) +%% Fonts for ASCII TeX. (H.N.) +\ifASCII +\ifDS@printer +\font\fn@fontv min5 scaled739 % 5Q/w5 = 3.55658/4.81108=0.739 +\font\fn@fontvi min5 scaled887 % 6Q/w5 = 4.26790/4.81108=0.887 +\font\fivedm min5 scaled1035 % 7Q/w5 = 4.97922/4.81108=1.035 +\font\fivedg goth5 scaled1035 +\font\sixdm min6 scaled986 % 8Q/w6 = 5.69055/5.77328=0.986 +\font\sixdg goth6 scaled986 +\font\sevendm min7 scaled1056 %10Q/w7 = 7.11304/6.73550=1.056 +\font\sevendg goth7 scaled1056 +\font\eightdm min8 scaled1016 %11Q/w8 = 7.82434/7.69772=1.016 +\font\eightdg goth8 scaled1016 +\font\eightdmhalf min8 scaled1109 %12Q/w8 = 8.53564/7.69772=1.109 +\font\eightdghalf goth8 scaled1109 +\font\tendm min10 scaled961 %13Q/w10= 9.24695/9.62216=0.961 +\font\tendg goth10 scaled961 +\font\fn@fontxv goth10 scaled1035 %14Q/w10= 9.95846/9.62216=1.035 +\font\tendmhalf min10 scaled1109 %15Q/w10=10.66956/9.62216=1.109 +\font\tendghalf goth10 scaled1109 +\font\twelvedm min10 scaled1183 %16Q/w10=11.38110/9.62216=1.183 +\font\twelvedg goth10 scaled1183 +\font\twelvedmhalf min10 scaled1331 %18Q/w10=12.80347/9.62216=1.331 +\font\twelvedghalf goth10 scaled1331 +\let\fn@fontvii\fivedm + +\else +\font\fivedm min5 +\font\fivedg goth5 +\font\sixdm min6 +\font\sixdg goth6 +\font\sevendm min7 +\font\sevendg goth7 +\font\eightdm min8 +\font\eightdg goth8 +\font\eightdmhalf min9 +\font\eightdghalf goth9 +\font\tendm min10 +\font\tendg goth10 +\font\tendmhalf min10 scaled\magstephalf +\font\tendghalf goth10 scaled\magstephalf +\font\twelvedm min10 scaled\magstep1 +\font\twelvedg goth10 scaled\magstep1 +\font\twelvedmhalf min10 scaled\magstep2 +\font\twelvedghalf goth10 scaled\magstep2 +\let\fn@fontv\fivedm +\let\fn@fontvi\fivedm +\let\fn@fontvii\fivedm +\let\fn@fontxv\tendghalf + +\fi + +%% ASCII doesn't have \old@Npt. (H.N.) +\let\old@@vpt\vpt +\let\old@@vipt\vipt +\let\old@@viipt\viipt +\let\old@@viiipt\viiipt +\let\old@@ixpt\ixpt +\let\old@@xpt\xpt +\let\old@@xipt\xipt +\let\old@@xiipt\xiipt +\let\old@@xivpt\xivpt + +\def\old@vpt{\old@@vpt\jspaceskip1zw\relax} +\def\old@vipt{\old@@vipt\jspaceskip1zw\relax} +\def\old@viipt{\old@@viipt\jspaceskip1zw\relax} +\def\old@viiipt{\old@@viiipt\jspaceskip1zw\relax} +\def\old@ixpt{\old@@ixpt\jspaceskip1zw\relax} +\def\old@xpt{\old@@xpt\jspaceskip1zw\relax} +\def\old@xipt{\old@@xipt\jspaceskip1zw\relax} +\def\old@xiipt{\old@@xiipt\jspaceskip1zw\relax} +\def\old@xivpt{\old@@xivpt\jspaceskip1zw\relax} + + % 2.00(6) + % 1.06(2) + +%% ASCII doesn't have \dg nor \dm. (H.N.) +\def\dg{\protect\pdg} +\def\dm{\protect\pdm} +%% Redefine \gt and \mc +\def\gt{\protect\pdg} +\def\mc{\protect\pdm} +\let\pdm\relax + +\else +%% Fonts for NTT jTeX +%% \magstephalf and \magstep1 may cause trouble in older versions. + +\jfont\fivedm=dm5 +\jfont\fivedg=dg5 +\jfont\sixdm=dm6 +\jfont\sixdg=dg6 +\jfont\sevendm=dm7 +\jfont\sevendg=dg7 +\jfont\eightdm=dm8 +\jfont\eightdg=dg8 +\jfont\eightdmhalf=dm9 +\jfont\eightdghalf=dg9 +\jfont\tendm=dm10 +\jfont\tendg=dg10 +\jfont\tendmhalf=dm10 scaled 1095 +\jfont\tendghalf=dg10 scaled 1095 +\jfont\twelvedm=dm12 +\jfont\twelvedg=dg12 +\jfont\twelvedmhalf=dm12 scaled 1095 +\jfont\twelvedghalf=dg12 scaled 1095 +\let\fn@fontv\fivedm +\let\fn@fontvi\fivedm +\let\fn@fontvii\fivedm +\let\fn@fontxv\tendghalf + % 1.06(3) +\fi +\fi + +\ifx\jfsize\undefined \newcount\jfsize \fi % 1.06(2) + +\ifASCII % 1.06(3),2.00(6)>> +\let\setjglues\relax +\let\jintercharskip\kanjiskip +\let\jasciikanjiskip\xkanjiskip +\let\jmathkanjiskip\xkanjiskip +\newdimen\jspaceskip + +\def\defjintercharskip#1#2#3#4{\@asciiwarning{\defjintercharskip}} +\def\defjasciikanjiskip#1#2#3#4{\@asciiwarning{\defjasciicharskip}} +\def\defmathkanjiskip#1#2#3#4{\@asciiwarning{\defmathcharskip}} +\def\defjspaceskip#1#2#3#4{\@asciiwarning{\defjspaceskip}} + +\def\@asciiwarning#1{\ipsj@warning{\string#1\space % 2.00(3) + is not supported in ASCII version}} + % 1.06(3),2.00(6)<< +\else % 2.00(7)>> +\if@LaTeX@e +\ipsj@declare@font\fn@eightdmhalf\dm\@ixpt +\ipsj@declare@font\fn@eightdghalf\dg\@ixpt +\else +\def\fn@eightdmhalf{\eightdmhalf} +\def\fn@eightdghalf{\eightdghalf} +\fi +\ifx\setjglues\undefined\else +\expandafter\defjintercharskip\fn@eightdmhalf{0pt}{1.4pt}{0.5pt} +\expandafter\defjintercharskip\fn@eightdghalf{0pt}{1.4pt}{0.5pt} +\expandafter\defjasciikanjiskip\fn@eightdmhalf{2pt}{1pt}{1pt} +\expandafter\defjasciikanjiskip\fn@eightdghalf{2pt}{1pt}{1pt} +\expandafter\defjmathkanjiskip\fn@eightdmhalf{2pt}{1pt}{1pt} +\expandafter\defjmathkanjiskip\fn@eightdghalf{2pt}{1pt}{1pt} +\fi % 2.00(7)<< +\fi % 2.00(4) + +\if@LaTeX@e % 2.00(8)>> +\if@LaTeX@eN +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}} +\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}} +\ifASCII +\DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc} +\DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt} +\fi\fi +\ifASCII +\def\dm{\mc} +\def\dg{\gt} +\fi\fi % 2.00(8)<< + +%%%%%% Basic Font Size Macros %%%%%% + +\if@LaTeX@e % 1.06(4) >> +\def\@setsize#1#2#3#4{\@setfontsize#1{#4}{#2}#3} +\ifASCII +\def\old@somept{\jspaceskip1zw\relax} +\else +\let\old@somept\relax +\fi +\let\vpt\old@somept % 2.00(9)>> +\let\vipt\old@somept +\let\viipt\old@somept +\let\viiipt\old@somept +\let\ixpt\old@somept +\let\xpt\old@somept +\let\xipt\old@somept +\let\xiipt\old@somept +\let\xivpt\old@somept +\let\xviipt\old@somept % 2.00(9)<< + % 1.06(4) << + +%% \vipt etc. are redefined to use appropriate Japanese fonts. +\else % 2.00(9) +\def\vpt{\old@vpt\fivedm\let\pdg\fivedg\let\pdm\fivedm\jfsize=5\relax} +\def\vipt{\old@vipt\sixdm\let\pdg\sixdg\let\pdm\sixdm\jfsize=6\relax} +\def\viipt{\old@viipt\sevendm\let\pdg\sevendg\let\pdm\sevendm\jfsize=7\relax} +\def\viiipt{\old@viiipt\eightdm\let\pdg\eightdg\let\pdm\eightdm\jfsize=8\relax} +\def\ixpt{\old@ixpt\eightdmhalf\let\pdg\eightdghalf\let\pdm\eightdmhalf + \jfsize=9\relax \@ixptboldmath} % 1.02(2) +\def\xpt{\old@xpt\tendm\let\pdg\tendg\let\pdm\tendm\jfsize=10\relax} +\def\xipt{\old@xipt\tendmhalf\let\pdg\tendghalf\let\pdm\tendmhalf\jfsize=11 + \relax} +\def\xiipt{\old@xiipt\twelvedm\let\pdg\twelvedg\let\pdm\twelvedm + \jfsize=12\relax} +\def\xivpt{\old@xivpt\twelvedmhalf\let\pdg\twelvedghalf\let\pdm\twelvedmhalf + \jfsize=14\relax} +\fi % 2.00(9) + +\if@LaTeX@e % 1.06(5) +\let\@ixptboldmath\relax % 1.06(5) +\else % 1.06(5) +% 1.02(2) >> +\ifDS@printer +\def\@ixptboldmath{% + \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath + \textfont\@ne\ninmi + \textfont\tw@\ninsy \textfont\lyfam\ninly + \@boldfalse}\@boldfalse + \def\boldmath{\@ifundefined{ninmib}{% + \global\font\ninmib\@mbi\@ptscale9\relax + \global\font\ninsyb\@mbsy\@ptscale9\relax + \global\font\ninlyb\@lasyb\@ptscale9\relax + \@addfontinfo\@ixpt + {\def\boldmath{\everymath{\mit}\everydisplay{\mit}% + \@prtct\@nomathbold + \textfont\@ne\ninmib \textfont\tw@\ninsyb + \textfont\lyfam\ninlyb \@prtct\@boldtrue}}}{}% + \@ixpt\boldmath}} +\else +\def\@ixptboldmath{% + \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath + \textfont\@ne\ninmi + \textfont\tw@\ninsy \textfont\lyfam\ninly + \@boldfalse}\@boldfalse +% 1.03(1) >> + \def\boldmath{\@ifundefined{ninmib}{\global\font\ninmib\@mbi + \global\font\ninsyb\@mbsy\relax + \global\font\ninlyb\@lasyb\relax + \@addfontinfo\@ixpt + {\def\boldmath{\everymath{\mit}\everydisplay{\mit}% + \@prtct\@nomathbold + \textfont\@ne\ninmib \textfont\tw@\ninsyb + \textfont\lyfam\ninlyb \@prtct\@boldtrue}}}{}% + \@ixpt\boldmath}} +% 1.03(1) << +\fi +% 1.02(2) << +\fi % 1.06(5) + + +%%%%%% Font Size Macros %%%%%% + +\def\fs@setsize#1#2#3#4{\normalsize\dimen@\normalbaselineskip + \@ifstar{\@setsize{#1}{\dimen@}{#3}{#4}}% + {\@setsize{#1}{#2}{#3}{#4}}} + +% s = (3*b - (h' + d') - (h + d))/2 +% s_a = s + h' + d - b +% s_b = s + h + d' - b +\def\sec@setskips#1{\setbox0\hbox{\fs@sec\bf#1}\setbox1\hbox{#1} + \@tempdima3\baselineskip + \advance\@tempdima-\ht0 \advance\@tempdima-\dp0 + \advance\@tempdima-\ht1 \advance\@tempdima-\dp1 + \divide\@tempdima\tw@ \advance\@tempdima-\baselineskip + \@tempdimb\@tempdima + \advance\@tempdima\ht0 \advance\@tempdima\dp1 + \advance\@tempdimb\ht1 \advance\@tempdimb\dp0 + \edef\sec@aboveskip{\the\@tempdima} + \edef\sec@belowskip{\the\@tempdimb}} + +\ifDS@english +% size pt \baselineskip size \?pt \baselineskip +% \normalsize 10 16Q \large 11 18Q (*) +% \small 9 15Q \Large 12 22Q +% \footnotesize 8 13Q \LARGE 14 26Q (*) +% \scriptsize 6 8pt (*) \huge 18 30Q (*) +% \tiny 5 6pt (*) \Huge 18 30Q (*) +% * : not measured + +\def\@normalsize{\@setsize\normalsize{16\@Q}\xpt\@xpt} +\def\small{\fs@setsize\small{15\@Q}\ixpt\@ixpt} +\def\footnotesize{\fs@setsize\footnotesize{13\@Q}\viiipt\@viiipt} +\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt} +\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt} +\def\large{\@setsize\Large{18\@Q}\xipt\@xipt} +\def\Large{\@setsize\LARGE{22\@Q}\xiipt\@xiipt} +\def\LARGE{\@setsize\LARGE{26\@Q}\xivpt\@xivpt} +\def\huge{\@setsize\Huge{30\@Q}\xviipt\@xviipt} +\let\Huge\huge + +\ifDS@techrep % 1.05(2)>> +\def\@normalsize{\@setsize\normalsize{17\@Q}\xpt\@xpt} +\fi % 1.05(2)<< + +\if@LaTeX@e % 2.00(10)>> +\let\normalsize\@normalsize +\fi % 2.00(10)<< + +\let\fs@footnote\footnotesize +\let\fs@caption\footnotesize +\let\fs@table\footnotesize +\let\fs@eabst\footnotesize +\let\fs@header\footnotesize +\let\fs@footer\footnotesize +\let\fs@bibliography\small +\let\fs@subsec\normalsize +\let\fs@sec\normalsize +\let\fs@type\large +\let\fs@eauthor\large +\let\fs@title\Large + +\@normalsize + +\sec@setskips{A} + +\else +% size pt \baselineskip size \?pt \baselineskip +% \normalsize 9 19Q \large 10 19Q +% \small 8 14Q \Large 11 22Q +% \footnotesize 7 14Q \LARGE 12 18Q +% \scriptsize 6 8pt (*) \huge 14 26Q +% \tiny 5 6pt (*) \Huge 14 26Q +% * : not measured + +\def\@normalsize{\@setsize\normalsize{19\@Q}\ixpt\@ixpt} +\def\small{\fs@setsize\small{14\@Q}\viiipt\@viiipt} +\def\footnotesize{\fs@setsize\footnotesize{14\@Q}\viipt\@viipt} +\def\scriptsize{\@setsize\scriptsize{8pt}\vipt\@vipt} +\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt} +\def\large{\@setsize\large{19\@Q}\xpt\@xpt} +\def\Large{\@setsize\Large{22\@Q}\xipt\@xipt} +\def\LARGE{\@setsize\LARGE{18\@Q}\xiipt\@xiipt} +\def\huge{\@setsize\Huge{26\@Q}\xivpt\@xivpt} +\let\Huge\huge + +\ifDS@techrep % 1.05(2)>> +\def\@normalsize{\@setsize\normalsize{17\@Q}\ixpt\@ixpt} +\fi % 1.05(2)<< + +\if@LaTeX@e % 2.00(10)>> +\let\normalsize\@normalsize +\fi % 2.00(10)<< + +\let\fs@footnote\footnotesize +\let\fs@caption\footnotesize +\let\fs@table\footnotesize +\let\fs@abst\small +\def\fs@eabst{\small\baselineskip13\@Q} +\let\fs@header\small +\let\fs@footer\small +\let\fs@subsec\normalsize +\def\fs@bibliography{\normalsize\baselineskip16\@Q} +\let\fs@sec\large +\let\fs@type\fn@fontxv +\let\fs@author\Large +\def\fs@eauthor{\Large\baselineskip15\@Q} +\let\fs@etitle\LARGE +\let\fs@title\huge + +\@normalsize + % 2.00(7) +\ifx\setjglues\undefined\else +\setjglues +\fi + +\sec@setskips{$B$"(B} + +\fi + +\if@LaTeX@e\else % 2.00(11) +\let\latex@bf\bf % 1.06(6) +\def\bf{\latex@bf \dg} % 1.06(6) +\fi % 2.00(11) + + +%%%%%% Page Layout Parameters %%%%%% + +\newdimen\@mojihaba + +\headheight 12\@Q + +% We want to allow a line containing $\displaystyle X^X$ to be a first line. +\setbox0\hbox{$\displaystyle X^X$} +\topskip\ht0 + +\ifdim\maxdepth<\dp\strutbox \maxdepth\dp\strutbox \@maxdepth\maxdepth\fi + +\@tempswafalse % 1.05(2)>> +\ifDS@english \ifDS@techrep \else \@tempswatrue \fi\fi +\if@tempswa % 1.05(2)<< +\topmargin 138\@Q \advance\topmargin-1in + +% \textheight = 53\baselineskip + \topskip + epsilon(100sp) +\textheight53\baselineskip \advance\textheight\topskip \advance\textheight100sp + +% \headsep = 24Q - \topskip +\headsep24\@Q \advance\headsep-\topskip + +% Only first page has page number (footer) at the bottom +\footskip 27\@Q + +\@mojihaba13\@Q + +\else +\topmargin 131\@Q \advance\topmargin-1in + +% \textheight = 45\baselineskip + \topskip + epsilon(100sp) +\textheight45\baselineskip \advance\textheight\topskip \advance\textheight100sp + +\ifDS@techrep % 1.05(2)>> +\textheight50\baselineskip \advance\textheight\topskip \advance\textheight100sp +\fi % 1.05(2)<< + +% \headsep = 28Q - \topskip +\headsep28\@Q \advance\headsep-\topskip + +% Only first page has page number (footer) at the bottom +\footskip24\@Q + +\@mojihaba12\@Q +\fi + +\columnsep30\@Q + +% \textwidth - \columnwidth = 24 * 12Q * 2 + \columnsep = 606Q +\textwidth606\@Q +\columnseprule0pt + +\oddsidemargin210mm \advance\oddsidemargin-\textwidth \divide\oddsidemargin\tw@ +\advance\oddsidemargin-1in \evensidemargin\oddsidemargin + +\skip\footins\baselineskip \advance\skip\footins-.5\@mojihaba +% \footnotesep = \baselineskip - depth(\strutbox) +{\fs@footnote + \footnotesep\baselineskip + \global\advance\footnotesep-\dp\strutbox} + +\def\footnoterule{{\fs@footnote\kern-\dp\strutbox \hrule \kern-.4\p@ + \kern\dp\strutbox}} + +\floatsep \baselineskip \textfloatsep \baselineskip +\intextsep \baselineskip \@maxsep \baselineskip +\dblfloatsep \baselineskip \dbltextfloatsep \baselineskip +\@dblmaxsep \baselineskip +\@fptop 0pt plus 1fil \@fpsep 0pt plus 2fil \@fpbot 0pt plus 1fil +\@dblfptop 0pt plus 1fil \@dblfpsep 0pt plus 2fil \@dblfpbot 0pt plus 1fil + +\parskip\z@ \parindent\@mojihaba +\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301 +\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty + + +%%%%%% Title and Authors %%%%%% +% +% Format of title, author names and abstract. +% +% \huge\bf <Japanese title> +% \vskip 32Q +% \Large <Japanese author names> +% \vskip 32Q +% \small <Japanese abstract> +% \vskip 34Q +% \LARGE\bf <English title> +% \vskip 28Q +% \Large\sc <English author names> +% \vskip 28Q +% \small <English abstract> +% \vskip 25Q + +\def\maketitle{\par\twocolumn[\@maketitle]\thispagestyle{myheadings}\@thanks} + +% default title header + +\def\title{\@dblarg{\@xtitle}} +\def\@xtitle[#1]#2{\gdef\@title{#2}% + {\def\protect{\noexpand\protect\noexpand}% + \ifDS@english\def\\{\unskip\ \ignorespaces}% + \else\def\\{\unskip\ignorespaces}\fi + \xdef\@titlestring{#1}}% + \settowidth\@tempdima{\fs@header + \hskip12\@Q Vol.~00\hskip12\@Q No.~00\qquad\@titlestring\qquad + Vol.~00\hskip12\@Q No.~00\hskip12\@Q} + \ifdim\@tempdima>\textwidth + \ipsj@warning{\string\title\space for headding is too wide}\fi} + % 2.00(3) +\def\@title{\mkt@warning\title}\def\@titlestring{} +\long\def\author#1{\long\gdef\@author{#1}} +\def\@author{\mkt@warning\author} + +\newbox\@abstractbox +%% Introduce \@titlewidth because we now use this dimen repeatedly. (H.N.) +%% \@titlewidth = 44 * 11Q = 484Q +\newdimen\@titlewidth \@titlewidth 484\@Q + +\def\abstract{\global\let\@abstract\relax + \global\setbox\@abstractbox\hbox\bgroup + \begin{minipage}[b]{\@titlewidth}\fs@abst\parindent11\@Q} +\def\endabstract{\end{minipage}\egroup} +\def\@abstract{\mkt@warning{abstract env}} + +%% We need English title, author name(s) and abstract. (H.N.) +\def\etitle#1{\gdef\@etitle{#1}} +\def\@etitle{\mkt@warning\etitle} +\long\def\eauthor#1{\long\gdef\@eauthor{#1}} +\def\@eauthor{\mkt@warning\eauthor} + +\newbox\@eabstractbox +\def\eabstract{\global\let\@eabstract\relax + \global\setbox\@eabstractbox\hbox\bgroup + \begin{minipage}[b]{\@titlewidth}\fs@eabst\parindent11\@Q} +\let\endeabstract\endabstract +\def\@eabstract{\mkt@warning{eabstract env}} + +\ifDS@english +\let\author\eauthor \let\abstract\eabstract +\let\@eauthor\@author \let\@eabstract\@abstract +\fi + +\def\mkt@warning#1{\ipsj@warning{Missing \string#1}} % 2.00(3) + +\newdimen\mkt@prevdepth +\newbox\mkt@titlebox +\def\@maketitle{\setbox\mkt@titlebox\vbox{ + \ifDS@english \ifDS@preface + \hbox{}\vskip60\@Q \vskip-\headsep \vskip-\baselineskip + \else + \hbox{}\vskip26\@Q \vskip-\headsep \vskip-\baselineskip + \leftline{\fs@type\it + \ifDS@technote Technical Note + \else Regular Paper\fi} + \vskip32\@Q \vskip-\baselineskip \fi + \else\ifDS@technote + \vskip18\@Q \vskip-\headsep + \leftline{\vbox to28\@Q{\hrule height.8pt\vss + \hbox{\hskip7\@Q \fs@type $B%F%/%K%+%k%N!<%H(B% + \hskip7\@Q}\vss\hrule height.8pt}} + \vskip40\@Q \vskip-\baselineskip + \else + \hbox{}\vskip60\@Q \vskip-\headsep \vskip-\baselineskip + \fi\fi + \@tempswafalse \ifDS@english\else\ifDS@preface\@tempswatrue\fi\fi + \mkt@maketitle{\fs@title\bf}\@title\title +% 1.04(1a) >> + \ifnum\c@affi@footnote>\thr@@ + \let\theaffi@footnote\theaffi@footnotemany \fi + \c@affi@footnote\z@ +% 1.04(1a) << + \affi@labels + \ifDS@english\else + \vskip-\mkt@prevdepth \nointerlineskip\vskip32\@Q + \centerline{\vbox{\centering\hsize\@titlewidth\fs@author + \mkt@makeauthor}} + \ifDS@preface\else + \vskip-\prevdepth \nointerlineskip\vskip32\@Q + \centerline{\@abstract\box\@abstractbox} + \vskip-\prevdepth \nointerlineskip\vskip34\@Q + \mkt@maketitle{\fs@etitle\bf}\@etitle\etitle + \fi\fi + \if@tempswa\else + \vskip-\mkt@prevdepth \nointerlineskip\vskip28\@Q + \centerline{\vbox{\centering\hsize\@titlewidth\fs@eauthor\sc + \mkt@makeeauthor}} + \fi + \ifDS@preface\else + \vskip-\prevdepth \nointerlineskip\vskip28\@Q + \centerline{\@eabstract\box\@eabstractbox} + \fi + \vskip-\prevdepth \nointerlineskip\vskip25\@Q} + \@tempdimb\ht\mkt@titlebox \advance\@tempdimb\dp\mkt@titlebox + \@tempcnta\@tempdimb \@tempcntb\baselineskip + \divide\@tempcnta\@tempcntb \@tempdima\@tempcnta\baselineskip + \advance\@tempdima-\@tempdimb + \box\mkt@titlebox + \ifdim\@tempdima=\z@\else\advance\@tempdima\baselineskip + \vskip\@tempdima\fi} + +%% \mkt@maketitle puts Japanese/English title, whose lines should be +%% properly broken with \\ by the user. The result is flushed to left, then +%% centered with respect to the longest line. (H.N.) +\def\mkt@maketitle#1#2#3{\setbox\@tempboxa\vtop{ + \def\\{\unskip\egroup\hbox\bgroup\ignorespaces} + #1\hbox\bgroup#2\unskip\egroup + \global\mkt@prevdepth\prevdepth} + \@tempdima\textwidth\advance\@tempdima-4\@mojihaba + \ifdim\wd\@tempboxa>\@tempdima + \ipsj@warning{% % 2.00(3) + \string#3 is too wide. Break line(s) by \string\\}\fi + \centerline{\box\@tempboxa}} + +% Assignment of Japanese author names to lines: +% 1 -> 1, 2 -> 2, 3 -> 3, 4 -> 2+2, 5 -> 3+2, 6 -> 3+3, 7 -> 3+2+2, 8 -> 3+3+2, +% ... +% Rule for N authors (N > 2, q := N div 3) +% N mod 3 = 0 -> 3 * q +% N mod 3 = 1 -> 3 * (q - 2) + 2 + 2 +% N mod 3 = 2 -> 3 * (q - 1) + 2 + +\newcount\mkt@cnta\newcount\mkt@cntb +\newcount\mkt@sname\newcount\mkt@gname +\newbox\mkt@boxa +\newdimen\mkt@namewidth +\def\mkt@makeauthor{\let\member\@gobble \let\nomember\relax + \let\stmember\@gobble % Those are not necessary in final manuscript. + \def\@makefnmark{\smash{\rlap{\fn@fontvii$^{\affi@thefnmark}$}}}% + \gdef\affi@thefnmark{}\leavevmode\let\+\ignorespaces + \settowidth\@tempdima{$B$"(B}\mkt@namewidth7\@tempdima\@tempcnta\z@ + \expandafter\mkt@countauthor\@author\and\@nil\and + \ifnum\@tempcnta=\@ne\let\mkt@anhbox\mkt@anhboxc\mkt@makesingleauthor + \else + \@tempcntb\@tempcnta \divide\@tempcntb\thr@@ + \multiply\@tempcntb\thr@@ \advance\@tempcntb-\@tempcnta + \ifnum\@tempcntb=\m@ne\relax\@tempcntb\tw@\else\@tempcntb\z@\fi + \mkt@cnta\thr@@ + \let\mkt@anhbox\mkt@anhboxl + \expandafter\mkt@makemultiauthor\@author\and\and\fi} +\def\mkt@countauthor#1\and{\def\@tempa{#1}\ifx\@tempa\@nnil\let\next\relax + \else\advance\@tempcnta\@ne \let\next\mkt@countauthor\fi\next} + +% If single author, author name has 9 KC width instead of 7. +\def\mkt@makesingleauthor{\divide\mkt@namewidth7\multiply\mkt@namewidth9\relax + \expandafter\mkt@putauthor\@author\+ \@nil} + +\def\mkt@makemultiauthor#1\and{\ifnum\@tempcnta=\z@\unskip\let\next\relax\else + \leavevmode + \advance\mkt@cnta\m@ne \advance\@tempcnta\m@ne + \ifnum\mkt@cnta=\z@\mkt@maleft{#1}\mkt@cnta\thr@@\else + \ifnum\@tempcnta=\@tempcntb\mkt@maleft{#1}\mkt@cnta\tw@\else + \mkt@putauthor#1\+ \@nil\let\mkt@anhbox\mkt@anhboxc\fi\fi + \let\next\mkt@makemultiauthor\fi\next} +\def\mkt@maleft#1{\let\mkt@anhbox\mkt@anhboxr\mkt@putauthor#1\+ \@nil + \par\let\mkt@anhbox\mkt@anhboxl} + +% Japanese author name format: +% Non Japanese : As is. +% Japanese w/o s/g delimitor : As is with warning. +% Japanese (s+g>6) : As is. +% Japanese (s+g<7) : Give 1-KC space to s/g delimitor, then insert +% infinit stretch between each character pair, assuming the +% s/g delimitor as a charcter, to make the name have 7-KC +% width. An exception is 2s + 2g case, in which s/g +% delimitor has 0 width in order to have the result +% "S_S_G_G". + +\def\mkt@putauthor#1 #2\@nil{% + \setbox\@tempboxa\hbox{\let\affiref\@gobble \let\mkt@warning\@gobble + \jintercharskip\z@#1#2}% + \setbox\mkt@boxa\hbox{\let\affiref\@gobble \let\mkt@warning\@gobble + \jintercharskip1cm#1#2}% + \ifdim\wd\@tempboxa=\wd\mkt@boxa \mkt@anhbox{#1 #2}\else + % probably no Kanjis + \def\@tempa{#2}\ifx\@tempa\empty % without space btwn s/g-name + {\let\affiref\@gobble \def\+{}% + \ipsj@warning{Author name #1 doesn't have a space}}% + % 2.00(3) + \mkt@anhbox{#1}\else + \mkt@getnamewidth\mkt@sname{#1}\mkt@getnamewidth\mkt@gname{#2}% + \mkt@cntb\mkt@sname \advance\mkt@cntb\mkt@gname + \ifnum\mkt@cntb>6\relax\mkt@anhbox{#1\ #2}\else + \jintercharskip\fill% + \@tempskipa\@tempdima plus2fill\relax + \ifnum\mkt@sname=\tw@ \ifnum\mkt@gname=\tw@ \@tempskipa\fill\fi\fi + \hbox to\mkt@namewidth{#1\hskip\@tempskipa#2\@makefnmark}\fi\fi\fi + \gdef\affi@thefnmark{}\hskip\columnsep} + +% When an author name is formatted "as is", the following macros are used +% according to their position (left, right, or center). +\def\mkt@anhboxl#1{\hbox to\mkt@namewidth{\hss#1\@makefnmark}} +\def\mkt@anhboxr#1{\hbox to\mkt@namewidth{#1\@makefnmark\hss}} +\def\mkt@anhboxc#1{\setbox\@tempboxa\hbox{#1\@makefnmark}% + \ifdim\wd\@tempboxa>\mkt@namewidth\box\@tempboxa + \else\hbox to\mkt@namewidth{\box\@tempboxa\hss}\fi} + +\def\mkt@getnamewidth#1#2{\setbox\@tempboxa\hbox{\let\affiref\@gobble#2}% + \@tempdimb\wd\@tempboxa + \advance\@tempdimb.5\@tempdima #1\@tempdimb \mkt@cntb\@tempdima + \divide#1\mkt@cntb} + +% English author name format +% 1 -> <name-1>^* +% 2 -> <name-1>^* and~<name-2>^* +% 3 or more -> <name-1>,^* <name-2>,^* ... <name-n-1>^* and~<name-n>^* +% (be careful the position of comma). +% +% No special tricks for assignment names to line. Names are simply put in a +% \centering paragraph. + +\def\mkt@makeeauthor{\let\member\@gobble \let\nomember\relax + \let\stmember\@gobble % Those are not necessary in final manuscript. + \leavevmode\let\mkt@and\relax\gdef\affi@thefnmark{}% + \def\@thefnmark{\affi@thefnmark}% + \expandafter\mkt@imakeeauthor\@eauthor\and\@nil\and} +\def\mkt@imakeeauthor#1\and#2\and{\def\@tempa{#2}\ifx\@tempa\@nnil + #1\@makefnmark\let\next\relax + \else + \def\@tempb{#1}\def\next{\mkt@iimakeeauthor#2\and}% + \fi\next} +\def\mkt@iimakeeauthor#1\and{\def\@tempa{#1}\ifx\@tempa\@nnil + \@makefnmark\ {\rm{and}~}\gdef\affi@thefnmark{}\hbox{\@tempb}% + \@makefnmark\let\next\relax + \else + \mkt@and\hbox{\@tempb}\let\mkt@and\mkt@andmid + \let\next\mkt@iimakeeauthor + \fi\def\@tempb{#1}\next} +\def\mkt@andmid{,\@makefnmark\ \gdef\affi@thefnmark{}} + +% Macros to specify author's affiliation easily. +\newcounter{affi@footnote} \c@affi@footnote\z@ +\def\affilabel{\stepcounter{affi@footnote}\affi@deflabels\affi@affilabel} + % 1.04(1a) +\def\paffilabel{\affi@deflabels\affi@paffilabel} +\def\affi@deflabels#1#2#3{{\def\protect{\noexpand\protect\noexpand}% + \let\affi@affilabel\relax \let\affi@paffilabel\relax \let\\\relax + \xdef\affi@labels{\affi@labels#1{#2}{#3}}}} +\def\affi@labels{} +\def\affi@affilabel{\begingroup + \def\@mpfn{affi@footnote}\def\thempfn{\theaffi@footnote}% + \def\affi@fnmark{\protect\@makefnmarkdagger}% + \affi@label} +\def\affi@paffilabel#1#2{\begingroup\PF@adjustfnote + \def\affi@fnmark{\protect\@makefnmarkstar}% + \def\protect{\noexpand\protect\noexpand}% + \def\\{\noexpand\\Presently with \ignorespaces}% + \edef\@tempa{\ifDS@english Presently with \else $B8=:_!$(B\fi#2}% 1.04(1d) + \affi@label{#1}{\@tempa}} +\def\affi@label#1#2{\stepcounter{\@mpfn}% + \@ifundefined{affi@r@#1}% + {\expandafter\xdef\csname affi@r@#1\endcsname{\thempfn}} + {\ipsj@warning{Affiliation label `#1' multiply defined}}% + % 2.00(3) + \let\affi@footnotetext\relax\let\\\relax + \def\protect{\noexpand\protect\noexpand}% + \xdef\@thanks{\@thanks + \affi@footnotetext{\thempfn}{\affi@fnmark}{#2}}\endgroup} + +\def\affiref#1{\@ifundefined{affi@r@#1}% + {\ipsj@warning{Affiliation reference `#1' undefined}% 2.00(3) + \def\@tempa{?}}% + {\def\@tempa{\csname affi@r@#1\endcsname}}% + \ifx\affi@thefnmark\empty\xdef\affi@thefnmark{\@tempa}\else + \xdef\affi@thefnmark{\affi@thefnmark,\hskip\z@\@tempa}\fi} +\def\affi@footnotetext#1#2#3{{\def\@thefnmark{#1}\def\@makefnmarkforfn{#2} + \@footnotetext{#3}}} + +% 1.04(1b)>> +\def\theaffi@footnote{\ifcase\c@affi@footnote\or + {\dagger}\or {\dagger}{\dagger}\or {\dagger}{\dagger}{\dagger}\fi} + % 1.04(1c) +\def\theaffi@footnotemany{{\dagger}\number\c@affi@footnote} +% 1.04(1b)<< + +\def\thanks#1{\begingroup + \def\@makefnmark{\smash{\hbox{\fn@fontvii$^{\@thefnmark}$}}}% + \footnotemark + \let\affi@footnotetext\relax\let\\\relax + \def\protect{\noexpand\protect\noexpand}% + \xdef\@thanks{\@thanks + \affi@footnotetext{\thempfn}{\protect\@makefnmarkstar}{#1}}% + \endgroup} + +% \contact is necessary only for drafts. +\long\def\contact#1{} + + +%%%%%% Page Header and Footer %%%%%% +%%%XXX + +\mark{{}{}} + +\newcounter{volpageoffset} % You must set this to appropriate value +\setcounter{volpageoffset}{1} % for each issue! + +% 2.00(16)>> +\let\latex@document\document +\def\document{\latex@document\global\c@page\c@volpageoffset} +\let\c@volpage\c@page % for backward compatibility +\def\thevolpage{\thepage} % for backward compatibility +% 2.00(16)<< + +\newcounter{volume}\expandafter\let\csname c@$B4,?t(B\endcsname\c@volume +\newcounter{number}\expandafter\let\csname c@$B9f?t(B\endcsname\c@number +\newcounter{year}\expandafter\let\csname c@$BG/?t(B\endcsname\c@year + +%\def\@thevolno{Vol.~\arabic{$B4,?t(B}\hskip\@mojihaba No.~\arabic{$B9f?t(B}} +\def\@thevolno{\hskip\@mojihaba} +% 2.00(15)>> +\def\@monthyear{\hskip\@mojihaba} +%\def\@monthyear{\ifcase\value{$B9f?t(B}\or Jan.\or Feb.\or Mar.\or Apr.\or May\or +% June\or July\or Aug.\or Sep.\or Oct.\or Nov.\or Dec.\else\fi +% \hskip.5\@mojihaba \setcounter{$BG/?t(B}{1959}% +% \addtocounter{$BG/?t(B}{\value{$B4,?t(B}}\arabic{$BG/?t(B}} +% 2.00(15)<< + +% 1.05(2)>> +\ifDS@techrep +\def\ps@headings{\let\@mkboth\markboth + \def\@oddhead{\@checklines\hss}\let\@evenhead\@oddhead + \def\@oddfoot{}\def\@evenfoot{}} +\let\ps@myheadings\ps@headings + +\else +% 1.05(2)<< +\def\ps@headings{\let\@mkboth\markboth + \def\@oddfoot{} + \def\@evenfoot{} + \def\@evenhead{%\fs@header \@checklines + %\hskip\@mojihaba\rlap{\thepage}\hss + %\hdr@tipsj\hss\llap{\@monthyear}\hskip\@mojihaba + } + \def\@oddhead{%\fs@header \@checklines + %\hskip\@mojihaba\rlap{\@thevolno}\hss + %\smash{\@titlestring}\hss + %\llap{\thepage}\hskip\@mojihaba + } + \def\sectionmark##1{}\def\subsectionmark##1{}} + +\def\ps@myheadings{\let\@mkboth\@gobbletwo + \def\@oddhead{%\fs@header \@checklines + %\hskip\@mojihaba\rlap{\@thevolno}\hss + %\hdr@tipsj\hss + %\llap{\@monthyear}\hskip\@mojihaba + } + \def\@oddfoot{%\fs@footer\hfil\thepage\hfil + } + \let\@evenhead\@oddhead + \let\@evenfoot\@oddfoot + \def\sectionmark##1{}\def\subsectionmark##1{}} +\fi % 1.05(2) + +\ifDS@english +\def\hdr@tipsj{%Transactions of Information Processing Society of Japan +}% +\else +%\def\hdr@tipsj{$B>pJs=hM}3X2qO@J8;o(B} +\def\hdr@tipsj{%$BAH9~$_%=%U%H%&%(%"%7%s%]%8%&%`(BESS04 +}% +\fi + +% \checklines enables to draw a horizontal rule onto each baselines. + +\newif\if@checklines \@checklinesfalse +\def\checklines{\@checklinestrue} +\def\@checklines{\if@checklines \rlap{\smash{\vtop{\normalsize + \hbox{} \vskip\headsep \hrule width\textwidth\vskip-.4pt \vskip\topskip + \hrule\vskip-.4pt + \ifDS@techrep\@tempcnta50\else % 1.05(2) + \ifDS@english\@tempcnta53\else\@tempcnta45\fi\fi % 1.05(2) + \relax\@@checklines}}}\fi + \ifDS@english\@tempcnta-7\else\@tempcnta\z@\fi\relax +% 1.05(2)>> + \@tempswafalse + \ifDS@printer \@tempswatrue \fi \ifDS@techrep \@tempswatrue \fi + \if@tempswa \unitlength\@Q \begin{picture}(0,0)(0,\@tempcnta) + \put(-61,63){\begin{picture}(0,0) + \put(-10,0){\line(-1,0){30}} + \put(0,10){\line(0,1){30}}\end{picture}} + \put(667,63){\begin{picture}(0,0) + \put(10,0){\line(1,0){30}} + \put(0,10){\line(0,1){30}}\end{picture}} + \put(-61,-965){\begin{picture}(0,0) + \put(-10,0){\line(-1,0){30}} + \put(0,-10){\line(0,-1){30}} + \ifDS@techrep + \put(0,-10){\makebox(728,0)[t]{\thepage}}\fi + \end{picture}} +% 1.05(2)<< + \put(667,-965){\begin{picture}(0,0) + \put(10,0){\line(1,0){30}} + \put(0,-10){\line(0,-1){30}}\end{picture}} + \end{picture}\fi} +\def\@@checklines{\ifnum\@tempcnta>\z@ + \vskip\normalbaselineskip \hrule\vskip-.4pt \advance\@tempcnta\m@ne + \let\next\@@checklines\else\let\next\relax\fi\next} + +\pagestyle{headings} +\pagenumbering{arabic} + +\ifDS@english\else +\def\today{\the\year $BG/(B \the\month $B7n(B \the\day $BF|(B} +\fi + + +%%%%%% Output Routine %%%%%% + +% To balance the final page, +% following code is borrowed from nicetwocolumn style + +% you can refrain from balancing by falsifying following switch! +%% Initial value of \if@lastpagebalancing is false. It may be turned true by +%% biography processing macros. (H.N.) + +\newif\if@lastpagebalancing \@lastpagebalancingfalse +\newif\if@finalpageoutput \@finalpageoutputfalse +% incorporate balanced output to \enddocument +\let\latex@enddocument\enddocument +\def\enddocument{\@finalpageoutputtrue + \if@lastpagebalancing + \global\let\@outputdblcol\opt@balanceoutputdblcol\fi + \ifDS@preface + \global\let\@outputdblcol\opt@balanceoutputdblcol\fi + \latex@enddocument} + +\newbox\@leftcolumnfootnote \newbox\@rightcolumnfootnote +\newif\if@leftfootnoteexist \@leftfootnoteexistfalse +\newif\if@rightfootnoteexist \@rightfootnoteexistfalse +\newif\ifopt@floatexist \opt@floatexistfalse + +% 2.00(12) \color@{begin/end}group ignored +\def\enlargethispage{\ipsj@warning{\string\enlargepage is ignored}} + % 2.00(3,12) +\def\@makecol{\vbadness10000 \lineskiplimit\normallineskiplimit % 1.05(1) + \setbox\@outputbox\box\@cclv + \if@firstcolumn + \ifvoid\footins \global\@leftfootnoteexistfalse + \else + \global\@leftfootnoteexisttrue + \@tempdima\dp\footins + \global\setbox\@leftcolumnfootnote\vbox{ + \unvbox\footins\vskip-\@tempdima} + \fi + \ifx\@botlist\@empty\else\global\opt@floatexisttrue\fi + \else + \ifvoid\footins \global\@rightfootnoteexistfalse + \else + \global\@rightfootnoteexisttrue + \@tempdima\dp\footins + \global\setbox\@rightcolumnfootnote\vbox{ + \unvbox\footins \vskip-\@tempdima} + \ifx\@toplist\@empty\else\global\opt@floatexisttrue\fi + \fi + \fi + \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats + \global\maxdepth\@maxdepth} + +% 2.01(1) >> +\let\latex@vtryfc\@vtryfc +\def\@vtryfc{\if@firstcolumn \global\@leftfootnoteexistfalse + \else \global\@rightfootnoteexistfalse \fi \latex@vtryfc} +% 2.01(1) << + +% 1.01(1,2) >> +\let\latex@addtobot\@addtobot +\def\@addtobot{\latex@addtobot\global\maxdepth\@maxdepth} +\let\latex@combinefloats\@combinefloats +\def\@combinefloats{\ifx\@botlist\@empty\else \dimen@\dp\@outputbox + \setbox\@outputbox\vbox{\unvbox\@outputbox \vskip-\dimen@}\fi + \latex@combinefloats} +% 1.01(1,2) << + +\newskip\opt@baselineskip +\def\@outputdblcol{ + \if@firstcolumn \global\@firstcolumnfalse + \global\setbox\@leftcolumn\box\@outputbox + \global\opt@baselineskip\baselineskip + \else \global\@firstcolumntrue \global\opt@floatexistfalse + \global\bib@adjustheight-\maxdimen + \setbox\@leftcolumn\vbox to\@colht{\boxmaxdepth\@maxdepth % 1.01(3) + \unvbox\@leftcolumn + \if@leftfootnoteexist\vfil +\message{<L>} + \footnoterule\box\@leftcolumnfootnote\fi} + \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\@maxdepth % 1.01(3) + \unvbox\@outputbox + \if@rightfootnoteexist\vfil +\message{<R>} + \footnoterule\box\@rightcolumnfootnote\fi} + \global\maxdepth\@maxdepth + \if@finalpageoutput + \if@leftfootnoteexist\else\if@rightfootnoteexist\else + \setbox\@leftcolumn\vbox{\unvbox\@leftcolumn}% + \setbox\@outputbox\vbox{\unvbox\@outputbox} + \ifdim\ht\@leftcolumn<\ht\@outputbox + \setbox\@leftcolumn\vbox to\ht\@outputbox{ + \unvbox\@leftcolumn}% + \else + \setbox\@outputbox\vbox to\ht\@leftcolumn{ + \unvbox\@outputbox}% + \fi + \fi\fi\fi + \setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth + {\box\@leftcolumn \hss}\hfil \vrule width\columnseprule\hfil + \hbox to\columnwidth{\box\@outputbox \hss}}} + \@combinedblfloats + \@outputpage \begingroup \@dblfloatplacement \@startdblcolumn + \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}% + \endgroup + \fi} + +\let\opt@outputdblcol\@outputdblcol +\chardef\opt@boxa\z@ +\chardef\opt@boxb\@ne +\chardef\opt@boxc\tw@ +\def\opt@magicpenalty{1234} +\def\opt@balanceoutputdblcol{\let\next\opt@ibalanceoutputdblcol + \if@firstcolumn \let\next\opt@outputdblcol + \else \ifopt@floatexist \opt@warning \let\next\opt@outputdblcol + \else\ifx\@deferlist\@empty\else + \opt@warning \let\next\opt@outputdblcol\fi\fi\fi + \next} +\def\opt@ibalanceoutputdblcol{% + \setbox\@leftcolumn\vbox{\unvbox\@leftcolumn + \ifnum\lastpenalty=\opt@magicpenalty\relax\else + \@tempcnta10\relax\@whilenum\@tempcnta>0\do{% + \unskip\unskip\unkern\unpenalty + \advance\@tempcnta\m@ne}\fi} + \advance\opt@baselineskip-\dp\@leftcolumn + \ifdim\dp\@leftcolumn=\z@ \ifdim\opt@baselineskip=\baselineskip + \@tempdima\ht\@leftcolumn \advance\@tempdima-\topskip + \divide\@tempdima\baselineskip + \@tempcnta\@tempdima \@tempdima\@tempcnta\baselineskip + \advance\@tempdima\topskip + \advance\@tempdima-\ht\@leftcolumn + \advance\opt@baselineskip\@tempdima \fi\fi + \advance\opt@baselineskip-\topskip + \setbox\@outputbox\vbox{\unvbox\@outputbox} + \ifdim\ht\@outputbox=\topskip \ifdim\dp\@outputbox=\z@ + \setbox\opt@boxa\vbox{\unvcopy\@outputbox\unskip + \global\setbox\opt@boxb\lastbox + \global\dimen@\lastskip} + \ifvoid\opt@boxb\else\ifdim\ht\opt@boxb=\z@ + \ifdim\dp\opt@boxb=\z@\ifdim\dimen@=\topskip + \@firstcolumntrue\fi\fi\fi\fi\fi\fi + \setbox\opt@boxa\copy\@outputbox + \setbox\@outputbox\vbox{\unvcopy\@leftcolumn + \if@firstcolumn\else + \vskip\opt@baselineskip + \penalty\interlinepenalty\unvbox\@outputbox\fi} + \@tempdima\ht\@outputbox \advance\@tempdima\topskip + \divide\@tempdima\tw@ \advance\@tempdima100sp + \splittopskip\topskip \splitmaxdepth\@maxdepth + \ifdim\bib@adjustheight<\@M pt + \opt@split\@outputbox\opt@boxb\@tempdima + \ifdim\ht\opt@boxb<\bib@adjustheight + \opt@split\@leftcolumn\opt@boxc\bib@adjustheight + \opt@split\opt@boxc\opt@boxb\@tempdima + \if@firstcolumn + \opt@adjust\opt@boxc{\unvbox\@leftcolumn} + \else\opt@adjust\opt@boxc{\ifvoid\@leftcolumn\else + \unvbox\@leftcolumn\vskip\opt@baselineskip\fi + \unvbox\opt@boxa}\fi\fi + \else + \advance\bib@adjustheight-\@M pt + \opt@split\opt@boxa\opt@boxc\bib@adjustheight + \setbox\@outputbox\vbox{\unvbox\@leftcolumn + \vskip\opt@baselineskip\unvbox\opt@boxc} + \opt@split\@outputbox\opt@boxb\@tempdima + \opt@adjust\@outputbox{\unvbox\opt@boxa} + \fi + \if@leftfootnoteexist + \setbox\opt@boxb\vbox to\@colht{\box\opt@boxb\vfill + \footnoterule\box\@leftcolumnfootnote}\fi + \if@rightfootnoteexist + \setbox\@outputbox\vbox to\@colht{\box\@outputbox\vfill + \footnoterule\box\@rightcolumnfootnote}\fi + \ifdim\ht\@outputbox>\ht\opt@boxb + \setbox\opt@boxb\vbox to\ht\@outputbox{\unvbox\opt@boxb} + \else + \setbox\@outputbox\vbox to\ht\opt@boxb{\unvbox\@outputbox} + \fi + \setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth + {\box\opt@boxb \hss}\hfil \vrule width\columnseprule\hfil + \hbox to\columnwidth{\box\@outputbox \hss}}} + \global\@firstcolumntrue \@combinedblfloats + \@outputpage \begingroup \@dblfloatplacement \@startdblcolumn + \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}\endgroup} + +\if@LaTeX@eN % 2.00(3)>> +\def\opt@warning{\ClassWarning{ipsjpapers}{% + Single column floats still remain on biography\MessageBreak + processing.\MessageBreak + Do \string\verbbiography\space for manual balcing}} +\else +\def\opt@warning{\@warning{Single column floats still remain on biography + processing.^^J\space\space\space\space\space + \space\space\space\space\space\space\space\space\space\space + Do \string\verbbiography\space for manual balancing}} +\fi % 2.00(3)<< +\def\opt@split#1#2#3{\setbox#2\vsplit#1to#3\setbox#2\vbox{\unvbox#2}} +\def\opt@adjust#1#2{\@tempdima\ht#1 \advance\@tempdima-\topskip + \@tempdimb\@tempdima \divide\@tempdima\baselineskip + \@tempcnta\@tempdima \@tempdima\@tempcnta\baselineskip + \advance\@tempdima-\@tempdimb + \ifdim\@tempdima<\z@ \advance\@tempdima\baselineskip \fi + \advance\@tempdima\baselineskip \advance\@tempdima-\dp#1 + \advance\@tempdima-\topskip + \setbox\@outputbox\vbox{\ifvoid#1\else\unvbox#1\vskip\@tempdima\fi#2}} + +\let\latex@outputpage\@outputpage +% \opt@finalgap: vertical space above the \hrule at the end of paper. +% \opt@finallinewidth: width of the \hrule at the end of paper. +\@tempdima2\baselineskip % This might be changed +\edef\opt@finalgap{\the\@tempdima} +\def\opt@finallinewidth{220\@Q} % This might be changed +\ifDS@techrep \let\opt@finallinewidth\z@ \fi % 1.05(2) + +\def\@outputpage{\if@finalpageoutput + \setbox\@outputbox\vbox{\unvbox\@outputbox} + \@tempdima\dp\@outputbox + \@tempdimb\ht\@outputbox \advance\@tempdimb\opt@finalgap\relax + \ifdim\@tempdimb>\textheight\else + \setbox\@outputbox\vbox{\unvbox\@outputbox\vskip-\@tempdima + \nointerlineskip\vbox to\z@{\vskip\opt@finalgap + \hbox to\textwidth{\hss + \vrule height0.4pt width\opt@finallinewidth\hss} + \vss}}\fi\fi + \ifASCII\if@LaTeX@e \@@topmargin\topmargin \fi\fi % 2.00(13) + \latex@outputpage} + +%%%%%% Biography %%%%%% + +% If you want to control the allocation of biographies manually, do +% \verbbiography and insert \adjust{<vertical materials>} just before +% \member (or its relatives). For example; +% \verbbiography +% \begin{biography} +% \member{...} ... +% \adjust{\protect\newpage} +% \member{...} ... +% \adjust{\protect\vspace{1.3cm}} +% \member{...} ... +% \end{biography} +% will make page break just after the biography of the 1st author, and will +% insert a vertical space of 1.3cm just after that of the 2nd. It is +% strongly recommended to \protect any control sequence in the argument of +% \adjust. + +% \$B<uIU(B and \$B:NO?(B define the dates of receipt/acceptance. They are put at +% the end of manuscript (just before biographies) by ra@putrcvacc. +\def\ra@nengo{$BJ?@.(B} %% Change here when ... +\ifDS@english +\def\$B<uIU(B#1#2#3{\def\ra@received{\ra@date{#1}{#2}{#3}}\ignorespaces} +\def\$B:NO?(B#1#2#3{\def\ra@accepted{\ra@date{#1}{#2}{#3}}\ignorespaces} +\def\ra@received{??? ??, ????} +\def\ra@accepted{??? ??, ????} +\else +\def\$B<uIU(B#1#2#3{\def\ra@received{#1&}\ignorespaces} +\def\$B:NO?(B#1#2#3{\def\ra@accepted{#1&}\ignorespaces} +\def\ra@received{?&?&?&} +\def\ra@accepted{?&?&?&} +\fi +\let\received\$B<uIU(B +\let\accepted\$B:NO?(B + +\def\ra@putrcvacc{\rightline{\vtop{\normalsize\tabskip\z@ + \ifDS@english + \llap{(Received \ra@received)}\llap{(Accepted \ra@accepted)}\hbox{} + \else + \halign{(\ra@nengo\hskip\jasciikanjiskip + \hfil##\hfil\hskip\jasciikanjiskip $BG/(B\hskip\jasciikanjiskip& + \hfil##\hfil\hskip\jasciikanjiskip $B7n(B\hskip\jasciikanjiskip& + \hfil##\hfil\hskip\jasciikanjiskip $BF|(B&##\hfil)\cr + \ra@received $B<uIU(B\cr\ra@accepted $B:NO?(B\cr\multispan3\cr}\fi} + \hskip\@mojihaba} + \nobreak\vskip-2\baselineskip\prevdepth\z@\hbox{}\vskip\baselineskip + \penalty\opt@magicpenalty} +\def\ra@date#1#2#3{\ifcase#2\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#3, #1} + +\newbox\bio@picbox +% The following define the height and width of a picture for biography, and +% the indentation of the first 6 lines. They might be changed. +\def\bio@picheight{100\@Q} +\def\bio@picwidth{80\@Q} + +\newif\ifbio@showpicbox +\bio@showpicboxtrue +% Do \bio@showpicboxfalse if you don't want to put a frame box at the +% position for picture. +\ifDS@english +\def\bio@lineheight{9\@Q} +\def\bio@piclines{7} +\def\bio@indent{91\@Q} +\def\bio@hangafter{7} +\else +\def\bio@lineheight{8\@Q} +\def\bio@piclines{6} +\def\bio@indent{96\@Q} +\def\bio@hangafter{5} +\fi + +% \verbbiography forces verbatim output of biography (i.e. not ballanced). +\newif\ifbio@verb \bio@verbfalse +\def\verbbiography{\global\bio@verbtrue} +% The environment biography saves texts for biographies into the list of +% \inserts (for floats). +\def\biography{\par\ra@putrcvacc + \def\member{\bio@member{$B!J@52q0w!K(B}}\def\nomember{\bio@member{}} + \def\stmember{\bio@member{$B!J3X@82q0w!K(B}}\let\adjust\bio@adjust + \ifbio@showpicbox + \setbox\bio@picbox\hbox{\hbox to\z@{\vrule\hskip-0.4pt% + \vtop to\bio@picheight{\vskip\z@\hrule width\bio@picwidth + \vfil\hrule}\hskip-0.4pt\vrule\hss}} + \else + \setbox\bio@picbox\hbox{} + \fi + \@tempdima\bio@piclines\baselineskip \advance\@tempdima\bio@lineheight + \dp\bio@picbox\@tempdima + \let\bio@egroup\relax\let\+\ignorespaces\let\@elt\relax + \def\bio@list{}\global\bio@th\z@} + +\def\bio@member#1#2{\bio@egroup\let\bio@egroup\bio@@egroup + \@next\@currbox\@freelist\relax + {\@latexerr{Too many unprocessed floats and biographies}\@ehb}% + \def\@tempa{#2}% + \global\setbox\@currbox\hbox\bgroup + \raise\bio@lineheight\copy\bio@picbox + \vtop\bgroup + \let\par\\ + \hangindent\bio@indent\hangafter-\bio@hangafter + \ifDS@english {\bf #2\ }% + \else {\bf\bio@putauthor#2\+ \@nil}#1{\@@par}\fi\ignorespaces} + +% Author name format: +% S + G < 5 -> fill space between S/G (like SS__G) +% otherwise -> 1 KC space between S/G (like SS_GG) +\def\bio@putauthor#1 #2\@nil{% + \setbox\@tempboxa\hbox{\jintercharskip\z@#1#2}% + \setbox\mkt@boxa\hbox{\jintercharskip1cm#1#2}% + \ifdim\wd\@tempboxa=\wd\mkt@boxa #1 #2\else + \def\@tempa{#2}\ifx\@tempa\empty + {\def\+{}\ipsj@warning{Author name #1 doesn't have a space}}% + % 2.00(3) + #1\else + \@tempdima\@mojihaba + \mkt@getnamewidth\mkt@sname{#1}\mkt@getnamewidth\mkt@gname{#2}% + \advance\mkt@sname\mkt@gname + \ifnum\mkt@sname<5\leavevmode\hbox to5\@mojihaba{#1\hfil#2}\else + #1#2\fi\fi\fi} +\def\bio@@egroup{\@@par\hbox{}\egroup\egroup\@tempdima\dp\@currbox + \ifdim\@tempdima>\textheight + \ipsj@warning{Biography of \@tempa\space is too long}% 2.00(3) + \bio@verbtrue \fi + \advance\@tempdima\baselineskip\global\advance\bio@th\@tempdima + \global\dimen\@currbox\@tempdima \global\count\@currbox\z@ + {\let\protect\bio@protect\xdef\bio@list{\bio@list\@elt\@currbox}}} +\def\bio@adjust#1{\bio@egroup\let\bio@egroup\relax + \ifbio@verb {\let\protect\bio@protect\xdef\bio@list{\bio@list#1}\fi}} +\def\bio@protect{\noexpand\protect\noexpand} + +\def\endbiography{\bio@egroup \@tempswatrue + \ifx\@botlist\@empty\ifx\@deferlist\@empty \@tempswafalse \fi\fi + \ifbio@verb\else\if@tempswa \bio@verbtrue \opt@warning\fi\fi + \ifbio@verb{\let\@elt\bio@putelt \let\protect\relax \bio@list}% + \else\bio@putbio\fi} + +\newdimen\bio@colht \newdimen\bio@splitheight +\newdimen\bio@maxgap \newdimen\bio@lastgap +\newdimen\bio@th \newdimen\bio@lhA \newdimen\bio@hA \newdimen\bio@hB +\newdimen\bio@lh \newdimen\bio@rh +\newdimen\bio@tempdim +\newif\ifbio@awful +\newinsert\bio@pbox \count\bio@pbox\@ne + +\def\bio@putbio{\let\@elt\relax \let\bio@vskip\relax \allowbreak + \bio@colht\@colht \advance\bio@colht-\topskip + \advance\bio@colht\baselineskip + \@tempdima\bio@colht \advance\@tempdima-\@colroom + \advance\@tempdima\pagetotal + \if@firstcolumn + \ifdim\@tempdima>\bio@th + \global\@lastpagebalancingtrue + {\let\@elt\bio@putelt\bio@list}\vskip-\baselineskip + \else + \ifdim\pagetotal=\z@\else + \dimen\bio@pbox\@tempdima \advance\bio@th\@tempdima + \edef\bio@list{\@elt\bio@pbox\bio@list}\fi + \bio@splitheight\bio@colht \bio@splitpage + \bio@splitheight.5\bio@th + \let\bio@awfulput\bio@specialawfulput + \bio@trybalance\fi + \else \advance\@tempdima\bio@th + \ifdim\@tempdima<\bio@colht + \global\@lastpagebalancingtrue + \ifdim\pagetotal=\z@ \global\opt@baselineskip2\baselineskip\fi + {\let\@elt\bio@putelt\bio@list}\vskip-\baselineskip + \else + \let\bio@awfulput\bio@normalawfulput + \bio@splitheight\z@ \advance\@tempdima-\bio@th + \advance\bio@colht-\@tempdima \bio@splitpage + {\let\@elt\bio@putelt\bio@list}\bio@nextpage + \bio@trybalance\fi + \fi} + +\def\bio@trybalance{\bio@split + \let\bio@right\bio@rightA \let\bio@left\bio@leftA + \def\bio@rightx{}\def\bio@leftx{}% + \let\bio@hX\bio@hA \bio@balance + \let\bio@rightxA\bio@rightx \let\bio@leftxA\bio@leftx + \ifbio@awful\@tempcnta\tw@\else\@tempcnta\z@\fi + \let\bio@right\bio@rightB \let\bio@left\bio@leftB + \def\bio@rightx{}\def\bio@leftx{}% + \let\bio@hX\bio@hB \bio@balance + \let\bio@rightxB\bio@rightx \let\bio@leftxB\bio@leftx + \ifbio@awful\advance\@tempcnta\@ne\fi + \ifcase\@tempcnta + \ifdim\bio@hA<\bio@hB \bio@balanceput\bio@leftxA\bio@rightxA + \else \bio@balanceput\bio@leftxB\bio@rightxB\fi + \or \bio@balanceput\bio@leftxA\bio@rightxA + \or \bio@balanceput\bio@leftxB\bio@rightxB + \else \bio@awfulput\fi + \ifx\bio@deferred\empty\vskip-\baselineskip\let\next\relax + \else\bio@nextpage\let\next\bio@trybalance\fi\next} + +\def\bio@split{\def\bio@leftA{}\def\bio@leftB{}% + \def\bio@rightA{}\def\bio@rightB{}% + \bio@lhA\z@\@tempdimb\z@ \bio@isplit} +\def\bio@isplit{\ifx\bio@list\empty\let\next\relax\else + \bio@car\@tempdima\@currbox\bio@list + \bio@lhA\@tempdimb\advance\@tempdimb\@tempdima + \edef\bio@leftB{\bio@leftB\@elt\@currbox}% + \ifdim\@tempdimb>\bio@splitheight + \edef\bio@rightA{\@elt\@currbox\bio@list}% + \let\bio@rightB\bio@list \let\next\relax + \else\edef\bio@leftA{\bio@leftA\@elt\@currbox}\let\next\bio@isplit + \fi\fi\next} + +\def\bio@balanceput#1#2{{\let\@elt\bio@putelt\let\bio@vskip\bio@xvskip + #1\bio@newpage#2}} +\def\bio@normalawfulput{{\let\bio@vskip\@gobble \@tempcnta\z@ + \@tempdima\z@ \bio@addheight\@tempdima\bio@leftxB + \ifdim\@tempdima<\bio@colht + \@tempdima\z@ \bio@addheight\@tempdima\bio@rightxB + \ifdim\@tempdima<\bio@colht \@tempcnta\@ne + \let\@elt\bio@putelt + \bio@leftxB\bio@newpage\bio@rightxB\fi\fi + \ifnum\@tempcnta=\z@ + \@tempdima\z@ \bio@addheight\@tempdima\bio@leftxA + \ifdim\@tempdima<\bio@colht + \@tempdima\z@\bio@addheight\@tempdima\bio@rightxA + \ifdim\@tempdima<\bio@colht \@tempcnta\@ne + \let\@elt\bio@putelt + \bio@leftxA\bio@newpage\bio@rightxA\fi\fi\fi +% The following may be redundant. + \ifnum\@tempcnta=\z@ + \let\@elt\bio@putelt\bio@listsave\fi}} +\def\bio@specialawfulput{{\advance\bio@th-\dimen\bio@pbox + \ifdim\bio@th<\bio@colht\bio@newpage + \let\bio@newpage\relax\fi\bio@normalawfulput}} + +\def\bio@putelt#1{\ifnum\count#1>\z@\else\box#1 + \nobreak\vskip-2\baselineskip\prevdepth\z@\hbox{} + \vskip\baselineskip\fi} +\def\bio@xvskip#1{\vskip#1\prevdepth\z@} +\def\bio@newpage{\vskip-\baselineskip\newpage} + +\def\bio@nextpage{\bio@newpage \let\bio@list\bio@deferred + \bio@th\z@ \bio@addheight\bio@th\bio@list + \bio@colht\@colht \advance\bio@colht-\topskip + \advance\bio@colht\baselineskip + \bio@splitheight\bio@colht \bio@splitpage + \bio@splitheight.5\bio@th + \let\bio@awfulput\bio@normalawfulput} +\def\bio@splitpage{\let\bio@listsave\bio@list \bio@split + \@tempdima\bio@th \advance\@tempdima-\bio@lhA + \ifdim\@tempdima>\bio@colht + \let\bio@leftAsave\bio@leftA \bio@th\bio@lhA + \let\bio@list\bio@rightA \bio@splitheight\bio@colht + \bio@split \edef\bio@list{\bio@leftAsave\bio@leftA}% + \advance\bio@th\bio@lhA + \let\bio@deferred\bio@rightA + \else\def\bio@deferred{}\let\bio@list\bio@listsave\fi} + +% \bio@tolerablegap: maximum tolerable gap between adjacent bio's. +% \bio@tolerablestretch:maximum stretch of a column. + +\@tempdima10\baselineskip % This might be changed +\edef\bio@tolerablegap{\the\@tempdima} +\@tempdima15\baselineskip +\edef\bio@tolerablelastgap{\the\@tempdima} +\def\bio@tolerablestretch{2} % This might be changed + +\def\bio@balance{\let\@elt\relax \edef\bio@bstack{% + \@elt{{\bio@left}{\bio@right}{}{}{0pt}}} + \bio@xbalance} +\def\bio@xbalance{% + \expandafter\bio@popstack\bio@bstack\@nil + \let\bio@nextA\bio@xbalance \@tempdima\z@ + \ifx\bio@left\empty \ifx\bio@right\empty + \let\bio@nextA\bio@balanceend + \else + \bio@addheight\@tempdima\bio@right + \edef\bio@leftx{\bio@leftx\bio@vskip{\the\@tempdima}}% + \advance\bio@hX\@tempdima + \edef\bio@rightx{\bio@rightx\bio@right}\def\bio@right{}% + \bio@pushstack \fi\else + \ifx\bio@right\empty + \bio@addheight\@tempdima\bio@left + \edef\bio@rightx{\bio@rightx\bio@vskip{\the\@tempdima}}% + \advance\bio@hX\@tempdima + \edef\bio@leftx{\bio@leftx\bio@left}\def\bio@left{}% + \bio@pushstack \else + \bio@car\@tempdima\bio@leftbox\bio@left + \bio@car\@tempdimb\bio@rightbox\bio@right + \edef\bio@leftx{\bio@leftx\@elt\bio@leftbox}% + \edef\bio@rightx{\bio@rightx\@elt\bio@rightbox}% + \ifdim\@tempdima>\@tempdimb + \advance\bio@hX\@tempdima + \let\bio@da\@tempdima\let\bio@db\@tempdimb + \bio@ibalance\bio@left\bio@right\bio@leftx\bio@rightx + \else \advance\bio@hX\@tempdimb + \let\bio@da\@tempdimb\let\bio@db\@tempdima + \bio@ibalance\bio@right\bio@left\bio@rightx\bio@leftx\fi + \fi\fi\bio@nextA} +\def\bio@ibalance#1#2#3#4{\let\bio@nextB\relax + \ifx#2\empty + \advance\bio@da-\bio@db + \edef#4{#4\bio@vskip{\the\bio@da}}\bio@pushstack\else + \bio@car\bio@tempdim\@currbox#2 \advance\bio@db\bio@tempdim + \ifdim\bio@da<\bio@db + \advance\bio@db-\bio@da + \let\@tempa#3\edef#3{#3\bio@vskip{\the\bio@db}}% + \let\@tempb#4\edef#4{#4\@elt\@currbox}% + \advance\bio@hX\bio@db \bio@pushstack + \advance\bio@hX-\bio@db + \edef#2{\@elt\@currbox#2}% + \advance\bio@tempdim-\bio@db + \let#3\@tempa \edef#4{\@tempb\bio@vskip{\the\bio@tempdim}}% + \bio@pushstack + \else \edef#4{#4\@elt\@currbox}\def\bio@nextB{\bio@ibalance#1#2#3#4}% + \fi\fi\bio@nextB} +\def\bio@balanceend{\bio@awfulfalse \def\bio@bstack{}% + \bio@maxgap\z@ \bio@lastgap\z@ + \bio@checkgap\bio@leftx \bio@checkgap\bio@rightx + \ifdim\bio@maxgap>\bio@tolerablegap\relax\bio@awfultrue\fi + \ifdim\bio@lastgap>\bio@tolerablelastgap\relax\bio@awfultrue\fi + \ifdim\bio@hX>\bio@tolerablestretch\bio@splitheight\bio@awfultrue\fi + \ifdim\bio@hX>\bio@colht\bio@awfultrue\fi} +\def\bio@checkgap#1{{\@tempdima\z@ \@tempdimb\z@ \bio@tempdim\z@ + \let\@elt\bio@cgelt \let\bio@vskip\bio@cgvskip #1\relax + \ifdim\@tempdima>\bio@maxgap \global\bio@maxgap\@tempdima \fi + \ifdim\bio@tempdim>\bio@lastgap \global\bio@lastgap\bio@tempdim \fi}} +\def\bio@cgvskip#1{\advance\bio@tempdim#1\relax + \ifdim\bio@tempdim>\@tempdimb \@tempdimb\bio@tempdim\fi} +\def\bio@cgelt#1{\@tempdima\@tempdimb \bio@tempdim\z@} +\def\bio@popstack\@elt#1#2\@nil{\edef\bio@bstack{#2}\bio@ipopstack#1} +\def\bio@ipopstack#1#2#3#4#5{\def\bio@left{#1}\def\bio@right{#2}% + \def\bio@leftx{#3}\def\bio@rightx{#4}\bio@hX#5\relax} +\def\bio@pushstack{\def\bio@bstackx{}% + \expandafter\bio@ipushstack\bio@bstack\@elt\@nil} +\def\bio@ipushstack\@elt#1{\def\@tempc{#1}% + \ifx\@tempc\@nnil \edef\bio@bstack{\bio@bstackx\bio@stackelt}% + \let\bio@nextC\relax \else + \bio@iipushstack#1\fi\bio@nextC} +\def\bio@iipushstack#1#2#3#4#5{\ifdim#5>\bio@hX + \edef\bio@bstackx{\bio@bstackx\bio@stackelt + \@elt{{#1}{#2}{#3}{#4}{#5}}}% + \let\bio@nextC\bio@pushstackend\else + \edef\bio@bstackx{\bio@bstackx + \@elt{{#1}{#2}{#3}{#4}{#5}}}% + \let\bio@nextC\bio@ipushstack\fi} +\def\bio@pushstackend#1\@elt\@nil{\edef\bio@bstack{\bio@bstackx#1}} +\def\bio@stackelt{\@elt{{\bio@left}{\bio@right}{\bio@leftx}{\bio@rightx}% + {\the\bio@hX}}} +\def\bio@addheight#1#2{\def\@elt##1{\advance#1\dimen##1}#2\let\@elt\relax} +\def\bio@car#1#2#3{\expandafter\bio@icar#3\@nil#1#2#3} +\def\bio@icar\@elt#1#2\@nil#3#4#5{#3=\dimen#1\relax\def#4{#1}\def#5{#2}} + + +%%%%%% Miscellaneous %%%%%% + +\flushbottom + +\ifDS@english +\hbadness9999 \tolerance9999 +\else +\hbadness5000 \tolerance5000 +\pretolerance\m@ne +\fi + +\input{ipsjcommon.sty} + +\twocolumn + +\endinput diff -r 000000000000 -r d40dd97c0a50 ipsjsort.bst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsjsort.bst Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,1340 @@ +% ipsjsort.bst nakasima@kuis.kyoto-u.ac.jp (Hiroshi Nakashima) +% jssst.bst tomura@etl.go.jp (Satoru Tomura) +% BibTeX standard bibliography style `jplain' + % version 0.10 for JBibTeX versions 0.10 or later, JLaTeX version 2.09. + % by Shouichi Matsui, matsui@denken.junet + +ENTRY + { address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + yomi + } + {} + { label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +INTEGERS { before.year } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'before.year := % year doesn't follows "," nor ".". (H.N.) +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state before.year = +% year doesn't follows "," nor ".". (H.N.) + { " " * write$ } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {required.argument} +{ 't := + empty$ + {"Missing required argument " t * " in " * cite$ * warning$} + 'skip$ + if$ +} + +FUNCTION {required.exclusive.or.argument} +{ 't := + empty$ + { 's := + empty$ + { t " or " * s * " is missing in " * cite$ * warning$} + 'skip$ + if$ + } + { 's := + empty$ + 'skip$ + { "You can use only one of " t * " and " * s * " in " * cite$ * warning$} + if$ + } + if$ +} + +FUNCTION {required.and.or.argument} +{ 't := empty$ + { 's := empty$ + { "there's no " t * " and/or " * s * cite$ * warning$ } + 'skip$ + if$ + } + { pop$ pop$ } + if$ +} + +FUNCTION {optional.series.volume.number.argument} +{ series empty$ + { volume empty$ + { number empty$ + 'skip$ + { "there's a number but no series in " cite$ * warning$ } + if$ + } + { number empty$ + { "there's a volume but no series in " cite$ * warning$ } + { "you can use only one of volume and number in " cite$ * warning$} + if$ + } + if$ + } + { volume empty$ + { number empty$ + { "there's a series but neither volume nor number in " cite$ * warning$ } + 'skip$ + if$ + } + { number empty$ + 'skip$ + { "you can use only one of volume and number in " cite$ * warning$ } + if$ + } + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + before.all 'output.state := +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {is.kanji} +%%%{ #1 text.prefix$ chr.to.int$ #127 > } +%%%{ #1 #1 substring$ chr.to.int$ #127 > } +%%%{ purify$ #1 text.prefix$ chr.to.int$ #127 >} +{ is.kanji.str$ } + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { duplicate$ is.kanji + 'skip$ + { "{\em " swap$ * "\/}" * } + if$ + } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + s nameptr "{ll}" format.name$ is.kanji + { "{ff}{vv}{ll}" } + { "{vv }{ll}{, jj}{, f.}" } + if$ + format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { +% numnames #2 > +% { "," * } +% 'skip$ +% if$ +% Don't put "," before "and" (H.N.) +% +% numnames #3 < +% { t is.kanji +% {"," * "" *} 'skip$ if$ +% } +% 'skip$ +% if$ +% Don't put "," before "$B$[$+(B" (H.N.) +% + t "others" = + { s is.kanji + {"$B$[$+(B" * } + {" et al." * } + if$ + } + { s is.kanji +% {" " * t * } + {", " * t * } % put "," here for Kanji (H.N.) + {" and " * t * } + if$ + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { editor is.kanji + {"($BJT(B)" * } %%{", editors" * } if$ + {"(eds.)" *} if$ + } + { editor is.kanji + {"($BJT(B)" *} %%{", editor" * } if$ + {"(ed.)" *} if$ + } + if$ + } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ before.year 'output.state := % year doesn't follows "," nor ".". (H.N.) + year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ +% month % no worth to put month only. (H.N.) + "" + } + if$ + } +% { month empty$ +% 'year +% { month " " * year * } +% if$ +% } +% month is not printed even if it is given. (H.N.) +% + { "(" year ")" * * } % year is surrounded by parens. (H.N.) + if$ +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { "\ " } + if$ + swap$ * * +} + +FUNCTION {output.volume} +{ + volume empty$ + 'skip$ + { "Vol.~" volume * output} + if$ + +} + +FUNCTION {output.number} +{ + number empty$ + 'skip$ + { "No.~" number * output} + if$ +} + +FUNCTION {output.series.volume.number} +{ series empty$ + { output.volume + output.number } + { series is.kanji + volume empty$ + number empty$ + or + and + { series " " * volume * number * output} + { series output + output.volume + output.number} + if$ + } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check +% { "pp.~" pages n.dashify tie.or.space.connect } +% { "pp.~" pages tie.or.space.connect } +% '~' might be add by tie.or.space.connect. (H.N.) +% "p." is probably better for single page reference (H.N.) + { "pp." pages n.dashify tie.or.space.connect } + { "p." pages tie.or.space.connect } + if$ + } + if$ +} + +% This function is replaced by format.vol.num.pages (H.N.) +%FUNCTION {format.volume.number.year.pages} +%{ volume empty$ +% { number empty$ +% { year empty$ +% { "" } +% { "(" year * ")" * } +% if$} +% { year empty$ +% { "No.~" number * } +% { "No.~" number * "(" * year * ")" * } +% if$} +% if$} +% { number empty$ +% { year empty$ +% { "Vol.~" volume * } +% { "Vol.~" volume * "(" * year * ")" * } +% if$} +% { year empty$ +% {"Vol.~" volume * "," * "No.~" * number * } +% {"Vol.~" volume * "," * "No.~" * number * "(" * year * ")" * } +% if$} +% if$} +% if$ +% pages empty$ +% 'skip$ +% { duplicate$ empty$ +% { pop$ format.pages } +% { "," * " pp.~" * pages n.dashify * } +% if$ +% } +% if$ +%} + +FUNCTION {format.vol.num.pages} +{ volume empty$ + { ""} + { " Vol.~" volume * } + if$ + number empty$ + 'skip$ + { volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + { "," *} + if$ + " No.~" number * * + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ", " * format.pages * } +% tieing "pp." and the first page will be too hard for a narrow column. (H.N.) + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" chapter tie.or.space.connect } + { type is.kanji + { chapter type tie.or.space.connect } + { type "l" change.case$ chapter tie.or.space.connect } + if$ + } + if$ + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { booktitle is.kanji + { " " booktitle emphasize * } + { " " booktitle emphasize * } + if$ + } + { booktitle is.kanji +% { booktitle emphasize "(" * format.editors * ")" *} +% { booktitle emphasize "(" * format.editors * ")" *} +% awful without leading space (H.N.) + { booktitle emphasize " (" * format.editors * ")" *} + { booktitle emphasize " (" * format.editors * ")" *} + if$ + } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { title empty$ + { "Technical Report" } + { title is.kanji + { "$B5;=QJs9p(B" } + { "Technical Report" } + if$ + } + if$ + } + {type} + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { "In " journal emphasize * } + if$ + } + { "In " key * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.crossref.editor} +{ editor #1 "{vv }{ll}" format.name$ + editor num.names$ duplicate$ + #2 > + { editor is.kanji + {pop$ " $B$[$+(B" *} {pop$ " et al." * } if$ + } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { editor is.kanji + {" $B$[$+(B" *} {"et al." * } if$ + } + { editor is.kanji + {" " * editor #2 "{vv }{ll}" format.name$ * } + {" and " * editor #2 "{vv }{ll}" format.name$ * } + if$ + } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + title is.kanji + {" "} {"In "} if$ + } + { "Volume" volume tie.or.space.connect + " of " * + } + if$ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" * + } + { series emphasize } + if$ + } + { key * } + if$ + } + { format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.incoll.inproc.crossref} +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { booktitle is.kanji + booktitle + {"In " booktitle emphasize * } + if$ + } + if$ + } + { "In " key * } + if$ + } + { title is.kanji + {" " format.crossref.editor * } + {"In " format.crossref.editor * } + if$ + } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {article} +{ +%%%% + author "author" required.argument + title "title" required.argument + journal "journal" required.argument + year "year" required.argument +%%%% jssst + volume "volume" + number "number" + required.and.or.argument + pages "pages" required.argument +%%%% + output.bibitem + format.authors ": " * + title output + crossref missing$ + { journal emphasize output +% format.volume.number.year.pages output +% date is always at the end. (H.N.) + format.vol.num.pages output + format.date output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {book} +{ +%%%% + author "author" + editor "editor" + required.exclusive.or.argument + title "title" required.argument + publisher "publisher" required.argument + year "year" required.argument + optional.series.volume.number.argument +%%%% + output.bibitem + author empty$ + { format.editors} + { format.authors} + if$ + ": " * + title emphasize output + crossref missing$ + { output.series.volume.number + publisher output + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ +%%%% + title "title" required.argument +%%%% jssst + author "author" required.argument +%%%% + output.bibitem + format.authors ": " * + title output + howpublished output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ +%%%% + author "author" + editor "editor" + required.exclusive.or.argument + title "title" required.argument + chapter "chapter" + pages "pages" + required.and.or.argument + publisher "publisher" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% + output.bibitem + author empty$ + { format.editors} + { format.authors} + if$ + ": " * + title emphasize output + crossref missing$ + { output.series.volume.number + publisher output + } + { format.chapter.pages output + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output +% format.date output + format.chapter.pages output + format.date output % date is always at the end. (H.N.) + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ +%%%% + author "author" required.argument + title "title" required.argument + booktitle "booktitle" required.argument + publisher "publisher" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% + output.bibitem + format.authors ": " * + title output + crossref missing$ + { format.in.ed.booktitle output + output.series.volume.number + publisher output + address output + format.edition output + format.chapter.pages output % date is always at the end. (H.N.) + format.date output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ +% format.chapter.pages output + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ +%%%% + author "author" required.argument + title "title" required.argument + booktitle "booktitle" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% + output.bibitem + format.authors ": " * + title output + crossref missing$ + { format.in.ed.booktitle output + output.series.volume.number + address output + organization output + publisher output +% format.date output + format.pages output + format.date output % date is always at the end. (H.N.) + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ +%%%% + title "title" required.argument +%%%% jssst + author "author" + organization "organazaion" + required.exclusive.or.argument +%%%% + output.bibitem + author empty$ + { organization} + { format.authors} + if$ + ": " * + title emphasize output + author empty$ + 'skip$ + { organization output } + if$ + address output + format.edition output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ +%%%% + author "author" required.argument + title "title" required.argument + school "school" required.argument + year "year" required.argument +%%%% + output.bibitem + format.authors ": " * + title output + author empty$ + { "Master's thesis" } + { author is.kanji + { "$B=$;NO@J8(B" } + { "Master's thesis" } + if$ + } + if$ + format.thesis.type output.nonnull + school output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ +%%%% +%%%% jssst + author "author" required.argument + title "title" required.argument +%%%% + output.bibitem + format.authors + ": " * + title output + howpublished output + format.date output + new.block + note output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ +%%%% + author "author" required.argument + title "title" required.argument + school "school" required.argument + year "year" required.argument +%%%% + output.bibitem + format.authors ": " * + title emphasize output + author empty$ + { "PhD Thesis" } + { author is.kanji + { "$BGn;NO@J8(B" } + { "PhD Thesis" } + if$ + } + if$ + format.thesis.type output.nonnull + school output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ +%%%% + title "title" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% jssst + editor "editor" + organization "organization" + required.exclusive.or.argument +%%%% + output.bibitem + editor empty$ + { organization } + { format.editors } + if$ + ": " * + title emphasize output + output.series.volume.number + address output + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ +%%%% + author "author" required.argument + title "title" required.argument + institution "institution" required.argument + year "year" required.argument +%%%% + output.bibitem + format.authors ": " * + title output + format.tr.number output.nonnull + institution output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ +%%%% + author "author" required.argument + title "title" required.argument + note "note" required.argument +%%%% + output.bibitem + format.authors ": " * + title output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {sort.format.names} +{ 's := + yomi empty$ + 'skip$ + { yomi 's := } + if$ + + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label } + +INTEGERS { number.label longest.label.width } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.longest.label} + +ITERATE {longest.label.pass} + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} + + diff -r 000000000000 -r d40dd97c0a50 ipsjunsrt.bst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsjunsrt.bst Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,1190 @@ +% ipsjsort.bst nakasima@kuis.kyoto-u.ac.jp (Hiroshi Nakashima) +% jssst.bst tomura@etl.go.jp (Satoru Tomura) +% BibTeX standard bibliography style `jplain' + % version 0.10 for JBibTeX versions 0.10 or later, JLaTeX version 2.09. + % by Shouichi Matsui, matsui@denken.junet + +ENTRY + { address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + yomi + } + {} + { label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +INTEGERS { before.year } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'before.year := % year doesn't follows "," nor ".". (H.N.) +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state before.year = +% year doesn't follows "," nor ".". (H.N.) + { " " * write$ } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {required.argument} +{ 't := + empty$ + {"Missing required argument " t * " in " * cite$ * warning$} + 'skip$ + if$ +} + +FUNCTION {required.exclusive.or.argument} +{ 't := + empty$ + { 's := + empty$ + { t " or " * s * " is missing in " * cite$ * warning$} + 'skip$ + if$ + } + { 's := + empty$ + 'skip$ + { "You can use only one of " t * " and " * s * " in " * cite$ * warning$} + if$ + } + if$ +} + +FUNCTION {required.and.or.argument} +{ 't := empty$ + { 's := empty$ + { "there's no " t * " and/or " * s * cite$ * warning$ } + 'skip$ + if$ + } + { pop$ pop$ } + if$ +} + +FUNCTION {optional.series.volume.number.argument} +{ series empty$ + { volume empty$ + { number empty$ + 'skip$ + { "there's a number but no series in " cite$ * warning$ } + if$ + } + { number empty$ + { "there's a volume but no series in " cite$ * warning$ } + { "you can use only one of volume and number in " cite$ * warning$} + if$ + } + if$ + } + { volume empty$ + { number empty$ + { "there's a series but neither volume nor number in " cite$ * warning$ } + 'skip$ + if$ + } + { number empty$ + 'skip$ + { "you can use only one of volume and number in " cite$ * warning$ } + if$ + } + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + before.all 'output.state := +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {is.kanji} +%%%{ #1 text.prefix$ chr.to.int$ #127 > } +%%%{ #1 #1 substring$ chr.to.int$ #127 > } +%%%{ purify$ #1 text.prefix$ chr.to.int$ #127 >} +{ is.kanji.str$ } + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { duplicate$ is.kanji + 'skip$ + { "{\em " swap$ * "\/}" * } + if$ + } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + s nameptr "{ll}" format.name$ is.kanji + { "{ff}{vv}{ll}" } + { "{vv }{ll}{, jj}{, f.}" } + if$ + format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { +% numnames #2 > +% { "," * } +% 'skip$ +% if$ +% Don't put "," before "and" (H.N.) +% +% numnames #3 < +% { t is.kanji +% {"," * "" *} 'skip$ if$ +% } +% 'skip$ +% if$ +% Don't put "," before "$B$[$+(B" (H.N.) +% + t "others" = + { s is.kanji + {"$B$[$+(B" * } + {" et al." * } + if$ + } + { s is.kanji +% {" " * t * } + {", " * t * } % put "," here for Kanji (H.N.) + {" and " * t * } + if$ + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { editor is.kanji + {"($BJT(B)" * } %%{", editors" * } if$ + {"(eds.)" *} if$ + } + { editor is.kanji + {"($BJT(B)" *} %%{", editor" * } if$ + {"(ed.)" *} if$ + } + if$ + } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ before.year 'output.state := % year doesn't follows "," nor ".". (H.N.) + year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ +% month % no worth to put month only. (H.N.) + "" + } + if$ + } +% { month empty$ +% 'year +% { month " " * year * } +% if$ +% } +% month is not printed even if it is given. (H.N.) +% + { "(" year ")" * * } % year is surrounded by parens. (H.N.) + if$ +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { "\ " } + if$ + swap$ * * +} + +FUNCTION {output.volume} +{ + volume empty$ + 'skip$ + { "Vol.~" volume * output} + if$ + +} + +FUNCTION {output.number} +{ + number empty$ + 'skip$ + { "No.~" number * output} + if$ +} + +FUNCTION {output.series.volume.number} +{ series empty$ + { output.volume + output.number } + { series is.kanji + volume empty$ + number empty$ + or + and + { series " " * volume * number * output} + { series output + output.volume + output.number} + if$ + } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check +% { "pp.~" pages n.dashify tie.or.space.connect } +% { "pp.~" pages tie.or.space.connect } +% '~' might be add by tie.or.space.connect. (H.N.) +% "p." is probably better for single page reference (H.N.) + { "pp." pages n.dashify tie.or.space.connect } + { "p." pages tie.or.space.connect } + if$ + } + if$ +} + +% This function is replaced by format.vol.num.pages (H.N.) +%FUNCTION {format.volume.number.year.pages} +%{ volume empty$ +% { number empty$ +% { year empty$ +% { "" } +% { "(" year * ")" * } +% if$} +% { year empty$ +% { "No.~" number * } +% { "No.~" number * "(" * year * ")" * } +% if$} +% if$} +% { number empty$ +% { year empty$ +% { "Vol.~" volume * } +% { "Vol.~" volume * "(" * year * ")" * } +% if$} +% { year empty$ +% {"Vol.~" volume * "," * "No.~" * number * } +% {"Vol.~" volume * "," * "No.~" * number * "(" * year * ")" * } +% if$} +% if$} +% if$ +% pages empty$ +% 'skip$ +% { duplicate$ empty$ +% { pop$ format.pages } +% { "," * " pp.~" * pages n.dashify * } +% if$ +% } +% if$ +%} + +FUNCTION {format.vol.num.pages} +{ volume empty$ + { ""} + { " Vol.~" volume * } + if$ + number empty$ + 'skip$ + { volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + { "," *} + if$ + " No.~" number * * + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ", " * format.pages * } +% tieing "pp." and the first page will be too hard for a narrow column. (H.N.) + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" chapter tie.or.space.connect } + { type is.kanji + { chapter type tie.or.space.connect } + { type "l" change.case$ chapter tie.or.space.connect } + if$ + } + if$ + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { booktitle is.kanji + { " " booktitle emphasize * } + { " " booktitle emphasize * } + if$ + } + { booktitle is.kanji +% { booktitle emphasize "(" * format.editors * ")" *} +% { booktitle emphasize "(" * format.editors * ")" *} +% awful without leading space (H.N.) + { booktitle emphasize " (" * format.editors * ")" *} + { booktitle emphasize " (" * format.editors * ")" *} + if$ + } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { title empty$ + { "Technical Report" } + { title is.kanji + { "$B5;=QJs9p(B" } + { "Technical Report" } + if$ + } + if$ + } + {type} + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { "In " journal emphasize * } + if$ + } + { "In " key * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.crossref.editor} +{ editor #1 "{vv }{ll}" format.name$ + editor num.names$ duplicate$ + #2 > + { editor is.kanji + {pop$ " $B$[$+(B" *} {pop$ " et al." * } if$ + } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { editor is.kanji + {" $B$[$+(B" *} {"et al." * } if$ + } + { editor is.kanji + {" " * editor #2 "{vv }{ll}" format.name$ * } + {" and " * editor #2 "{vv }{ll}" format.name$ * } + if$ + } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + title is.kanji + {" "} {"In "} if$ + } + { "Volume" volume tie.or.space.connect + " of " * + } + if$ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" * + } + { series emphasize } + if$ + } + { key * } + if$ + } + { format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.incoll.inproc.crossref} +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { booktitle is.kanji + booktitle + {"In " booktitle emphasize * } + if$ + } + if$ + } + { "In " key * } + if$ + } + { title is.kanji + {" " format.crossref.editor * } + {"In " format.crossref.editor * } + if$ + } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {article} +{ +%%%% + author "author" required.argument + title "title" required.argument + journal "journal" required.argument + year "year" required.argument +%%%% jssst + volume "volume" + number "number" + required.and.or.argument + pages "pages" required.argument +%%%% + output.bibitem + format.authors ": " * + title output + crossref missing$ + { journal emphasize output +% format.volume.number.year.pages output +% date is always at the end. (H.N.) + format.vol.num.pages output + format.date output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {book} +{ +%%%% + author "author" + editor "editor" + required.exclusive.or.argument + title "title" required.argument + publisher "publisher" required.argument + year "year" required.argument + optional.series.volume.number.argument +%%%% + output.bibitem + author empty$ + { format.editors} + { format.authors} + if$ + ": " * + title emphasize output + crossref missing$ + { output.series.volume.number + publisher output + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ +%%%% + title "title" required.argument +%%%% jssst + author "author" required.argument +%%%% + output.bibitem + format.authors ": " * + title output + howpublished output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ +%%%% + author "author" + editor "editor" + required.exclusive.or.argument + title "title" required.argument + chapter "chapter" + pages "pages" + required.and.or.argument + publisher "publisher" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% + output.bibitem + author empty$ + { format.editors} + { format.authors} + if$ + ": " * + title emphasize output + crossref missing$ + { output.series.volume.number + publisher output + } + { format.chapter.pages output + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output +% format.date output + format.chapter.pages output + format.date output % date is always at the end. (H.N.) + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ +%%%% + author "author" required.argument + title "title" required.argument + booktitle "booktitle" required.argument + publisher "publisher" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% + output.bibitem + format.authors ": " * + title output + crossref missing$ + { format.in.ed.booktitle output + output.series.volume.number + publisher output + address output + format.edition output + format.chapter.pages output % date is always at the end. (H.N.) + format.date output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ +% format.chapter.pages output + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ +%%%% + author "author" required.argument + title "title" required.argument + booktitle "booktitle" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% + output.bibitem + format.authors ": " * + title output + crossref missing$ + { format.in.ed.booktitle output + output.series.volume.number + address output + organization output + publisher output +% format.date output + format.pages output + format.date output % date is always at the end. (H.N.) + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ +%%%% + title "title" required.argument +%%%% jssst + author "author" + organization "organazaion" + required.exclusive.or.argument +%%%% + output.bibitem + author empty$ + { organization} + { format.authors} + if$ + ": " * + title emphasize output + author empty$ + 'skip$ + { organization output } + if$ + address output + format.edition output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ +%%%% + author "author" required.argument + title "title" required.argument + school "school" required.argument + year "year" required.argument +%%%% + output.bibitem + format.authors ": " * + title output + author empty$ + { "Master's thesis" } + { author is.kanji + { "$B=$;NO@J8(B" } + { "Master's thesis" } + if$ + } + if$ + format.thesis.type output.nonnull + school output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ +%%%% +%%%% jssst + author "author" required.argument + title "title" required.argument +%%%% + output.bibitem + format.authors + ": " * + title output + howpublished output + format.date output + new.block + note output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ +%%%% + author "author" required.argument + title "title" required.argument + school "school" required.argument + year "year" required.argument +%%%% + output.bibitem + format.authors ": " * + title emphasize output + author empty$ + { "PhD Thesis" } + { author is.kanji + { "$BGn;NO@J8(B" } + { "PhD Thesis" } + if$ + } + if$ + format.thesis.type output.nonnull + school output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ +%%%% + title "title" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% jssst + editor "editor" + organization "organization" + required.exclusive.or.argument +%%%% + output.bibitem + editor empty$ + { organization } + { format.editors } + if$ + ": " * + title emphasize output + output.series.volume.number + address output + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ +%%%% + author "author" required.argument + title "title" required.argument + institution "institution" required.argument + year "year" required.argument +%%%% + output.bibitem + format.authors ": " * + title output + format.tr.number output.nonnull + institution output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ +%%%% + author "author" required.argument + title "title" required.argument + note "note" required.argument +%%%% + output.bibitem + format.authors ": " * + title output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + +STRINGS { longest.label } + +INTEGERS { number.label longest.label.width } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.longest.label} + +ITERATE {longest.label.pass} + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} + + diff -r 000000000000 -r d40dd97c0a50 manycore.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/manycore.tex Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,48 @@ +\section{Many Core 上のプログムの特徴} +従来の逐次型のプログラムでは、Cell といった Many Core の性能を +十分に引き出すことは出来ない。 + +\subsection{定常的な並列度の必要性} +並列実行には Amdahl 則 \cite{amdahl} があり、 +プログラムの並列化率が低ければ、その性能を生かすことは出来ない。 +0.8 程度の並列化では、6 CPU でも +3 倍程度の性能向上しか得られない (\figref{fig-amdahl}) 。 + +\begin{figure}[tb] + \begin{center} + \includegraphics[scale=0.56]{figure/amdahl.pdf} + \caption{Amdahl 則} + \label{fig-amdahl} + \end{center} +\end{figure} + +高い並列度ではなくとも、恒常的に並列度を維持する必要がある。 +このため、逐次型のプログラムの一部を並列化するという手法では不十分である。 +LSI などのハードウェアの場合は、演算の対象がもともと +多量の演算とデータパスを持つので、並列計算の効果を +定常的に得られることが多い。しかし、C 等で記述されたプログラムでは、 +for 文や配列のアクセス等に並列性が隠されてしまい、それを引き出すことが難しい。 + +プログラム中の並列度は、主に二つの形で取り出すことが出来る。 + +\begin{itemize} + \item データ並列 : + 配列や木の中の個々の要素に対して並列に実行する + \item パイプライン処理 : + 複数の逐次処理の隣同士を重ねて実行する +\end{itemize} + +この二つを同時に用いることで、定常的な並列度を維持することが +可能となることがある。パイプライン処理は、 +プログラム中で階層的に使われることが多い。 + +データ並列とパイプライン処理を可能にするためには、 +プログラムとデータの適切な分割を行う必要がある。 +for 文、あるいは、木をだとって処理する個々のステートメントがプログラムの +分割の対象となる。 + +\subsection{デバッグ  } +並列プログラムの特徴として、デバッグが難しいことも挙げられる。 +実行が非決定的(同じ状態で実行しても同じ結果が異なる)場合があり、 +バグの状態を再現することが難しい。 +また、個々の Core 上のデータを調べる必要もある。 diff -r 000000000000 -r d40dd97c0a50 task_manager.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/task_manager.tex Mon Jul 14 00:27:51 2008 +0900 @@ -0,0 +1,231 @@ +\section{Task Manager} \label{sec:tm} +Task Manager は、Task と呼ばれる分割された各プログラムを管理する。 +Task の単位はサブルーチンまたは関数とし、Task 同士の依存関係を考慮しながら +実行していく。 + +現在実装されている Task Manager の API を \tabref{tab:tm-api} に示す。 + +\begin{table}[htbp] + \caption{Task Manager API} \label{tab:tm-api} + \hbox to\hsize{\hfil + \begin{tabular}{c|l} \hline \hline + create\_task & Task を生成する \\ \hline + add\_inData & Task への入力データのアドレスを追加 \\ \hline + add\_outData & Task からのデータ出力先アドレスを追加 \\ \hline + add\_param & Task のパラメータ (32 bits) \\ \hline + wait\_for & Task の依存関係の考慮 \\\hline + set\_cpu & Task を実行する CPU の設定 \\ \hline + spawn & Task を実行 Task Queue に登録する \\ \hline + run & 実行 Task Queue の実行 \\ \hline + \end{tabular}\hfil} +\end{table} + +以下に Task Manager を使った記述例を示す。 + +{\small +\begin{verbatim} + +char sendStr[STRSIZE] = "Hello, World"; + +int +main(void) +{ + TaskManager *manager; + Task *task; + int length = sizeof(char)*STRSIZE; + + /** + * Constructor + * @param CPU_NUM: 使用する CPU の数 + */ + manager = new TaskManager(CPUNUM); + + // TASK_RUN = TaskRun::run に対応する ID + task = create_task(TASK_RUN); + + /** + * タスクの入出力データの設定 + * @param[1]: address of data + * @param[2]: size of data + */ + task->add_inData(sendStr,length); + task->add_outData(sendStr,length); + + task->spawn(); + + printf("before: %s\n", sendStr); + + manager->run(); + + printf("after : %s\n", sendStr); + + return 0; +} + +TaskRun::run(void *rbuf, void *wbuf) +{ + // add_inData で指定したアドレスのデータを取得 + // recvStr = "Hello, World" + char *recvStr = (char*)get_input(rbuf, 0); + + // fixStr にあるデータが、 + // Task 終了後、add_outData で指定した + // sendStr に書き込まれる + char *fixStr = (char*)get_input(wbuf, 0); + + strcpy(fixStr, recvStr); + fixStr[0] = 'D'; + fixStr[3] = 'E'; +} + +// 実行結果 +before: Hello, World +after: DelEo, World + +\end{verbatim} +} + +\subsection{Task の定義} \label{sec:tm-task} +タスクの定義を以下に示す。 + +{\small +\begin{verbatim} + +class Task { +public: + int command; + ListData inListData; // list of input data + ListData outListData; // list of output area + Task* self; + int param_size; + int param[3]; +}; + +class HTask : public Task { +public: + // List of task waiting for me + TaskQueuePtr wait_me; + // List of task for which I am waiting + TaskQueuePtr wait_i; + + CPU_TYPE cpu_type; +}; + +\end{verbatim} +} + +Task クラスは、各 Core が実行するタスクの単位オブジェクトである。 +各 Core は inListData にあるアドレス(メインメモリ)からデータを取得し、 +command に対応するコードを実行し、結果を outListData にあるアドレスに送信する。 +これらの処理はパイプラインに沿って動作する (sec:\ref{sec:tm-scheduler})。 +各 Core には Task の集合である TaskList を送る。 + +HTas クラスは、TaskManager で管理する実行前のタスクオブジェクトである。 +wait\_me, wait\_i はタスク依存の条件 (sec:\ref{sec:tm-depend}) に、 +cpu\_type は実行する CPU の切り替え (sec:\ref{sec:tm-cpu}) に用いる。 + +\subsection{スケジューラ} \label{sec:tm-scheduler} +TaskManager のスケジューラを以下に示す。 + +\begin{verbatim} + +SchedTaskBase *task1, *task2, *task3; + +do { + task3->write(); + task2->exec(); + task1->read(); + + taskTmp = task3; + task3 = task2; + task2 = task1; + task1 = task1->next(taskTmp); +} while (task1); + +\end{verbatim} + +TaskList にある Task が全て終了し、メインスレッドから +終了のメッセージを受け取ったら、while 文を抜ける。 + +SchedTaskBase クラスは、スケジューラによって実行されるオブジェクトである。 +スケジューラ自身のタスクとして、以下のようなタスクがある。 +これらのオブジェクトは全て SchedTaskBase を継承している。 + +\begin{itemize} +\item SchedMail: メインスレッドからのメッセージを取得する +\item SchedTaskList: TaskList を取得する +\item SchedTask: Task を実行する +\item SchedExit: Core の実行を終了する +\item SchedNop: 何も行わない +\end{itemize} + +ユーザがタスクを記述する場合、SchedTask を継承し、exec() 内の run() に +タスクの処理を記述する。 + +\subsection{タスク依存} \label{sec:tm-depend} +Task Manager はタスク依存を解決する機能を持っている。 +以下は記述例である。 + +\begin{verbatim} + +// task2 は task1 が終了してから開始する +task2->wait_for(task1); + +\end{verbatim} + +タスク依存が満たされたタスクを ActiveQueueに入れる。 +各 Core は ActiveQueue から処理するコードとデータを取得し、 +自律的に実行する。終了したタスクはメインスレッドへ終了のコマンドを +発行紙、メインスレッドはそれを見て WaitQueue のタスクを調べ、 +タスク依存を満たしたタスクを ActiveQueue に入れる。 + +\subsection{タスクを実行させる Core の選択} \label{sec:tm-cpu} +TaskManager の \verb|set_cpu()| により、タスクを +どの Core で実行するか選択する事が出来る。 + +\begin{verbatim} + +// Core 1 で実行する +task->set_cpu(CPU_1); + +// どの Core で実行してもいい +task->set_cpu(CPU_ANY); + +\end{verbatim} + +メインスレッド内でもタスクを実行する事が可能なため、これを用いる事により、 +環境依存によるプログラム変換はタスクの部分だけとなり、全体の変換は必要ない。 + +このことはデバッグにおいても有効であると言える。 +デバッグが困難な並列プログラムの前に、まずはメインスレッド単体で動く +シーケンシャルプログラムを記述する。 +仕様やアルゴリズムの正しさを確認できたら、\verb|set_cpu| により +各 Core へタスクを渡し、並列プログラムへ移行する。 +デバッグに関する詳細は第 \ref{sec:debug} 節で述べる。 + +\subsection{メインスレッドと各 Core 間との同期} +メインスレッドと各 Core 間では、32 ビットメッセージの +交換により同期を行っている。これは Cell の機能の一つである、 +Mailbox を元に実装した。 + +Mailbox とは SPE の MFC 内の FIFO キューであり、 +PPE と SPE 間の 32 ビットメッセージの交換に用いられる \cite{mailbox} 。 +通常、スレッド間で待ち合わせを行うと処理が止まってしまい、 +並列度が下がってしまうことがあるが、Mailbox は +メッセージ交換なので待ち合わせを避けることが可能である。 + +\figref{fig:sync} は、Cerium における +PPE-SPE 間のメッセージのやりとりを表している。 +メインスレッドでは、各 SPE の起動と終了、そしてタスクの管理を行っている。 +そして Outbound Mailbox (SPE $\rightarrow$ PPE メッセージ) を見て、 +その内容に対応する処理を PPE 上で行う。 +対処した結果を Inbound Mailbox (PPE $\rightarrow$ SPE メッセージ) で伝え、 +受け取った SPE はタスクを再実行する。 + +\begin{figure}[tb] + \begin{center} + \includegraphics[scale=0.353]{figure/sync.pdf} + \caption{PPE, SPE threads} + \label{fig:sync} + \end{center} +\end{figure}