\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX)
[1994/12/01]% LaTeX date must December 1994 or later
\ProvidesClass{texHash}[2006/10/06]

%% Hash TeX macros
\def\DLRTUMP#1@{}
\def\hashLRTCrack '#1'=>"#2",#3@{\expandafter\gdef\csname \XSH#1\endcsname{#2}%
\def\yLRTy{#3}%
\ifx\yLRTy\empty \let\next=\DLRTUMP\else%
\let\next=\hashLRTCrack\fi%
\expandafter\next\yLRTy @}
%: \xxsh
\def\xxsh#1#2@{\gdef\XSH{#2}}

%: \optionalDefaults
\newcommand{\optionalDefaults}[1][]{\def\xLRTx{#1}\ifx\xLRTx\empty\else
\expandafter\gdef\csname \XSH PerlHash\endcsname{#1@}\edef\YSH{\XSH}%
\expandafter\resetNameSpace{\YSH}\fi}
%
%: \newhashcommand
\newcommand{\newhashcommand}[3][HASH]{%
\def\xLRTx{#1}\def\XLRTX{HASH}%
\ifx\xLRTx\XLRTX\xdef\xsh{\string#2@}\expandafter\xxsh\xsh\else\xdef\XSH{#1}\fi%
\expandafter\gdef\csname \XSH code\endcsname{#3}%
\newcommand{#2}[1]{%
\def\xLRTx{#1}\def\XLRTX{HASH}%
\ifx\xLRTx\XLRTX\xdef\xsh{\string#2@}\expandafter\xxsh\xsh\else\xdef\XSH{#1}\fi%
\def\yLRTy{##1}%
\ifx\yLRTy\empty\else\expandafter\hashLRTCrack\yLRTy @\fi#3}\optionalDefaults}

%: \renewhashcommand
\newcommand{\renewhashcommand}[3][HASH]{%
\def\xLRTx{#1}\def\XLRTX{HASH}%
\ifx\xLRTx\XLRTX\xdef\xsh{\string#2@}\expandafter\xxsh\xsh\else\xdef\XSH{#1}\fi%
\expandafter\gdef\csname \XSH code\endcsname{#3}%
\renewcommand{#2}[1]{%
\def\xLRTx{#1}\def\XLRTX{HASH}%
\ifx\xLRTx\XLRTX\xdef\xsh{\string#2@}\expandafter\xxsh\xsh\else\xdef\XSH{#1}\fi%
\def\yLRTy{##1}%
\ifx\yLRTy\empty\else\expandafter\hashLRTCrack\yLRTy@\fi#3}\optionalDefaults}


%: \defaultNameSpace
\def\defaultNameSpace#1#2{\expandafter\gdef\csname #1PerlHash\endcsname{#2@}%
\expandafter\resetNameSpace{#1}}
 
\def\HashLRTCrack#1{\expandafter\hashLRTCrack#1}

%: \resetNameSpace
\def\resetNameSpace#1{\gdef\XSH{#1}%
\expandafter\HashLRTCrack\csname #1PerlHash\endcsname%
}

%: \fieldValue
\newcommand{\fieldValue}[2]{\csname #1#2\endcsname}

