%% %% 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: 2012/01/07 v1.0h %% %% Copyright (C) 2011 - 2012 by %% H.-Martin M"unch %% %% The usual disclaimer applies: %% 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, %% the README, and the derived files %% regstats.sty, regstats.pdf, %% regstats.ins, regstats.drv, %% regstats-example.tex, regstats-example.pdf, %% regstats-example.log. %% \NeedsTeXFormat{LaTeX2e}[2011/06/27] \ProvidesPackage{regstats}[2012/01/07 v1.0h 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 \RequirePackage{ltxcmds}[2011/04/18]% v1.20 %% 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 not use registers itself,\MessageBreak% but packages used by this package\MessageBreak% (and packages loaded by those packages)\MessageBreak% use additional resources,\MessageBreak% if those packages are not used anyway.\MessageBreak% } \fi \ifregstats@timer \RequirePackage{intcalc}[2007/09/27]% v1.1 \RequirePackage{ifluatex}[2010/03/01]% v1.3 \RequirePackage{ifpdf}[2011/01/30]% v2.3 \fi \newcommand{\regst@ts@timer}{% \message{^^J} \ifluatex \@tempcnta=% \directlua{ if starttime then tex.sprint((os.clock()-starttime)*65536) else tex.sprint(0) end }\relax \ifnum \the\@tempcnta = 0 \PackageError{regstats}{Did you forget to start the timer?}{% Before \string\documentclass\space you need to say% \MessageBreak% \string\directlua{starttime = os.clock()} \MessageBreak% } \fi \else \ifpdf \@tempcnta=\the\pdfelapsedtime\relax \else \PackageError{regstats}{Option timer only works with pdf(la)tex% \MessageBreak% and with lua(la)tex}{% Neither appear to be used here. Announced compilation time % will be zero. } \@tempcnta=0\relax \fi \fi \edef\regstatselapsedtime{\the\@tempcnta} \divide \@tempcnta by 65536% scaledseconds -> seconds \edef\regstatsseconds{\the\@tempcnta} \ifnum \regstatsseconds > 59 \edef\regstatsseconds{\intcalcMod{\the\@tempcnta}{60}} \divide \@tempcnta by 60% seconds -> minutes \else \@tempcnta=0\relax% minutes = 0 \fi \ifnum \regstatsseconds < 10 \message{Time elapsed for the last compiler run:^^J% about \the\@tempcnta:0\regstatsseconds\space% (m:ss; \regstatselapsedtime /65536 s).^^J} \else \message{Time elapsed for the last compiler run:^^J% about \the\@tempcnta:\regstatsseconds \space% (m:ss; \regstatselapsedtime /65536 s).^^J} \fi } \ifregstats@timer \else \renewcommand{\regst@ts@timer}{\relax} \fi \let\regst@ts@statistics\AtVeryVeryEnd% \@ifl@t@r\fmtversion{2011/06/27}% or possibly even newer {\@ifpackagelater{atveryend}{2011/06/29}% {% 2011/06/30, v1.8, or even more recent: OK }{% else: older package version, no \AtVeryVeryEnd \let\regst@ts@statistics\ltx@firstofone% } }{% else: older fmtversion: OK } \AtBeginDocument{% \AtEndDocument{% \BeforeClearDocument{% \AfterLastShipout{% \AtVeryEndDocument{% \AtEndAfterFileList{% \ltx@ifclassloaded{seminar}{% no \AtVeryVeryEnd \let\regst@ts@statistics\ltx@firstofone% }{% else \ltx@ifpackageloaded{slidesec}{% no \AtVeryVeryEnd \let\regst@ts@statistics\ltx@firstofone% }{% else: OK }% }% \regst@ts@statistics{% \ltx@ifpackageloaded{etex}{% \PackageInfo{regstats}{e-TeX-package found.} }{% else \PackageWarning{regstats}{Could not find the e-TeX-package.% \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 simply forgot to say \string\usepackage{etex}% \MessageBreak% in the preamble of \jobname.tex.\MessageBreak% The number of available counter, dimen, skip,\MessageBreak% muskip, box, and toks registers as well as the\MessageBreak% number of insertions would be larger when using% \MessageBreak% the e-TeX-package.% } } \def\regstats@lft{}% \newcommand{\regstats@regstat}[5]{% \@tempcnta=#1 \relax \ifnum \the\@tempcnta = 0 \@tempcnta=2 \relax \fi \ifnum \the\@tempcnta > 1 \gdef\regstats@pl{#3} \else \gdef\regstats@pl{#2} \fi \ltx@ifpackageloaded{etex}{\edef\regstats@max{#5}}{% \edef\regstats@max{#4}} \ifregstats@left \@tempcnta=\regstats@max \relax \advance\@tempcnta by -#1% \ifnum \the\@tempcnta > 0 \edef\regstats@lft{, left: \the\@tempcnta} \else \ifnum \the\@tempcnta = 0 \edef\regstats@lft{, left: \the\@tempcnta !!!} \else% \the\@tempcnta < 0 \edef\regstats@lft{, left: \the\@tempcnta **********} \fi \fi \fi } \ifregstats@proof \PackageWarning{regstats}{% Package regstats loaded with option 'proof'.\MessageBreak% This package itself will now use\MessageBreak% one of each register for testing!\MessageBreak% }% \def\regstats@proof{1} \newcounter{regstatscount} \edef\regstats@counter{\the\allocationnumber} \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@counter{\the\count10} \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 \@tempcnta = 233 \relax \advance\@tempcnta by -\regstats@insert% \advance\@tempcnta by +1% \edef\regstats@insert{\the\@tempcnta} \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} \regst@ts@timer }% }% }% }% }% }% } \endinput %% %% End of file `regstats.sty'.