home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / go / prog / golatex.taz / golatex / Go_sty / go.sty
Encoding:
Text File  |  1991-11-27  |  9.5 KB  |  282 lines

  1. %%%%%%%%%%%%%%%%%%%%%%%% go.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. %
  3. %  written by Hanna Kolodziejska (version 0.05 : November 1991)
  4. %
  5. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  6. \catcode`@=11
  7.  
  8. \newbox\@gobox \newdimen\@godimen
  9.  
  10. \def\gofontsize#1{
  11.     \font\gofont=go#1 at #1truept
  12.     \font\blackfontOne=go1bla#1 at #1truept
  13.     \font\blackfontTwo=go2bla#1 at #1truept
  14.     \font\whitefontOne=go1whi#1 at #1truept
  15.     \font\whitefontTwo=go2whi#1 at #1truept
  16.     \ifnum #1=10 \font\letterfont=cmr10 at 10truept\else        %%% <--- ???
  17.         \ifnum #1=15 \font\letterfont=cmr10 at 14.4truept\else  %%% <--- ???
  18.         \ifnum #1=20 \font\letterfont=cmr10 at 17.28truept\fi\fi\fi
  19.     \setbox\@gobox=\hbox{\gofont\char0}
  20.     \@godimen=\wd\@gobox
  21.     }
  22.  
  23. \gofontsize{10} % initialization <---
  24.  
  25. \def\newgoline{\hfill\break}
  26. \def\hoshi{\gofont\char0}
  27. \def\empty{\gofont\char1}
  28. \def\lftborder{\gofont\char2}
  29. \def\rtborder{\gofont\char3}
  30. \def\topborder{\gofont\char4}
  31. \def\botborder{\gofont\char5}
  32. \def\lfttopcorner{\gofont\char6}
  33. \def\rttopcorner{\gofont\char7}
  34. \def\lftbotcorner{\gofont\char8}
  35. \def\rtbotcorner{\gofont\char9}
  36. \def\triangle{\whitefontTwo\char127}  %%%
  37. \def\square{\whitefontTwo\char126}    %%%
  38.  
  39.  
  40. \newcount\n
  41. \newcount\@beglet \newcount\@endlet
  42. \newcount\@lettercount
  43.  
  44. \def\@letternumber#1{\relax
  45.     \ifx #1a\@lettercount=1\else
  46.     \ifx #1b\@lettercount=2\else
  47.     \ifx #1c\@lettercount=3\else
  48.     \ifx #1d\@lettercount=4\else
  49.     \ifx #1e\@lettercount=5\else
  50.     \ifx #1f\@lettercount=6\else
  51.     \ifx #1g\@lettercount=7\else
  52.     \ifx #1h\@lettercount=8\else
  53.     \ifx #1i\@lettercount=9\else
  54.     \ifx #1k\@lettercount=10\else
  55.     \ifx #1l\@lettercount=11\else
  56.     \ifx #1m\@lettercount=12\else
  57.     \ifx #1n\@lettercount=13\else
  58.     \ifx #1o\@lettercount=14\else
  59.     \ifx #1p\@lettercount=15\else
  60.     \ifx #1q\@lettercount=16\else
  61.     \ifx #1r\@lettercount=17\else
  62.     \ifx #1s\@lettercount=18\else
  63.     \ifx #1t\@lettercount=19\else
  64.        \errmessage{Row label must be letter!}
  65.     \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
  66.     \fi\fi\fi\fi\fi\fi\fi\fi\fi
  67.     }
  68.  
  69.  
  70. \def\inidiagram#1-#2:#3-#4 {\relax
  71.     \ifnum #3>#4 \errmessage{Invalid column numbers!} \fi
  72.     \@letternumber{#1} \@beglet=\@lettercount
  73.     \@letternumber{#2} \@endlet=\@lettercount
  74.     \def\@inirow##1##2{{\n=#3
  75.       \loop
  76.        \expandafter\let\csname @##1\romannumeral\n \endcsname=0\relax
  77.        \edef\@@inirow{\global
  78.             \def\csname @##1\romannumeral\n \endcsname{##2}}\@@inirow
  79.        \ifnum \n<#4 \advance \n by 1
  80.       \repeat
  81.       }}\relax
  82.     \loop
  83.       \ifcase\@beglet\relax\or
  84.       \@inirow{a}{\topborder}\relax
  85.         \ifnum #3=1 \global\def\@ai{\lfttopcorner}\fi
  86.         \ifnum #4=19 \global\def\@axix{\rttopcorner}\fi \or
  87.       \@inirow{b}{\empty}\relax
  88.         \ifnum #3=1 \global\def\@bi{\lftborder}\fi
  89.         \ifnum #4=19 \global\def\@bxix{\rtborder}\fi \or
  90.       \@inirow{c}{\empty}\relax
  91.         \ifnum #3=1 \global\def\@ci{\lftborder}\fi
  92.         \ifnum #4=19 \global\def\@cxix{\rtborder}\fi \or
  93.       \@inirow{d}{\empty}\relax
  94.         \ifnum #3=1 \global\def\@di{\lftborder}\fi
  95.         \ifnum #3<5  \ifnum #4>3  \global\def\@div{\hoshi}\fi\fi
  96.         \ifnum #3<11 \ifnum #4>9  \global\def\@dx{\hoshi}\fi\fi
  97.         \ifnum #3<17 \ifnum #4>15 \global\def\@dxvi{\hoshi}\fi\fi
  98.         \ifnum #4=19 \global\def\@dxix{\rtborder}\fi \or
  99.       \@inirow{e}{\empty}
  100.         \ifnum #3=1 \global\def\@ei{\lftborder}\fi
  101.         \ifnum #4=19 \global\def\@exix{\rtborder}\fi \or
  102.       \@inirow{f}{\empty}
  103.         \ifnum #3=1 \global\def\@fi{\lftborder}\fi
  104.         \ifnum #4=19 \global\def\@fxix{\rtborder}\fi \or
  105.       \@inirow{g}{\empty}
  106.         \ifnum #3=1 \global\def\@gi{\lftborder}\fi
  107.         \ifnum #4=19 \global\def\@gxix{\rtborder}\fi \or
  108.       \@inirow{h}{\empty}
  109.         \ifnum #3=1 \global\def\@hi{\lftborder}\fi
  110.         \ifnum #4=19 \global\def\@hxix{\rtborder}\fi \or
  111.       \@inirow{i}{\empty}
  112.         \ifnum #3=1 \global\def\@ii{\lftborder}\fi
  113.         \ifnum #4=19 \global\def\@ixix{\rtborder}\fi \or
  114.       \@inirow{k}{\empty}
  115.         \ifnum #3=1 \global\def\@ki{\lftborder}\fi
  116.         \ifnum #3<5  \ifnum #4>3  \global\def\@kiv{\hoshi}\fi\fi
  117.         \ifnum #3<11 \ifnum #4>9  \global\def\@kx{\hoshi}\fi\fi
  118.         \ifnum #3<17 \ifnum #4>15 \global\def\@kxvi{\hoshi}\fi\fi
  119.         \ifnum #4=19 \global\def\@kxix{\rtborder}\fi \or
  120.       \@inirow{l}{\empty}
  121.         \ifnum #3=1 \global\def\@li{\lftborder}\fi
  122.         \ifnum #4=19 \global\def\@lxix{\rtborder}\fi \or
  123.       \@inirow{m}{\empty}
  124.         \ifnum #3=1 \global\def\@mi{\lftborder}\fi
  125.         \ifnum #4=19 \global\def\@mxix{\rtborder}\fi \or
  126.       \@inirow{n}{\empty}
  127.         \ifnum #3=1 \global\def\@ni{\lftborder}\fi
  128.         \ifnum #4=19 \global\def\@nxix{\rtborder}\fi \or
  129.       \@inirow{o}{\empty}
  130.         \ifnum #3=1 \global\def\@oi{\lftborder}\fi
  131.         \ifnum #4=19 \global\def\@oxix{\rtborder}\fi \or
  132.       \@inirow{p}{\empty}
  133.         \ifnum #3=1 \global\def\@pi{\lftborder}\fi
  134.         \ifnum #4=19 \global\def\@pxix{\rtborder}\fi \or
  135.       \@inirow{q}{\empty}
  136.         \ifnum #3=1 \global\def\@qi{\lftborder}\fi
  137.         \ifnum #3<5  \ifnum #4>3  \global\def\@qiv{\hoshi}\fi\fi
  138.         \ifnum #3<11 \ifnum #4>9  \global\def\@qx{\hoshi}\fi\fi
  139.         \ifnum #3<17 \ifnum #4>15 \global\def\@qxvi{\hoshi}\fi\fi
  140.         \ifnum #4=19 \global\def\@qxix{\rtborder}\fi \or
  141.       \@inirow{r}{\empty}
  142.         \ifnum #3=1 \global\def\@ri{\lftborder}\fi
  143.         \ifnum #4=19 \global\def\@rxix{\rtborder}\fi \or
  144.       \@inirow{s}{\empty}
  145.         \ifnum #3=1 \global\def\@si{\lftborder}\fi
  146.         \ifnum #4=19 \global\def\@sxix{\rtborder}\fi \or
  147.       \@inirow{t}{\botborder}
  148.         \ifnum #3=1 \global\def\@ti{\lftbotcorner}\fi
  149.         \ifnum #4=19 \global\def\@txix{\rtbotcorner}\fi
  150.       \fi
  151.       \ifnum \@beglet<\@endlet \advance \@beglet by 1
  152.     \repeat
  153.     }
  154.  
  155. \def\inifulldiagram{\inidiagram a-t:1-19 }
  156.  
  157. \inifulldiagram % initialization
  158.  
  159.  
  160. \def\showdiagram#1-#2:#3-#4 {\vbox{\offinterlineskip\noindent
  161.     \ifnum #3>#4 \errmessage{Invalid column numbers!} \fi
  162.     \hsize=\@godimen
  163.     \n=#4\advance\n by-#3\advance\n by1
  164.     \multiply\hsize by\n
  165.     \@letternumber{#1} \@beglet=\@lettercount
  166.     \@letternumber{#2} \@endlet=\@lettercount
  167.     \def\@showrow##1{{\n=#3
  168.       \loop
  169.         \edef\@@showrow{\csname @##1\romannumeral\n \endcsname}\@@showrow
  170.         \ifnum \n<#4 \advance \n by 1
  171.       \repeat
  172.       }}\relax
  173.     \loop
  174.       \ifcase\@beglet\relax\or
  175.         \@showrow{a}\or
  176.         \@showrow{b}\or
  177.         \@showrow{c}\or
  178.         \@showrow{d}\or
  179.         \@showrow{e}\or
  180.         \@showrow{f}\or
  181.         \@showrow{g}\or
  182.         \@showrow{h}\or
  183.         \@showrow{i}\or
  184.         \@showrow{k}\or
  185.         \@showrow{l}\or
  186.         \@showrow{m}\or
  187.         \@showrow{n}\or
  188.         \@showrow{o}\or
  189.         \@showrow{p}\or
  190.         \@showrow{q}\or
  191.         \@showrow{r}\or
  192.         \@showrow{s}\or
  193.         \@showrow{t}
  194.       \fi
  195.       \ifnum \@beglet<\@endlet
  196.         \newgoline \advance \@beglet by 1
  197.     \repeat
  198.     }}
  199.  
  200. \def\showfulldiagram{\showdiagram a-t:1-19 }
  201.  
  202. \def\pos#1#2=#3#4{\relax
  203.     \ifcat #1a\relax \else \errmessage{Row label must be a letter!}\fi
  204.     \ifnum #2<1 \errmessage{Column number less than 1?}\fi
  205.     \ifnum #2>19 \errmessage{Column number greater than 19?}\fi
  206.     \edef\@fourth{#4}\relax
  207.     \ifx .#4\ifx #3\empty\edef\@fourth{}\else \edef\@fourth{0}\fi\fi
  208.     \edef\@borders{\relax
  209.         \ifx #1a \ifnum #2=1  \gofont\char15 \else
  210.                  \ifnum #2=19 \gofont\char16 \else
  211.                  \gofont\char13 \fi\fi
  212.         \else
  213.         \ifx #1t \ifnum #2=1  \gofont\char17 \else
  214.                  \ifnum #2=19 \gofont\char18 \else
  215.                  \gofont\char14 \fi\fi
  216.         \else
  217.         \ifnum #2=1 \gofont\char11
  218.         \else
  219.         \ifnum #2=19 \gofont\char12
  220.         \else
  221.         \gofont\char10
  222.         \fi\fi\fi\fi}\relax
  223.     \expandafter\let\csname @#1\romannumeral#2\endcsname=0\relax
  224.     \edef\@pos{\def\csname @#1\romannumeral#2\endcsname{#3{\@fourth}}}\@pos
  225.     \ignorespaces
  226.     }
  227.  
  228.  
  229. \newcount\nr
  230.  
  231. \def\black#1{\relax
  232.     \ifx \triangle#1{\let\whitefontTwo=\blackfontTwo
  233.                      \rlap{\triangle}\@borders}\else
  234.     \ifx \square#1{\let\whitefontTwo=\blackfontTwo
  235.                      \rlap{\square}\@borders}\else
  236.     \ifnum #1<0 \errmessage{Negative Black's move?}\else
  237.     \ifnum #1>253 \errmessage{Black's move too big!}\else
  238.     \ifnum #1<128 {\blackfontOne\rlap{\char#1}\@borders}\else
  239.         \nr=#1
  240.         \advance \nr by -128
  241.         {\blackfontTwo\rlap{\char\nr}\@borders}\ignorespaces
  242.     \fi\fi\fi\fi\fi}
  243.  
  244. \def\white#1{\relax
  245.     \ifx \triangle#1{\rlap{\triangle}\@borders}\else
  246.     \ifx \square#1{\rlap{\square}\@borders}\else
  247.     \ifnum #1<0 \errmessage{Negative White's move?}\else
  248.     \ifnum #1>253 \errmessage{White's move too big!}\else
  249.     \ifnum #1<128 {\whitefontOne\rlap{\char#1}\@borders}\else
  250.        \nr=#1
  251.        \advance \nr by -128
  252.        {\whitefontTwo\rlap{\char\nr}\@borders}\ignorespaces
  253.     \fi\fi\fi\fi\fi}
  254.  
  255. \def\textblack#1{\def\@borders{\hskip\wd\@gobox}\relax
  256.     \ifx .#1\lower.2\wd\@gobox\hbox{\black{0}}\else
  257.       \lower.2\wd\@gobox\hbox{\black{#1}}\fi}
  258.  
  259. \def\textwhite#1{\def\@borders{\hskip\wd\@gobox}\relax
  260.     \ifx .#1\lower.2\wd\@gobox\hbox{\white{0}}\else
  261.       \lower.2\wd\@gobox\hbox{\white{#1}}\fi}
  262.  
  263.  
  264. \newbox\@letterbox \newdimen\@letterdim
  265.  
  266. \def\symbol#1{\relax
  267.     \ifcat a#1\relax\else
  268.     \ifcat 0#1\relax\else
  269.        \errmessage{Strange parameter of symbol macro! (#1)}
  270.     \fi\fi
  271.     \setbox\@letterbox=\hbox to\wd\@gobox{\hfil\letterfont #1\hfil}\relax
  272.     \@letterdim=\wd\@gobox
  273.     \divide \@letterdim by 24
  274.     \multiply \@letterdim by 22
  275.     \advance \@letterdim by -\ht\@letterbox
  276.     {\raise.5\@letterdim\box\@letterbox}\relax
  277.     }
  278.  
  279. \let\letter=\symbol
  280.  
  281. \catcode`@=12
  282.