 % This file is public domain

 % This is an interactive script. Run it through \LaTeX
 % and enter appropriate responses. (This won't work with
 % LaTeX2HTML)

\documentclass[a4paper]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{etoolbox}

\usepackage[french,english,spanish,portuges,ngerman,italian]{babel}
\usepackage{fmtcount}

\newcounter{startval}
\newcounter{endval}
\newcounter{stepsize}
\newcounter{N}
\newcount\myctr
\newcount\langid

\newcommand*{\deflangopt}[2][\relax]{%
 \csdef{setlang#2}{\langid=#2#1}%
}
\newcommand*{\uselangopt}[1]{\csuse{setlang#1}}
\deflangopt{1}
\deflangopt{2}
\deflangopt{3}
\deflangopt[\fmtcountsetoptions{french}]{4}
\deflangopt[\fmtcountsetoptions{french=swiss}]{5}
\deflangopt[\fmtcountsetoptions{french=belgian}]{6}
\deflangopt{7}
\deflangopt{8}

\newcommand*{\defformat}[1]{%
  \csdef{setformat#1}{\numformat=#1\relax}%
}
\newcommand*{\useformat}[1]{\csuse{setformat#1}}

\newcommand*{\setformat}{\numformat=1\relax}

\defformat{1}
\defformat{2}
\defformat{3}
\defformat{4}
\defformat{5}
\defformat{6}

\newcommand*{\defgender}[2]{%
  \csdef{setgender#1}{\myctr=#2\relax}%
}
\newcommand*{\usegender}[1]{\csuse{setgender#1}}

\defgender{}{1}
\defgender{m}{1}
\defgender{f}{2}
\defgender{n}{3}

\begin{document}

\section{Displaying the value of a counter}

\typeout{This is an interactive script, testing the fmtcount package.}

\langid=-1

\loop
  \typeout{Which language?^^J}
  \typeout{[1] English}
  \typeout{[2] Portuguese}
  \typeout{[3] Spanish}
  \typeout{[4] French}
  \typeout{[5] French (Swiss)}
  \typeout{[6] French (Belgium)}
  \typeout{[7] German}
  \typeout{[8] Italian}

  \typein[\response]{}

  \ifcsundef{setlang\response}%
  {%
    \typeout{Invalid response '\response', please select a number from 1 to 8}%
    \langid=-1\relax
  }%
  {\uselangopt{\response}}

\ifnum\langid=-1
\repeat

\ifcase\langid
\or \selectlanguage{english}
Current language: English.
\or \selectlanguage{portuges}
Current language: Portuguese.
\or \selectlanguage{spanish}
Current language: Spanish.
\or \selectlanguage{french}
Current language: French.
\or \selectlanguage{french}
Current language: French (Swiss).
\or \selectlanguage{french}
Current language: French (Belgium).
\or \selectlanguage{ngerman}
Current language: German.
\or \selectlanguage{italian}
Current language: Italian.
\fi

\def\startval{-1}

\loop
 \typein[\startval]{Start value? (Integer from 0 to 99999) [Default 1]}
 \ifdefempty{\startval}{\def\startval{1}}{}
 \ifnum\startval<0\def\startval{-1}\fi
 \ifnum\startval>99999\def\startval{-1}\fi

\ifnum\startval=-1
\repeat

\def\endval{-1}

\loop
  \typein[\endval]{End value? (Integer from 0 to 99999) [Default 1000]}
  \ifdefempty{\endval}{\def\endval{1000}}{}
  \ifnum\endval<0\def\endval{-1}\fi
  \ifnum\endval>99999\def\endval{-1}\fi
\ifnum\endval=-1
\repeat

\def\stepsize{0}

\loop
 \typein[\stepsize]{Step size? (Non zero integer) [Default 1]}
 \ifdefempty{\stepsize}{\def\stepsize{1}}{}
\ifnum\stepsize=0
\repeat

\typeout{From {\startval} to {\endval} step {\stepsize}}

\ifnum\startval<\endval\relax
 \ifnum\stepsize<0\relax
  \PackageError{fc-lang}{Infinite loop not permitted!}{}
  \def\endval{\startval}
 \fi
\fi

\ifnum\startval>\endval\relax
 \ifnum\stepsize>0\relax
  \PackageError{fc-lang}{Infinite loop not permitted!}{}
  \def\endval{\startval}
 \fi
\fi

\newcount\numformat

\numformat=-1
\loop
  \typeout{Which format?^^J}
  \typeout{[1] ordinalstring}
  \typeout{[2] Ordinalstring}
  \typeout{[3] ORDINALstring}
  \typeout{[4] numberstring}
  \typeout{[5] Numberstring}
  \typeout{[6] NUMBERstring}

  \typein[\response]{Default: 1}

  \ifcsundef{setformat\response}%
  {%
    \numformat=-1\relax
    \typeout{Invalid response '\response', please select a number from 1 to 6}%
  }%
  {%
    \useformat\response
  }

\ifnum\numformat=-1
\repeat

\ifcase\numformat
\or\def\stringtype{ordinalstring}
\or\def\stringtype{Ordinalstring}
\or\def\stringtype{ORDINALstring}
\or\def\stringtype{numberstring}
\or\def\stringtype{Numberstring}
\or\def\stringtype{NUMBERstring}
\fi

\ifnum\langid>3\relax
  \ifnum\langid<7\relax
  \myctr=-1\relax
  \loop
    \typeout{Ordinal type?^^J}
    \typeout{[1] eme}
    \typeout{[2] e}
    \typein[\response]{Default: 1}
    \ifdefempty{\response}%
      {%
        \def\response{1}% default
        \myctr=1\relax
      }%
      {%
        \ifdefstring{\response}{1}%
        {%
          \fmtcountsetoptions{abbrv=false}\myctr=1\relax
        }%
        {%
          \ifdefstring{\response}{2}%
          {%
            \fmtcountsetoptions{abbrv}\myctr=2\relax
          }%
          {%
            \myctr=-1\relax
            \typeout{Invalid response '\response', please select a
number from 1 to 2}%
          }%
        }%
      }%
    \ifnum\myctr=-1
  \repeat
  \fi
\fi

\myctr=-1
\loop
  \typeout{Ordinal format?^^J}
  \typeout{[1] raised}
  \typeout{[2] level}
  \typein[\response]{Default: 1}
  \ifdefempty{\response}{\def\response{1}}{}%

  \ifdefstring{\response}{1}
  {%
    \fmtcountsetoptions{fmtord=raise}\myctr=1\relax
  }%
  {%
    \ifdefstring{\response}{2}
    {%
       \fmtcountsetoptions{fmtord=level}\myctr=2\relax
    }%
    {%
       \myctr=-1\relax
       \typeout{Invalid response '\response', please select a
       number from 1 to 2}%
    }%
  }

\ifnum\myctr=-1
\repeat

\ifnum\langid=1\relax
 \myctr=1\relax
\else

 \ifboolexpr
 {
   test {\ifnumequal{\langid}{7}}
   and
   test {\ifnumgreater{\numformat}{3}} 
 }%
 {%
   \loop
     \ifnum\langid=7\relax
       \typein[\response]{Gender? (m, f or n) [Default: m]}
       \ifcsundef{setgender\response}%
       {%
         \typeout{Invalid response '\response', please select a
          number from 1 to 3}%
          \myctr=-1\relax
       }%
       {\usegender\response}
     \else
       \typein[\response]{Gender? (m or f) [Default: m]}
       \ifcsundef{setgender\response}%
       {%
         \typeout{Invalid response '\response', please select a
          number from 1 to 2}%
          \myctr=-1\relax
       }%
       {%
         \ifdefstring{\response}{3}
         {%
           \typeout{Invalid response '\response', please select a
            number from 1 to 2}%
            \myctr=-1\relax
         }
         {%
           \usegender\response
         }
       }
     \fi
   \ifnum\myctr=-1
   \repeat
 }%
 {%
 }

\fi

\ifcase\myctr
\or \def\gender{m}
\or \def\gender{f}
\or \def\gender{n}
\fi

\ifnum\langid=7
\ifnum\startval>99
\myctr=-1
\loop
\typeout{einhundert/eintausend or hundert/tausend?^^J}
\typeout{[1] einhundert/eintausend}
\typeout{[2] hundert/tausend}
\typein[\response]{Default: 1}
\ifthenelse{\equal{\response}{}}{\def\response{1}}{}%default
\ifthenelse{\equal{\response}{1}}{%
\renewcommand{\einhundert}{einhundert}
\renewcommand{\eintausend}{eintausend}
\myctr=1}{%
\ifthenelse{\equal{\response}{2}}{%
\renewcommand{\einhundert}{hundert}
\renewcommand{\eintausend}{tausend}
\myctr=2}{%
\myctr=-1}}
\ifnum\myctr=-1
\repeat
\fi
\fi

\setcounter{startval}{\startval}
\setcounter{endval}{\endval}
\setcounter{stepsize}{\stepsize}

\stepcounter{endval}
\begin{ttfamily}
\noindent
\makebox[0.25in][c]{N}
\makebox[0.5in][c]{ordinal}\quad
\stringtype
\par
\myctr=\value{startval}
\loop
\noindent
\setcounter{N}{\myctr}
\makebox[0.25in][r]{\arabic{N}}
\makebox[0.5in][r]{\ordinal{N}[\gender]}\quad
\csname\stringtype\endcsname{N}[\gender].
\par
\advance\myctr by \value{stepsize}\relax
\ifnum\myctr<\value{endval}
\repeat

\end{ttfamily}

\end{document}
