#!/bin/sh

# mktree.sh
# construit l'arbre de Stern-Brocot
# usage : 
# sh mktree.sh nombre_niveaux
#
# exemple :
# sh mktree.sh
# acroread sbtree.pdf&

degre=$[$1 + 1]
nom=sbtree

cat <<"EOF" > $nom.tex
\documentclass[11pt,a4]{article}
\usepackage{epic,eepic}
\usepackage{ecltree}
\usepackage{times}
\usepackage{amssymb,amsfonts,amsxtra,eucal,multicol,indentfirst}
\usepackage[latin1]{inputenc}
\usepackage[francais]{babel}
\usepackage[dvips]{graphicx}
\pagestyle{empty}
\voffset -0.9in
\hoffset -1in
\begin{document}

\begin{figure}[h]
\begin{center}
\hspace*{0cm}
EOF

echo ""|gawk -v deg=$degre '
function farey(t, n, p,q,r, i, j) {
  p=1
  for(i=0;i<n;i++)
    p=2*p
  t[0, 0]=0; t[0, 1]=1;
  t[p, 0]=1; t[p, 1]=0;
  q=p
  r=1
  for(i=0;i<n;i++) {
    q /= 2;
    for(j=0;j<r;j++) {
      u = (2*j+1)*q
      t[u, 0] = t[u-q, 0]+ t[u+q, 0]
      t[u, 1] = t[u-q, 1]+ t[u+q, 1]
    }
    r *=2
  }
}
function tree(t, k, r) {
   print "\\begin{bundle}{$\\frac{" t[k, 0]"}{"t[k, 1]"}$}"
   if(r>=3) {
     print "\\chunk{"
     tree(t, k-r, r/2)
     print "}"
     print "\\chunk{"
     tree(t, k+r, r/2)
     print "}"
   }else if(r==2) {
     print "\\chunk{$\\frac{"t[k-r, 0]"}{"t[k-r, 1]"}$} \\chunk{$\\frac{"t[k+r, 0]"}{"t[k+r, 1]"}$}"
   }
   print "\\end{bundle}"
}

END {
  if(deg=="") deg=5
  p=1
  for(i=0;i<deg-2;i++) p *=2
  farey(t, deg)
  tree(t,2*p,p)
}' >> $nom.tex

#echo ""|gawk -v deg=$1 -f mktree.awk >> $nom.tex

cat <<"EOF" >> $nom.tex
\caption{\label{SternBrocot}{\it Arbre de Stern-Brocot}}
\end{center}
\end{figure}

\end{document}
EOF

latex $nom.tex
dvips -Pcmz $nom.dvi -o
ps2pdf $nom.ps
