It's of course already done for text drawing and cut-and-paste in
redisplay-carbon.c and select-carbon.c. The coding system
used on Mac
OS X is Qcarbon_unicode, defined in intl-carbon.c. The macro
TO_EXTERNAL_FORMAT was used for external encoding (is that OK?).
Yes, that is totally fine.
Some places that need changes are menus, font names, toolbar
help text,
and frame titles. Again I don't think this is hard to do. I'll
probably write a function or macro that uses
NEW_LISP_STRING_TO_EXTERNAL to convert Lisp_String to CFStringRef (OS
X's unicode string representation).
Sounds good. All of the macros end up accomplishing the same thing. The
only difference between NEW_LISP_STRING_TO_EXTERNAL and the ones based on
TO_EXTERNAL_FORMAT is that the former actually return an alloca()ed string
while the latter require a temporary variable. (Originally I wanted
everything to work like the NEW_* macros, but there turned out to be serious
bugs in the GCC of that era on x86 computers with handling alloca() within
function calls -- thankfully they are now fixed. What I do now, and should
have done then had I thought of it, was to insert a check in `configure' for
broken alloca() within function calls and use the portable alloca()
replacement in alloca.c.)
Btw you'd have to write a macro, not a function, because of the use of
alloca().
ben