%%
%% This is file `flags.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% flags.dtx  (with options: `package')
%% 
%% This is a generated file.
%% 
%% Project: flags
%% Version: 2007/09/30 v0.4
%% 
%% Copyright (C) 2007 by
%%    Heiko Oberdiek <heiko.oberdiek at googlemail.com>
%% 
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.3c of this license or (at your option) any later
%% version. This version of this license is in
%%    http://www.latex-project.org/lppl/lppl-1-3c.txt
%% and the latest version of this license is in
%%    http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of
%% LaTeX version 2005/12/01 or later.
%% 
%% This work has the LPPL maintenance status "maintained".
%% 
%% This Current Maintainer of this work is Heiko Oberdiek.
%% 
%% This work consists of the main source file flags.dtx
%% and the derived files
%%    flags.sty, flags.pdf, flags.ins, flags.drv.
%% 
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{flags}%
  [2007/09/30 v0.4 Setting/clearing of flags in bit fields (HO)]%
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname numexpr\endcsname\relax
  \PackageError{flags}{%
    Missing e-TeX, package loading aborted%
  }{%
    This packages makes heavy use of \string\numexpr.%
  }%
  \expandafter\endinput
\fi
\newcommand*{\resetflags}[1]{%
  \expandafter\let\csname flags@#1\endcsname\@empty
}
\newcommand*{\printflags}[1]{%
  \expandafter\@printflags\csname flags@#1\endcsname
}
\def\@printflags#1{%
  \expandafter\@firstofone\expandafter{%
    \number\numexpr
    \ifx#1\@empty
      0%
    \else
      \expandafter\@@printflags#1%
    \fi
  }%
}
\def\@@printflags#1#2\fi{%
  \fi
  #1%
  \ifx\\#2\\%
  \else
    +2*\numexpr\expandafter\@@printflags#2%
  \fi
}
\newcommand*{\setflag}[2]{%
  \ifnum#2>\z@
    \expandafter\@setflag\csname flags@#1\expandafter\endcsname
      \expandafter{\romannumeral\number\numexpr#2-1\relax000}%
  \else
    \PackageError{flags}{Position must be a positive number}\@ehc
  \fi
}
\def\@setflag#1#2{%
  \ifx#1\relax
    \let#1\@empty
  \fi
  \edef#1{%
    \expandafter\@@setflag\expandafter{#1}{#2}%
  }%
}
\def\@@setflag#1#2{%
  \ifx\\#1\\%
    \FLAGS@zero#2\relax
    1%
  \else
    \ifx\\#2\\%
      1\@gobble#1%
    \else
      \@@@setflag#1|#2%
    \fi
  \fi
}
\def\@@@setflag#1#2|#3#4\fi\fi{%
  \fi\fi
  #1%
  \@@setflag{#2}{#4}%
}
\newcommand*{\clearflag}[2]{%
  \ifnum#2>\z@
    \expandafter\@clearflag\csname flags@#1\expandafter\endcsname
      \expandafter{\romannumeral\number\numexpr#2-1\relax000}%
  \else
    \PackageError{flags}{Position must be a positive number}\@ehc
  \fi
}
\def\@clearflag#1#2{%
  \ifx#1\relax
    \let#1\@empty
  \fi
  \edef#1{%
    \expandafter\@@clearflag\expandafter{#1}{#2}%
  }%
}
\def\@@clearflag#1#2{%
  \ifx\\#1\\%
  \else
    \ifx\\#2\\%
      0\@gobble#1%
    \else
      \@@@clearflag#1|#2%
    \fi
  \fi
}
\def\@@@clearflag#1#2|#3#4\fi\fi{%
  \fi\fi
  #1%
  \@@clearflag{#2}{#4}%
}
\def\FLAGS@zero#1{%
  \ifx#1\relax
  \else
    0%
    \expandafter\FLAGS@zero
  \fi
}
\newcommand*{\queryflag}[2]{%
  \ifnum\extractflag{#1}{#2}=\@ne
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\newcommand*{\extractflag}[1]{%
  \expandafter\@extractflag\csname flags@#1\endcsname
}
\def\@extractflag#1#2{%
  \ifx#1\@undefined
    0%
  \else
    \ifx#1\relax
      0%
    \else
      \ifx#1\@empty
        0%
      \else
        \expandafter\expandafter\expandafter\@@extractflag
        \expandafter\expandafter\expandafter{%
        \expandafter#1\expandafter
        }\expandafter{%
          \romannumeral\number\numexpr#2-1\relax000%
        }%
      \fi
    \fi
  \fi
}
\def\@@extractflag#1#2{%
  \ifx\\#1\\%
    0%
  \else
    \ifx\\#2\\%
      \@car#1\@nil
    \else
      \@@@extractflag#1|#2%
    \fi
  \fi
}
\def\@@@extractflag#1#2|#3#4\fi\fi{%
  \fi\fi
  \@@extractflag{#2}{#4}%
}
\endinput
%%
%% End of file `flags.sty'.
