Wow. This is impressive. I especially like the way you've documented
it all -- a habit we should all acquire.
Regarding the patch: I think it would be a bit more readable if it
were a unified diff. (see etc/BETA for all the gory details about
sending diffs.)
I haven't looked at the Mule-state of the sources, but the following
example caught my eyes:
+ DEFUN ("my-function", Fmy_function, 1, 1, "FFile name: ", /*
+ Sample Emacs primitive function.
+
+ The specified FILE is frobricated before it is fnozzled.
+ */
+ (file))
+ @{
+ char *filename;
+
+ if (NILP(file))
+ return Qnil;
+
+ filename = (char *)XSTRING_DATA(file);
+ frob(filename);
+ return Qt;
+ @}
This is clearly wrong -- FILE is a Lisp string, so XSTRING_DATA (file)
is a string of Bufbytes, not of chars. Just casting it to char * is
wrong, unless frob() is ready to work with FILENAME in the internal
Emacs representation -- but in that case it should accept a Bufbyte *
argument, so no cast should be necessary.
This is probably nitpicking, but such is Mule, and at least our
examples should be, well, exemplary. :-)