From 6f8ad80b630fe27ac6608c9a23305830ac19625b Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 9 Sep 2010 18:14:42 +0000 Subject: new latex package drawstack 1.0 (17aug10) git-svn-id: svn://tug.org/texlive/trunk@19627 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/drawstack/README | 6 + .../doc/latex/drawstack/stack-example.pdf | Bin 0 -> 55599 bytes .../doc/latex/drawstack/stack-example.tex | 163 +++++++++++++++++++++ .../texmf-dist/tex/latex/drawstack/drawstack.sty | 133 +++++++++++++++++ Master/tlpkg/bin/tlpkg-ctan-check | 2 +- Master/tlpkg/tlpsrc/collection-science.tlpsrc | 1 + Master/tlpkg/tlpsrc/drawstack.tlpsrc | 0 7 files changed, 304 insertions(+), 1 deletion(-) create mode 100644 Master/texmf-dist/doc/latex/drawstack/README create mode 100644 Master/texmf-dist/doc/latex/drawstack/stack-example.pdf create mode 100644 Master/texmf-dist/doc/latex/drawstack/stack-example.tex create mode 100644 Master/texmf-dist/tex/latex/drawstack/drawstack.sty create mode 100644 Master/tlpkg/tlpsrc/drawstack.tlpsrc diff --git a/Master/texmf-dist/doc/latex/drawstack/README b/Master/texmf-dist/doc/latex/drawstack/README new file mode 100644 index 00000000000..388191c406c --- /dev/null +++ b/Master/texmf-dist/doc/latex/drawstack/README @@ -0,0 +1,6 @@ +This is a simple LaTeX package to easily draw execution stack +(typically to illustrate assembly language notions), written +on top of TikZ. + +Author's name: Matthieu Moy +License type: lppl \ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/drawstack/stack-example.pdf b/Master/texmf-dist/doc/latex/drawstack/stack-example.pdf new file mode 100644 index 00000000000..b74d38cba73 Binary files /dev/null and b/Master/texmf-dist/doc/latex/drawstack/stack-example.pdf differ diff --git a/Master/texmf-dist/doc/latex/drawstack/stack-example.tex b/Master/texmf-dist/doc/latex/drawstack/stack-example.tex new file mode 100644 index 00000000000..863b0981bed --- /dev/null +++ b/Master/texmf-dist/doc/latex/drawstack/stack-example.tex @@ -0,0 +1,163 @@ + %% stack-example.tex + %% Copyright 2010 Matthieu Moy + % + % This work may be distributed and/or modified under the + % conditions of the LaTeX Project Public License, either version 1.3 + % of this license or (at your option) any later version. + % 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'. + % + % The Current Maintainer of this work is M. Matthieu Moy. + % + % This work consists of the files drawstack.sty and the example file + % stack-example.tex. + +\documentclass{article} + +\usepackage{drawstack} + +% Use this instead if you don't want colors. +% \usepackage[nocolor]{drawstack} + +\title{{\tt drawstack.sty}: Draw execution stack easily in LaTeX} +\author{Matthieu Moy} + +\begin{document} +\maketitle + +{\tt drawstack} is a LaTeX package to easily draw execution stack +(typically to illustrate assembly language notions), written on top of +TikZ. This file serves as an example of usage of {\tt drawstack}, and +serves as documentation for this package. Read the source code and +comments to see how to use it. + +\section{Minimalistic example} + +% The main feature of the package is to define an environment +% drawstack. +\begin{drawstack} + % Within the environment, draw stack elements with \cell{...} + \cell{First cell} + \cell{Second cell} +\end{drawstack} + +\section{Grouping cells into stack frames} + +\begin{drawstack} + \startframe + \cell{First cell} + \cell{Second cell} + \finishframe{Some stack frame} + \cell{Not interesting} + \startframe + \cell{Next stack frame} + \cell{Next stack frame} + \finishframe{Another stack frame} +\end{drawstack} + +\section{Stack and Base pointers} + +\begin{drawstack} + \startframe + % \cellcom writes something on the right-hand side of a cell. + \cell{loc2} \cellcom{-8(\%ebp)} + \cell{loc1} \cellcom{-4(\%ebp)} + % \esp and \ebp are stack pointer and base pointer in Pentium. + % These macros are simple shortcuts for \cellptr{...} + \cell{Sauvegarde \%ebp} \esp \ebp + \cell{@ retour} \cellcom{4(\%ebp)} + \finishframe{fonction\\ {\tt f}} + \startframe + \cell{} \cellcom{8(\%ebp)} + \cell{} + \finishframe{fonction\\ {\tt main}} +\end{drawstack} + +\section{Padding} + +\begin{drawstack} + \cell{above padding} + \padding{3}{nothing here} + \cell{below padding} +\end{drawstack} + +\section{Below/Above stack pointer} + +\begin{drawstack} + \cell{Top} + \cell{Below top} + % \bcell is just like \cell, but in a different color. + \bcell{Above bottom} \cellptr{Stack pointer here} + \bcell{Bottom} +\end{drawstack} + +\section{Highlighting some cell} + +\begin{drawstack} + \cell{Uninteresting cell} + \cell{Interesting cell} \cellround{Yes, this one!} +\end{drawstack} + +\section{Using tikzpicture instead of drawstack} + +% The environment drawstack is basically a syntactic sugar for +% +% \begin{tikzpicture}[#1] +% \stacktop{} +% ... +% \stackbottom +% \end{tikzpicture} +% +% You can use the above syntax for more flexibility. + +\begin{tikzpicture}[scale=0.8] + \small + \stacktop{} + \cell{My cell} + \stackbottom{} +\end{tikzpicture} + +\section{Changing style} + +{% tikzstyle will be local to this {...} +\tikzstyle{freecell}=[fill=blue!10,draw=blue!30!black] +\tikzstyle{occupiedcell}=[fill=blue!10!orange!10,draw=blue!30!black] +\tikzstyle{padding}=[fill=yellow!20,draw=blue!30!black] +\tikzstyle{highlight}=[draw=orange!50!black,text=orange!50!black] + +\begin{drawstack} + \cell{Uninteresting cell} + \cell{Interesting cell} \cellround{Yes, this one!} + \bcell{bcell} + \padding{2}{Padding} +\end{drawstack} +} + +\section{Example: Computing Factorial} + +\begin{drawstack}[scale=0.8] + \startframe + \cell{N = 1} + \cell{...} + \finishframe{fact(1)} + \startframe + \cell{N = 2} + \cell{...} + \finishframe{fact(2)} + \cell{$\vdots$} + \startframe + \cell{N = 5} + \cell{...} + \finishframe{fact(5)} +\end{drawstack} + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/Master/texmf-dist/tex/latex/drawstack/drawstack.sty b/Master/texmf-dist/tex/latex/drawstack/drawstack.sty new file mode 100644 index 00000000000..14ae776841b --- /dev/null +++ b/Master/texmf-dist/tex/latex/drawstack/drawstack.sty @@ -0,0 +1,133 @@ + %% drawstack.sty + %% Copyright 2010 Matthieu Moy + % + % This work may be distributed and/or modified under the + % conditions of the LaTeX Project Public License, either version 1.3 + % of this license or (at your option) any later version. + % 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'. + % + % The Current Maintainer of this work is M. Matthieu Moy. + % + % This work consists of the files drawstack.sty and the example file + % stack-example.tex. + +\NeedsTeXFormat{LaTeX2e} + +\ProvidesPackage{drawstack}[2010/08/06 Draw Execution Stack in LaTeX] + +\RequirePackage{tikz} +\RequirePackage{ifthen} + +% Default styles definition. +\tikzstyle{freecell}=[fill=green!10,draw=green!30!black] +\tikzstyle{occupiedcell}=[fill=green!10!red!10,draw=green!30!black] +\tikzstyle{padding}=[fill=green!10!black!10,draw=green!30!black] +\tikzstyle{highlight}=[draw=red!50!black,text=red!50!black] + +\DeclareOption{nocolor}{ + \tikzstyle{freecell}=[fill=white!95!black,draw=black] + \tikzstyle{occupiedcell}=[fill=white!60!black,draw=black] + \tikzstyle{padding}=[fill=white!90!black!10,draw=black] + \tikzstyle{highlight}=[draw=black,text=black] +} +\ProcessOptions + +\pgfdeclarelayer{background layer} +\pgfdeclarelayer{foreground layer} +\pgfsetlayers{background layer,main,foreground layer} +\usetikzlibrary{shapes} % ellipse +\usetikzlibrary{snakes} % braces + +\newcounter{cellnb} +\setcounter{cellnb}{0} + +\newcommand{\llcell}[3]{ + \addtocounter{cellnb}{-#1} + \setcounter{ptrnb}{0} + \draw[#2] (0,\value{cellnb}) +(-2,-.5) rectangle +(2,-.5+#1); + \draw (0,\value{cellnb}+#1/2-0.5) node{#3}; +} +\newcommand{\bigcell}[2]{ + \llcell{#1}{freecell}{#2} + \foreach \c in {2,...,#1} { + \draw[freecell] + (-2,\value{cellnb}+\c-1.5) -- (-1.7,\value{cellnb}+\c-1.5); + \draw[freecell] + (1.7,\value{cellnb}+\c-1.5) -- (2,\value{cellnb}+\c-1.5); + } +} +\newcommand{\cell}[2][freecell]{% +\llcell{1}{#1}{#2}} + +\newcounter{ptrnb} +\newcommand{\cellptr}[1]{ + \draw[<-,line width=0.7pt] (0,\value{cellnb}) +(2,\value{ptrnb}*0.1) -- +(2.5,\value{ptrnb}*0.45); + \draw (2.5,\value{ptrnb}*0.5+\value{cellnb}) node[anchor=west] {#1}; + \addtocounter{ptrnb}{1} +} +\newcommand{\esp}{\cellptr{\%esp}} +\newcommand{\ebp}{\cellptr{\%ebp}} + +\newcommand{\cellcom}[1]{ + \draw (2.4,\value{ptrnb}*0.5+\value{cellnb}) node[anchor=west] {#1}; + \addtocounter{ptrnb}{1} +} +\newcommand{\cellround}[1]{ + \begin{pgfonlayer}{foreground layer} + \draw[highlight] (0,\value{cellnb}) + node[shape=ellipse,draw, minimum width=3cm, minimum height=0.9cm] + (marked) {}; + \draw[highlight] (0,\value{cellnb}) +(3,1.3) node[anchor=west] (textmarked) {#1}; + \draw[highlight,->] (marked) -- (textmarked.text); + \end{pgfonlayer} +} + +\newcommand{\stacktop}[2][freecell]{ + \setcounter{cellnb}{0} + \ifthenelse{\equal{#2}{}}{}{ + \draw (0,\value{cellnb}) node {#2}; + \addtocounter{cellnb}{-1} + } + + \draw[#1] (0,\value{cellnb}) + +(-2,.5) -- +(-2,-.5) -- +(2,-.5) -- +(2,.5); + \draw (0,\value{cellnb}) node{...}; +} +\newcommand{\stackbottom}[1][freecell]{ + \addtocounter{cellnb}{-1} + \draw[#1] (0,\value{cellnb}) + +(-2,-.5) -- +(-2,+.5) -- +(2,+.5) -- +(2,-.5); + \draw (0,\value{cellnb}) node{...}; +} +\newenvironment{drawstack}[1][]% +{\begin{tikzpicture}[#1]\stacktop{}}% +{\stackbottom\end{tikzpicture}} + +\newcommand{\bcell}[1]{\cell[occupiedcell]{#1}} +\newcommand{\padding}[2]{\llcell{#1}{padding}{#2}} +\newcommand{\bstacktop}[0]{\stacktop[occupiedcell]} +\newcommand{\bstackbottom}[0]{\stackbottom[occupiedcell]} + +\newcounter{startframe} +\newcommand{\startframe}[0]{ + \setcounter{startframe}{\value{cellnb}} +} +\newcommand{\finishframe}[1]{ + \draw[snake=brace, line width=0.6pt, segment amplitude=7pt] + (-2,\value{cellnb}-0.5) -- (-2,\value{startframe}-0.5); + \draw (-4.2cm,\value{cellnb}*0.5+\value{startframe}*0.5-0.5) node + {\parbox{3cm}{% +\begin{flushright} +#1 +\end{flushright}}}; +} +\newcommand{\stackframe}[3]{ + \draw[snake=brace] (-2,-#1-0.5) -- (-2,-#2-0.5); + \draw (0, #1) node {#3}; +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index beb6ac0c35e..43e01243a30 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -106,7 +106,7 @@ my @TLP_working = qw( dnaseq doc-pictex docmfp docmute doi doipubmed dot2texi dotarrow dotseqn dottex doublestroke dox dozenal dpfloat dprogress drac draftcopy - draftwatermark dramatist dratex drs drv dtk dtxgallery + draftwatermark dramatist dratex drawstack drs drv dtk dtxgallery dtxtut duerer-latex duotenzor dvdcoll dviasm dviincl dvipdfmx-def dvipsconfig dyntree ean13isbn easy easylist diff --git a/Master/tlpkg/tlpsrc/collection-science.tlpsrc b/Master/tlpkg/tlpsrc/collection-science.tlpsrc index 1033b9a9110..00f8b1b08c3 100644 --- a/Master/tlpkg/tlpsrc/collection-science.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-science.tlpsrc @@ -18,6 +18,7 @@ depend clrscode depend complexity depend computational-complexity depend digiconfigs +depend drawstack depend dyntree depend eltex depend engtlc diff --git a/Master/tlpkg/tlpsrc/drawstack.tlpsrc b/Master/tlpkg/tlpsrc/drawstack.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d -- cgit v1.2.3