diff options
author | Karl Berry <karl@freefriends.org> | 2016-01-09 22:28:57 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-01-09 22:28:57 +0000 |
commit | 49f342e07099ccf4336fb7be401f453065977aca (patch) | |
tree | 05cff3b085885044df0403464027367553ac3b63 /Master/texmf-dist/tex/csplain/base/etex-mac.tex | |
parent | 6be551d802ac4c5c65ad599e0f569a69873c5bf6 (diff) |
csplain (9jan16)
git-svn-id: svn://tug.org/texlive/trunk@39330 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/csplain/base/etex-mac.tex')
-rw-r--r-- | Master/texmf-dist/tex/csplain/base/etex-mac.tex | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/csplain/base/etex-mac.tex b/Master/texmf-dist/tex/csplain/base/etex-mac.tex new file mode 100644 index 00000000000..76a078f4d44 --- /dev/null +++ b/Master/texmf-dist/tex/csplain/base/etex-mac.tex @@ -0,0 +1,100 @@ +% etex-mac.tex +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Petr Olsak January 2016 + +% This file is a part of csplain package. It is inputted during +% csplain format generation when eTeX is detected (from <Jan 2016>). + +% The \newcount, \newdimen, etc. allocators are redefined here in order +% to access the extension register fields from eTeX (up to index 32768). + +% See the end of the file for more details + +\ifx\loccount\undefined \else + \errmessage{etex.src macro package detected, don't use etex-mac} + \endpinput \fi + +\chardef\tmp=\catcode`@ \catcode`@=11 + +\let\inscOunt=\insc@unt +\chardef\insc@unt=200 +\def\et@xmaxregs{32768} % maximal index of registers in eTeX + +\outer\def\newinsert#1{% \newinsert re-defined: + \global\advance\inscxunt by\m@ne + \ifnum\inscOunt<\insc@out + \errmessage{No room for a new \string\insert, try to \chardef\insc@unt < 200}% + \else \allocationnumber=\inscOunt + \global\chardef#1=\allocationnumber + \wlog{\string#1=\string\insert\the\allocationnumber}% + \fi +} +\outer\def\et@newcount{\alloc@0\count\countdef\et@xmaxregs} +\outer\def\et@newdimen{\alloc@1\dimen\dimendef\et@xmaxregs} +\outer\def\et@newskip{\alloc@2\skip\skipdef\et@xmaxregs} +\outer\def\et@newbox{\alloc@4\box\mathchardef\et@xmaxregs} + +\outer\def\newmuskip{\alloc@3\muskip\muskipdef\et@xmaxregs} +\outer\def\newtoks{\alloc@5\toks\toksdef\et@xmaxregs} + +\def\ch@ck#1#2#3{% \ch@ck re-defined + \ifnum\count1#1<#2\relax\else + \ifnum#1<6 + \ifnum#2<\et@xmaxregs + \wlog{eTeX allocation of \string#3: skipping range \string\insc@unt...255}% + \begingroup \escapechar=-1 + \global \expandafter\let \csname new\string#3\expandafter\endcsname + \csname et@new\string#3\endcsname + \endgroup + \count1#1=256 + \ifx#3\box \ch@ckboxch \fi + \else \errmessage{No room for a new #3}% + \fi\fi\fi +} +\def\ch@ckboxch #1\global\chardef{#1\global\mathchardef} + +\newcount\marks@count \marks@count=0 % allocation starts from 1, 2, 3, ... + +\outer\def\newmarks{\et@alloc \marks@count \marks \mathchardef \et@xmaxregs} +\def\et@alloc #1#2#3#4#5{% + \global\advance#1by\@ne + \ifnum#1<#4\relax + \allocationnumber=#1% + \global#3#5=\allocationnumber + \wlog{\string#5=\string#2\the\allocationnumber}% + \else \errmessage{No room for a new #3}\fi +} + +\expandafter\def\expandafter\loggingall\expandafter{\loggingall + \tracingcommands=3 \tracinglostchars=2 + \errorstopmode + \tracinggroups=1 \tracingifs=1 \tracingscantokens=1 + \tracingnesting=1 \tracingassigns=2 +} + +\catcode`@=\tmp + +\endinput + +The \newcount, \newdimen, \newskip and \newbox allocators are kept from +plainTeX, but if the maximal number from plainTeX \insc@unt is reached then +the range \insc@unt...255 is skipped and next indexes are set to 256, 257, ... +The appropriate allocator macro is redefined to the macro \et@newcount, +\et@newdimen etc. in such case. + +The \insc@unt is set as a constant 200. The \newinsert macro is redefined: +it operates with \inscOunt register instead of \insc@unt. The allocated +indexes are 254, 253, ..., \insc@unt. If the limit is reached then the error +"No room for a new \insert" is printed. User can try to set \insc@unt +constant to the value less than 200 in such case. + +The macros \newmuskip, \newtoks are redefined to allocate linear array of +indexes 10, 11, ..., \et@xmaxregs. + +Another allocators (\newread, \newwrite, \newfam, \newlanguage) are unchanged. + +The new allocator \newmarks is defined as an example how to do this without +the Knuth's dirty trick \count1#1. + +The \tracingall, \loggingall macros are re-defined in order to print more +information provided by eTeX. |