Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!uunet!husc6!cmcl2!rutgers!iuvax!pur-ee!uiucdcs!uxc.cso.uiuc.edu!dorner
From: dorner@uxc.cso.uiuc.edu
Newsgroups: comp.sys.mac
Subject: Re: Help wanted:  a LSC question
Message-ID: <174400081@uxc.cso.uiuc.edu>
Date: Wed, 2-Dec-87 10:39:00 EST
Article-I.D.: uxc.174400081
Posted: Wed Dec  2 10:39:00 1987
Date-Received: Mon, 7-Dec-87 01:29:43 EST
References: <870053@hpcilzb.HP.COM>
Lines: 41
Nf-ID: #R:hpcilzb.HP.COM:870053:uxc.cso.uiuc.edu:174400081:000:1211
Nf-From: uxc.cso.uiuc.edu!dorner    Dec  2 09:39:00 1987


>>Can someone tell me what I'm doing wrong here?  Using Lightspeed C v.2.11,
>>I tried to do the following:
>>
>>		tempPoint = aRect.topLeft;
>>
>>When I tried to compile this, I got the error message: 
>>	"Wrong number of arguments to macro topLeft"
>
>	You're getting confused between C and Pascal. In C there's no easy
>way to get at the variants of a record. Therefore, there's a macro (declared in
>"QuickDraw.h") for "topLeft" and "botRight". Instead of "aRect.topLeft", say
>"topLeft(aRect)", and all will be well.
>
>		--Rich

Ahem.

typedef struct
    {
	union {
	    int coords[4];
	    Point funnies[2];
	} r_un;
    } Rect ;
#define top		r_un.coords[0]
#define left		r_un.coords[1]
#define bottom		r_un.coords[2]
#define right		r_un.coords[3]
#define topLeft		r_un.funnies[0]
#define botRight	r_un.funnies[1]

This would have worked fine, and allowed me to say r.topLeft.

Perhaps (I'm not well versed (yet) in the ins and outs of Macintosh
programming) there are reasons that this was not done.  But to chalk it
up to a deficiency in C is not correct.
----
Steve Dorner, U of Illinois Computing Services Office
Internet: dorner@uxc.cso.uiuc.edu  UUCP: ihnp4!uiucuxc!dorner
IfUMust:  (217) 333-3339