summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/bitpattern
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-12-11 23:13:48 +0000
committerKarl Berry <karl@freefriends.org>2015-12-11 23:13:48 +0000
commit4a0b9f7c69aace39f648a5a8af5acbb34a1dd43b (patch)
tree3efa2f9e7b6b2b95fcdee95b3347e9812899f9be /Master/texmf-dist/tex/latex/bitpattern
parent8120af3162b7c99b12c88c5c65dd549f02667029 (diff)
bitpattern (11dec15)
git-svn-id: svn://tug.org/texlive/trunk@39073 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/bitpattern')
-rw-r--r--Master/texmf-dist/tex/latex/bitpattern/bitpattern.sty201
1 files changed, 201 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/bitpattern/bitpattern.sty b/Master/texmf-dist/tex/latex/bitpattern/bitpattern.sty
new file mode 100644
index 00000000000..b7897a834a8
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bitpattern/bitpattern.sty
@@ -0,0 +1,201 @@
+%%
+%% This is file `bitpattern.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% bitpattern.dtx (with options: `package')
+%%
+%% This file is part of the bitpattern, a LaTeX package to typeset bit
+%% pattern diagrams.
+%% https://bitbucket.org/bourguet/bitpattern
+%%
+%% Copyright 2005--2015 Jean-Marc Bourguet
+%%
+%% This program is provided under the terms of the LaTeX Project Public
+%% License distributed from CTAN archives in directory
+%% macros/latex/base/lppl.txt.
+%%
+%% \CheckSum{412}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bitpattern}[2015/12/11 bit pattern diagrams]
+
+\RequirePackage{keyval}
+\RequirePackage{calc}
+\RequirePackage{multido}
+\newif\ifbp@NumberBitsAbove
+\newif\ifbp@NumberBitsBelow
+\newif\ifbp@HasBitNumbers
+\newif\ifbp@NumberFieldTwice
+\newif\ifbp@NumberAllBits
+\newif\ifbp@NumberBitsBigEndian
+\newcount\bp@StartBit
+\newlength{\bp@BitWidth}
+\newlength{\bp@TickHeight}
+\newcommand\bpLittleEndian
+{\bp@NumberBitsBigEndianfalse}
+
+\newcommand\bpBigEndian
+{\bp@NumberBitsBigEndiantrue}
+
+\newcommand\bpNumberBitsAbove
+{\bp@NumberBitsAbovetrue
+ \bp@NumberBitsBelowfalse}
+
+\newcommand\bpNumberBitsBelow
+{\bp@NumberBitsAbovefalse
+ \bp@NumberBitsBelowtrue}
+
+\newcommand\bpNoBitNumbers
+{\bp@HasBitNumbersfalse}
+
+\newcommand\bpNumberFieldsOnce
+{\bp@HasBitNumberstrue
+ \bp@NumberFieldTwicefalse
+ \bp@NumberAllBitsfalse}
+
+\newcommand\bpNumberFieldsTwice
+{\bp@HasBitNumberstrue
+ \bp@NumberFieldTwicetrue
+ \bp@NumberAllBitsfalse}
+
+\newcommand\bpNumberAllBits
+{\bp@HasBitNumberstrue
+ \bp@NumberFieldTwicetrue
+ \bp@NumberAllBitstrue}
+\newcommand\bpStartAtBit[1]{\bp@StartBit=#1}
+\newcommand\bpSetBitWidth[1]{\setlength{\bp@BitWidth}{#1}}
+\newcommand\bpSetTickHeight[1]{\setlength{\bp@TickHeight}{#1}}
+\define@key{bitpattern}{littleEndian}[true]{\bpLittleEndian}
+\define@key{bitpattern}{bigEndian}[true]{\bpBigEndian}
+\define@key{bitpattern}{numberBitsAbove}[true]{\bpNumberBitsAbove}
+\define@key{bitpattern}{numberBitsBelow}[true]{\bpNumberBitsBelow}
+\define@key{bitpattern}{noBitNumbers}[true]{\bpNoBitNumbers}
+\define@key{bitpattern}{numberFieldsOnce}[true]{\bpNumberFieldsOnce}
+\define@key{bitpattern}{numberFieldsTwice}[true]{\bpNumberFieldsTwice}
+\define@key{bitpattern}{numberAllBits}[true]{\bpNumberAllBits}
+
+\define@key{bitpattern}{startBit}{\bpStartAtBit{#1}}
+\define@key{bitpattern}{bitWidth}{\bpSetBitWidth{#1}}
+\define@key{bitpattern}{tickSize}{\bpSetTickHeight{#1}}
+\DeclareOption{littleEndian}{\bpLittleEndian}
+\DeclareOption{bigEndian}{\bpBigEndian}
+\DeclareOption{numberBitsAbove}{\bpNumberBitsAbove}
+\DeclareOption{numberBitsBelow}{\bpNumberBitsBelow}
+\DeclareOption{noBitNumbers}{\bpNoBitNumbers}
+\DeclareOption{numberFieldsOnce}{\bpNumberFieldsOnce}
+\DeclareOption{numberFieldsTwice}{\bpNumberFieldsTwice}
+\DeclareOption{numberAllBits}{\bpNumberAllBits}
+\bpLittleEndian
+\bpNumberBitsBelow
+\bpNumberFieldsOnce
+\AtEndOfPackage{\ifbp@NumberBitsBigEndian
+ \bpStartAtBit{0}\else\bpStartAtBit{7}\fi}
+\bpSetBitWidth{1em}
+\bpSetTickHeight{2pt}
+\providecommand\bpFormatField[1]{\strut\emph{#1}}
+\providecommand\bpFormatBitNumber[1]{{\tiny\sffamily\strut #1}}
+\newcount\bp@CurBit
+\newlength{\bp@FieldWidth}
+\newlength{\bp@RuleWidth}\setlength{\bp@RuleWidth}{0.4pt}
+\newsavebox{\bp@TickBox}
+\newcommand\bp@FormatTopBit[1]{\ifbp@HasBitNumbers
+ \ifbp@NumberBitsAbove\bpFormatBitNumber{#1}\fi\fi}
+\newcommand\bp@FormatBottomBit[1]{\ifbp@HasBitNumbers
+ \ifbp@NumberBitsBelow\bpFormatBitNumber{#1}\fi\fi}
+\newcommand\bp@Tick{\rule{\bp@RuleWidth}{\bp@TickHeight}}
+\newcommand\bp@vbox[3]
+{\parbox[#1]{#2}{\lineskip=0pt\lineskiplimit=0pt\baselineskip=0pt\relax#3}}
+\newcommand\bp@BrokenRuleFill{\dimen0=\bp@RuleWidth\multiply\dimen0 3
+\leaders \hrule height \bp@RuleWidth\hfill
+\xleaders\hbox to \dimen0{\rule{\bp@RuleWidth}{\bp@RuleWidth}\hfill}\hfill
+\leaders \hrule height \bp@RuleWidth\hfill}
+\newcommand\bp@BrokenTicks
+{\usebox{\bp@TickBox}\usebox{\bp@TickBox}\hfill\usebox{\bp@TickBox}}
+\newcommand\bp@FillWithTicks
+{\leaders\hbox to \bp@BitWidth{\usebox{\bp@TickBox}}\hfill}
+\newcommand\bp@RuleFill[2]
+{\ifnum #1 = #2
+ \leaders \hrule height \bp@RuleWidth\hfill
+\else
+ \bp@BrokenRuleFill
+\fi}
+\newcommand\bp@TicksFill[2]
+{\ifnum #1 = #2
+ \bp@FillWithTicks
+\else
+ \bp@BrokenTicks
+\fi}
+\newcommand\bp@MakeNumbers[2]{\begingroup\ifbp@NumberAllBits
+\mbox{\multido{}{#1}{%
+ \makebox[\bp@BitWidth]{\bpFormatBitNumber{\the\bp@CurBit}}%
+ \advance\bp@CurBit\ifbp@NumberBitsBigEndian 1\else -1\fi}}%
+\else\ifbp@NumberFieldTwice
+\mbox{%
+ \makebox[\bp@FieldWidth]%
+ {\makebox[\bp@BitWidth][#2]{\bpFormatBitNumber{\the\bp@CurBit}}%
+ \ifnum #1 > 1
+ \advance\bp@CurBit\ifbp@NumberBitsBigEndian #1\else -#1\fi
+ \advance\bp@CurBit\ifbp@NumberBitsBigEndian -1\else 1\fi
+ \hfill\makebox[\bp@BitWidth][#2]%
+ {\bpFormatBitNumber{\the\bp@CurBit}}\fi}}%
+\else
+\ifx#2r
+ \ifnum #1 > 1
+ \advance\bp@CurBit\ifbp@NumberBitsBigEndian #1\else -#1\fi
+ \advance\bp@CurBit\ifbp@NumberBitsBigEndian -1\else 1\fi
+\fi\fi
+\makebox[\bp@FieldWidth][#2]{\bpFormatBitNumber{\the\bp@CurBit}}%
+\fi\fi\endgroup}
+\newcommand\bp@MakeTopNumbers[1]%
+{\ifbp@HasBitNumbers
+ \ifbp@NumberBitsAbove
+ \bp@MakeNumbers{#1}{l}
+ \else
+ \makebox[\bp@FieldWidth][l]{\hfill}\fi\fi}
+\newcommand\bp@MakeBottomNumbers[1]%
+{\ifbp@HasBitNumbers
+ \ifbp@NumberBitsBelow
+ \bp@MakeNumbers{#1}{r}
+ \else
+ \makebox[\bp@FieldWidth][r]{\hfill}\fi\fi}
+\newcommand{\bitpattern}[1][]{%
+ \begingroup
+ \setkeys{bitpattern}{#1}%
+ \savebox{\bp@TickBox}[\bp@BitWidth]{\bp@Tick\hfill}%
+ \bp@CurBit=\bp@StartBit%
+ \bp@FieldIfPresent}
+\newcommand{\bp@FieldIfPresent}{\@ifnextchar/{\bp@Done}{\bp@Field}}
+\newcommand{\bp@Field}[1]%
+{\@ifnextchar[{\bp@SizedField[#1]}{\bp@DoField[#1][1][1]}}
+\def\bp@SizedField[#1][#2]%
+{\@ifnextchar[{\bp@DoField[#1][#2]}{\bp@DoField[#1][#2][#2]}}
+\def\bp@DoField[#1][#2][#3]%
+{\setlength{\bp@FieldWidth}{\bp@BitWidth * #3}%
+ \ifnum #2 > #3 \ifbp@NumberAllBits\bpNumberFieldsTwice\fi\fi
+ \bp@vbox{t}{\bp@FieldWidth}{%
+ \bp@vbox{b}{\bp@FieldWidth}{%
+ \bp@MakeTopNumbers{#2}
+ \makebox[\bp@FieldWidth][s]{\bp@RuleFill{#2}{#3}}
+ \makebox[\bp@FieldWidth][s]{\bp@TicksFill{#2}{#3}}
+ \makebox[\bp@FieldWidth][s]%
+ {\vrule width \bp@RuleWidth\hfil\bpFormatField{#1}\hfil}}
+ \makebox[\bp@FieldWidth][s]{\bp@TicksFill{#2}{#3}}
+ \makebox[\bp@FieldWidth][s]{\bp@RuleFill{#2}{#3}}
+ \bp@MakeBottomNumbers{#2}}%
+ \advance\bp@CurBit\ifbp@NumberBitsBigEndian #2\else -#2\fi%
+ \bp@FieldIfPresent}
+\def\bp@Done/{\bp@vbox{t}{\bp@RuleWidth}{%
+ \bp@vbox{b}{\bp@RuleWidth}{%
+ \makebox[\bp@RuleWidth]{\bp@FormatTopBit{}\hfill}
+ \makebox[\bp@RuleWidth]{\bp@RuleFill{0}{0}}
+ \makebox[\bp@RuleWidth]{\bp@Tick\hfill}
+ \makebox[\bp@RuleWidth]%
+ {\vrule width \bp@RuleWidth\hfil\bpFormatField{}\hfil}}
+ \makebox[\bp@RuleWidth]{\bp@Tick\hfill}
+ \makebox[\bp@RuleWidth]{\bp@RuleFill{0}{0}}
+ \makebox[\bp@RuleWidth]{\hfill\bp@FormatBottomBit{}}}\endgroup}
+\ProcessOptions
+\endinput
+%%
+%% End of file `bitpattern.sty'.