From d7ce6545e7179e9a4b950838c354b485e3f3fdb8 Mon Sep 17 00:00:00 2001 From: kaashoek Date: Tue, 29 Aug 2006 17:50:19 +0000 Subject: [PATCH] better printout --- Makefile | 20 +++-- lgrind.sty | 230 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 244 insertions(+), 6 deletions(-) create mode 100644 lgrind.sty diff --git a/Makefile b/Makefile index 7586c19..1084c20 100644 --- a/Makefile +++ b/Makefile @@ -57,7 +57,8 @@ kernel : $(OBJS) bootother.S init tags: $(OBJS) bootother.S init etags *.S *.c -PRINT = README\ +PRINT = \ + README\ types.h param.h defs.h x86.h asm.h elf.h mmu.h spinlock.h\ bootasm.S bootother.S main.c init.c spinlock.c\ proc.h proc.c setjmp.S kalloc.c\ @@ -69,8 +70,14 @@ PRINT = README\ string.c\ print: $(PRINT) - a2ps --line-numbers=1 -M Letter $(PRINT) -o xv6.ps - a2ps --line-numbers=1 -M Letter $(PRINT) --toc -atoc -o xv6toc.ps +// ~/src/lgrind/source/lgrind -d ~/src/lgrind/lgrindef $(PRINT) > xv6.tex + lgrind $(PRINT) > xv6.tex + latex xv6.tex + dvips -o xv61.ps xv6.dvi + psnup -2 xv61.ps > xv6.ps + rm -f xv61.ps +// a2ps --line-numbers=1 -M Letter $(PRINT) -o xv6.ps +// a2ps --line-numbers=1 -M Letter $(PRINT) --toc -atoc -o xv6toc.ps vectors.S : vectors.pl perl vectors.pl > vectors.S @@ -130,6 +137,7 @@ fs.img : mkfs userfs usertests echo cat readme init sh ls mkdir rm fstests -include *.d clean : - rm -f *.o *.d *.asm vectors.S parport.out \ - bootblock kernel xv6.img user1 userfs usertests \ - fs.img mkfs echo init fstests + rm -f *.ps *.tex *.dvi *.idx *.aux .log \ + *.o *.d *.asm vectors.S parport.out \ + bootblock kernel xv6.img user1 userfs usertests \ + fs.img mkfs echo init fstests diff --git a/lgrind.sty b/lgrind.sty new file mode 100644 index 0000000..0479e7f --- /dev/null +++ b/lgrind.sty @@ -0,0 +1,230 @@ +%% +%% This is file `lgrind.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% lgrind.dtx (with options: `package') +%% +%% LGrind is used to format source code of different programming +%% languages for LaTeX. +%% +%% LGrind is a major adaptation of Jerry Leichter's tgrind for LaTeX, +%% which was a notable improvement upon Van Jacobsen's tgrind for +%% plain TeX, which was adapted from vgrind, a troff prettyprinter. +%% +%% LGrind contains non-free code written by Van Jacobson, who does not answer +%% to any request for changing his licence. This software is therefore not +%% maintained. I also do not accept any cheques anymore. +%% Based on Van Jacobson's ``tgrindmac'', a macro package for TeX. +%% Modified, 1987 by Jerry Leichter. Put '@' in all internal names. +%% Modified, 1991 by George Reilly. Changed name from tgrind to lgrind. +%% Modified, 1995 by Michael Piefel. Made it work with \LaTeXe. +%% -1999 Hundreds of bells and whistles. No changelog here. +\NeedsTeXFormat{LaTeX2e}[1996/06/01] +\ProvidesPackage{lgrind} + [2002/01/28 v3.67 LGrind environment and supporting stuff] +%%stopzone % VIM syncing +\newcount\lc@unt +\newcount\ln@xt +\newcount\LGnuminterval +\LGnuminterval=10 +\DeclareOption{nolineno}{\LGnuminterval=50000} +\DeclareOption{lineno5}{\LGnuminterval=5} +\newif\ifLGleftnum +\DeclareOption{leftno}{\LGleftnumtrue} +\newskip\LGindent +\LGindent=1.6667\parindent +\DeclareOption{noindent}{\LGindent=0pt} +\newif\ifLGnorules +\DeclareOption{norules}{\LGnorulestrue} +\newlength{\LGsloppy} +\setlength{\LGsloppy}{7.2pt} +\DeclareOption{fussy}{\LGsloppy=0pt} +\newcommand{\DefaultProc}{\@gobble} +\newcommand{\DefaultProcCont}{\@gobble} +\DeclareOption{procnames}{ +\renewcommand{\DefaultProc}[1]{\renewcommand{\Procname}{#1}% +\global\setbox\procbox=\hbox{\PNsize #1}} +\renewcommand{\DefaultProcCont}[1]{\renewcommand\Procname{#1} +\global\setbox\procbox=\hbox{\PNsize\dots #1}}} +\newbox\procbox +\newcommand{\Procname}{} +\newif\ifLGnoprocindex +\DeclareOption{noprocindex}{\LGnoprocindextrue} +\ProcessOptions +\def\BGfont{\sffamily} +\def\CMfont{\rmfamily\itshape} +\def\NOfont{\sffamily} +\def\KWfont{\rmfamily\bfseries} +\def\STfont{\ttfamily} +\def\TTfont{\ttfamily\upshape} +\def\VRfont{\rmfamily} +\def\PNsize{\BGfont\small} +\def\LGsize{\small} +\def\LGfsize{\footnotesize} +\newif\ifLGinline +\newif\ifLGd@fault +\def\LGbegin{\ifLGinline$\hbox\else$$\vbox\fi\bgroup\LGd@faulttrue} +\def\LGend{\ifLGd@fault\egroup\ifLGinline$\else$$\fi\LGd@faultfalse\fi} +%%stopzone % VIM syncing +\newif\ifc@mment +\newif\ifstr@ng +\newif\ifright@ +\newbox\ls@far +\newbox\tb@x +\newdimen\TBw@d +\newdimen\@ts +{\catcode`\_=\active \gdef\@setunder{\let_=\sp@ce}} +\newcommand{\lgrindhead}{} +\newcommand{\lgrindfilename}{}\newcommand{\lgrindfilesize}{} +\newcommand{\lgrindmodyear}{}\newcommand{\lgrindmodmonth}{} +\newcommand{\lgrindmodday}{}\newcommand{\lgrindmodtime}{} +\newenvironment{lgrind}[1][1]{% +\def\Line##1{\L{\LB{##1}}}% +\newcommand{\Head}[1]{\gdef\lgrindhead{##1}}% +\newcommand{\File}[6]{\gdef\lgrindfilename{##1}\message{(LGround: ##1)}% + \gdef\lgrindmodyear{##2}\gdef\lgrindmodmonth{##3}% + \gdef\lgrindmodday{##4}\gdef\lgrindmodtime{##5}% + \gdef\lgrindfilesize{##6}}% +\let\Proc=\DefaultProc% +\let\ProcCont=\DefaultProcCont% +\ifLGnoprocindex% + \let\index\@gobble% +\fi% +\hfuzz=\LGsloppy% +\def\NewPage{\filbreak\bigskip}% +\ifLGinline% + \def\L##1{\setbox\ls@far\null{\CF\strut##1}\ignorespaces}% +\else% + \let\r@ghtlno\relax\let\l@ftlno\relax% + \ifnum\LGnuminterval>\z@% + \ifLGleftnum% + \def\l@ftlno{\ifnum\lc@unt>\ln@xt% + \global\advance\ln@xt by\LGnuminterval% + \llap{{\normalfont\scriptsize\the\lc@unt\quad}}\fi}% + \def\r@ghtlno{\rlap{\enspace\box\procbox}}% + \else% + \def\r@ghtlno{\ifnum\lc@unt>\ln@xt% + \global\advance\ln@xt by\LGnuminterval% + \rlap{{\normalfont\scriptsize\enspace\the\lc@unt% + \enspace\box\procbox}}% + \else\rlap{\enspace\box\procbox}\fi}% + \fi% + \fi% + \def\L##1{\@@par\setbox\ls@far=\null\strut% + \global\advance\lc@unt by1% + \hbox to \linewidth{\hskip\LGindent\l@ftlno ##1\egroup% + \hfil\r@ghtlno}% + \ignorespaces}% +\fi% +\lc@unt=#1\advance\lc@unt by-1% +\ln@xt=\LGnuminterval\advance\ln@xt by-1% +\loop\ifnum\lc@unt>\ln@xt\advance\ln@xt by\LGnuminterval\repeat% +\def\LB{\hbox\bgroup\bgroup\box\ls@far\CF\let\next=}% +\def\Tab##1{\egroup\setbox\tb@x=\lastbox\TBw@d=\wd\tb@x% + \advance\TBw@d by 1\@ts\ifdim\TBw@d>##1\@ts% + \setbox\ls@far=\hbox{\box\ls@far \box\tb@x \sp@ce}\else% + \setbox\ls@far=\hbox to ##1\@ts{\box\ls@far \box\tb@x \hfil}\fi\LB}% +\ifLGinline\def\sp@ce{{\hskip .3333em}}% +\else \setbox\tb@x=\hbox{\texttt{0}}% + \@ts=0.8\wd\tb@x \def\sp@ce{{\hskip 1\@ts}}\fi% +\catcode`\_=\active \@setunder% +\def\CF{\ifc@mment\CMfont\else\ifstr@ng\STfont\fi\fi}% +\def\N##1{{\NOfont ##1}\global\futurelet\next\ic@r}% +\def\K##1{{\KWfont ##1}\global\futurelet\next\ic@r}% +\def\V##1{{\VRfont ##1}\global\futurelet\next\ic@r}% +\def\ic@r{\let\@tempa\/\ifx.\next\let\@tempa\relax% + \else\ifx,\next\let\@tempa\relax\fi\fi\@tempa}% +\def\C{\egroup\bgroup\CMfont \global\c@mmenttrue \global\right@false}% +\def\CE{\egroup\bgroup \global\c@mmentfalse}% +\def\S{\egroup\bgroup\STfont \global\str@ngtrue}% +\def\SE{\egroup\bgroup \global\str@ngfalse}% +\def\,{\relax \ifmmode\mskip\thinmuskip \else\thinspace \fi}% +\def\!{\relax \ifmmode\mskip-\thinmuskip \else\negthinspace \fi}% +%%stopzone % VIM syncing +\def\CH##1##2##3{\relax\ifmmode ##1\relax% +\else\ifstr@ng ##2\relax\else$##3$\fi\fi }% +\def\|{\CH|||}% not necessary for T1 +\def\<{\CH<<<}% dto. +\def\>{\CH>>>}% dto. +\def\-{\CH---}% minus sign nicer than hyphen +\def\_{\ifstr@ng {\char'137}\else% + \leavevmode \kern.06em \vbox{\hrule width.35em}% + \ifdim\fontdimen\@ne\font=\z@ \kern.06em \fi\fi }% +\def\#{{\STfont\char'043}}% +\def\2{\CH\backslash {\char'134}\backslash }% % \ +\def\3{\ifc@mment\ifright@ ''\global\right@false% + \else``\global\right@true \fi% + \else{\texttt{\char'042}}\fi}% % " +\def\5{{\texttt{\char'136}}}% % ^ +\parindent\z@\parskip\z@ plus 1pt% +\bgroup\BGfont% +} +{\egroup\@@par\newpage} % end of environment lgrind +\def\lgrinde{\ifLGinline\else\LGsize\fi\begin{lgrind}} +\def\endlgrinde{\end{lgrind}} +\def\lagrind{\@ifstar{\@slagrind}{\@lagrind}} +\def\@lagrind{\@ifnextchar[{\@@lagrind}{\@@lagrind[t]}} +\def\@slagrind{\@ifnextchar[{\@@slagrind}{\@@slagrind[t]}} +\def\@@lagrind[#1]#2#3#4{% + \begin{figure}[#1] +\ifLGnorules\else\hrule\fi +\vskip .5\baselineskip +\begin{minipage}\columnwidth\LGsize\LGindent\z@ + \begin{lgrind} +\input #2\relax + \end{lgrind} +\end{minipage} +\vskip .5\baselineskip plus .5\baselineskip +\ifLGnorules\else\hrule\fi\vskip .5\baselineskip +\begingroup + \setbox\z@=\hbox{#4}% + \ifdim\wd\z@>\z@ +\caption{#3}% +\label{#4}% + \else +\captcont{#3}% + \fi +\endgroup +\vskip 2pt + \end{figure} +} +\def\@@slagrind[#1]#2#3#4{% + \begin{figure*}[#1] +\ifLGnorules\else\hrule\fi +\vskip .5\baselineskip +\begin{minipage}\linewidth\LGsize\LGindent\z@ + \begin{lgrind} +\input #2\relax + \end{lgrind} +\end{minipage} +\vskip .5\baselineskip plus .5\baselineskip +\ifLGnorules\else\hrule\fi\vskip .5\baselineskip +\begingroup + \setbox\z@=\hbox{#4}% + \ifdim\wd\z@>\z@ +\caption{#3}% +\label{#4}% + \else +\captcont{#3}% + \fi +\endgroup +\vskip 2pt + \end{figure*} +} +\def\lgrindfile#1{% + \par\addvspace{0.1in} + \ifLGnorules\else\hrule\fi + \vskip .5\baselineskip + \begingroup\LGfsize\LGindent\z@ +\begin{lgrind} + \input #1\relax +\end{lgrind} + \endgroup + \vskip .5\baselineskip + \ifLGnorules\else\hrule\vspace{0.1in}\fi +} +\endinput +%% +%% End of file `lgrind.sty'.