diff --git a/glafp-utils/sgmlverb/Makefile b/glafp-utils/sgmlverb/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..9d47c267968c3657372a5a31164b13d0a4cb35a4
--- /dev/null
+++ b/glafp-utils/sgmlverb/Makefile
@@ -0,0 +1,15 @@
+TOP=..
+include $(TOP)/mk/boilerplate.mk
+
+C_SRCS = sgmlverb.c
+C_PROG = sgmlverb
+LIBS = $(FLEX_LIB)
+
+override SRC_FLEX_OPTS=-8
+
+#
+# For src distributions, include flex output.
+#
+SRC_DIST_FILES += sgmlverb.c
+
+include $(TOP)/mk/target.mk
diff --git a/glafp-utils/sgmlverb/sgmlverb.lex b/glafp-utils/sgmlverb/sgmlverb.lex
new file mode 100644
index 0000000000000000000000000000000000000000..c60520035aa480e356a6a2c9c8990cbe2d7d47e4
--- /dev/null
+++ b/glafp-utils/sgmlverb/sgmlverb.lex
@@ -0,0 +1,60 @@
+
+  /*	This Lex script acts as a filter to pre-process Latex files.
+
+	It surrounds groups of lines beginning with a ">" sign, and
+	preceded and followed by a blank line, with \begin{verbatim} 
+	and \end{verbatim}.  The ">" may be preceded by a digit or digit
+	range (eg 4>, 2-5>, 3->); in this case the digits are removed.  
+	They are meant to be used for filtering out versions.
+
+	It takes words surrounded with @ signs (thus @letrec@) and makes them
+	come out in typewriter font, regardless of the current mode.
+  */
+
+%START  NORM  VERB  VERBENV
+sp			[ \t]*
+nl			{sp}\n{sp}
+miranda			([0-9]+(\-([0-9]+)?)?)?>
+%{
+#define PUSH		states[top++] =
+#define POP		BEGIN states[--top]
+#define yywrap() 	1
+%}
+%%
+			int states[256];
+			int top;
+			BEGIN NORM;
+			top = 0;
+<NORM>@@		{ printf ("@"); }
+<NORM>@			{ printf ("<tt>"); PUSH NORM;  BEGIN VERB; }
+<VERB>@			{ printf ("</tt>");  POP; }
+<VERB>@@		{ printf ("@"); }
+<VERB>\>		{ printf ("&gt;"); }
+<VERB>\<		{ printf ("&lt;"); }
+<VERB>\#		{ printf ("&num;"); }
+<VERB>\$		{ printf ("&dollar;"); }
+<VERB>\%		{ printf ("&percnt;"); }
+<VERB>\&		{ printf ("&amp;"); }
+<VERB>\~		{ printf ("&tilde;"); }
+<VERB>\^		{ printf ("&circ;"); }
+
+<NORM>\<verb\>		{ printf ("<verb>"); PUSH NORM; BEGIN VERBENV; }
+<VERBENV>\<\/verb\>	{ printf ("</verb>"); POP; }
+<VERBENV>\&\&		{ printf ("&"); }
+<VERBENV>\&		{ printf ("&ero;"); }
+<VERBENV>\<\/		{ printf ("&etago;"); }
+
+%%
+int
+main()
+{
+    yylex();
+    return(0);
+}
+
+/*
+<VERB>\_		{ printf ("{\\char'137}"); }
+<VERB>\\		{ printf ("{\\char'134}"); }
+<VERB>\{		{ printf ("{\\char'173}"); }
+<VERB>\}		{ printf ("{\\char'175}"); }
+*/