# typesetting source code (Funnelweb)

Am using the Funnelweb literate programming tool, producing Tex output.

In some code I have, I need to insert ASCII code 25 in the C source code.

This works fine as far as producing the C code, but when I run Latex on the .tex file, I get:

! Text line contains an invalid character.
l.1573
...
^^Y


The relevant piece of the .tex file is:

\fwbtx[
...
^Y
...
]


(in Emacs; the ^Y is one character, not two)

and the "fwbtx" macro is defined as:

\def\fwbtx[{%
\begingroup%
\def\par{\leavevmode\endgraf}%
\catcode\=\active%
\obeylines%
\def\do##1{\catcode##1=12 }\dospecials%
\obeyspaces
\parskip=0pt%
\tt%
\fwverbatimgobble}

\def\fwverbatimgobble#1]fwetx={#1\endgroup}


which, I believe, is supposed to escape all non-ASCII characters, so that Tex does not complain.

Can anybody explain what goes wrong?

Is there some simple work-around? Replace the "fwbtx" macro with something?

Any help appreciated.

• please post a complete small example that demonstrates the problem it is very hard to debug a fragment like this, although \catcode=\active% looks wrong (and \tt is bad style for latex, should be \ttfamily) but none of the code shown changes the interpretation of character 25 – David Carlisle Jan 27 '17 at 15:41
• given that this is a typesetting system what do you want char 25 to do if it isn't an error? It's the ASCII control character END OF MEDIUM – David Carlisle Jan 27 '17 at 16:00
• The file is 75k and auto-generated. I thought I'd try this first before trying to create a small example. I thought the idea was that that character (ASCII 25) should be replaced with something else. (It is there in the code as a symbol in a menu label.) – Tomas By Jan 27 '17 at 16:07
• almost certainly you can do \catcode25=\active\def^^Y{X} and it will come out as an X. (do the definition at the top level not inside some other command) – David Carlisle Jan 27 '17 at 16:09
• Instead of asking the same question with a minimal example, it would be better to edit the question to add the MWE. – Schweinebacke Jan 27 '17 at 16:43

You can simply change the definition of \fwbeginmacro and \fwendmacro to make ^^Y an ignored character.

\def\fwbeginmacro{\begingroup\fwparskipoff\bigskip\catcode\^^Y=9 }
\def\fwendmacro{\fwparskipon\par\endgroup}


You can also add a new command

\def\fwignorexxv{\catcode\^^Y=9}


and use this macro at the begin of the code just after \fwbeginmacro.

If it should not be ignored but shown, you could use something like:

\tolerance=10000
\parindent=0pt
\def\fwparskipon{\parskip=\medskipamount}
\def\fwparskipoff{\parskip=0pt}
\fwparskipon
\raggedbottom
\font\fwfontnote=cmr7
\font\fwfontnorm=cmr10
\font\fwfontnorma=cmr10 scaled \magstep1
\font\fwfontnormb=cmr10 scaled \magstep2
\font\fwfontbold=cmbx10
\font\fwfontbolda=cmbx10 scaled \magstep1
\font\fwfontboldb=cmbx10 scaled \magstep2
\font\fwfontboldc=cmbx10 scaled \magstep3
\font\fwfontboldd=cmbx10 scaled \magstep4
\begingroup
\catcode\^^Y=\active
\gdef\fwshowxxv{\catcode\^^Y=\active\def^^Y{\textcolor{red}{\textasciicircum
Y}}}
\endgroup
\def\fwbeginmacro{\begingroup\fwparskipoff\bigskip\fwshowxxv}
\def\fwendmacro{\fwparskipon\par\endgroup}
\def\fwmacroname#1#2{{\sl #1\/}$\lbrack$#2$\rbrack$}
\def\fwfilename#1#2{{\bf #1}$\lbrack$#2$\rbrack$}
\def\fwzero#1{{\bf Z}}
\def\fwmany#1{{\bf M}}
\def\fwlib#1{{\bf L}}
\def\fwequals{ $\equiv$}
\def\fwplusequals{ $+\equiv$}
\def\fwodef{\parindent=15pt\vskip0pt$\lbrace$\parindent=20pt}
\def\fwcdef{$\rbrace$\vskip0pt\parindent=0pt}
\def\fwoquote{}
\def\fwcquote{'}
\def\fwoparen{$($}
\def\fwcomma{$,$}
\def\fwcparen{$)$}
\def\fwparam#1{$\diamond #1$}
\def\fwparams#1{$(\diamond #1)$}
\def\fwbeginmacronotes{\begingroup\baselineskip=9pt\smallskip}
\def\fwnote#1{{\fwfontnote #1}\par}
\def\fwisafile#1{\fwnote{#1}}
\def\fwusedin#1{\fwnote{#1}}
\def\fwseealso#1{\fwnote{#1}}
\def\fwendmacronotes{\endgroup}
{\catcode\=\active \gdef{\relax\lq}}
{\obeyspaces\global\let =\ }
\def\fwbtx[{%
\begingroup%
\def\par{\leavevmode\endgraf}%
\catcode\=\active%
\obeylines%
\def\do##1{\catcode##1=12 }\dospecials%
\obeyspaces
\parskip=0pt%
\tt%
\fwverbatimgobble}
\def\fwverbatimgobble#1]fwetx={#1\endgroup}
\def\fwrule{\medskip\hrule\medskip}
\def\fwqh{\hskip1.5em\relax}
\def\fwbeforesec{\penalty-200\bigskip\medskip\par}
\def\fwtoca#1#2{\leftline{{\bf #1 #2}}}
\def\fwtocb#1#2{\leftline{\fwqh #1 #2}}
\def\fwtocc#1#2{\leftline{\fwqh\fwqh #1 #2}}
\def\fwtocd#1#2{\leftline{\fwqh\fwqh\fwqh #1 #2}}
\def\fwtoce#1#2{\leftline{\fwqh\fwqh\fwqh\fwqh #1 #2}}
\def\fwtocfinish#1{\fwrule}
\def\fwliba#1#2{\vfill\eject{\fwfontboldc #1 #2}\penalty200\smallskip}
\def\fwlibb#1#2{\fwbeforesec{\fwfontboldb #1 #2}\penalty200\smallskip}
\def\fwlibc#1#2{\fwbeforesec{\fwfontnormb #1 #2}\penalty200\smallskip}
\def\fwlibd#1#2{\fwbeforesec{\bf          #1 #2}\penalty200}
\def\fwlibe#1#2{\fwbeforesec{\bf          #1 #2}}
\def\fwseca#1#2{\fwliba{#1}{#2}}
\def\fwsecb#1#2{\fwlibb{#1}{#2}}
\def\fwsecc#1#2{\fwlibc{#1}{#2}}
\def\fwsecd#1#2{\fwlibd{#1}{#2}}
\def\fwsece#1#2{\fwlibe{#1}{#2}}
\def\fwlit#1{{\tt #1}}
\def\fwemp#1{{\it #1}}
\def\fwnewpage{\vfill\eject}
\def\fwvskip#1{\null\vskip #1mm}
\def\fwfontnormal#1{{\fwfontnorm {#1}}}
\def\fwfonttitle#1{{\fwfontboldd {#1}}}
\def\fwfontsmalltitle#1{{\fwfontboldb {#1}}}
\def\fwleftline#1{\leftline{#1}}
\def\fwcenterline#1{\centerline{#1}}
\def\fwrightline#1{\rightline{#1}}
\def\p#1{{\tt #1}}  % P for Program text.
\def\flagpage#1#2{
\null
\vfill
\centerline{\fwfontboldd #1}
\vskip 1cm
\centerline{\fwfontboldd #2}
\vfill
\null
\vfill
}
\documentclass{article}
\usepackage{xcolor}
\begin{document}
\fwbeginmacro
\fwmacroname{Example}{1}\fwequals \fwodef \fwbtx[ABC]fwetx=%
\fwcdef
\fwbeginmacronotes
\fwusedin{This macro is invoked in definition 2.}
\fwendmacronotes
\fwendmacro
\fwbeginmacro
\fwfilename{ex.txt}{2}\fwequals \fwodef \fwmacroname{Example}{1}\fwbtx[
]fwetx=%
\fwcdef
\fwbeginmacronotes
\fwisafile{This macro is attached to an output file.}
\fwendmacronotes
\fwendmacro
\end{document}
`

But note: This is a very ugly mixture of plainTeX and LaTeX code!

• Ok, thanks. I think either of these are fine, as I don't really care that much whether or not that character is in the document. – Tomas By Jan 27 '17 at 17:42