summaryrefslogtreecommitdiff
path: root/macros/texmuse/Program/texmuse.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/texmuse/Program/texmuse.tex')
-rw-r--r--macros/texmuse/Program/texmuse.tex624
1 files changed, 0 insertions, 624 deletions
diff --git a/macros/texmuse/Program/texmuse.tex b/macros/texmuse/Program/texmuse.tex
deleted file mode 100644
index 740b75b12b..0000000000
--- a/macros/texmuse/Program/texmuse.tex
+++ /dev/null
@@ -1,624 +0,0 @@
-\makeatletter
-\newcommand{\TeXmuse}{\TeX{\itshape\kern-.1em m\kern-.05em use}}
-%Declarations
-\newtoks\@temptoks
-\newtoks\quant@toks
-\newtoks\curr@note
-\newtoks\this@note
-\newtoks\to@write
-\newtoks\extracted@line
-\newtoks\@plainnote
-\newtoks\@atnote
-\newtoks\@@atnote
-\newwrite\written@tm@file
-\newwrite\instrument@file
-\newread\read@tm@file
-\@tempswafalse % (tempswa = repeat@test)
-\newif\if@tempswb \@tempswbtrue % (tempswb = first@file)
-\newif\ifnot@written\not@writtentrue
-\newif\ifbeam@sw % Whether the note has to be added to a beam
-\newif\ifblock@done % Whether the last block is over (to catch pre-barline material)
-\newcount\@octave
-\newcount\@key
-\newcount\block@period
-\newcount\instrument@number
-\newcount\@no@of@instr % No. of instruments included in the system
-\newcount\extracted@number
-\newcount\current@quantum\current@quantum=0\relax
-\newcount\quantum@skip\quantum@skip=0\relax
-\newcount\char@no
-\newcount\block@no
-\newcount\file@no
-\newcount\s@factor
-\newcount\@restshift\@restshift0
-\newcount\@tempcntd
-\newcount\@hookels
-\newcount\@@break
-\newcount\@firstmf
-\newcount\FontSplit % Number of characters per font
-\newcount\beam@no %Number of beam lines in the beam (modified by \e@n, etc.)
-\chardef\@ther=12
-\chardef\@i=1
-\chardef\@ii=2
-\chardef\@iii=3
-\chardef\@iv=4
-\chardef\@v=5
-\chardef\@vi=6
-\chardef\@vii=7
-\chardef\@viii=8
-\chardef\@ix=9
-\chardef\@z=0
-\newenvironment{texmuse}{\bgroup%
- \catcode`\[=13 \catcode`\]=13
- \catcode`\|=13
- \catcode`A=13 \lccode`A=`A
- \catcode`B=13 \lccode`B=`B
- \catcode`C=13 \lccode`C=`C
- \catcode`D=13 \lccode`D=`D
- \catcode`E=13 \lccode`E=`E
- \catcode`F=13 \lccode`F=`F
- \catcode`G=13 \lccode`G=`G
- \catcode`R=13 \lccode`R=`R
- \catcode`\!=\@ther \lccode`\!=`\1 \catcode`1=\active
- \catcode`\?=\@ther \lccode`\?=`\2 \catcode`2=\active
- \catcode`\_=\@ther \lccode`\_=`\3 \catcode`3=\active
- \catcode`\$=\@ther \lccode`\$=`\4 \catcode`4=\active
- \catcode`\/=\@ther \lccode`\/=`\5 \catcode`5=\active
- \catcode`\^=\@ther \lccode`\^=`\6 \catcode`6=\active
- \catcode`\&=\@ther \lccode`\&=`\7 \catcode`7=\active
- \catcode`\*=\@ther \lccode`\*=`\8 \catcode`8=\active
- }{\egroup}
-%Newinstrument
-\newcommand\newinstrument[2][\trebleclef]{%
- \expandafter\newtoks\csname #2@toks\endcsname%
- \expandafter\def\csname #2\endcsname{\global\csname #2@toks\endcsname}%
- \bgroup
- \edef\trebleclef{\gdef\expandafter\noexpand\csname #2@clef\endcsname{0}}%
- \edef\bassclef{\gdef\expandafter\noexpand\csname #2@clef\endcsname{6}}%
- #1
- \egroup}
- %
-%Constant definitions
-\def\quant@note#1{\let\@let@token=#1\@quant@note}
-\def\@quant@note{\let\next\@let@token
- \ifx\@let@token-\let\next\quant@note
- \else\ifx\@let@token+\let\next\quant@note
- \else\ifx\@let@token.\let\next\quant@dot
- \else\ifx=\@let@token\let\next\@@quant@note
- \else\def\next{\@@quant@note\@let@token}%
- \fi\fi\fi\fi\next}
-\def\quant@dot#1{\let\@let@token=#1\@quant@dot}
-\def\@quant@dot{\let\next\@let@token
- \ifx\@let@token.\let\next\@quant@dot % Not sure it works like this
- \else\ifx=\@let@token\let\next\@@quant@dot
- \else\def\next{\@@quant@dot\@let@token}%
- \fi\fi\next}
-\def\@@quant@dot{\global\quant@toks\expandafter{\the\quant@toks\quant@@dot\@note\quant@@undot}}
-\def\@@quant@note{\global\quant@toks\expandafter{\the\quant@toks\@note}}
-\def\quant@sixtif{\quantum@skip4\relax}
-\def\quant@thirt{\quantum@skip8\relax}
-\def\quant@sixt{\quantum@skip16\relax}
-\def\quant@eighth{\quantum@skip32\relax}
-\def\quant@quarter{\quantum@skip64\relax}
-\def\quant@half{\quantum@skip128\relax}
-\def\quant@whole{\quantum@skip256\relax}
-\def\quant@double{\quantum@skip512\relax}
-\def\quant@@dot{\multiply\quantum@skip3\divide\quantum@skip2\relax}
-\def\quant@@undot{\multiply\quantum@skip2\divide\quantum@skip3\relax}
-\def\quant@barline{\global\quant@toks\expandafter{\the\quant@toks\no@note0\current@quantum0\relax}}
-%\@note
-\def\@note{%
- \if@tempswa\else\read\read@tm@file to \matrix@line
- \expandafter\extract@from@line\matrix@line
- \fi
- \@tempswafalse
- \def\next{\global\advance\current@quantum\quantum@skip\relax}%
- \ifnum\block@period>\current@quantum\relax
- \ifnum\extracted@number=\current@quantum\relax
- \edef\to@write{\the\extracted@number:\the\extracted@line,%
- 1.}%
- \else\ifnum\extracted@number>\current@quantum\relax
- \@tempswatrue
- \@tempcnta=\instrument@number\relax
- \edef\to@write{\the\current@quantum:\noexpand\@gobble}%
- \loop\ifnum\@tempcnta>1\relax\edef\to@write{\to@write,0}%
- \advance\@tempcnta-1\relax\repeat
- \edef\to@write{\to@write,1.}%
- \else% (extracted@number<current@quantum)
- \let\next\@note
- \edef\to@write{\the\extracted@number:%
- \the\extracted@line,0.}%
- \fi\fi
- \immediate\write\written@tm@file{\to@write}%
- \else
- \def\next{\@tempswatrue\no@note0\current@quantum0\relax\@note}%
- \fi
- \next}
-\def\no@note#1{%
- \if@tempswa\else\read\read@tm@file to \matrix@line
- \expandafter\extract@from@line\matrix@line
- \fi
- \@tempswafalse
- \let\@next\relax
- \ifnum\extracted@number=\current@quantum\relax
- \edef\to@write{\the\extracted@number:\the\extracted@line,%
- #1.}%
- \else\ifnum\extracted@number>\current@quantum\relax
- \@tempswatrue
- \@tempcnta=\instrument@number\relax
- \edef\to@write{\the\current@quantum:\noexpand\@gobble}%
- \loop\ifnum\@tempcnta>1\relax\edef\to@write{\to@write,0}%
- \advance\@tempcnta-1\relax\repeat
- \edef\to@write{\to@write,#1.}%
- \else% (extracted@number<current@quantum)
- \def\@next{\no@note{#1}}%
- \edef\to@write{\the\extracted@number:%
- \the\extracted@line,0.}%
- \fi\fi
- \immediate\write\written@tm@file{\to@write}%
- \@next}
-\def\@stem{\immediate\write\written@tm@file{\space\space\space regular_stem;}}
-\def\@rest#1{\immediate\write\written@tm@file{\space\space\space add_rest(\the\beam@no,#1);}}
-\begin{texmuse}
-\lowercase{%
-%Octave handling
- \global\def\rangefrom#!{\numbers@as@numbers\relax\@tempcnta=4\relax
- \expandafter\@rangefrom\noexpand#!}%
- \global\def\@rangefrom#!#?{%
- \global\@tempcntb=#?\relax\global\@tempcnta=#?\relax\global\advance\@tempcnta1\relax\egroup
- \expandafter\@@la\the\@tempcnta\relax
- \ifx#!A\expandafter\@@la\the\@tempcntb\else
- \ifx#!B\expandafter\@@ti\the\@tempcntb\else
- \ifx#!C\expandafter\@@do\the\@tempcntb\else
- \ifx#!D\expandafter\@@re\the\@tempcntb\else
- \ifx#!E\expandafter\@@mi\the\@tempcntb\else
- \ifx#!F\expandafter\@@fa\the\@tempcntb\else
- \expandafter\@@sol\the\@tempcntb\relax
- \fi\fi\fi\fi\fi\fi
- }
- \global\def\@@sol#!{\global\defG{\@octave#!\def\@pitch{g}\@tempswafalse\@@octave}}%
- \global\def\@@fa#!{\@@sol#!\global\defF{\@octave#!\def\@pitch{f}\@tempswafalse\@@octave}}%
- \global\def\@@mi#!{\@@fa#!\global\defE{\@octave#!\def\@pitch{e}\@tempswafalse\@@octave}}%
- \global\def\@@re#!{\@@mi#!\global\defD{\@octave#!\def\@pitch{d}\@tempswafalse\@@octave}}%
- \global\def\@@do#!{\@@re#!\global\defC{\@octave#!\def\@pitch{c}\@tempswafalse\@@octave}}%
- \global\def\@@ti#!{\@@do#!\global\defB{\@octave#!\def\@pitch{b}\@tempswafalse\@@octave}}%
- \global\def\@@la#!{\@@ti#!\global\defA{\@octave#!\def\@pitch{a}\@tempswafalse\@@octave}}}
-\gdef\numbers@as@numbers{\bgroup% Esto también tiene que ser un loop
- \def1{\@i}\def2{\@ii}\def3{\@iii}\def4{\@iv}\def5{\@v}\def6{\@vi}\def7{\@vii}\def8{\@viii}}
-%Accidentals
-\gdef\#{\open@block\this@note\expandafter{\the\this@note\string\@sharp}}%
-\gdef\b{\open@block\this@note\expandafter{\the\this@note\string\@flat}}%
-\gdef\n{\open@block\this@note\expandafter{\the\this@note\string\@natural}}%
-%Beams and rhythmic notation
- \gdef\rhythm@not{\stem@kind}%
- \gdef[{\@open@beam}\gdef]{\@close@beam}%
- \gdef\@open@beam{%
- \open@block
- \edef\current@block{\current@block\relax\string\next@note\string\open@beam}%
- \def\rhythm@not{\string\add@tobeam}%
- \not@writtenfalse}%
- \gdef\@close@beam{\edef\current@block{\current@block\string\close@beam\relax}%
- \def\rhythm@not{\stem@kind}}%
-%%notes
-\lowercase{%
- \gdef\@add@note#!#?{%
- \open@block
- \ifnot@written% When \@open@beam has been called, it already added \next@note
- \edef\current@block{\current@block\relax\string\next@note}%
- \fi
- \edef\current@block{\current@block
- \@value\the\this@note\the\@atnote\the\@@atnote\string\add@note{#!#?}\rhythm@not}%
- \@atnote{}%
- \@@atnote{}%
- \this@note\@plainnote
- \not@writtentrue
- \advance\current@quantum\quantum@skip\relax
- \block@donefalse}%
- \global\defR{\@ifnextchar-{\advance\@restshift-!\relax\@firstoftwoR}\@@rest}%
- \global\def\@@rest{\@ifnextchar+{\advance\@restshift!\relax\@firstoftwo\@@rest}\@@@rest}
- \gdef|{\def\@barline{!0}\current@quantum0\relax}%
- }%
-\gdef\@@@rest{%
- \open@block
- \def\rhythm@not{\string\@rest{\the\@restshift}}%
- \ifnot@written%
- \edef\current@block{\current@block\relax\string\next@note}%
- \fi
- \edef\current@block{\current@block%
- \@value\the\this@note\the\@@atnote\rhythm@not}%
- \this@note\@plainnote
- \@@atnote{}%
- \not@writtentrue
- \@restshift0\relax
- \def\rhythm@not{\stem@kind}%
- \advance\current@quantum\quantum@skip\relax
- \block@donefalse}%
-%clefs
-\gdef\trebleclef{\this@note\expandafter{\the\this@note\string\@clef0}}
-\gdef\bassclef{\this@note\expandafter{\the\this@note\string\@clef\string6}}
-%blocks
-\gdef\open@block{%
- \ifnum\block@period>\current@quantum\else\current@quantum0\relax\fi
- \ifnum\current@quantum=0\relax
- \end@block
- \fi}
-\gdef\end@block{%
- \ifblock@done\else
- \immediate\write\instrument@file{%
- \current@block\string\end@of@block}%
- \immediate\write\instrument@file\expandafter{%
- \the\this@note\string\@bar@line{\@barline}\string\relax}%
- \def\current@block{\@gobble}%
- \this@note\@plainnote
- \let\@barline\barline@default
- \fi
- \block@donetrue}
-%bars
-%rhythmic values
- \global\def2{\quant@thirt\global\quant@toks\expandafter{\the\quant@toks\quant@thirt}%
- \def\@value{\string\t@n}\def\stem@kind{\string\@stem\string\@flag}}%
- \global\def3{\quant@sixt\global\quant@toks\expandafter{\the\quant@toks\quant@sixt}%
- \def\@value{\string\s@n}\def\stem@kind{\string\@stem\string\@flag}}%
- \global\def4{\quant@eighth\global\quant@toks\expandafter{\the\quant@toks\quant@eighth}%
- \def\@value{\string\e@n}\def\stem@kind{\string\@stem\string\@flag}}%
- \global\def5{\quant@quarter\global\quant@toks\expandafter{\the\quant@toks\quant@quarter}%
- \def\@value{\string\q@n}\def\stem@kind{\string\@stem}}%
- \global\def6{\quant@half\global\quant@toks\expandafter{\the\quant@toks\quant@half}%
- \def\@value{\string\h@n}\def\stem@kind{\string\@stem}}%
- \global\def7{\quant@whole\global\quant@toks\expandafter{\the\quant@toks\quant@whole}%
- \def\@value{\string\w@n}\def\stem@kind{\string\relax}}%
- \global\def8{\quant@double\global\quant@toks\expandafter{\the\quant@toks\quant@double}%
- \def\@value{\string\d@n}\def\stem@kind{\string\relax}}%
-%The actual reading of the user's input for quantization (redefinition of musical commands)
-\lowercase{%
- \global\def\key#!{\numbers@as@numbers\global\@key=#!\relax\egroup}
- \global\def\meter#!#?{\numbers@as@numbers\global\block@period?/^\relax
- \global\divide\block@period by #?\relax %If any argument is a two-digit number, this does not yet work
- \global\multiply\block@period by #!\relax\egroup}
- \global\def\extr@quant@toks#!{%
- \begin{texmuse}%Meaning of commands for quantization purposes.
- \let[\relax\let]\relax
- \let|\quant@barline
- \letA\quant@note\letB\quant@note\letC\quant@note\letD\quant@note
- \letE\quant@note\letF\quant@note\letG\quant@note\letR\quant@note
- \let\rangefrom\@gobble
- \let\#\relax\let\n\relax\let\b\relax
- \expandafter\the#!%
- \global\quant@toks\expandafter{\the\quant@toks\quant@instr@end\relax}%
- \end{texmuse}}}%
-\end{texmuse}
-\def\@@octave#1{\let\next\@@octave
- \ifx#1-\advance\@octave-1\else\ifx#1+\advance\@octave1\relax
- \else\if@tempswa\else\@add@note{\@pitch}{\the\@octave}\@tempswatrue\fi
- \ifx=#1\add@tie{\expandafter\@pitch\the\@octave}\let\next\relax
- \else\ifx#1.\add@dot{\@pitch}{\the\@octave}%
- \else\let\next#1%
- \fi\fi
- \fi\fi\next}
-%Quantization functions
-\def\quant@instr@end{\let\next\quant@instr@end
- \if@tempswa\else\read\read@tm@file to \matrix@line
- \expandafter\extract@from@line\matrix@line
- \fi
- \ifnum\extracted@number=9999\relax
- \immediate\write\written@tm@file{\matrix@line}%
- \immediate\closeout\written@tm@file\immediate\closein\read@tm@file\current@quantum0\relax
- \let\next\relax
- \else
- \edef\to@write{\the\extracted@number:%
- \the\extracted@line,0.}%
- \immediate\write\written@tm@file{\to@write}%
- \@tempswafalse
- \fi\next}
-%Character construction functions
-\def\read@blocks#1{\@for\curr@instr:=#1\do
- {\expandafter\read\csname\curr@instr @file\endcsname to \@tempcs
- \csname\curr@instr @blocktoks\endcsname\expandafter{\@tempcs}%
- \expandafter\extract@note\csname\curr@instr @blocktoks\endcsname}}
-\def\open@beam{\expandafter\let\csname\curr@instr @beam\endcsname\@gobble}
-\def\close@beam{\immediate\write\written@tm@file\expandafter{\space\space\space
- beam(\csname\curr@instr @beam\endcsname);}%
- \beam@swfalse}
-\def\t@n{\beam@no3\relax\def\notehead@kind{add_noteheads}}
-\def\s@n{\beam@no2\relax\def\notehead@kind{add_noteheads}}
-\def\e@n{\beam@no1\relax\def\notehead@kind{add_noteheads}}
-\def\q@n{\beam@no0\relax\def\notehead@kind{add_noteheads}}
-\def\h@n{\beam@no-1\relax\def\notehead@kind{add_halfheads}}
-\def\w@n{\beam@no-2\relax\def\notehead@kind{add_wholeheads}}
-\def\d@n{\beam@no-3\relax\def\notehead@kind{add_doubleheads}}
-\def\@flag{\immediate\write\written@tm@file{\space\space\space add_flag(\the\beam@no);}}
-\def\@sharp#1\add@note#2{#1\relax\add@note{#2}\immediate\write\written@tm@file{\space\space\space add_sharp(#2);}}
-\def\@flat#1\add@note#2{#1\relax\add@note{#2}\immediate\write\written@tm@file{\space\space\space add_flat(#2);}}
-\def\@natural#1\add@note#2{#1\relax\add@note{#2}\immediate\write\written@tm@file{\space\space\space add_natural(#2);}}
-\def\add@note#1{\def\@@note{#1}%
- \immediate\write\written@tm@file{\space\space\space\notehead@kind(\@@note);}}
-\def\add@dot#1#2{{\divide\quantum@skip2\relax
- \global\advance\current@quantum\quantum@skip}%
- \edef\current@block{\current@block
- \the\this@note\string\@dot{#1#2}}%
- \not@writtentrue}%
-\def\add@tie#1{\expandafter\expandafter\expandafter\add@@tie#1}
-\def\add@@tie#1#2{%
- \edef\current@block{\current@block
- \the\this@note\string\@tie{#1#2}}%
- \not@writtentrue
- {\@temptoks{\string\close@tie{#1#2}}\global\@@atnote\expandafter{\the\@temptoks}}%
- }%
-\def\@tie#1{\immediate\write\written@tm@file{\space\space\space add_tie(#1);}}
-\def\close@tie#1{\immediate\write\written@tm@file{\space\space\space close_tie(#1);}}
-\def\@dot#1{\immediate\write\written@tm@file{\space\space\space add_dot(#1);}}
-\def\@clef#1{\expandafter\def\csname\curr@instr @clef\endcsname{#1}%
- \immediate\write\written@tm@file{\space\space\space clef_(#1);}}
-\def\add@tobeam{\expandafter\edef\csname\curr@instr @beam\endcsname{%
- \csname\curr@instr @beam\endcsname,\the\char@no,\the\beam@no,1,\@@note}} % 1 is for just one note-head
-\def\init@char{%
- \immediate\write\written@tm@file{new_char(\the\s@factor);}}
-\def\extract@note#1{\expandafter\extract@@note\the#1\relax
- #1\expandafter{\the\@temptoks}}
-\def\extract@@note#1\next@note#2\end@of@block{\curr@note{#1}\@temptoks{#2\next@note\end@of@block}}
-%Auxiliary functions
-\def\get@instr#1,#2,. {\def\curr@instr{#1}\edef\temp@instr@list{#2\noexpand\@gobble}}
-\def\open@tm@files{\if@tempswb\immediate\openout\written@tm@file=\jobname.tm1\relax
- \immediate\openin\read@tm@file=\jobname.tm2\relax
- \else\immediate\openout\written@tm@file=\jobname.tm2\relax
- \immediate\openin\read@tm@file=\jobname.tm1\relax
- \fi}
-\def\extract@from@line#1:#2. {\extracted@number=#1\relax\extracted@line{#2}}
-\def\@gobbleline#1.{\relax}
-\def\strip@spaces#1{%
- \@temptoks#1%
- \@temptoks\expandafter{\the\@temptoks{\relax} }%
- \quant@toks{}%
- \@tempswatrue
- \loop\if@tempswa
- \expandafter\strip@@spaces\the\@temptoks{\relax} \@nil
- \repeat
- #1\quant@toks}
-\def\strip@@spaces#1 #2#3\@nil{\quant@toks\expandafter{\the\quant@toks#1}%
- \ifx#2\relax\@tempswafalse\fi
- \@temptoks{#2#3}}
-%Music Boxes
-\def\music#1{%
- \def\@desiredwidth{\the\textwidth}%
- \def\@break{1}\@@break\@break
- \def\@afterblock{\ }%
- \def\@lastbreak{numeric desired_width}%
- \def\last@barline{20}%
- \def\instr@list{#1}%
- \def\block@chars{\@gobble}%
- \def\music@font@splits{\@gobble}%
- \@no@of@instr0\relax
- \instrument@number0\relax
- \@quantization
- \mf@files
- \@compose
- \global\@firstmf\file@no\global\advance\@firstmf1\relax}
-\def\excerpt#1{%
- \def\@desiredwidth{desired_width}%
- \def\@break{0}\@@break\@break
- \def\@afterblock{\relax}%
- \def\@lastbreak{\@gobble}%
- \def\last@barline{0}%
- \def\instr@list{#1}%
- \def\block@chars{\@gobble}%
- \def\music@font@splits{\@gobble}%
- \@no@of@instr0\relax
- \instrument@number0\relax
- \@quantization
- \mf@files
- \@compose
- \global\@firstmf\file@no\global\advance\@firstmf1\relax}
-\def\@quantization{%
- %First the quantization
- \init@quantization
- \@for\curr@instr:=\instr@list\do
- {\expandafter\strip@spaces\csname\curr@instr @toks\endcsname%
- \advance\@no@of@instr1\relax
- \quant@toks{}\current@quantum0\relax
- \extr@quant@toks{\csname\curr@instr @toks\endcsname}%
- \@tempswafalse
- \advance\instrument@number1\relax
- \if@tempswb\@tempswbfalse\else\@tempswbtrue\fi\open@tm@files
- \the\quant@toks
- %Then, the writing of the auxiliary files for each instrument
- \this@note\@plainnote
- \def\current@block{\@gobble}%
- \current@quantum0\relax
- \block@donetrue
- \immediate\openout\instrument@file=\curr@instr.tms\relax
- \expandafter\the\csname\curr@instr @toks\endcsname
- \ifnum\current@quantum=0% Which means there was '|' at the end
- \end@block
- \else
- \immediate\write\instrument@file{\current@block\string\end@of@block}%
- \fi
- \immediate\closeout\instrument@file}%
- \count@chars}
-\def\mf@files{%
- \open@matrix
- \open@tms
- \char@no0
- \block@no0
- \newtoks\previous@line
- \@tempswatrue
- \file@no\@firstmf
- \mf@@headers
- \let\music@@font@splits\music@font@splits%
- \extracted@number0\relax
- \read\read@tm@file to \matrix@line
- \expandafter\extract@from@line\matrix@line
- \loop\ifnum\extracted@number<9999\relax
- \expandafter\check@split\music@font@splits,1000\@nil
- \read@blocks{\instr@list}%
- \let\next\build@block
- \build@block
- \repeat}
-\def\build@block{%
- \edef\temp@instr@list{\instr@list}%
- \previous@line\expandafter{\the\extracted@line}%
- \@tempcnta\extracted@number\relax
- \read\read@tm@file to \matrix@line
- \expandafter\extract@from@line\matrix@line
- \ifnum\extracted@number=0\relax
- \let\next\finish@block
- \else
- \advance\char@no1\relax
- \ifnum\extracted@number=9999\relax
- \ifnum\@tempcnta=\block@period
- \def\next{\finish@block\finish@music}%
- \else
- \def\next{\last@block\finish@music}%
- \fi
- \extracted@number\block@period\relax
- \fi
- \find@sf
- \init@char
- \@for\matrix@number:=\the\previous@line\do
- {\expandafter\get@instr\temp@instr@list,,.
- \ifnum\matrix@number>0\relax
- \global\block@donefalse
- \immediate\write\written@tm@file{\curr@instr;}%
- \expandafter\extract@note\csname\curr@instr @blocktoks\endcsname
- \the\curr@note
- \fi}%
- \immediate\write\written@tm@file{end_of_char;}%
- \fi
- \next
- }
-\def\finish@block{%
- \advance\char@no1\relax
- \immediate\write\written@tm@file{new_char(-least_spaced);}%
- \@for\curr@instr:=\instr@list\do
- {\expandafter\read\csname\curr@instr @file\endcsname to \@tempcs
- \immediate\write\written@tm@file{\curr@instr;}%
- \@tempcs}%
- \immediate\write\written@tm@file{end_of_char;}%
- \ifcase\@@break %\@@break is set in the instruments' tokens
- \or\immediate\write\written@tm@file{end_of_block;}% 1 default for \music: breakable block
- \advance\block@no1\relax
- \or\immediate\write\written@tm@file{make_line(next_char);}% 2 is forced break
- \fi
- \@@break\@break\relax}
-\def\last@block{%
- \advance\char@no1\relax
- \immediate\write\written@tm@file{new_char(-least_spaced);}%
- \@for\curr@instr:=\instr@list\do
- {\immediate\write\written@tm@file{\curr@instr;}%
- \immediate\write\written@tm@file{\space\space\space barline_(\last@barline);}}%
- \immediate\write\written@tm@file{end_of_char;}}
-\def\finish@music{%
- \extracted@number9999\relax
- \immediate\write\written@tm@file{\@lastbreak; end_of_block; make_line(next_char);}%
- \immediate\write\written@tm@file{showstats; end.}%
- \immediate\closeout\written@tm@file}
-\def\@compose{%
- \file@no\@firstmf
- \block@no-1\relax
- {%
- \char@no0\relax
- \@tempcnta0\relax
- \font\@musicfont=\jobname\the\@firstmf\relax
- \@for\@tempcsa:=\block@chars\do
- {\advance\block@no1\relax
- \@musicfont
- \@whilenum\char@no<\@tempcsa\do
- {\advance\char@no1\relax
- \message{\the\char@no}\mbox{\char\the\char@no}%
- }%
- \message{|}\@afterblock %
- \expandafter\check@@split\music@@font@splits,0\@nil
- }%
- }}
-\def\@bar@line#1{\immediate\write\written@tm@file{\space\space\space barline_(#1);}}
-
-\def\find@sf{%
- \bgroup
- \advance\extracted@number-\@tempcnta
- \global\s@factor\extracted@number
- \egroup}
-\def\count@chars{%
- \open@matrix
- \extracted@number0\relax
- \char@no0\relax
- \@tempcnta-1\relax % The number of blocks
- \@tempcntb0\relax % The number of the last character in the last block
- \loop\ifnum\extracted@number<9999\relax
- \read\read@tm@file to \matrix@line
- \expandafter\extract@from@line\matrix@line
- \ifnum\char@no>\FontSplit\relax
- \edef\music@font@splits{\music@font@splits,\the\@tempcnta}%
- \advance\char@no-\@tempcntb\relax
- \fi
- \ifnum\extracted@number=0\relax % To fix all this with the new model.
- \advance\@tempcnta1\relax
- \@tempcntb\char@no\relax
- \edef\block@chars{\block@chars,\the\char@no}%
- \fi
- \advance\char@no1\relax
- \repeat
- \edef\block@chars{\block@chars,\the\char@no}%
- \edef\music@font@splits{\music@font@splits,1000}%
- \immediate\closein\read@tm@file}
-\def\check@split#1,#2\@nil{%
- \ifnum\block@no=#1\relax %This block was the last to write into the current file
- \char@no0\relax
- \close@@line
- \global\advance\file@no1\relax
- \mf@@headers
- \def\music@font@splits{#2}%
- \fi}
-\def\check@@split#1,#2\@nil{%
- \ifnum\block@no=#1%
- \char@no0\relax
- \global\advance\file@no1\relax
- \font\@musicfont=\jobname\the\file@no
- \def\music@@font@splits{#2}%
- \@musicfont\newline
- \fi}
-\def\mf@@headers{%
- \immediate\openout\written@tm@file=\jobname\the\file@no.mf%
- \immediate\write\written@tm@file{mode_setup;}%
- \immediate\write\written@tm@file{input txmfont;}%
- \immediate\write\written@tm@file{input texmuse;}%
- \immediate\write\written@tm@file{instr_no(\the\@no@of@instr);}%
- \@tempcnta0\relax
- \immediate\write\written@tm@file{key_ := \the\@key;}%
- \immediate\write\written@tm@file{desired_width := \@desiredwidth/pt;}%
- \@tempcnta0\relax
- \@for\curr@instr:=\instr@list\do
- {\advance\@tempcnta1\relax
- \immediate\write\written@tm@file{staff_\the\@tempcnta="-1,0,1,2,3";}%
- \immediate\write\written@tm@file{bar_type\the\@tempcnta=\barline@default;}%
- \immediate\write\written@tm@file{instr_clef\the\@tempcnta :=
- \csname\curr@instr @clef\endcsname;}%
- \immediate\write\written@tm@file{def \curr@instr\space =}%
- \immediate\write\written@tm@file{\space\space\space curr_instr:="\curr@instr;";}%
- \immediate\write\written@tm@file{\space\space\space note_[index][instr_]:=currentpicture;}%
- \immediate\write\written@tm@file{\space\space\space instr_:=\the\@tempcnta;}%
- \immediate\write\written@tm@file{\space\space\space currentpicture:=note_[index][instr_];}%
- \immediate\write\written@tm@file{\space\space\space enddef;}}%
- \@tempswatrue}
-\def\close@@line{%
- \immediate\write\written@tm@file{make_line(next_char); showstats; end.}%
- \immediate\closeout\written@tm@file}
-%Initializations
-\def\init@quantization{\@tempswbtrue
- \immediate\openout\written@tm@file=\jobname.tm1\relax%
- \immediate\write\written@tm@file{9999: 0.}%
- \immediate\closeout\written@tm@file\relax}%
-\def\open@matrix{\immediate\openin\read@tm@file=\jobname.tm\ifodd\instrument@number 2\else1\fi\relax}
-\def\open@tms{%
- \@for\curr@instr:=\instr@list\do
- {\expandafter\newread\csname\curr@instr @file\endcsname
- \immediate\openin\csname\curr@instr @file\endcsname=\curr@instr.tms%
- \expandafter\newtoks\csname\curr@instr @blocktoks\endcsname}}
-\@plainnote{}
-\@atnote{}
-\@hookels0
-\@firstmf1\relax
-\FontSplit=180\relax
-\def\barline@default{10}
-\let\@barline\barline@default
-
-\makeatother
-