<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% maamac.dtx -- documentation &amp; source for maamac.tex -*-tex-*-
        
%%%@TeX-document-file {
%%% title 	= "MAAMAC -- Malvern A Macros",
%%% filename 	= "$texmf/doc/plain/pdcmac/maamac.dtx",
%%% version 	= "$Revision: 1.5 $",
%%% package 	= "pdcmac 1.0",
%%% date 	= "$Date: 1995/04/06 13:33:44 $",
%%% author	= "P. Damian Cugley",
%%% email	= "damian.cugley@comlab.ox.ac.uk",
%%% address	= "Oxford University Computing Laboratory,"
%%%                Parks Road, Oxford  OX1 3QD, UK",
%%% abstract	= "This document describes and is the source code for 
%%%                the TeX definitions file maamac.tex.
%%%                Running plain TeX on this file produces both the
%%%                definitions file and the printed documentation.",
%%% copyright	= "Copyright (c) 1991-1995 P. Damian Cugley",
%%% copying	= "This program is free software; you can redistribute
%%%		   it and/or modify it under the terms of the GNU
%%%		   General Public License as published by the Free
%%%		   Software Foundation; either version 2 of the License,
%%%		   or (at your option) any later version.",
%%% notice	= "This program is distributed in the hope that it will
%%%		   be useful, but WITHOUT ANY WARRANTY; without even the
%%%		   implied warranty of MERCHANTABILITY or FITNESS FOR A
%%%		   PARTICULAR PURPOSE.  See the GNU General Public
%%%		   License for more details.",
%%% notice	= "You should have received a copy of the GNU General
%%%		   Public License along with this program; if not, write
%%%		   to the Free Software Foundation, Inc., 675 Mass Ave,
%%%		   Cambridge, MA 02139, USA.",
%%% codetable	= "USASCII",
%%% dependencies = "pdccode.tex"
%%%}

%{{{ maamac
%{{{  preamble

\relax
\input pdccode

\document
\rcs$Id: maamac.dtx,v 1.5 1995/04/06 13:33:44 pdc Exp $\endrcs

\newcount\chcda \newcount\chcdc \newcount\chcdn
\def\changecodes#1#2#3#4{%
    \chcda#2\relax \chcdc#3\relax \chcdn#4\relax
    \loop \ifnum\chcdn&gt;0
	#1\chcda\chcdc
	\advance\chcda1 \advance\chcdc1 \advance\chcdn-1
    \repeat
}
\changecodes\mathcode{`a}{"7461}{26}

\codefile{maamac.tex}
%}}}  preamble
%{{{  introduction
	
\author{P. Damian Cugley}
\title{MAAMAC---Malvern A Macros}
\advance\seccount-1
\section{Introduction}
	
	This document describes |maamac.tex|, a collection of formatting
	macros for plain \TeX\ documents using fonts with the Malvern~A
	encoding.  For example, it defines commands for making composite
	letters and special symbols.

\subsec{About this document}

	The definitions file and this printed documentation are both in
	|maamac.dtx|, a `documented \TeX\ macros' file\footnote*{The
	\LaTeX~2e distribution uses files with the `|dtx|' suffix for
	similar purposes.}  which, when processed by plain \TeX,
	generates a fresh copy of |maamac.tex| in the current directory
	in addition to the |dvi| file.  This ensures that the printed
	documentation and the code it describes are identical.  The
	|dtx| file uses the macros in |pdccode.tex|.

\subsec{What is in MAAMAC?}

	The definitions in |maamac.tex| fall into three sections:
\smallskip
\item{\S1} Building {\it composite letters} like `\'e' from {\it
	marks} like `\'{}' and {\it base letters} like `e'.  This gives
	new definitions for commands like |\'| and |\"|.
\item{\S2} Symbols and  special letters: replacements for existing
	commands like |\P| (\P) and |\ae| (\ae), and new commands like
	|\registered| and |\pounds|.
\item{\S3} Switching between alphabets.  The Malvern~A encoding includes
	separate small capital and medium capital alphabets in addition
	to the usual capitals and lower case.  This section defines
	commands for transliterating a list of tokens from one alphabet
	to another.

\smallskip\noindent
	The first two sections make changes to commands described in
	{\it\TeX book} Chapter~9 (and a few maths symbols from
	Chapter~16) and defined in Appendix~B.
	
%}}}  introduction
%{{{  File identification
\subsec{File identification}
	
	Nowadays, macro files start with some comments identifying the
	file.

\code
	\|\% maamac.tex \fileversion~\filedate~-- Malvern A Macros
	|
	|%%%@TeX-definition-file {
	|%%% filename       = "$texmf/tex/plain/pdcmac/maamac.tex",
	\|\%\%\% version~~~~~~~~= "\fileversion",
	\|\%\%\% date~~~~~~~~~~~= "\filedate",
	|%%% package        = "pdcmac 1.0",
	|%%% author         = "P. Damian Cugley",
	|%%% email          = "damian.cugley@comlab.ox.ac.uk",
	|%%% address        = "Oxford University Computing Laboratory,
	|%%%                   Parks Road, Oxford  OX1 3QD, UK",
	|%%% codetable      = "USASCII",
	|%%% keywords       = "TeX, plain TeX, macros",
	|%%% supported      = "Maybe",
	|%%% abstract       = "Macros for using the Malvern-A font coding
	|%%%                   scheme in plain TeX documents.
	|%%%                   This file was generated by running
	\|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
	|%%% copyright      = "Copyright (c) 1991-1995 P. Damian Cugley",
	|%%% copying        = "DO NOT DISTRIBUTE THIS FILE.
	\|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
	|%%%                   package it came in.",
	|%%% dependencies   = "",
	|%%% }
	|
	\|\\message\{\fileversion~&lt;pdc \filedate&gt;\}
	|
\endcode

%}}}
%{{{  building composite letters
\section{Building composite letters}

	THis section redefines commands listed at the start of Chapter~9
	of the {\it\TeX book}: |\'|, |\"|, etc.  The main difference is
	that these now use `medium capitals' and differently-drawn marks
	to make composite capital letters.

	I~also define \&lt;chardef tokens&gt; called |\acuteglyph|,
	|\twodotsglyph| which may be used to print these marks in a
	document: `the acute mark ``\'{}''\dots' might be typeset with
	`|the acute mark ``\acuteglyph''|\dots'.  Also, if you don't
	like the way my macros look, you can say `|\accent\acuteglyph
	E|' rather than having to look up its glyph number.

%{{{   utility macros

\subsec{Utility macros}

	First some nicknames for scratch registers.
\code
	|\dimendef\dimena0  \dimendef\dimenb2
	|\toksdef\toksa0
	|\countdef\counta255
	|\ifx\countb\UNDEFINED \csname newcount\endcsname\countb \fi
	|\ifx\countc\UNDEFINED \csname newcount\endcsname\countc \fi
\endcode

	A macro to find the code in \TeX's internal encoding for a
	character.  The character might be represented by (1)~a
	character with category code~11 or~12, (2)~a token defined with
	|\chardef|, or (3)~the token |\char| followed by a \&lt;number&gt;.
\code
	|\def\code#1{%
	|    \ifcat#1a%
	|        `#1
	|    \else\ifcat#1+%
	|        `#1
	|    \else\ifx\char#1
\endcode
\hbox{\hskip6\fontdimen6\tentt 
	\% If the first token is |\char| the rest is the
	\&lt;number&gt; we want.}
\code
	|    \else
	|        #1%
	|    \fi\fi\fi
	|}
\endcode

	So as to make conditional macros that can be skipped over if
	they appear nested inside another conditional, we make include
	the token |\then| amongst the arguments, making this the `if-'
	token to match the |\else| and |\fi| following it.  This way we
	write, for example 
$$\hbox{|\ifcap|\&lt;character&gt; |\then| \&lt;true text&gt;
	|\else| \&lt;false text&gt; |\fi|}$$
\code
	|\let\then=\iffalse
\smallbreak
	|\def\ifcap#1\then{\expandafter\ifcapnum\code{#1}\then}
	|\def\ifcapnum#1\then{\ifnum\lccode#1=#1}
\smallbreak
	|\def\iflower#1\then{\expandafter\iflowernum\code{#1}\then}
	|\def\iflowernum#1\then{\ifnum\uccode#1=#1}
\endcode

	A macro to extract the slant-per-point parameter of a font in
	toe form of a \TeX\ \&lt;factor&gt;.
\code
	|\def\fontslant#1{\expandafter\stripPT\the\fontdimen1#1}
\smallbreak
	|\begingroup \uccode`2=`p \uccode`3=`t \uppercase{\toksa{\endgroup
	|    \def\\#123{#1}
	|}} \the\toksa
	|\let\stripPT=\\
\endcode
%}}}   utility macros
%{{{   macros for placing marks
	
\subsec{Macros for placing marks}

	This simple macro places the text |#3| at displaced
	$(\hbox{|#1|},\hbox{|#2|})$ from current position:
\code
	|\def\putxy#1#2#3{\leavevmode\rlap{\hskip#1\raise#2\hbox{#3}}}
\endcode

	Now we have a generic mark-placement macro.  It is similar to
	the |\accent| primitive, but takes two extra parameters:
$$ 
 	\hbox{|\putmarkxy|\arg{$xf$}\arg{$dy$}\arg{$mark$}\arg{$base$}}
$$ 
 	The horizontal position $xf$ of the optical centre of the base
	letter (ignoring slant) is expressed as a \&lt;factor&gt; (i.e.,
	decimal fraction of the width of the base glyph).  The vertical
	displacement $dy$ is expressed as a fragment of \TeX\ code that
	will calculate $dy$.  The code is expanded after setting box~0
	to contain the base glyph, and must put the result in |\dimena|.
	For example, we could define
$$
 	\hbox{|\def\fakeaccent{\putmarkxy{0.5}{\dimena\ht0
	\advance\dimena-1ex }}|}
$$
 	This produces an approximation to the primitive |\accent|
	command.

	Given the $x$-factor $xf$, a base glyph with width $wd$, a font
	with slant $s$, the horizontal displacement $dx$ is given by
$$
 	dx = xf \times wd + s \times dy\quad.
$$
 	In this macro it is stored in |\dimenb|.
\code
	|\def\putmarkxy#1#2#3#4{{%
	|    \setbox0=\hbox{#4}#2\relax
	|    \dimenb#1\wd0 \advance\dimenb\fontslant\font\dimena
	|    \leavevmode
	|    \putxy{\dimenb}{\dimena}{\hbox to 0pt{\hss\char#3\hss}}%
	|    \box0
	|}}
\smallbreak
	|\def\putmarky{\putmarkxy{0.5}}
\endcode
%}}}   macros for placing marks
%{{{   type I marks
	
\subsec{Type~I Marks}
	
	A Type~I mark is one which does not have any scope for being
	`squashed' to go over capital letters---for example, the
	two-dots mark `\"{}' and macron `\={}'.  
	
	Here's a macro for placing a Type~I mark given by |#1| (a
	\&lt;number&gt;) over base glyph |#2| (which is anything that |\code|
	understands).  The difference between this macro and simply
	using |\accent| is (1)~if presented with a capital letter it
	will use the corresponding medium capital letter and (2)~the the
	mark is raised by an amount intended to centre it vertically
	between the top of the base letter and the top of the
	body-height---assuming it was original centered between
	body-height and $x$-height.

	If $H$ is the body height, $h$ the height of the base glyph, 
$$ \mathcode`/="202F 
    \eqalign{dy &amp;= { H + h \over   2 } - { H + 1\,{\rm
		ex} \over 2}\cr
	&amp;= \textstyle { 1\over2}h - {1\over2}\,{\rm ex}\cr}
$$
\code
	|\def\typeImark#1#2{{%
	|    \setbox2=\hbox{#2}%
	|    \ifdim \ht2=1ex
	|        \accent#1\relax#2%
	|    \else
	|        \counta\code{#2}%
	|        \ifnum\counta&gt;64 \ifnum\counta&lt;96
	|            \advance\counta 128
	|        \fi \fi
	|        \putmarky{\dimena0.5\ht0 \advance\dimena-0.5ex }
	|                {#1}{\char\counta}%
	|    \fi
	|}}
\endcode

	Finally we define the composite-letter-building commands.
\code
	|\chardef\dotglyph22     \def\.{\typeImark\dotglyph}
	|\chardef\twodotsglyph23 \def\"{\typeImark\twodotsglyph}
	|\chardef\macronglyph150 \def\={\typeImark\macronglyph}
	|\chardef\longmacronglyph151 
	|        \def\longmacronmark{\typeImark\longmacronglyph}
\endcode
%}}}   type I marks
%{{{   type II marks
	
\subsec{Type~II Marks}

	These marks have an alternative glyph for use of capital and
	medium capital letters.  As with |\typeImark|, |#1| is a
	\&lt;number&gt; and |#2| is anything understood by |\code|.
\code
	|\def\typeIImark#1#2{{%
	|    \counta#1\relax \countb\code{#2}%
	|    \ifcap{#2}\then
	|        \ifnum \counta&lt;128 \advance\counta 128 \fi
	|        \ifnum \countb&lt;128 \advance\countb 128 \fi
	|    \fi
	|    \accent\counta \char\countb
	|}}
\smallbreak
	|\chardef\acuteglyph8      \def\'{\typeIImark\acuteglyph}
	|\chardef\graveglyph9      \def\`{\typeIImark\graveglyph}
	|\chardef\circumglyph10    \def\^{\typeIImark\circumglyph}
	|\chardef\tildeglyph11     \def\~{\typeIImark\tildeglyph}
	|\chardef\ringglyph12      \def\ringmark{\typeIImark\ringglyph}
	|\chardef\caronglyph13     \def\v{\typeIImark\caronglyph}
	|\chardef\breveglyph14     \def\u{\typeIImark\breveglyph}
	|\chardef\hungarglyph15 \def\H{\typeIImark\hungarglyph}
\endcode
	I have abbreviated `circumflex' as `circum' (consistent with
	Adobe's `|asciicircum|').  I~have called the hook `\v{}'
	`|caron|' because that is its name as used by ISO and Adobe.
	I~have called the long Hungarian umlaut `\H{}' `|hungar|' for
	want of a better name (it's shorter than |hungarumlaut|)..
%}}}   type II marks
%{{{   cedilla ogonek
	
\subsec{Cedilla and ogonek}

	The cedilla and ogonek each have a variant intended for capital
	letters (in this case the variant is larger not smaller).
\code
	|\def\cedillalike#1#2#3{{%
	|    \setbox0=\hbox{#3}%
	|    \ifdim\ht0&gt;1ex
	|        \ooalign{\hidewidth\char#2\relax\hidewidth\crcr\unhbox0 }%
	|    \else
	|        \accent#1 #3%
	|    \fi
	|}}
\smallbreak
	|\chardef\cedillaglyph6 \chardef\Cedillaglyph134
	|\def\c{\cedillalike\cedillaglyph\Cedillaglyph}
\smallbreak
	|\chardef\ogonekglyph7 \chardef\Ogonekglyph135
	|\def\k{\cedillalike\ogonekglyph\Ogonekglyph}
\endcode
%}}}   cedilla ogonek
%}}}
%{{{  symbols
\section{Symbols and  special letters}
%{{{   special letters

\subsec{Special letters}

	The letters defined here that are not included in Chapter~9 of
	the {\it\TeX book} are the Icelandic thorn (|\TH|, |\th|) and
	eth\footnote*{Also called `edh'.} (|\DH|, |\dh|), the Polish
	{\it a} and {\it e} with ogonek (|\A|, |\a|, |\E|, |\e|), and
	the Sami eng\footnote\dag{Also called `ing' or `ng'.}  (|\NG|,
	|\ng|).

	We also give replacements for {\it d}, {\it t} and {\it l} with
	hook (which are usually drawn with a apostrophe-like mark), and
	the Esperanto letter {\it hho} (\^h).
\code
	|\chardef\TH"00  \chardef\th"10	 \chardef\DH"04  \chardef\dh"14
	|\chardef\A "01  \chardef\a "11	 \chardef\E "05  \chardef\e "15
	|\chardef\NG"02  \chardef\ng"12  \chardef\L "03  \chardef\l "13
	|\chardef\AE"5E  \chardef\ae"7E  \chardef\OE"5F  \chardef\oe"7F
	|\chardef\O "5C  \chardef\o "7C	
\smallbreak
	|\chardef\vd"9C  \chardef\vt"9D  \chardef\h "9E  \chardef\vl"9F
	|\chardef\ss"18  \chardef\i "19  \chardef\j "1A  
\smallbreak
	|\def\aa{\ringmark a} \def\AA{\ringmark A}
\endcode

\code
\smallbreak
	|\chardef\orda"98 \chardef\ordo"99 \def\No{N\ordo} \def\no{n\ordo}
	|\chardef\csuperior"98 \def\Mc{M\csuperior} 
\endcode
	The command |\Mc| is used for forming names like
	M\flushtop{\the\scriptfont\fam \b c}Donald.
%}}}   special letters
%{{{   text syms
	
\subsec{Other symbols used in text}

	There are several new symbols here.  Note that |\trademark| is
	what you will get if you use the ASCII double quote character
	`|"|' in your manuscript.
\code
        |\chardef\trademark "22 
	|\chardef\copyright "FB  \chardef\registered"FD
        |\chardef\careof    "9A  \chardef\Box       "A0
        |\chardef\cents     "A2  \chardef\pounds    "A3
        |\chardef\currency  "A4  \chardef\permille  "A5
        |\chardef\yen       "A8  \chardef\florin    "A9
	|\chardef\dag       "AA  \chardef\ddag      "AB
	|\chardef\gbdecimal "AE  \chardef\minus     "AF
	|\chardef\S         "BA  \chardef\P         "BB
	|\chardef\degrees   "C0
	|\chardef\lguillemet"BC  \chardef\rguillemet"BE
\endcode
	The |\careof| sign ($\rm ^c\!/\!_o$) is an abbreviation for
	`care of' in English-language addresses (actually, Australians
	traditionally write `$\rm ^c\!/\!_-$').  The raised dot
	|\gbdecimal| is the British decimal point (I~usually do
	|\mathcode`.=\gbdecimal| and let maths mode do all the work).
	The |\degrees| sign replaces \TeX's |$^\circ$|.

	The guillemets can also be obtained with the ligatures |&lt;&lt;| and
	|&gt;&gt;|.


%}}}   text syms
%{{{   maths syms
	
\subsec{Symbols used in maths}

	I have stuck with the plain \TeX\ conventions as much as
	possible---even though |\bullet| is more often used in text than
	maths.
\code
	|\mathcode`\,"602C  \mathcode`\-"20AF
	|\mathcode`\."002E  \mathcode`\/"002F
\smallbreak
	|\mathchardef\bullet   "2020  \mathchardef\times    "20A6
	|\mathchardef\backslash"005B  \mathchardef\setminus "205B
	|\mathchardef\cdot     "20AE  \mathchardef\cdotp    "60AE
\smallbreak
	|\def\langle{\delimiter"40DB30A }  \delcode`\&lt;"0DB30A
	|\def\rangle{\delimiter"50DD30B }  \delcode`\&gt;"0DD30B
	|\def\lbrace{\delimiter"407B308 }  \let\{\lbrace  \mathcode`\{"407B
	|\def\rbrace{\delimiter"507D309 }  \let\}\rbrace  \mathcode`\}"407D
\endcode
	
%}}}   maths syms
%}}}  symbols
%{{{  switching alphabets
\section{Switching between alphabets}

	This is one of the strange ideas that went into the design of
	the Malvern font---I wanted to have small capitals and medium
	capitals treated as separate alphabets rather than as a
	different style, just as I treat old-style and ranging numerals
	as separate symbols.  These extra alphabets are present in all
	Malvern~A encodings\footnote*{Fonts with the Malvern~A encoding
	but made from normal PostScript fonts will have medium capitals
	replaced with full capitals, and old-style numerals replaced
	with ranging numerals.}

	These extra alphabets are obtained by transliterating a sequence
	of letters using the |\uppercase| and |\lowercase|
	commands.\footnote\dag{Alas! this task would be so much easier
	and more efficient if it were possible to declare new
	alphabet-switching tables styled after the |\uccode| and
	|\lccode| tables which make |\uppercase| and |\lowercase| work.
	Then all this nonsense could happen in \TeX's mouth, which has
	some advantages.  I~can imagine commands |\newchartable| (used
	to create a token which can be used in the same way as
	|\uccode|) and |\usechartable| (used to defined macros that work
	like |\uppercase|).  E\TeX\ hackers take note!}  For example, to
	transliterate capitals into small capitals (the |\sc| command),
	we first make assignments so that, for example, |\lccode`a| is
	set to the code for small-capital $\scriptstyle A$, then apply
	|\lowercase| to the token list.

\subsec{Setting upper and lower case codes for special letters}

	These entries in the |\uucode| and |\lccode| tables are used by
	the composite-letter-building commands rather then the
	alphabet-switchign commands, but they are included here to be
	near the other code-hackery.

\code
	|\uccode\th\TH  \lccode\TH\th  \uccode\TH\TH  \lccode\th\th
	|\uccode\a \A   \lccode\A \a   \uccode\A \A   \lccode\a \a 
	|\uccode\ng\NG  \lccode\NG\ng  \uccode\NG\NG  \lccode\ng\ng
	|\uccode\l \L   \lccode\L \l   \uccode\L \L   \lccode\l \l 
	|\uccode\dh\DH  \lccode\DH\dh  \uccode\DH\DH  \lccode\dh\dh
	|\uccode\e \E   \lccode\E \e   \uccode\E \E   \lccode\e \e 
	|\uccode\o \O   \lccode\O \o   \uccode\O \O   \lccode\o \o
	|\uccode\ae\AE  \lccode\AE\ae  \uccode\AE\AE  \lccode\ae\ae
	|\uccode\oe\OE  \lccode\OE\oe  \uccode\OE\OE  \lccode\oe\oe
\smallbreak
	|\uccode\i`I    \uccode\j`J	\lccode\i\i	\lccode\j\j
	|\uccode\csuperior`C
\endcode


\subsec{A macro for changing character codes}

	The |\changecodes| command is used to change those segments of
	character tables that are contiguous and map onto a contiguous
	segment in the range.  It is invoked as
$$
 	\hbox{\it |\changecodes| command x y n}
$$ 
 	(where $\it command$ is a token like |\uccode| or |\mathcode|
	and $x$, $y$, and $n$ are \&lt;number&gt;s), and does the equivalent
	of
$$
 	{\it command}\;i\mathrel{\hbox{\tt=}}
	j\qquad \hbox{for all $\cases{x \le i &lt; x + n\cr
					         y \le j &lt; y + n\cr}$}
$$

\code
	|\def\changecodes#1#2#3#4{%
	|    \counta#2\relax \countb#3\relax \countc#4\relax
	|    \loop
	|    \ifnum\countc&gt;0
	|        #1\counta\countb
	|        \advance\counta 1
	|        \advance\countb 1
	|        \advance\countc-1
	|    \repeat
	|}
\endcode

	We can use this immediately to arrange that lowercasing medium caps
	makes lower case, and uppercasing small caps makes full caps:
\code
	|\changecodes\uccode{"E1}{`A}{26}
	|\changecodes\uccode{"C1}{"C1}{26}
	|\changecodes\lccode{"E1}{"E1}{26}
	|\changecodes\lccode{"C1}{`a}{26}
\endcode

	We also make old-style numerals behave as lower case for ranging
	numerals, and also arrange that maths mode uses ranging figures.
\code
	|\changecodes\lccode{"B0}{`0}{10}
	|\changecodes\uccode{`0}{"B0}{10}
\endcode

	In maths mode (1)~we use text italic for letters, since CM MAth
	Italic will not match the body text and (2)~we use ranging
	figures.
\code
	|\changecodes\mathcode{`a}{"7461}{26}
	|\changecodes\mathcode{`A}{"7441}{26}
	|\changecodes\mathcode{`0}{"70B0}{10}
\endcode

\subsec{Changing the alphabet for special letters got with commands}

	When applying |\uppercase| or |\lowercase| to a token list,
	macros will be unaffected (|\ae| will still generate `ae').  To
	get around this we define macros that redefine these control
	sequences.  They each take as parameters hex digits used to make
	character codes.
\code
	|\def\capspecials#1#2{%
	|    \chardef\TH"#10 \chardef\A "#11 \chardef\NG"#12
	|    \chardef\L "#13 \chardef\DH"#14 \chardef\E "#15
	|    \chardef\O "#2C \chardef\AE"#2E \chardef\OE"#2F 
	|}
\smallbreak
	|\def\lcspecials#1#2#3{%
	|    \chardef\th"#10 \chardef\a "#11 \chardef\ng"#12
	|    \chardef\l "#13 \chardef\dh"#14 \chardef\e "#15
	|    \chardef\o "#2C \chardef\ae"#2E \chardef\oe"#2F
	|    \def\ss{\char"#23 \char"#23 }\chardef\i"#39 \chardef\j"#3A 
	|}
\endcode
\subsec{Pulling it all together}
	Now we can define the user macros that do the work. These take
	one argument, a piece of text to transliterate: |\sc{OX1~3QD}|
	produces a small-capital `${\rm\scriptstyle OX}{\mit 1\
	3}{\rm\scriptstyle QD}$';
	|\csc{ABCdef}| produces caps and small caps
	`ABC{\the\scriptfont0 DEF}'.
\code
	|\def\sc#1{{%
	|    \changecodes\lccode{`A}{"E1}{26}\capspecials9F\lowercase{#1}%
	|}}
\smallbreak
	|\def\mc#1{{%
	|    \changecodes\lccode{`A}{"C1}{26}\capspecials8D\lowercase{#1}%
	|}}
\smallbreak
	|\def\csc#1{{%
	|    \changecodes\uccode{`a}{"E1}{26}\lcspecials9FE\uppercase{#1}%
	|}}
\smallbreak
	|\def\allcaps#1{{%
	|    \lcspecials054\uppercase{#1}%
	|}}
\smallbreak
	|\def\alllc#1{{%
	|    \capspecials17\lowercase{#1}%
	|}}
\endcode
%}}}  switching alphabets
\endcodefile
\enddocument
\bye
%}}} maamac


% Local variables:
% fold-folded-p: t
% fill-prefix: "\t"
% End:
</pre></body></html>