diff options
author | Karl Berry <karl@freefriends.org> | 2015-12-11 23:13:48 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2015-12-11 23:13:48 +0000 |
commit | 4a0b9f7c69aace39f648a5a8af5acbb34a1dd43b (patch) | |
tree | 3efa2f9e7b6b2b95fcdee95b3347e9812899f9be /Master/texmf-dist/tex | |
parent | 8120af3162b7c99b12c88c5c65dd549f02667029 (diff) |
bitpattern (11dec15)
git-svn-id: svn://tug.org/texlive/trunk@39073 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/bitpattern/bitpattern.sty | 201 |
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'. |