%% %% This is file `regstats.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% regstats.dtx (with options: `package') %% %% This is a generated file. %% %% Project: regstats %% Version: 2011/08/23 v1.0f %% %% Copyright (C) 2011 by %% H.-Martin M"unch %% %% The usual disclaimer applys: %% If it doesn't work right that's your problem. %% (Nevertheless, send an e-mail to the maintainer %% when you find an error in this package.) %% %% 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.3c 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 H.-Martin Muench. %% %% This work consists of the main source file regstats.dtx %% and the derived files %% regstats.sty, regstats.pdf, regstats.ins, regstats.drv, %% regstats-example.tex. %% \NeedsTeXFormat{LaTeX2e}[2011/06/27] \ProvidesPackage{regstats}[2011/08/23 v1.0f Counting used registers (HMM)] %% Allows to count the number of used registers %% (counter, dimen, skip, muskip, box, token, input, output, %% math families, languages, insertions) %% and compare these to the maximum available number of such registers. \RequirePackage{kvoptions}[2010/12/23]% v3.10 \RequirePackage{atveryend}[2011/06/30]% v1.8 %% regstats may work with earlier versions of LaTeX and these %% packages, but this was not tested. Please consider updating %% your LaTeX and packages to the most recent version %% (if they are not already the most recent version). \SetupKeyvalOptions{family=regstats,prefix=regstats@} \DeclareBoolOption{proof}% \regstats@proof \DeclareBoolOption{left} \DeclareBoolOption{timer} \ProcessKeyvalOptions* \ifregstats@proof \PackageInfo{regstats}{% This package will use one of each kind of register itself!\MessageBreak% (And other packages used by this package\MessageBreak% probably use additional resources,\MessageBreak% if those packages are not used anyway.)\MessageBreak% } \else \PackageInfo{regstats}{% This package will use one counter itself!\MessageBreak% (And other packages used by this package\MessageBreak% probably use additional resources,\MessageBreak% if those packages are not used anyway.)\MessageBreak% } \fi \ifregstats@timer \RequirePackage{intcalc}[2007/09/27]% v1.1 \fi \@ifl@t@r\fmtversion{2011/06/27}% {\@ifpackagelater{atveryend}{2011/06/29}% {% 2011/06/30, v1.8, or even more recent }{% older version \PackageError{regstats}{Outdated atveryend package}% {You use \fmtname \space <\fmtversion>, but only \MessageBreak% `\csname ver@atveryend.\@currext\endcsname',\MessageBreak% which is incompatibel with \fmtname \space <\fmtversion>.\MessageBreak% Please update your atveryend package!\MessageBreak% The regstats package now replaces \string\AtVeryVeryEnd \MessageBreak% by \string\AtEndAfterFileList.\MessageBreak% }% \let\AtVeryVeryEnd\AtEndAfterFileList% }% }{% } \AtBeginDocument{% \newif\ifetex \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname eTeXversion\endcsname\relax \etexfalse \else \@ifpackageloaded{etex}{\etextrue}{\etexfalse} \fi \ifetex \PackageInfo{regstats}{e-TeX found.} \else \PackageWarning{regstats}{Could not find e-TeX.\MessageBreak% That can mean that e-TeX was disabled or\MessageBreak% that your distribution of TeX does not contain e-TeX\MessageBreak% or that you forgot to say \string\usepackage{etex}\MessageBreak% in the preamble of \jobname.tex.\MessageBreak% Some packages will not work without e-TeX,\MessageBreak% but should give according messages.\MessageBreak% } \fi \AtEndDocument{% \BeforeClearDocument{% \AfterLastShipout{% \AtVeryEndDocument{% \AtEndAfterFileList{% \AtVeryVeryEnd{% \def\regstats@lft{}% \newcommand{\regstats@regstat}[5]{% \setcounter{regstatscount}{#1} \ifnum \value{regstatscount}=0 \setcounter{regstatscount}{2} \fi \ifnum \value{regstatscount}>1 \gdef\regstats@pl{#3} \else \gdef\regstats@pl{#2} \fi \ifetex\edef\regstats@max{#5}\else\edef\regstats@max{#4}\fi \ifregstats@left \setcounter{regstatscount}{\regstats@max} \addtocounter{regstatscount}{-#1} \ifnum \value{regstatscount}>0 \edef\regstats@lft{, left: \arabic{regstatscount}} \else \ifnum \value{regstatscount}=0 \edef\regstats@lft{, left: \arabic{regstatscount} !!!} \else% \value{regstatscount}<0 \edef\regstats@lft{, left: \arabic{regstatscount} **********} \fi \fi \fi } \newcounter{regstatscount} \edef\regstats@counter{\the\allocationnumber} \ifregstats@proof \PackageWarning{regstats}{% Package regstats loaded with option 'proof'.\MessageBreak% This package itself will now use\MessageBreak% one of each register for testing!% }% \def\regstats@proof{1} \edef\regstats@test{\the\count10} \ifx\regstats@counter\regstats@test \else \message{Discrepancy when counting count registers.^^J} \def\regstats@proof{0} \fi \newdimen{\regstatsdimen} \edef\regstats@dimen{\the\allocationnumber} \edef\regstats@test{\the\count11} \ifx\regstats@dimen\regstats@test \else \message{Discrepancy when counting dimen registers.^^J} \def\regstats@proof{0} \fi \newskip\regstatsskip \edef\regstats@skip{\the\allocationnumber} \edef\regstats@test{\the\count12} \ifx\regstats@skip\regstats@test \else \message{Discrepancy when counting skip registers.^^J} \def\regstats@proof{0} \fi \newmuskip\regstatsmuskip \edef\regstats@muskip{\the\allocationnumber} \edef\regstats@test{\the\count13} \ifx\regstats@muskip\regstats@test \else \message{Discrepancy when counting muskip registers.^^J} \def\regstats@proof{0} \fi \newbox\regstatsbox \edef\regstats@box{\the\allocationnumber} \edef\regstats@test{\the\count14} \ifx\regstats@box\regstats@test \else \message{Discrepancy when counting box registers.^^J} \def\regstats@proof{0} \fi \newtoks\regstatstoks \edef\regstats@toks{\the\allocationnumber} \edef\regstats@test{\the\count15} \ifx\regstats@toks\regstats@test \else \message{Discrepancy when counting toks registers.^^J} \def\regstats@proof{0} \fi \newread\regstatsread \edef\regstats@read{\the\allocationnumber} \edef\regstats@test{\the\count16} \ifx\regstats@read\regstats@test \else \message{Discrepancy when counting read registers.^^J} \def\regstats@proof{0} \fi \newwrite\regstatswrite \edef\regstats@write{\the\allocationnumber} \edef\regstats@test{\the\count17} \ifx\regstats@write\regstats@test \else \message{Discrepancy when counting write registers.^^J} \def\regstats@proof{0} \fi \newfam\regstatsfam \edef\regstats@fam{\the\allocationnumber} \edef\regstats@test{\the\count18} \ifx\regstats@fam\regstats@test \else \message{Discrepancy when counting fam registers.^^J} \def\regstats@proof{0} \fi \newlanguage\regstatslanguage \edef\regstats@language{\the\allocationnumber} \edef\regstats@test{\the\count19} \ifx\regstats@language\regstats@test \else \message{Discrepancy when counting language registers.^^J} \def\regstats@proof{0} \fi \newinsert\regstatsinsert \edef\regstats@insert{\the\allocationnumber} \edef\regstats@test{\the\count20} \ifx\regstats@insert\regstats@test \else \message{Discrepancy when counting insert registers.^^J} \def\regstats@proof{0} \fi \edef\regstats@test{0} \ifx\regstats@proof\regstats@test \message{Regstats test for register numbers failed.^^J} \message{Therefore option 'proof' is necessary to get the % right numbers.^^J} \fi \else \edef\regstats@dimen{\the\count11} \edef\regstats@skip{\the\count12} \edef\regstats@muskip{\the\count13} \edef\regstats@box{\the\count14} \edef\regstats@toks{\the\count15} \edef\regstats@read{\the\count16} \edef\regstats@write{\the\count17} \edef\regstats@fam{\the\count18} \edef\regstats@language{\the\count19} \edef\regstats@insert{\the\count20} \fi \setcounter{regstatscount}{233} \addtocounter{regstatscount}{-\regstats@insert} \addtocounter{regstatscount}{+1} \edef\regstats@insert{\arabic{regstatscount}} \message{^^J} \message{Here is how much of TeX's registers you used^^J}% \message{\space (numbers of available registers are estimated!):^^J}% \regstats@regstat{\regstats@counter}{}{s}{233}{32767} \message{ \regstats@counter\space counter register\regstats@pl\space out of \regstats@max \regstats@lft ^^J} \regstats@regstat{\regstats@dimen}{}{s}{233}{32767} \message{ \regstats@dimen\space dimen register\regstats@pl\space out of \regstats@max \regstats@lft ^^J} \regstats@regstat{\regstats@skip}{}{s}{233}{32767} \message{ \regstats@skip\space skip register\regstats@pl\space out of \regstats@max \regstats@lft ^^J} \regstats@regstat{\regstats@muskip}{}{s}{255}{32767} \message{ \regstats@muskip\space muskip register\regstats@pl\space out of \regstats@max \regstats@lft ^^J} \regstats@regstat{\regstats@box}{}{s}{233}{32767} \message{ \regstats@box\space box register\regstats@pl\space out of \regstats@max \regstats@lft ^^J} \regstats@regstat{\regstats@toks}{}{s}{255}{32767} \message{ \regstats@toks\space toks register\regstats@pl\space out of \regstats@max \regstats@lft ^^J} \regstats@regstat{\regstats@read}{}{s}{15}{15} \message{ \regstats@read\space input stream\regstats@pl\space (read) out of \regstats@max \regstats@lft ^^J} \regstats@regstat{\regstats@write}{}{s}{15}{15} \message{ \regstats@write\space output stream\regstats@pl\space (write) out of \regstats@max \regstats@lft ^^J} \regstats@regstat{\regstats@fam}{y}{ies}{15}{15} \message{ \regstats@fam\space math famil\regstats@pl\space (fam) out of \regstats@max \regstats@lft ^^J} \regstats@regstat{\regstats@language}{}{s}{255}{255} \message{ \regstats@language\space language code\regstats@pl\space out of \regstats@max \regstats@lft ^^J} \regstats@regstat{\regstats@insert}{}{s}{101}{124} \message{ \regstats@insert\space insertion\regstats@pl\space out of \regstats@max \regstats@lft ^^J} \ifregstats@timer \message{^^J} \setcounter{regstatscount}{\the\pdfelapsedtime} \edef\regstatselapsedtime{\arabic{regstatscount}} \divide \value{regstatscount} by 65536% scaledseconds -> seconds \edef\regstatsseconds{\arabic{regstatscount}} \ifnum \value{regstatscount} > 59 \edef\regstatsseconds{\intcalcMod{\value{regstatscount}}{60}} \divide \value{regstatscount} by 60% seconds -> minutes \else \setcounter{regstatscount}{0}% minutes = 0 \fi \ifnum \regstatsseconds < 10 \message{Time elapsed for the last compiler run:^^J% about \arabic{regstatscount}:0\regstatsseconds\space% (m:ss; \regstatselapsedtime /65536 s).^^J} \else \message{Time elapsed for the last compiler run:^^J% about \arabic{regstatscount}:\regstatsseconds \space% (m:ss; \regstatselapsedtime /65536 s).^^J} \fi \fi }% }% }% }% }% }% } \endinput %% %% End of file `regstats.sty'.