jww@bonnie.UUCP (Joel West) (03/20/85)
I am using Megamax C release 2.0 and trying to get the skeleton application
posted recently to work. Unfortunately, I am getting one too many conflicts
between C strings (which end in a 0) and Pascal "str255" (which are preceeded
by a length byte).
As distributed, the skeleton app uses GetString() to fetch a Pascal string
and then stuffs it in a dialog box with ParamString(). However, Megamax
converts all strings from C-style to Pascal style as you pass them to toolbox
routines. (One could debate this approach, but it does appear to be a
reasonably justifiable solution to the problem.) ParamString might not have
done this conversion before 2.0, but it sure does now.
Being a reasonably clever fellow, I have tried a variety of approaches, being
careful not to stray beyond the bounds of good taste. I have tried:
(1) Using the distributed version.
RESULT: Garbage leading character, random (varying) garbage
trailing character(s).
(2) Using the distributed .c files, adding trailing "\0" to the declaration
of the Pascal string resources.
RESULT: No trailing garbage, still leading garbage (the length byte).
(3) Using "Type GNRL = CSTR" and the ".S" data type in my resource file.
RESULT: Undistinguishable from (2). A friend said he'd found using
ResEdit that the ".S" strings don't seem to do what you'd
expect, i.e., a naked string without a length byte.
(4) Revert to std. resource declarations; produce a modified getCstring()
which converts C strings in place after calling GetString().
RESULT: Works beautifully the first time. However, the second time the
same string is used, a Pascal string is expected by getCstring()
(but it's actually in C form already) and all hell breaks loose.
(5) Go back to (2). Write a getCstring() that takes the GetString() and
then bumps the pointer referenced by the handle.
RESULT: Beautiful. The strings show up perfect every time. However,
Quit crashes the system.
Any ideas? Declaring null-terminated C strings in the resource file would be
nice, but I can't figure out how to do it. Or, SuMacC allows you to fool
the interface string converter with "isapstr(..)", which indicates the string
is already Pascal-like and thus suppresses conversion.
Mail responses to me and I'll post the revised Skeleton with the winning entry
to net.sources.mac.
--
Joel West (619) 457-9681
CACI, Inc. - Federal 3344 N. Torrey Pines Ct La Jolla 92037
jww@bonnie.UUCP (ihnp4!bonnie!jww)
westjw@nosc.ARPA
"The best is the enemy of the good" - A. Mullarney