[net.micro.mac] C-style string resources

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