[M3devel] declaring a type's existance but not enough to instantiate it?
Mika Nystrom
mika at async.caltech.edu
Mon Jan 12 11:13:25 CET 2009
I think you're misunderstanding me a bit. You don't need C either.
I would use a Lisp-based language for the "top level" just because
they are good at handling things like parse trees, if one gets to
that.
The objectives are:
* A finished system in Pure Modula-3 (no executable C)
* Make it as self-contained as possible
You'd start by simply bundling the existing headers with m3bundle
and printing them out. Then you'd find duplication (what you've
been doing) and express that programmatically. Then you might find
things that might conceivably change in the OS headers and use
whatever tricks were necessary to figure them out automatically.
Does this involve C? Maybe on some architecture it does, maybe on
another it doesn't. On some it might not involve running C but
merely parsing C headers. Perhaps the program is just hand-written
and just a way of distilling all the duplication into one place
where it can be clearly described and documented. Since this is a
Modula-3 distribution, obviously the program I'm talking about is
written in Modula-3, not in C or Perl or Python.
Mika
Jay writes:
>--_2e194b09-14b6-4301-9116-a9e4d1e522b4_
>Content-Type: text/plain; charset="iso-8859-1"
>Content-Transfer-Encoding: quoted-printable
>
>
>Yes=2C generating the headers is viable.
>I thought I mentioned that a few times.
>They could be generated in any build "that can". i.e. a native build=2C th=
>at has a working C development system and checked against the checked in o=
>nes.
> So then porting is: copy the generator to new system=2C run it=2C copy r=
>esults back=2C proceed=20
> Maybe a good compromise. Not good for "embedded systems"=2C but heck=2C i=
>s there any such thing any longer? Doesn't everything have megs of RAM and=
> gigs of persistant storage? :)
>You don't need Scheme.
>Just Quake + compiling and running C code.
>Assuming a native build system.
>I've done stuff in cross build systems like:
>typedef struct foo_t {int i=3B int j=3B } foo_t=3B
>extern const int xi =3D offsetof(foo_t=2C i)=3B
>=20
>compile that=2C and read the value of xi out of the .obj file.
>=20
> The .obj file reader was written in Perl. :)=20
> (Python not available.)
> but to do that here=2C I'd have to support multiple .obj file formats.
>=20
> - Jay> To: jay.krell at cornell.edu> Date: Mon=2C 12 Jan 2009 01:34:24 -0800>=
> From: mika at async.caltech.edu> CC: m3devel at elegosoft.com> Subject: Re: [M3d=
>evel] declaring a type's existance but not enough to instantiate it?> > > Y=
>ou present it as a true tragic Dilemma.> > But isn't there a Third Way---to=
> wit=2C can't you "Ask the Computer"> to do the work for you?> > Generate t=
>he code somehow... Parsing the C headers is an obvious> way but there may b=
>e others that are simpler=2C such as writing a> Modula-3 program to generat=
>e the cloned M3 headers=2C sorry=2C interfaces.> > If I had to do this I wo=
>uld use my Scheme interpreter that's coded> in Modula-3 to write a Scheme p=
>rogram to generate the headers. This> program could pull whatever tricks ar=
>e deemed necessary and suitable=2C> down to the point of generating and com=
>piling and running C programs> as necessary (or parsing C code=2C or readin=
>g tea leaves). But the> end result would be a set of interfaces written in =
>"Pure Modula-3".> The process of running the header generator would also ha=
>ve very> few dependencies on anything outside the M3 distribution.> > Mika>=
> > Jay writes:> >--_6117a048-9185-4c03-badb-ef8f93402268_> >Content-Type: t=
>ext/plain=3B charset=3D"iso-8859-1"> >Content-Transfer-Encoding: quoted-pri=
>ntable> >> >> >This is what you "have to" chose between.> >Header cloning o=
>r C code (and C headers).> >=3D20> >CONST or VAR (or functions?)> >=3D20> >=
>I'm going to likely make the Uerror change tonight.> >You can still veto it=
> (er=3D2C vote against it :) )> >=3D20> >Possibly some convuluted C (enum/#=
>undef)=3D2C or splitting the Modula-3> >at boundaries that weren't previous=
>ly believed "natural".> >(See how SetupHandlers is ~two lines in Modula-3 a=
>nd the rest in C=3D3B> >this is partly out of ignorance. I don't know how t=
>o write those> >two lines in C=3D3B and laziness=3D2C I didn't look into ho=
>w).> >=3D20> >=3D20> >=3D20> >Remember I'm still staying away from mainstre=
>am platforms=3D2C> >so the value isn't what it might appear to be=3D2C but =
>it is "stage setting"=3D> >=3D2C> >and the show might go on. :)> >=3D20> >=
>=3D20> >Also=3D2C the dilemna does get more difficult now=3D2C with the lit=
>tle C header=3D> > cloning that remains.> >=3D20> >For example=3D2C look at=
> Upthreads.i3.> >Mainly=3D2C look at function prototypes.> >Constants and t=
>ypes are "known problems".> >Prototypes are gray. They actually tend to be =
>portable.> >=3D20> >For example:> >=3D20> >TYPE pid_t =3D3D INTEGER=3D3B> >=
><*EXTERNAL "m3_getpid*> PROCEDURE getpid():pid_t=3D3B> >=3D20> >or leave it=
> alone?> >getpid is probably the worst example.> >It is so very portable de=
>clared in Modula-3.> >But still=3D2C imagine pid_t might be 16bits or 32 or=
> 64.> >Writing a wrapper is more portable -- as long as the pid isn't stuff=
> into s=3D> >ome record that the system defines.> >=3D20> >=3D20> >Again=3D=
>2C Upthreads.i3.> >Would you like to see it reduced=3D2C or left alone?> >O=
>nly deal with the types and initializers=3D2C or also the prototypes?> >You=
> know=3D2C I could write a little portable layer=3D2C where all the types a=
>r=3D> >e pointers=3D2C always null initialized.> >It would buy /some/ porta=
>bility=3D2C and cost some.> >=3D20> >=3D20> >Do you like the sem_t change? =
>Partly? Not at all?> >There is one sem_t in the system. So I moved it to be=
> in C code.> >Or=3D2C as I had it before=3D2C declared as the max size/alig=
>n of all the platf=3D> >orms -- getting that right is the same work as gett=
>ing it right "the old wa=3D> >y"=3D2C except if you make a mistake=3D2C odd=
>s are still good of it being ok.> >=3D20> >=3D20> >Should the line be drawn=
> at generating the remaining headers=3D2C rather than=3D> > eliminating the=
>m?> >Uerror.i3 is easily generated. Good enough?> >=3D20> >Upthread.i3's ty=
>pes can be generated generally as records with opaque array=3D> >s with the=
> right size and alignment.> >=3D20> >Other stuff can be generated or at lea=
>st checked.> >e.g. to check that getpid is declared correctly=3D2C you can =
>assign it to a f=3D> >unction pointer and see if that compiles.> >=3D20> >P=
>erf on Uerror arguably doesn't matter.> >Is it only error handling code?Or =
>do sockets often go down "error" paths=3D2C=3D> > because they are slow and=
> you are waiting for more data?> >=3D20> >Anyway=3D2C point is=3D2C I agree=
> for sure this is valuable=3D2C but I might be h=3D> >itting the "tail" of =
>the approach and should switch=3D2C I'm not sure. I keep=3D> > saying that =
>though=3D2C and then press further.> >=3D20> >=3D20> > - Jay> >> >> >> >Fro=
>m: hosking at cs.purdue.eduTo: jay.krell at cornell.eduDate: Mon=3D2C 12 Jan 200=
>=3D> >9 19:24:50 +1100CC: m3devel at elegosoft.comSubject: Re: [M3devel] decla=
>ring a=3D> > type's existance but not enough to instantiate it?> >> >> >Poi=
>nt taken. We live in a C universe and so need to interact. I do think =3D> =
>>your work with the headers is useful=3D2C and I want it to continue. Espec=
>ia=3D> >lly in simplifying ports.> >> >> >On 12 Jan 2009=3D2C at 19:18=3D2C=
> Jay wrote:> >> >I don't think a development system without C headers is in=
>teresting.. Is it=3D> > really? The transform I apply at times is wherever =
>there is interaction wi=3D> >th C code that is described by system-dependen=
>t headers=3D2C or perhaps even =3D> >fairly system-independent headers outs=
>ide the Modula-3 tree=3D2C either write=3D> > wrapper functions for the fun=
>ctionality in the headers (e.g. stat=3D2C waitp=3D> >id)=3D2C which can be =
>done in a system-independent way=3D2C or move the Modula-=3D> >3<->C transi=
>tion higher=3D2C which is also usually system-independent=3D2C e.g.=3D> > T=
>hreadPThreadC_SetupHandlers. It is either that or clone the headers=3D2C wh=
>=3D> >ich seems like the worse evil. There is always going to be a Modula-3=
><->C t=3D> >ransition=3D2C it is just a matter of where it occurs. - Jay> >=
>> >CC: m3devel at elegosoft.comFrom: hosking at cs.purdue.eduTo: jay.krell at cornel=
>l.e=3D> >duSubject: Re: [M3devel] declaring a type's existance but not enou=
>gh to ins=3D> >tantiate it?Date: Mon=3D2C 12 Jan 2009 12:32:15 +1100> >> >>=
> >Jay=3D2C I really think you are bending over backwards too far just to be=
> abl=3D> >e to shoe-horn things into C. I *like* having the transpar of C h=
>eader fil=3D> >es expressed in Modula-3=3D2C *particularly* for system call=
>s=3D2C where you mi=3D> >ght even be trying to build on a system that does =
>not have the C header fil=3D> >es installed=3D2C even though the libraries =
>exist and can be linked to. Fund=3D> >amentally=3D2C I think anytime the Mo=
>dula-3 code is made less transparent you=3D> > should think hard about what=
> you are doing. The same with the change of c=3D> >onstants to variables.> =
>>> >I am getting very nervous that the changes you are making are destroyin=
>g th=3D> >e clarity of the Modula-3 run-time code.> >> >In this particular =
>case=3D2C you are wanting to use a Modula-3 parameter pass=3D> >ing mechani=
>sm on something that is not declared in Modula-3. Seems kind of=3D> > dubio=
>us to me. Also=3D2C I really don't like the idea of accessing external=3D> =
>> variables in C.> >> >-- Tony> >> >On 12 Jan 2009=3D2C at 11:55=3D2C Jay w=
>rote:> >> >I considered ADDRESS.However I think it still doesn't satisfy. I=
> want to be=3D> > able to do this: TYPE Foo_t =3D3D something=3D3B<* EXTERN=
>AL *> VAR Foo1=3D2C Foo=3D> >2:Foo_t=3D3B<* EXTERNAL *> PROCEDURE UseFoo(RE=
>ADONLY (* or VAR *) foo:Foo_t)=3D> >=3D3B (* Modula-3=3D2C not external *)P=
>ROCEDURE x()=3D3DBEGIN UseFoo(Foo1)=3D3B U=3D> >seFoo(Foo2)=3D3BEND x=3D3B =
>AND I want any use of:VAR Foo3:Foo3_t=3D3B (* Modula-3=3D> >=3D2C not exter=
>nal *)to error. This is sem_t and sigset_t in particular. Poss=3D> >ibly re=
>naming is the thing.They used to be declared in Modula-3=3D2C system-d=3D> =
>>ependently=3D2C butI moved them to portable C. I could remove the types en=
>tir=3D> >ely and change UseFoo to take an address=3D2Cand declare mask and =
>ackSem to b=3D> >e integers or I guess.<*EXTERNAL> VAR ackSem : RECORD END=
>=3D3B That would sat=3D> >isfy but I thought it might be nicer to still pro=
>vide the namedtypes to ref=3D> >er to the external variables. - Jay> >> >Fr=
>om: hosking at cs.purdue.eduTo: jay.krell at cornell.eduDate: Mon=3D2C 12 Jan 200=
>=3D> >9 11:13:00 +1100CC: m3devel at elegosoft.comSubject: Re: [M3devel] decla=
>ring a=3D> > type's existance but not enough to instantiate it?What's wrong=
> with using =3D> >ADDRESS for references to opaque values? If sigset_t is n=
>ever instantiated=3D> > in Modula-3=3D2C then why do you need it declared t=
>here?> >> >> >> >Antony Hosking | Associate Professor | Computer Science | =
>Purdue University> >305 N. University Street | West Lafayette | IN 47907 | =
>USA> >Office +1 765 494 6001 | Mobile +1 765 427 5484> >> >> >On 12 Jan 200=
>9=3D2C at 01:44=3D2C Jay wrote:> >> >Is there a way in Modula-3 to declare =
>that a type exists=3D2C and there are <=3D> >*external*> instances of it=3D=
>2C without "fully" declaring it=3D2C so that no M=3D> >odula-3 can instanti=
>ate it? I have done this for sigset_t and sem_t=3D2C but =3D> >they could e=
>rroneously be instantiated by Modula-3 and I'd like to remove t=3D> >hat ab=
>ility to mess up so easily. (* This type is not declared correctly. I=3D> >=
>t is only instantiated in C code. *) sigset_t =3D3D RECORD END=3D3B(* This =
>typ=3D> >e is not declared correctly. It is only instantiated in C code. *)=
> sem_t =3D> >=3D3D RECORD END=3D3BIn C I believe you can do this=3D2C like:=
> typedef struct fo=3D> >o foo_t=3D3B extern foo_t foo=3D3B void UseFoo(foo_=
>t*)=3D3B foo_t* GetFoo=3D> >(void)=3D3B Thanks=3D2C - Jay=3D> >> >--_6117a0=
>48-9185-4c03-badb-ef8f93402268_> >Content-Type: text/html=3B charset=3D"iso=
>-8859-1"> >Content-Transfer-Encoding: quoted-printable> >> ><html>> ><head>=
>> ><style>> >.hmmessage P> >{> >margin:0px=3D3B> >padding:0px> >}> >body.hm=
>message> >{> >font-size: 10pt=3D3B> >font-family:Verdana> >}> ></style>> ><=
>/head>> ><body class=3D3D'hmmessage'>> >This is what you "have to" chose be=
>tween.<BR>> >Header cloning or C code (and C headers).<BR>> > =3D3B<BR>=
>> >CONST or VAR (or functions?)<BR>> > =3D3B<BR>> >I'm going to likely =
>make the Uerror change tonight.<BR>> >You can still veto it (er=3D2C vote a=
>gainst it :) )<BR>> > =3D3B<BR>> >Possibly some convuluted C (enum/#und=
>ef)=3D2C or splitting the Modula-3<BR>> >at boundaries that weren't previou=
>sly believed "natural".<BR>> >(See how SetupHandlers is ~two lines in Modul=
>a-3 and the rest in C=3D3B<BR>> >this is partly out of ignorance. I don't k=
>now how to write those<BR>> >two lines in C=3D3B and laziness=3D2C I didn't=
> look into how).<BR>> > =3D3B<BR>> > =3D3B<BR>> > =3D3B<BR>> >R=
>emember I'm still staying away from mainstream platforms=3D2C<BR>> >so the =
>value isn't what it might appear to be=3D2C but it is "stage setting"=3D> >=
>=3D2C<BR>> >and the show might go on. :)<BR>> > =3D3B<BR>> > =3D3B<=
>BR>> >Also=3D2C the dilemna does get more difficult now=3D2C with the littl=
>e C header=3D> > cloning that remains.<BR>> > =3D3B<BR>> >For example=
>=3D2C look at Upthreads.i3.<BR>> >Mainly=3D2C look at function prototypes.<=
>BR>> >Constants and types are "known problems".<BR>> >Prototypes are gray. =
>They actually tend to be portable.<BR>> > =3D3B<BR>> >For example:<BR>>=
> > =3D3B<BR>> >TYPE pid_t =3D3D INTEGER=3D3B<BR>> ><=3D3B*EXTERNAL "m=
>3_getpid*>=3D3B PROCEDURE getpid():pid_t=3D3B<BR>> > =3D3B<BR>> >or l=
>eave it alone?<BR>> >getpid is probably the worst example.<BR>> >It is so v=
>ery portable declared in Modula-3.<BR>> >But still=3D2C imagine pid_t might=
> be 16bits or 32 or 64.<BR>> >Writing a wrapper is more portable -- as long=
> as the pid isn't stuff into s=3D> >ome record that the system defines.<BR>=
>> > =3D3B<BR>> > =3D3B<BR>> >Again=3D2C Upthreads.i3.<BR>> >Would y=
>ou like to see it reduced=3D2C or left alone?<BR>> >Only deal with the type=
>s and initializers=3D2C or also the prototypes?<BR>> >You know=3D2C I could=
> write a little portable layer=3D2C where all the types ar=3D> >e pointers=
>=3D2C always null initialized.<BR>> >It would buy /some/ portability=3D2C a=
>nd cost some.<BR>> > =3D3B<BR>> > =3D3B<BR>> >Do you like the sem_t=
> change? Partly? Not at all?<BR>> >There is one sem_t in the system. So I m=
>oved it to be in C code.<BR>> >Or=3D2C as I had it before=3D2C declared as =
>the max size/align of all the platf=3D> >orms -- getting that right is the =
>same work as getting it right "the old wa=3D> >y"=3D2C except if you make a=
> mistake=3D2C odds are still good of it being ok.<B=3D> >R>> > =3D3B<BR=
>>> > =3D3B<BR>> >Should the line be drawn at generating the remaining h=
>eaders=3D2C rather than=3D> > eliminating them?<BR>> >Uerror.i3 is easily g=
>enerated. Good enough?<BR>> > =3D3B<BR>> >Upthread.i3's types can be ge=
>nerated generally as records with opaque array=3D> >s with the right size a=
>nd alignment.<BR>> > =3D3B<BR>> >Other stuff can be generated or at lea=
>st checked.<BR>> >e.g. to check that getpid is declared correctly=3D2C you =
>can assign it to a f=3D> >unction pointer and see if that compiles.<BR>> >&=
>nbsp=3D3B<BR>> >Perf on Uerror arguably doesn't matter.<BR>> >Is it only er=
>ror handling code?<BR>Or do sockets often go down "error" path=3D> >s=3D2C =
>because they are slow and you are waiting for more data?<BR>> > =3D3B<B=
>R>> >Anyway=3D2C point is=3D2C I agree for sure this is valuable=3D2C but I=
> might be h=3D> >itting the "tail" of the approach and should switch=3D2C I=
>'m not sure. I keep=3D> > saying that though=3D2C and then press further.<B=
>R>> > =3D3B<BR>> > =3D3B<BR>> > =3D3B- Jay<BR><BR>> >> ><HR id=
>=3D3DstopSpelling>> <BR>> >From: hosking at cs.purdue.edu<BR>To: jay.krell at cor=
>nell.edu<BR>Date: Mon=3D2C 12=3D> > Jan 2009 19:24:50 +1100<BR>CC: m3devel@=
>elegosoft.com<BR>Subject: Re: [M3de=3D> >vel] declaring a type's existance =
>but not enough to instantiate it?<BR><BR>=3D> ><BR>> ><DIV><SPAN class=3D3D=
>EC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: =3D> >12px Helv=
>etica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-IN=
>D=3D> >ENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B B=
>ORDER-COLLAPS=3D> >E: separate">> ><DIV style=3D3D"WORD-WRAP: break-word"><=
>SPAN class=3D3DEC_Apple-style-span styl=3D> >e=3D3D"WORD-SPACING: 0px=3D3B =
>FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B C=3D> >OLOR: rgb(0=3D2C=
>0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-S=3D> >=
>PACING: normal=3D3B BORDER-COLLAPSE: separate"><SPAN class=3D3DEC_Apple-sty=
>le-s=3D> >pan style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B T=
>EXT-TRANSFORM: n=3D> >one=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: =
>0px=3D3B WHITE-SPACE: normal=3D3B =3D> >LETTER-SPACING: normal=3D3B BORDER-=
>COLLAPSE: separate"><SPAN class=3D3DEC_Apple=3D> >-style-span style=3D3D"WO=
>RD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRAN=3D> >SFORM: none=
>=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: no=
>=3D> >rmal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separate"><SPA=
>N class=3D3D=3D> >EC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B FON=
>T: 12px Helvetica=3D3B T=3D> >EXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=
>=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-S=3D> >PACE: normal=3D3B LETTER-SP=
>ACING: normal=3D3B BORDER-COLLAPSE: separate"><SPAN =3D> >class=3D3DEC_Appl=
>e-style-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvet=3D> >ica=
>=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT:=
> 0px=3D3B=3D> > WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER=
>-COLLAPSE: separate=3D> >"><SPAN class=3D3DEC_Apple-style-span style=3D3D"W=
>ORD-SPACING: 0px=3D3B FONT: 12p=3D> >x Helvetica=3D3B TEXT-TRANSFORM: none=
>=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT=3D> >: 0px=3D3B WHITE-SPAC=
>E: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: =3D> >separate"=
>><SPAN class=3D3DEC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B F=3D=
>> >ONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D=
>2C0)=3D3B TEX=3D> >T-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACI=
>NG: normal=3D3B BORDER-CO=3D> >LLAPSE: separate"><SPAN class=3D3DEC_Apple-s=
>tyle-span style=3D3D"WORD-SPACING: =3D> >0px=3D3B FONT: 12px Helvetica=3D3B=
> TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0=3D> >)=3D3B TEXT-INDENT=
>: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B B=3D> >ORDE=
>R-COLLAPSE: separate">> ><DIV>Point taken.  =3D3BWe live in a C univers=
>e and so need to interact. =3D> > =3D3BI do think your work with the he=
>aders is useful=3D2C and I want it to=3D> > continue.  =3D3BEspecially =
>in simplifying ports.</DIV>> ><DIV><BR></DIV></SPAN></SPAN></SPAN></SPAN></=
>SPAN></SPAN></SPAN></SPAN></DI=3D> >V></SPAN></DIV>> ><DIV>> ><DIV>On 12 Ja=
>n 2009=3D2C at 19:18=3D2C Jay wrote:</DIV><BR class=3D3DEC_Apple-int=3D> >e=
>rchange-newline>> ><BLOCKQUOTE><SPAN class=3D3DEC_Apple-style-span style=3D=
>3D"WORD-SPACING: 0px=3D3B=3D> > FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: n=
>one=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B T=3D> >EXT-INDENT: 0px=3D3B WHITE-S=
>PACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-=3D> >COLLAPSE: separa=
>te">> ><DIV class=3D3DEC_hmmessage style=3D3D"FONT-SIZE: 10pt=3D3B FONT-FAM=
>ILY: Verdana"=3D> >>I don't think a development system without C headers is=
> interesting.. Is i=3D> >t really?<BR> =3D3B<BR>The transform I apply a=
>t times is wherever there i=3D> >s interaction with C code that is describe=
>d by system-dependent headers=3D2C =3D> >or perhaps even fairly system-inde=
>pendent headers outside the Modula-3 tree=3D> >=3D2C either write wrapper f=
>unctions for the functionality in the headers (e.=3D> >g. stat=3D2C waitpid=
>)=3D2C which =3D3Bcan be done in a system-independent way=3D> >=3D2C&nb=
>sp=3D3Bor move the Modula-3<=3D3B->=3D3BC transition higher=3D2C which =
>is=3D> > also usually system-independent=3D2C e.g. ThreadPThreadC_SetupHand=
>lers.<BR>&=3D> >nbsp=3D3B<BR>It is either that or clone the headers=3D2C wh=
>ich seems like the w=3D> >orse evil.<BR> =3D3B<BR>There is always going=
> to be a Modula-3<=3D3B->=3D> >=3D3BC transition=3D2C it is just a matt=
>er of where it occurs.<BR> =3D3B<BR>&=3D> >nbsp=3D3B- Jay<BR><BR>> ><HR=
> id=3D3DEC_stopSpelling>> ><BR>CC:<SPAN class=3D3DEC_Apple-converted-space>=
> =3D3B</SPAN><A href=3D3D"mai=3D> >lto:m3devel at elegosoft.com">m3devel at e=
>legosoft.com</A><BR>From:<SPAN class=3D3D=3D> >EC_Apple-converted-space>&nb=
>sp=3D3B</SPAN><A href=3D3D"mailto:hosking at cs.purdue=3D> >.edu">hosking at cs.p=
>urdue.edu</A><BR>To:<SPAN class=3D3DEC_Apple-converted-spac=3D> >e> =3D=
>3B</SPAN><A href=3D3D"mailto:jay.krell at cornell.edu">jay.krell at cornell=3D> >=
>.edu</A><BR>Subject: Re: [M3devel] declaring a type's existance but not eno=
>=3D> >ugh to instantiate it?<BR>Date: Mon=3D2C 12 Jan 2009 12:32:15 +1100<B=
>R><BR><B=3D> >R>> <DIV><SPAN class=3D3DEC_EC_Apple-style-span style=3D3D"WO=
>RD-SPACING: 0px=3D3B FON=3D> >T: 12px Helvetica=3D3B TEXT-TRANSFORM: none=
>=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-=3D> >INDENT: 0px=3D3B WHITE-SPAC=
>E: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLL=3D> >APSE: separate"=
>>> ><DIV style=3D3D"WORD-WRAP: break-word"><SPAN class=3D3DEC_EC_Apple-styl=
>e-span s=3D> >tyle=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TE=
>XT-TRANSFORM: none=3D> >=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0=
>px=3D3B WHITE-SPACE: normal=3D3B LET=3D> >TER-SPACING: normal=3D3B BORDER-C=
>OLLAPSE: separate"><SPAN class=3D3DEC_EC_Apple=3D> >-style-span style=3D3D"=
>WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRAN=3D> >SFORM: none=
>=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: no=
>=3D> >rmal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separate"><SPA=
>N class=3D3D=3D> >EC_EC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B =
>FONT: 12px Helvetica=3D> >=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C=
>0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WH=3D> >ITE-SPACE: normal=3D3B LETTER-S=
>PACING: normal=3D3B BORDER-COLLAPSE: separate"><=3D> >SPAN class=3D3DEC_EC_=
>Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12p=3D> >x Helveti=
>ca=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDEN=
>T=3D> >: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORD=
>ER-COLLAPSE: =3D> >separate"><SPAN class=3D3DEC_EC_Apple-style-span style=
>=3D3D"WORD-SPACING: 0px=3D> >=3D3B FONT: 12px Helvetica=3D3B TEXT-TRANSFORM=
>: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D> >=3D3B TEXT-INDENT: 0px=3D3B WHIT=
>E-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BO=3D> >RDER-COLLAPSE: sep=
>arate"><SPAN class=3D3DEC_EC_Apple-style-span style=3D3D"WORD=3D> >-SPACING=
>: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb=
>=3D> >(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B L=
>ETTER-SPACING: n=3D> >ormal=3D3B BORDER-COLLAPSE: separate"><SPAN class=3D3=
>DEC_EC_Apple-style-span st=3D> >yle=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px =
>Helvetica=3D3B TEXT-TRANSFORM: none=3D3B=3D> > COLOR: rgb(0=3D2C0=3D2C0)=3D=
>3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER=3D> >-SPACING: nor=
>mal=3D3B BORDER-COLLAPSE: separate"><SPAN class=3D3DEC_EC_Apple-st=3D> >yle=
>-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRAN=
>SFO=3D> >RM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B=
> WHITE-SPACE: norma=3D> >l=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE=
>: separate">> ><DIV>Jay=3D2C I really think you are bending over backwards =
>too far just to b=3D> >e able to shoe-horn things into C.  =3D3BI *like=
>* having the transpar of =3D> >C header files expressed in Modula-3=3D2C *p=
>articularly* for system calls=3D2C =3D> >where you might even be trying to =
>build on a system that does not have the =3D> >C header files installed=3D2=
>C even though the libraries exist and can be link=3D> >ed to.  =3D3BFun=
>damentally=3D2C I think anytime the Modula-3 code is made l=3D> >ess transp=
>arent you should think hard about what you are doing.  =3D3BThe=3D> > s=
>ame with the change of constants to variables.</DIV>> ><DIV><BR></DIV>> ><D=
>IV>I am getting very nervous that the changes you are making are destroyi=
>=3D> >ng the clarity of the Modula-3 run-time code.</DIV>> ><DIV><BR></DIV>=
>> ><DIV>In this particular case=3D2C you are wanting to use a Modula-3 para=
>meter=3D> > passing mechanism on something that is not declared in Modula-3=
>.  =3D3BS=3D> >eems kind of dubious to me.  =3D3BAlso=3D2C I really=
> don't like the idea of=3D> > accessing external variables in C.</DIV>> ><D=
>IV><BR></DIV>> ><DIV>-- Tony</DIV></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN=
>></SPAN></SPAN><=3D> >/DIV></SPAN></DIV><BR>> ><DIV>> ><DIV>On 12 Jan 2009=
>=3D2C at 11:55=3D2C Jay wrote:</DIV><BR class=3D3DEC_EC_Apple-=3D> >interch=
>ange-newline>> ><BLOCKQUOTE><SPAN class=3D3DEC_EC_Apple-style-span style=3D=
>3D"WORD-SPACING: 0px=3D> >=3D3B FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: n=
>one=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D> >=3D3B TEXT-INDENT: 0px=3D3B WHITE-S=
>PACE: normal=3D3B LETTER-SPACING: normal=3D3B BO=3D> >RDER-COLLAPSE: separa=
>te">> ><DIV class=3D3DEC_EC_hmmessage style=3D3D"FONT-SIZE: 10pt=3D3B FONT-=
>FAMILY: Verda=3D> >na">I considered ADDRESS.<BR>However I think it still do=
>esn't satisfy.<BR>&=3D> >nbsp=3D3B<BR>I want to be able to do this:<BR>&nbs=
>p=3D3B<BR>TYPE =3D3BFoo_t =3D> >=3D3D something=3D3B<BR><=3D3B* EXTER=
>NAL *>=3D3B VAR Foo1=3D2C Foo2:Foo_t=3D3B<BR>&=3D> >lt=3D3B* EXTERNAL *&g=
>t=3D3B PROCEDURE =3D3BUseFoo(READONLY (* or VAR *) foo:F=3D> >oo_t)=3D3=
>B<BR> =3D3B<BR>(* Modula-3=3D2C not external *)<BR>PROCEDURE x()=3D3D<=
>=3D> >BR>BEGIN<BR> =3D3B UseFoo(Foo1)=3D3B<BR> =3D3B UseFoo(Foo2)=
>=3D3B<BR>END x=3D> >=3D3B<BR> =3D3B<BR>AND I want any use of:<BR>VAR Fo=
>o3:Foo3_t=3D3B (* Modula-3=3D> >=3D2C not external *)<BR><BR>to error. This=
> is sem_t and sigset_t in particul=3D> >ar.<BR> =3D3B<BR>Possibly renam=
>ing is the thing.<BR>They used to be decla=3D> >red in Modula-3=3D2C system=
>-dependently=3D2C but<BR>I moved them to portable C.=3D> ><BR> =3D3B<BR=
>>I could remove the types entirely and change UseFoo to take=3D> > an addre=
>ss=3D2C<BR>and declare mask and ackSem to be integers or I guess.<BR=3D> >>=
><=3D3B*EXTERNAL>=3D3B VAR ackSem =3D3B: RECORD END=3D3B<BR> =3D=
>3B<BR>Tha=3D> >t would satisfy but I thought it might be nicer to still pro=
>vide the named<=3D> >BR>types to refer to the external variables.<BR> =
>=3D3B<BR> =3D3B- Jay<B=3D> >R><BR>> ><HR id=3D3DEC_EC_stopSpelling>> ><=
>BR>From:<SPAN class=3D3DEC_EC_Apple-converted-space> =3D3B</SPAN><A hre=
>f=3D> >=3D3D"mailto:hosking at cs.purdue.edu">hosking at cs.purdue.edu</A><BR>To:=
><SPAN cla=3D> >ss=3D3DEC_EC_Apple-converted-space> =3D3B</SPAN><A href=
>=3D3D"mailto:jay.krell=3D> >@cornell.edu">jay.krell at cornell.edu</A><BR>Date=
>: Mon=3D2C 12 Jan 2009 11:13:0=3D> >0 +1100<BR>CC:<SPAN class=3D3DEC_EC_App=
>le-converted-space> =3D3B</SPAN><A h=3D> >ref=3D3D"mailto:m3devel at elego=
>soft.com">m3devel at elegosoft.com</A><BR>Subject: =3D> >Re: [M3devel] declari=
>ng a type's existance but not enough to instantiate it=3D> >?<BR><BR>What's=
> wrong with using ADDRESS for references to opaque values? &=3D> >nbsp=3D3B=
>If sigset_t is never instantiated in Modula-3=3D2C then why do you nee=3D> =
>>d it declared there?<BR>> ><DIV><BR>> ><DIV><SPAN class=3D3DEC_EC_EC_Apple=
>-style-span style=3D3D"WORD-SPACING: 0px=3D3B =3D> >FONT: 12px Helvetica=3D=
>3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TE=3D> >XT-INDE=
>NT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-C=
>=3D> >OLLAPSE: separate">> ><DIV style=3D3D"WORD-WRAP: break-word"><SPAN cl=
>ass=3D3DEC_EC_EC_Apple-style-spa=3D> >n style=3D3D"WORD-SPACING: 0px=3D3B F=
>ONT: 12px Helvetica=3D3B TEXT-TRANSFORM: non=3D> >e=3D3B COLOR: rgb(0=3D2C0=
>=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LE=3D> >TTER-SP=
>ACING: normal=3D3B BORDER-COLLAPSE: separate"><SPAN class=3D3DEC_EC_EC_A=3D=
>> >pple-style-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=
>=3D3B TEXT-=3D> >TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-I=
>NDENT: 0px=3D3B WHITE-SPACE=3D> >: normal=3D3B LETTER-SPACING: normal=3D3B =
>BORDER-COLLAPSE: separate"><SPAN clas=3D> >s=3D3DEC_EC_EC_Apple-style-span =
>style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helv=3D> >etica=3D3B TEXT-TRAN=
>SFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D> >=3D3B=
> WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: sepa=
>r=3D> >ate"><SPAN class=3D3DEC_EC_EC_Apple-style-span style=3D3D"WORD-SPACI=
>NG: 0px=3D3B =3D> >FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLO=
>R: rgb(0=3D2C0=3D2C0)=3D3B TE=3D> >XT-INDENT: 0px=3D3B WHITE-SPACE: normal=
>=3D3B LETTER-SPACING: normal=3D3B BORDER-C=3D> >OLLAPSE: separate"><SPAN cl=
>ass=3D3DEC_EC_EC_Apple-style-span style=3D3D"WORD-SP=3D> >ACING: 0px=3D3B F=
>ONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D> >=3D2C0=
>=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING:=
> nor=3D> >mal=3D3B BORDER-COLLAPSE: separate"><SPAN class=3D3DEC_EC_EC_Appl=
>e-style-span s=3D> >tyle=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=
>=3D3B TEXT-TRANSFORM: none=3D> >=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-I=
>NDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LET=3D> >TER-SPACING: normal=3D3B =
>BORDER-COLLAPSE: separate"><SPAN class=3D3DEC_EC_EC_Ap=3D> >ple-style-span =
>style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-T=3D> >RAN=
>SFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE=
>-SPACE:=3D> > normal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: sepa=
>rate"><SPAN class=3D> >=3D3DEC_EC_EC_Apple-style-span style=3D3D"WORD-SPACI=
>NG: 0px=3D3B FONT: 12px Helve=3D> >tica=3D3B TEXT-TRANSFORM: none=3D3B COLO=
>R: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D> >=3D3B WHITE-SPACE: normal=
>=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separ=3D> >ate">> ><DIV>=
><FONT class=3D3DEC_EC_EC_Apple-style-span color=3D3D#0000ff><FONT class=3D3=
>D=3D> >EC_EC_EC_Apple-style-span face=3D3D"Gill Sans"><SPAN class=3D3DEC_EC=
>_EC_Apple-s=3D> >tyle-span style=3D3D"COLOR: rgb(0=3D2C0=3D2C255)=3D3B FONT=
>-FAMILY: 'Gill Sans'"><SP=3D> >AN class=3D3DEC_EC_EC_Apple-style-span style=
>=3D3D"COLOR: rgb(0=3D2C0=3D2C255)=3D3B FO=3D> >NT-FAMILY: 'Gill Sans'">Anto=
>ny Hosking</SPAN></SPAN></FONT></FONT><FONT cla=3D> >ss=3D3DEC_EC_EC_Apple-=
>style-span face=3D3D"Gill Sans"><SPAN class=3D3DEC_EC_EC_Ap=3D> >ple-style-=
>span style=3D3D"FONT-FAMILY: 'Gill Sans'"><SPAN class=3D3DEC_EC_EC_Ap=3D> >=
>ple-style-span style=3D3D"FONT-FAMILY: 'Gill Sans'"><SPAN class=3D3DEC_EC_A=
>pple=3D> >-converted-space> =3D3B</SPAN>|<SPAN class=3D3DEC_EC_Apple-co=
>nverted-space>=3D> > =3D3B</SPAN></SPAN></SPAN><SPAN class=3D3DEC_EC_EC=
>_Apple-style-span style=3D> >=3D3D"FONT-FAMILY: 'Gill Sans'"><SPAN class=3D=
>3DEC_EC_EC_Apple-style-span style=3D> >=3D3D"FONT-FAMILY: 'Gill Sans'">Asso=
>ciate Professor</SPAN></SPAN><SPAN class=3D> >=3D3DEC_EC_EC_Apple-style-spa=
>n style=3D3D"FONT-FAMILY: 'Gill Sans'"><SPAN class=3D> >=3D3DEC_EC_EC_Apple=
>-style-span style=3D3D"FONT-FAMILY: 'Gill Sans'"> =3D3B| C=3D> >omputer=
> Science | Purdue University</SPAN></SPAN></FONT></DIV>> ><DIV><FONT class=
>=3D3DEC_EC_EC_Apple-style-span face=3D3DGillSans-Light><SPAN cl=3D> >ass=3D=
>3DEC_EC_EC_Apple-style-span style=3D3D"FONT-FAMILY: GillSans-Light">305 N=
>=3D> >. University Street | West Lafayette | IN 47907 | USA</SPAN></FONT></=
>DIV>> ><DIV><FONT class=3D3DEC_EC_EC_Apple-style-span face=3D3D"Gill Sans" =
>color=3D3D#00=3D> >00ff><SPAN class=3D3DEC_EC_EC_Apple-style-span style=3D3=
>D"COLOR: rgb(0=3D2C0=3D2C25=3D> >5)=3D3B FONT-FAMILY: 'Gill Sans'"><SPAN cl=
>ass=3D3DEC_EC_EC_Apple-style-span sty=3D> >le=3D3D"COLOR: rgb(0=3D2C0=3D2C2=
>55)=3D3B FONT-FAMILY: 'Gill Sans'">Office</SPAN></S=3D> >PAN></FONT><FONT c=
>lass=3D3DEC_EC_EC_Apple-style-span face=3D3DGillSans-Light><S=3D> >PAN clas=
>s=3D3DEC_EC_EC_Apple-style-span style=3D3D"FONT-FAMILY: GillSans-Light"=3D>=
> >><SPAN class=3D3DEC_EC_EC_Apple-style-span style=3D3D"FONT-FAMILY: GillSa=
>ns-Lig=3D> >ht"> =3D3B+1 765 494 6001 |<SPAN class=3D3DEC_EC_Apple-conv=
>erted-space>&nbs=3D> >p=3D3B</SPAN></SPAN></SPAN></FONT><FONT class=3D3DEC_=
>EC_EC_Apple-style-span fac=3D> >e=3D3D"Gill Sans" color=3D3D#0000ff><SPAN c=
>lass=3D3DEC_EC_EC_Apple-style-span sty=3D> >le=3D3D"COLOR: rgb(0=3D2C0=3D2C=
>255)=3D3B FONT-FAMILY: 'Gill Sans'"><SPAN class=3D3DEC=3D> >_EC_EC_Apple-st=
>yle-span style=3D3D"COLOR: rgb(0=3D2C0=3D2C255)=3D3B FONT-FAMILY: 'G=3D> >i=
>ll Sans'">Mobile</SPAN></SPAN></FONT><FONT class=3D3DEC_EC_EC_Apple-style-s=
>p=3D> >an face=3D3DGillSans-Light><SPAN class=3D3DEC_EC_EC_Apple-style-span=
> style=3D3D"F=3D> >ONT-FAMILY: GillSans-Light"><SPAN class=3D3DEC_EC_EC_App=
>le-style-span style=3D> >=3D3D"FONT-FAMILY: GillSans-Light"><SPAN class=3D3=
>DEC_EC_Apple-converted-space>=3D> > =3D3B</SPAN>+1 765 427 5484</SPAN><=
>/SPAN></FONT></DIV>> ><DIV><FONT class=3D3DEC_EC_EC_Apple-style-span face=
>=3D3DGillSans-Light><BR clas=3D> >s=3D3DEC_EC_EC_khtml-block-placeholder></=
>FONT></DIV></SPAN></SPAN></SPAN></SP=3D> >AN></SPAN></SPAN></SPAN><BR class=
>=3D3DEC_EC_EC_Apple-interchange-newline></SP=3D> >AN></DIV></SPAN></DIV><BR=
>>> ><DIV>> ><DIV>On 12 Jan 2009=3D2C at 01:44=3D2C Jay wrote:</DIV><BR clas=
>s=3D3DEC_EC_EC_App=3D> >le-interchange-newline>> ><BLOCKQUOTE><SPAN class=
>=3D3DEC_EC_EC_Apple-style-span style=3D3D"WORD-SPACING: =3D> >0px=3D3B FONT=
>: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0=3D=
>> >)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: no=
>rmal=3D3B B=3D> >ORDER-COLLAPSE: separate">> ><DIV class=3D3DEC_EC_EC_hmmes=
>sage style=3D3D"FONT-SIZE: 10pt=3D3B FONT-FAMILY: Ve=3D> >rdana">Is there a=
> way in Modula-3 to declare that =3D3Ba type exists=3D2C a=3D> >nd ther=
>e are <=3D3B*external*>=3D3B instances of it=3D2C without "fully" decl=
>=3D> >aring it=3D2C so that no Modula-3 can instantiate it?<BR> =3D3B<B=
>R>I have d=3D> >one this for sigset_t and sem_t=3D2C but they could erroneo=
>usly be instantiat=3D> >ed by Modula-3 and I'd like to remove that ability =
>to mess up so easily.<BR=3D> >> =3D3B<BR>(* This type is not declared c=
>orrectly. It is only instantiate=3D> >d in C code. *)<BR> =3D3B sigset_=
>t =3D3D RECORD END=3D3B<BR><BR>(* This type =3D> >is not declared correctly=
>. It is only instantiated in C code. *)<BR> =3D> >=3D3B sem_t =3D3D REC=
>ORD END=3D3B<BR><BR>In C I believe you can do this=3D2C like:<=3D> >BR>&nbs=
>p=3D3B =3D3Btypedef struct foo foo_t=3D3B =3D3B<SPAN class=3D3DEC_E=
>C_E=3D> >C_Apple-converted-space> =3D3B</SPAN><BR> =3D3B =3D3Be=
>xtern foo_t foo=3D> >=3D3B =3D3B<SPAN class=3D3DEC_EC_EC_Apple-converte=
>d-space> =3D3B</SPAN><BR>=3D> > =3D3B<BR> =3D3Bvoid UseFoo(foo_=
>t*)=3D3B<SPAN class=3D3DEC_EC_EC_Apple-conv=3D> >erted-space> =3D3B</SP=
>AN><BR> =3D3B foo_t* GetFoo(void)=3D3B<SPAN class=3D> >=3D3DEC_EC_EC_Ap=
>ple-converted-space> =3D3B</SPAN><BR> =3D3B<BR>Thanks=3D2C<=3D> >BR=
>> =3D3B- Jay<BR><BR><BR><BR></DIV></SPAN></BLOCKQUOTE></DIV><BR></DIV><=
>=3D> >/DIV></SPAN><BR class=3D3DEC_EC_Apple-interchange-newline></BLOCKQUOT=
>E></DIV>=3D> ><BR></DIV></SPAN><BR class=3D3DEC_Apple-interchange-newline><=
>/BLOCKQUOTE></DI=3D> >V><BR></body>> ></html>=3D> >> >--_6117a048-9185-4c03=
>-badb-ef8f93402268_--=
>
>--_2e194b09-14b6-4301-9116-a9e4d1e522b4_
>Content-Type: text/html; charset="iso-8859-1"
>Content-Transfer-Encoding: quoted-printable
>
><html>
><head>
><style>
>.hmmessage P
>{
>margin:0px=3B
>padding:0px
>}
>body.hmmessage
>{
>font-size: 10pt=3B
>font-family:Verdana
>}
></style>
></head>
><body class=3D'hmmessage'>
>Yes=2C generating the headers is viable.<BR>
>I thought I mentioned that a few times.<BR>
They could be generated in any build "that can".<BR> =3B i.e. a native =
>build=2C that has a working C development system<BR> =3B and checked ag=
>ainst the checked in ones.<BR>
> =3BSo then porting is: <BR> =3B copy the generator to new system=
>=2C run it=2C copy results back=2C proceed <BR>
><BR> =3BMaybe a good compromise. <BR> =3BNot good for "embedded sys=
>tems"=2C but heck=2C is there any such thing<BR> =3B any longer? Doesn'=
>t everything have megs of RAM and gigs of persistant storage? :)<BR>
><BR>You don't need =3BScheme.<BR>
>Just Quake =3B+ compiling and running C code.<BR>
>Assuming a native build system.<BR>
>I've done stuff in cross build systems like:<BR>
>typedef struct foo_t {int i=3B int j=3B } foo_t=3B<BR>
>extern const int xi =3D offsetof(foo_t=2C i)=3B<BR>
> =3B<BR>
>compile that=2C and read the value of xi out of the .obj file.<BR>
> =3B<BR>
> =3BThe .obj file reader was written in Perl. :) <BR>
> =3B (Python not available.)<BR>
> =3Bbut to do that here=2C I'd have to support multiple .obj file forma=
>ts.<BR>
> =3B<BR>
> =3B- Jay<BR><BR>>=3B To: jay.krell at cornell.edu<BR>>=3B Date: Mon=
>=2C 12 Jan 2009 01:34:24 -0800<BR>>=3B From: mika at async.caltech.edu<BR>&g=
>t=3B CC: m3devel at elegosoft.com<BR>>=3B Subject: Re: [M3devel] declaring a=
> type's existance but not enough to instantiate it?<BR>>=3B <BR>>=3B <B=
>R>>=3B You present it as a true tragic Dilemma.<BR>>=3B <BR>>=3B But =
>isn't there a Third Way---to wit=2C can't you "Ask the Computer"<BR>>=3B =
>to do the work for you?<BR>>=3B <BR>>=3B Generate the code somehow... P=
>arsing the C headers is an obvious<BR>>=3B way but there may be others th=
>at are simpler=2C such as writing a<BR>>=3B Modula-3 program to generate =
>the cloned M3 headers=2C sorry=2C interfaces.<BR>>=3B <BR>>=3B If I had=
> to do this I would use my Scheme interpreter that's coded<BR>>=3B in Mod=
>ula-3 to write a Scheme program to generate the headers. This<BR>>=3B pro=
>gram could pull whatever tricks are deemed necessary and suitable=2C<BR>>=
>=3B down to the point of generating and compiling and running C programs<BR=
>>>=3B as necessary (or parsing C code=2C or reading tea leaves). But the<=
>BR>>=3B end result would be a set of interfaces written in "Pure Modula-3=
>".<BR>>=3B The process of running the header generator would also have ve=
>ry<BR>>=3B few dependencies on anything outside the M3 distribution.<BR>&=
>gt=3B <BR>>=3B Mika<BR>>=3B <BR>>=3B Jay writes:<BR>>=3B >=3B--_6=
>117a048-9185-4c03-badb-ef8f93402268_<BR>>=3B >=3BContent-Type: text/pla=
>in=3B charset=3D"iso-8859-1"<BR>>=3B >=3BContent-Transfer-Encoding: quo=
>ted-printable<BR>>=3B >=3B<BR>>=3B >=3B<BR>>=3B >=3BThis is wha=
>t you "have to" chose between.<BR>>=3B >=3BHeader cloning or C code (an=
>d C headers).<BR>>=3B >=3B=3D20<BR>>=3B >=3BCONST or VAR (or functi=
>ons?)<BR>>=3B >=3B=3D20<BR>>=3B >=3BI'm going to likely make the Ue=
>rror change tonight.<BR>>=3B >=3BYou can still veto it (er=3D2C vote ag=
>ainst it :) )<BR>>=3B >=3B=3D20<BR>>=3B >=3BPossibly some convulute=
>d C (enum/#undef)=3D2C or splitting the Modula-3<BR>>=3B >=3Bat boundar=
>ies that weren't previously believed "natural".<BR>>=3B >=3B(See how Se=
>tupHandlers is ~two lines in Modula-3 and the rest in C=3D3B<BR>>=3B >=
>=3Bthis is partly out of ignorance. I don't know how to write those<BR>>=
>=3B >=3Btwo lines in C=3D3B and laziness=3D2C I didn't look into how).<BR=
>>>=3B >=3B=3D20<BR>>=3B >=3B=3D20<BR>>=3B >=3B=3D20<BR>>=3B &=
>gt=3BRemember I'm still staying away from mainstream platforms=3D2C<BR>>=
>=3B >=3Bso the value isn't what it might appear to be=3D2C but it is "sta=
>ge setting"=3D<BR>>=3B >=3B=3D2C<BR>>=3B >=3Band the show might go =
>on. :)<BR>>=3B >=3B=3D20<BR>>=3B >=3B=3D20<BR>>=3B >=3BAlso=3D2=
>C the dilemna does get more difficult now=3D2C with the little C header=3D<=
>BR>>=3B >=3B cloning that remains.<BR>>=3B >=3B=3D20<BR>>=3B >=
>=3BFor example=3D2C look at Upthreads.i3.<BR>>=3B >=3BMainly=3D2C look =
>at function prototypes.<BR>>=3B >=3BConstants and types are "known prob=
>lems".<BR>>=3B >=3BPrototypes are gray. They actually tend to be portab=
>le.<BR>>=3B >=3B=3D20<BR>>=3B >=3BFor example:<BR>>=3B >=3B=3D2=
>0<BR>>=3B >=3BTYPE pid_t =3D3D INTEGER=3D3B<BR>>=3B >=3B<=3B*EXTE=
>RNAL "m3_getpid*>=3B PROCEDURE getpid():pid_t=3D3B<BR>>=3B >=3B=3D20<=
>BR>>=3B >=3Bor leave it alone?<BR>>=3B >=3Bgetpid is probably the w=
>orst example.<BR>>=3B >=3BIt is so very portable declared in Modula-3.<=
>BR>>=3B >=3BBut still=3D2C imagine pid_t might be 16bits or 32 or 64.<B=
>R>>=3B >=3BWriting a wrapper is more portable -- as long as the pid isn=
>'t stuff into s=3D<BR>>=3B >=3Bome record that the system defines.<BR>&=
>gt=3B >=3B=3D20<BR>>=3B >=3B=3D20<BR>>=3B >=3BAgain=3D2C Upthread=
>s.i3.<BR>>=3B >=3BWould you like to see it reduced=3D2C or left alone?<=
>BR>>=3B >=3BOnly deal with the types and initializers=3D2C or also the =
>prototypes?<BR>>=3B >=3BYou know=3D2C I could write a little portable l=
>ayer=3D2C where all the types ar=3D<BR>>=3B >=3Be pointers=3D2C always =
>null initialized.<BR>>=3B >=3BIt would buy /some/ portability=3D2C and =
>cost some.<BR>>=3B >=3B=3D20<BR>>=3B >=3B=3D20<BR>>=3B >=3BDo y=
>ou like the sem_t change? Partly? Not at all?<BR>>=3B >=3BThere is one =
>sem_t in the system. So I moved it to be in C code.<BR>>=3B >=3BOr=3D2C=
> as I had it before=3D2C declared as the max size/align of all the platf=3D=
><BR>>=3B >=3Borms -- getting that right is the same work as getting it =
>right "the old wa=3D<BR>>=3B >=3By"=3D2C except if you make a mistake=
>=3D2C odds are still good of it being ok.<BR>>=3B >=3B=3D20<BR>>=3B &=
>gt=3B=3D20<BR>>=3B >=3BShould the line be drawn at generating the remai=
>ning headers=3D2C rather than=3D<BR>>=3B >=3B eliminating them?<BR>>=
>=3B >=3BUerror.i3 is easily generated. Good enough?<BR>>=3B >=3B=3D20=
><BR>>=3B >=3BUpthread.i3's types can be generated generally as records =
>with opaque array=3D<BR>>=3B >=3Bs with the right size and alignment.<B=
>R>>=3B >=3B=3D20<BR>>=3B >=3BOther stuff can be generated or at lea=
>st checked.<BR>>=3B >=3Be.g. to check that getpid is declared correctly=
>=3D2C you can assign it to a f=3D<BR>>=3B >=3Bunction pointer and see i=
>f that compiles.<BR>>=3B >=3B=3D20<BR>>=3B >=3BPerf on Uerror argua=
>bly doesn't matter.<BR>>=3B >=3BIs it only error handling code?Or do so=
>ckets often go down "error" paths=3D2C=3D<BR>>=3B >=3B because they are=
> slow and you are waiting for more data?<BR>>=3B >=3B=3D20<BR>>=3B &g=
>t=3BAnyway=3D2C point is=3D2C I agree for sure this is valuable=3D2C but I =
>might be h=3D<BR>>=3B >=3Bitting the "tail" of the approach and should =
>switch=3D2C I'm not sure. I keep=3D<BR>>=3B >=3B saying that though=3D2=
>C and then press further.<BR>>=3B >=3B=3D20<BR>>=3B >=3B=3D20<BR>&g=
>t=3B >=3B - Jay<BR>>=3B >=3B<BR>>=3B >=3B<BR>>=3B >=3B<BR>>=
>=3B >=3BFrom: hosking at cs.purdue.eduTo: jay.krell at cornell.eduDate: Mon=3D2=
>C 12 Jan 200=3D<BR>>=3B >=3B9 19:24:50 +1100CC: m3devel at elegosoft.comSu=
>bject: Re: [M3devel] declaring a=3D<BR>>=3B >=3B type's existance but n=
>ot enough to instantiate it?<BR>>=3B >=3B<BR>>=3B >=3B<BR>>=3B &g=
>t=3BPoint taken. We live in a C universe and so need to interact. I do thin=
>k =3D<BR>>=3B >=3Byour work with the headers is useful=3D2C and I want =
>it to continue. Especia=3D<BR>>=3B >=3Blly in simplifying ports.<BR>>=
>=3B >=3B<BR>>=3B >=3B<BR>>=3B >=3BOn 12 Jan 2009=3D2C at 19:18=3D=
>2C Jay wrote:<BR>>=3B >=3B<BR>>=3B >=3BI don't think a development =
>system without C headers is interesting.. Is it=3D<BR>>=3B >=3B really?=
> The transform I apply at times is wherever there is interaction wi=3D<BR>&=
>gt=3B >=3Bth C code that is described by system-dependent headers=3D2C or=
> perhaps even =3D<BR>>=3B >=3Bfairly system-independent headers outside=
> the Modula-3 tree=3D2C either write=3D<BR>>=3B >=3B wrapper functions =
>for the functionality in the headers (e.g. stat=3D2C waitp=3D<BR>>=3B >=
>=3Bid)=3D2C which can be done in a system-independent way=3D2C or move the =
>Modula-=3D<BR>>=3B >=3B3<=3B->=3BC transition higher=3D2C which is =
>also usually system-independent=3D2C e.g.=3D<BR>>=3B >=3B ThreadPThread=
>C_SetupHandlers. It is either that or clone the headers=3D2C wh=3D<BR>>=
>=3B >=3Bich seems like the worse evil. There is always going to be a Modu=
>la-3<=3B->=3BC t=3D<BR>>=3B >=3Bransition=3D2C it is just a matter =
>of where it occurs. - Jay<BR>>=3B >=3B<BR>>=3B >=3BCC: m3devel at eleg=
>osoft.comFrom: hosking at cs.purdue.eduTo: jay.krell at cornell.e=3D<BR>>=3B &g=
>t=3BduSubject: Re: [M3devel] declaring a type's existance but not enough to=
> ins=3D<BR>>=3B >=3Btantiate it?Date: Mon=3D2C 12 Jan 2009 12:32:15 +11=
>00<BR>>=3B >=3B<BR>>=3B >=3B<BR>>=3B >=3BJay=3D2C I really thin=
>k you are bending over backwards too far just to be abl=3D<BR>>=3B >=3B=
>e to shoe-horn things into C. I *like* having the transpar of C header fil=
>=3D<BR>>=3B >=3Bes expressed in Modula-3=3D2C *particularly* for system=
> calls=3D2C where you mi=3D<BR>>=3B >=3Bght even be trying to build on =
>a system that does not have the C header fil=3D<BR>>=3B >=3Bes installe=
>d=3D2C even though the libraries exist and can be linked to. Fund=3D<BR>>=
>=3B >=3Bamentally=3D2C I think anytime the Modula-3 code is made less tra=
>nsparent you=3D<BR>>=3B >=3B should think hard about what you are doing=
>. The same with the change of c=3D<BR>>=3B >=3Bonstants to variables.<B=
>R>>=3B >=3B<BR>>=3B >=3BI am getting very nervous that the changes =
>you are making are destroying th=3D<BR>>=3B >=3Be clarity of the Modula=
>-3 run-time code.<BR>>=3B >=3B<BR>>=3B >=3BIn this particular case=
>=3D2C you are wanting to use a Modula-3 parameter pass=3D<BR>>=3B >=3Bi=
>ng mechanism on something that is not declared in Modula-3. Seems kind of=
>=3D<BR>>=3B >=3B dubious to me. Also=3D2C I really don't like the idea =
>of accessing external=3D<BR>>=3B >=3B variables in C.<BR>>=3B >=3B<=
>BR>>=3B >=3B-- Tony<BR>>=3B >=3B<BR>>=3B >=3BOn 12 Jan 2009=3D2=
>C at 11:55=3D2C Jay wrote:<BR>>=3B >=3B<BR>>=3B >=3BI considered AD=
>DRESS.However I think it still doesn't satisfy. I want to be=3D<BR>>=3B &=
>gt=3B able to do this: TYPE Foo_t =3D3D something=3D3B<=3B* EXTERNAL *>=
>=3B VAR Foo1=3D2C Foo=3D<BR>>=3B >=3B2:Foo_t=3D3B<=3B* EXTERNAL *>=
>=3B PROCEDURE UseFoo(READONLY (* or VAR *) foo:Foo_t)=3D<BR>>=3B >=3B=
>=3D3B (* Modula-3=3D2C not external *)PROCEDURE x()=3D3DBEGIN UseFoo(Foo1)=
>=3D3B U=3D<BR>>=3B >=3BseFoo(Foo2)=3D3BEND x=3D3B AND I want any use of=
>:VAR Foo3:Foo3_t=3D3B (* Modula-3=3D<BR>>=3B >=3B=3D2C not external *)t=
>o error. This is sem_t and sigset_t in particular. Poss=3D<BR>>=3B >=3B=
>ibly renaming is the thing.They used to be declared in Modula-3=3D2C system=
>-d=3D<BR>>=3B >=3Bependently=3D2C butI moved them to portable C. I coul=
>d remove the types entir=3D<BR>>=3B >=3Bely and change UseFoo to take a=
>n address=3D2Cand declare mask and ackSem to b=3D<BR>>=3B >=3Be integer=
>s or I guess.<=3B*EXTERNAL>=3B VAR ackSem : RECORD END=3D3B That would =
>sat=3D<BR>>=3B >=3Bisfy but I thought it might be nicer to still provid=
>e the namedtypes to ref=3D<BR>>=3B >=3Ber to the external variables. - =
>Jay<BR>>=3B >=3B<BR>>=3B >=3BFrom: hosking at cs.purdue.eduTo: jay.kre=
>ll at cornell.eduDate: Mon=3D2C 12 Jan 200=3D<BR>>=3B >=3B9 11:13:00 +1100=
>CC: m3devel at elegosoft.comSubject: Re: [M3devel] declaring a=3D<BR>>=3B &g=
>t=3B type's existance but not enough to instantiate it?What's wrong with us=
>ing =3D<BR>>=3B >=3BADDRESS for references to opaque values? If sigset_=
>t is never instantiated=3D<BR>>=3B >=3B in Modula-3=3D2C then why do yo=
>u need it declared there?<BR>>=3B >=3B<BR>>=3B >=3B<BR>>=3B >=
>=3B<BR>>=3B >=3BAntony Hosking | Associate Professor | Computer Science=
> | Purdue University<BR>>=3B >=3B305 N. University Street | West Lafaye=
>tte | IN 47907 | USA<BR>>=3B >=3BOffice +1 765 494 6001 | Mobile +1 765=
> 427 5484<BR>>=3B >=3B<BR>>=3B >=3B<BR>>=3B >=3BOn 12 Jan 2009=
>=3D2C at 01:44=3D2C Jay wrote:<BR>>=3B >=3B<BR>>=3B >=3BIs there a =
>way in Modula-3 to declare that a type exists=3D2C and there are <=3B=3D<=
>BR>>=3B >=3B*external*>=3B instances of it=3D2C without "fully" decla=
>ring it=3D2C so that no M=3D<BR>>=3B >=3Bodula-3 can instantiate it? I =
>have done this for sigset_t and sem_t=3D2C but =3D<BR>>=3B >=3Bthey cou=
>ld erroneously be instantiated by Modula-3 and I'd like to remove t=3D<BR>&=
>gt=3B >=3Bhat ability to mess up so easily. (* This type is not declared =
>correctly. I=3D<BR>>=3B >=3Bt is only instantiated in C code. *) sigset=
>_t =3D3D RECORD END=3D3B(* This typ=3D<BR>>=3B >=3Be is not declared co=
>rrectly. It is only instantiated in C code. *) sem_t =3D<BR>>=3B >=3B=
>=3D3D RECORD END=3D3BIn C I believe you can do this=3D2C like: typedef stru=
>ct fo=3D<BR>>=3B >=3Bo foo_t=3D3B extern foo_t foo=3D3B void UseFoo(foo=
>_t*)=3D3B foo_t* GetFoo=3D<BR>>=3B >=3B(void)=3D3B Thanks=3D2C - Jay=3D=
><BR>>=3B >=3B<BR>>=3B >=3B--_6117a048-9185-4c03-badb-ef8f93402268_<=
>BR>>=3B >=3BContent-Type: text/html=3B charset=3D"iso-8859-1"<BR>>=3B=
> >=3BContent-Transfer-Encoding: quoted-printable<BR>>=3B >=3B<BR>>=
>=3B >=3B<=3Bhtml>=3B<BR>>=3B >=3B<=3Bhead>=3B<BR>>=3B >=
>=3B<=3Bstyle>=3B<BR>>=3B >=3B.hmmessage P<BR>>=3B >=3B{<BR>>=
>=3B >=3Bmargin:0px=3D3B<BR>>=3B >=3Bpadding:0px<BR>>=3B >=3B}<BR>=
>>=3B >=3Bbody.hmmessage<BR>>=3B >=3B{<BR>>=3B >=3Bfont-size: 10=
>pt=3D3B<BR>>=3B >=3Bfont-family:Verdana<BR>>=3B >=3B}<BR>>=3B >=
>=3B<=3B/style>=3B<BR>>=3B >=3B<=3B/head>=3B<BR>>=3B >=3B<=
>=3Bbody class=3D3D'hmmessage'>=3B<BR>>=3B >=3BThis is what you "have =
>to" chose between.<=3BBR>=3B<BR>>=3B >=3BHeader cloning or C code (=
>and C headers).<=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=3D3B<=3BBR>=
>=3B<BR>>=3B >=3BCONST or VAR (or functions?)<=3BBR>=3B<BR>>=3B &g=
>t=3B&=3Bnbsp=3D3B<=3BBR>=3B<BR>>=3B >=3BI'm going to likely make=
> the Uerror change tonight.<=3BBR>=3B<BR>>=3B >=3BYou can still vet=
>o it (er=3D2C vote against it :) )<=3BBR>=3B<BR>>=3B >=3B&=3Bnbs=
>p=3D3B<=3BBR>=3B<BR>>=3B >=3BPossibly some convuluted C (enum/#unde=
>f)=3D2C or splitting the Modula-3<=3BBR>=3B<BR>>=3B >=3Bat boundari=
>es that weren't previously believed "natural".<=3BBR>=3B<BR>>=3B >=
>=3B(See how SetupHandlers is ~two lines in Modula-3 and the rest in C=3D3B&=
>lt=3BBR>=3B<BR>>=3B >=3Bthis is partly out of ignorance. I don't know=
> how to write those<=3BBR>=3B<BR>>=3B >=3Btwo lines in C=3D3B and l=
>aziness=3D2C I didn't look into how).<=3BBR>=3B<BR>>=3B >=3B&=3B=
>nbsp=3D3B<=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=3D3B<=3BBR>=3B<BR>&=
>gt=3B >=3B&=3Bnbsp=3D3B<=3BBR>=3B<BR>>=3B >=3BRemember I'm sti=
>ll staying away from mainstream platforms=3D2C<=3BBR>=3B<BR>>=3B >=
>=3Bso the value isn't what it might appear to be=3D2C but it is "stage sett=
>ing"=3D<BR>>=3B >=3B=3D2C<=3BBR>=3B<BR>>=3B >=3Band the show mi=
>ght go on. :)<=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=3D3B<=3BBR>=3B<=
>BR>>=3B >=3B&=3Bnbsp=3D3B<=3BBR>=3B<BR>>=3B >=3BAlso=3D2C th=
>e dilemna does get more difficult now=3D2C with the little C header=3D<BR>&=
>gt=3B >=3B cloning that remains.<=3BBR>=3B<BR>>=3B >=3B&=3Bnbs=
>p=3D3B<=3BBR>=3B<BR>>=3B >=3BFor example=3D2C look at Upthreads.i3.=
><=3BBR>=3B<BR>>=3B >=3BMainly=3D2C look at function prototypes.<=
>=3BBR>=3B<BR>>=3B >=3BConstants and types are "known problems".<=3B=
>BR>=3B<BR>>=3B >=3BPrototypes are gray. They actually tend to be port=
>able.<=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=3D3B<=3BBR>=3B<BR>>=
>=3B >=3BFor example:<=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=3D3B<=3B=
>BR>=3B<BR>>=3B >=3BTYPE pid_t =3D3D INTEGER=3D3B<=3BBR>=3B<BR>>=
>=3B >=3B&=3Blt=3D3B*EXTERNAL "m3_getpid*&=3Bgt=3D3B PROCEDURE getpi=
>d():pid_t=3D3B<=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=3D3B<=3BBR>=3B=
><BR>>=3B >=3Bor leave it alone?<=3BBR>=3B<BR>>=3B >=3Bgetpid is=
> probably the worst example.<=3BBR>=3B<BR>>=3B >=3BIt is so very po=
>rtable declared in Modula-3.<=3BBR>=3B<BR>>=3B >=3BBut still=3D2C i=
>magine pid_t might be 16bits or 32 or 64.<=3BBR>=3B<BR>>=3B >=3BWri=
>ting a wrapper is more portable -- as long as the pid isn't stuff into s=3D=
><BR>>=3B >=3Bome record that the system defines.<=3BBR>=3B<BR>>=
>=3B >=3B&=3Bnbsp=3D3B<=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=3D3B&l=
>t=3BBR>=3B<BR>>=3B >=3BAgain=3D2C Upthreads.i3.<=3BBR>=3B<BR>>=
>=3B >=3BWould you like to see it reduced=3D2C or left alone?<=3BBR>=
>=3B<BR>>=3B >=3BOnly deal with the types and initializers=3D2C or also =
>the prototypes?<=3BBR>=3B<BR>>=3B >=3BYou know=3D2C I could write a=
> little portable layer=3D2C where all the types ar=3D<BR>>=3B >=3Be poi=
>nters=3D2C always null initialized.<=3BBR>=3B<BR>>=3B >=3BIt would =
>buy /some/ portability=3D2C and cost some.<=3BBR>=3B<BR>>=3B >=3B&a=
>mp=3Bnbsp=3D3B<=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=3D3B<=3BBR>=3B=
><BR>>=3B >=3BDo you like the sem_t change? Partly? Not at all?<=3BBR&=
>gt=3B<BR>>=3B >=3BThere is one sem_t in the system. So I moved it to be=
> in C code.<=3BBR>=3B<BR>>=3B >=3BOr=3D2C as I had it before=3D2C d=
>eclared as the max size/align of all the platf=3D<BR>>=3B >=3Borms -- g=
>etting that right is the same work as getting it right "the old wa=3D<BR>&g=
>t=3B >=3By"=3D2C except if you make a mistake=3D2C odds are still good of=
> it being ok.<=3BB=3D<BR>>=3B >=3BR>=3B<BR>>=3B >=3B&=3Bnbsp=
>=3D3B<=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=3D3B<=3BBR>=3B<BR>>=
>=3B >=3BShould the line be drawn at generating the remaining headers=3D2C=
> rather than=3D<BR>>=3B >=3B eliminating them?<=3BBR>=3B<BR>>=3B =
>>=3BUerror.i3 is easily generated. Good enough?<=3BBR>=3B<BR>>=3B &=
>gt=3B&=3Bnbsp=3D3B<=3BBR>=3B<BR>>=3B >=3BUpthread.i3's types can=
> be generated generally as records with opaque array=3D<BR>>=3B >=3Bs w=
>ith the right size and alignment.<=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=
>=3D3B<=3BBR>=3B<BR>>=3B >=3BOther stuff can be generated or at leas=
>t checked.<=3BBR>=3B<BR>>=3B >=3Be.g. to check that getpid is decla=
>red correctly=3D2C you can assign it to a f=3D<BR>>=3B >=3Bunction poin=
>ter and see if that compiles.<=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=3D3=
>B<=3BBR>=3B<BR>>=3B >=3BPerf on Uerror arguably doesn't matter.<=
>=3BBR>=3B<BR>>=3B >=3BIs it only error handling code?<=3BBR>=3BOr=
> do sockets often go down "error" path=3D<BR>>=3B >=3Bs=3D2C because th=
>ey are slow and you are waiting for more data?<=3BBR>=3B<BR>>=3B >=
>=3B&=3Bnbsp=3D3B<=3BBR>=3B<BR>>=3B >=3BAnyway=3D2C point is=3D2C=
> I agree for sure this is valuable=3D2C but I might be h=3D<BR>>=3B >=
>=3Bitting the "tail" of the approach and should switch=3D2C I'm not sure. I=
> keep=3D<BR>>=3B >=3B saying that though=3D2C and then press further.&l=
>t=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=3D3B<=3BBR>=3B<BR>>=3B >=
>=3B&=3Bnbsp=3D3B<=3BBR>=3B<BR>>=3B >=3B&=3Bnbsp=3D3B- Jay<=
>=3BBR>=3B<=3BBR>=3B<BR>>=3B >=3B<BR>>=3B >=3B<=3BHR id=3D3D=
>stopSpelling>=3B<BR>>=3B <=3BBR>=3B<BR>>=3B >=3BFrom: hosking at c=
>s.purdue.edu<=3BBR>=3BTo: jay.krell at cornell.edu<=3BBR>=3BDate: Mon=
>=3D2C 12=3D<BR>>=3B >=3B Jan 2009 19:24:50 +1100<=3BBR>=3BCC: m3dev=
>el at elegosoft.com<=3BBR>=3BSubject: Re: [M3de=3D<BR>>=3B >=3Bvel] de=
>claring a type's existance but not enough to instantiate it?<=3BBR>=3B&=
>lt=3BBR>=3B=3D<BR>>=3B >=3B<=3BBR>=3B<BR>>=3B >=3B<=3BDIV&g=
>t=3B<=3BSPAN class=3D3DEC_Apple-style-span style=3D3D"WORD-SPACING: 0px=
>=3D3B FONT: =3D<BR>>=3B >=3B12px Helvetica=3D3B TEXT-TRANSFORM: none=3D=
>3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-IND=3D<BR>>=3B >=3BENT: 0px=3D3B=
> WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPS=3D<BR>=
>>=3B >=3BE: separate">=3B<BR>>=3B >=3B<=3BDIV style=3D3D"WORD-W=
RAP: break-word">=3B<=3BSPAN class=3D3DEC_Apple-style-span styl=3D<BR>&=
>gt=3B >=3Be=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TR=
>ANSFORM: none=3D3B C=3D<BR>>=3B >=3BOLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-=
>INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-S=3D<BR>>=3B >=3BPACIN=
>G: normal=3D3B BORDER-COLLAPSE: separate">=3B<=3BSPAN class=3D3DEC_Appl=
>e-style-s=3D<BR>>=3B >=3Bpan style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12=
>px Helvetica=3D3B TEXT-TRANSFORM: n=3D<BR>>=3B >=3Bone=3D3B COLOR: rgb(=
>0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B =3D<BR>&=
>gt=3B >=3BLETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separate">=3B<=
>=3BSPAN class=3D3DEC_Apple=3D<BR>>=3B >=3B-style-span style=3D3D"WORD-S=
>PACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRAN=3D<BR>>=3B >=3BSFO=
>RM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SP=
>ACE: no=3D<BR>>=3B >=3Brmal=3D3B LETTER-SPACING: normal=3D3B BORDER-COL=
>LAPSE: separate">=3B<=3BSPAN class=3D3D=3D<BR>>=3B >=3BEC_Apple-sty=
>le-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B T=3D<BR=
>>>=3B >=3BEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-=
>INDENT: 0px=3D3B WHITE-S=3D<BR>>=3B >=3BPACE: normal=3D3B LETTER-SPACIN=
>G: normal=3D3B BORDER-COLLAPSE: separate">=3B<=3BSPAN =3D<BR>>=3B >=
>=3Bclass=3D3DEC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12=
>px Helvet=3D<BR>>=3B >=3Bica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(=
>0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B=3D<BR>>=3B >=3B WHITE-SPACE: =
>normal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separate=3D<BR>>=
>=3B >=3B">=3B<=3BSPAN class=3D3DEC_Apple-style-span style=3D3D"WORD-S=
>PACING: 0px=3D3B FONT: 12p=3D<BR>>=3B >=3Bx Helvetica=3D3B TEXT-TRANSFO=
>RM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT=3D<BR>>=3B >=
>=3B: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-C=
>OLLAPSE: =3D<BR>>=3B >=3Bseparate">=3B<=3BSPAN class=3D3DEC_Apple-s=
>tyle-span style=3D3D"WORD-SPACING: 0px=3D3B F=3D<BR>>=3B >=3BONT: 12px =
>Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEX=
>=3D<BR>>=3B >=3BT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPAC=
>ING: normal=3D3B BORDER-CO=3D<BR>>=3B >=3BLLAPSE: separate">=3B<=3B=
>SPAN class=3D3DEC_Apple-style-span style=3D3D"WORD-SPACING: =3D<BR>>=3B &=
>gt=3B0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rg=
>b(0=3D2C0=3D2C0=3D<BR>>=3B >=3B)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE=
>: normal=3D3B LETTER-SPACING: normal=3D3B B=3D<BR>>=3B >=3BORDER-COLLAP=
>SE: separate">=3B<BR>>=3B >=3B<=3BDIV>=3BPoint taken. &=3Bnbsp=
>=3D3BWe live in a C universe and so need to interact. =3D<BR>>=3B >=3B&=
>amp=3Bnbsp=3D3BI do think your work with the headers is useful=3D2C and I w=
>ant it to=3D<BR>>=3B >=3B continue. &=3Bnbsp=3D3BEspecially in simpl=
>ifying ports.<=3B/DIV>=3B<BR>>=3B >=3B<=3BDIV>=3B<=3BBR>=3B=
><=3B/DIV>=3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/S=
>PAN>=3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/SPAN>=
>=3B<=3B/DI=3D<BR>>=3B >=3BV>=3B<=3B/SPAN>=3B<=3B/DIV>=3B<BR=
>>>=3B >=3B<=3BDIV>=3B<BR>>=3B >=3B<=3BDIV>=3BOn 12 Jan 2009=
>=3D2C at 19:18=3D2C Jay wrote:<=3B/DIV>=3B<=3BBR class=3D3DEC_Apple-i=
>nt=3D<BR>>=3B >=3Berchange-newline>=3B<BR>>=3B >=3B<=3BBLOCKQUO=
>TE>=3B<=3BSPAN class=3D3DEC_Apple-style-span style=3D3D"WORD-SPACING: 0=
>px=3D3B=3D<BR>>=3B >=3B FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=
>=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B T=3D<BR>>=3B >=3BEXT-INDENT: 0px=
>=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-=3D<BR>&g=
>t=3B >=3BCOLLAPSE: separate">=3B<BR>>=3B >=3B<=3BDIV class=3D3DEC=
>_hmmessage style=3D3D"FONT-SIZE: 10pt=3D3B FONT-FAMILY: Verdana"=3D<BR>>=
>=3B >=3B>=3BI don't think a development system without C headers is int=
>eresting.. Is i=3D<BR>>=3B >=3Bt really?<=3BBR>=3B&=3Bnbsp=3D3B&=
>lt=3BBR>=3BThe transform I apply at times is wherever there i=3D<BR>>=
>=3B >=3Bs interaction with C code that is described by system-dependent h=
>eaders=3D2C =3D<BR>>=3B >=3Bor perhaps even fairly system-independent h=
>eaders outside the Modula-3 tree=3D<BR>>=3B >=3B=3D2C either write wrap=
>per functions for the functionality in the headers (e.=3D<BR>>=3B >=3Bg=
>. stat=3D2C waitpid)=3D2C which&=3Bnbsp=3D3Bcan be done in a system-inde=
>pendent way=3D<BR>>=3B >=3B=3D2C&=3Bnbsp=3D3Bor move the Modula-3&am=
>p=3Blt=3D3B-&=3Bgt=3D3BC transition higher=3D2C which is=3D<BR>>=3B &g=
>t=3B also usually system-independent=3D2C e.g. ThreadPThreadC_SetupHandlers=
>.<=3BBR>=3B&=3B=3D<BR>>=3B >=3Bnbsp=3D3B<=3BBR>=3BIt is eith=
>er that or clone the headers=3D2C which seems like the w=3D<BR>>=3B >=
>=3Borse evil.<=3BBR>=3B&=3Bnbsp=3D3B<=3BBR>=3BThere is always go=
>ing to be a Modula-3&=3Blt=3D3B-&=3Bgt=3D<BR>>=3B >=3B=3D3BC tran=
>sition=3D2C it is just a matter of where it occurs.<=3BBR>=3B&=3Bnbs=
>p=3D3B<=3BBR>=3B&=3B=3D<BR>>=3B >=3Bnbsp=3D3B- Jay<=3BBR>=3B=
><=3BBR>=3B<BR>>=3B >=3B<=3BHR id=3D3DEC_stopSpelling>=3B<BR>>=
>=3B >=3B<=3BBR>=3BCC:<=3BSPAN class=3D3DEC_Apple-converted-space>=
>=3B&=3Bnbsp=3D3B<=3B/SPAN>=3B<=3BA href=3D3D"mai=3D<BR>>=3B >=
>=3Blto:m3devel at elegosoft.com">=3Bm3devel at elegosoft.com<=3B/A>=3B<=
>=3BBR>=3BFrom:<=3BSPAN class=3D3D=3D<BR>>=3B >=3BEC_Apple-converted=
>-space>=3B&=3Bnbsp=3D3B<=3B/SPAN>=3B<=3BA href=3D3D"mailto:hoski=
>ng at cs.purdue=3D<BR>>=3B >=3B.edu">=3Bhosking at cs.purdue.edu<=3B/A>=
>=3B<=3BBR>=3BTo:<=3BSPAN class=3D3DEC_Apple-converted-spac=3D<BR>>=
>=3B >=3Be>=3B&=3Bnbsp=3D3B<=3B/SPAN>=3B<=3BA href=3D3D"mailto:=
>jay.krell at cornell.edu">=3Bjay.krell at cornell=3D<BR>>=3B >=3B.edu<=3B=
>/A>=3B<=3BBR>=3BSubject: Re: [M3devel] declaring a type's existance b=
>ut not eno=3D<BR>>=3B >=3Bugh to instantiate it?<=3BBR>=3BDate: Mon=
>=3D2C 12 Jan 2009 12:32:15 +1100<=3BBR>=3B<=3BBR>=3B<=3BB=3D<BR>&=
>gt=3B >=3BR>=3B<BR>>=3B <=3BDIV>=3B<=3BSPAN class=3D3DEC_EC_App=
>le-style-span style=3D3D"WORD-SPACING: 0px=3D3B FON=3D<BR>>=3B >=3BT: 1=
>2px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B=
> TEXT-=3D<BR>>=3B >=3BINDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-=
>SPACING: normal=3D3B BORDER-COLL=3D<BR>>=3B >=3BAPSE: separate">=3B<B=
>R>>=3B >=3B<=3BDIV style=3D3D"WORD-WRAP: break-word">=3B<=3BSPAN =
>class=3D3DEC_EC_Apple-style-span s=3D<BR>>=3B >=3Btyle=3D3D"WORD-SPACIN=
>G: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D<BR>>=3B >=
>=3B=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: =
>normal=3D3B LET=3D<BR>>=3B >=3BTER-SPACING: normal=3D3B BORDER-COLLAPSE=
>: separate">=3B<=3BSPAN class=3D3DEC_EC_Apple=3D<BR>>=3B >=3B-style=
>-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRAN=
>=3D<BR>>=3B >=3BSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-IN=
>DENT: 0px=3D3B WHITE-SPACE: no=3D<BR>>=3B >=3Brmal=3D3B LETTER-SPACING:=
> normal=3D3B BORDER-COLLAPSE: separate">=3B<=3BSPAN class=3D3D=3D<BR>&g=
>t=3B >=3BEC_EC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 1=
>2px Helvetica=3D<BR>>=3B >=3B=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb=
>(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WH=3D<BR>>=3B >=3BITE-SPACE:=
> normal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separate">=3B&l=
>t=3B=3D<BR>>=3B >=3BSPAN class=3D3DEC_EC_Apple-style-span style=3D3D"WO=
>RD-SPACING: 0px=3D3B FONT: 12p=3D<BR>>=3B >=3Bx Helvetica=3D3B TEXT-TRA=
>NSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT=3D<BR>>=3B &=
>gt=3B: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER=
>-COLLAPSE: =3D<BR>>=3B >=3Bseparate">=3B<=3BSPAN class=3D3DEC_EC_Ap=
>ple-style-span style=3D3D"WORD-SPACING: 0px=3D<BR>>=3B >=3B=3D3B FONT: =
>12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D<=
>BR>>=3B >=3B=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER=
>-SPACING: normal=3D3B BO=3D<BR>>=3B >=3BRDER-COLLAPSE: separate">=3B&=
>lt=3BSPAN class=3D3DEC_EC_Apple-style-span style=3D3D"WORD=3D<BR>>=3B >=
>=3B-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B C=
>OLOR: rgb=3D<BR>>=3B >=3B(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHI=
>TE-SPACE: normal=3D3B LETTER-SPACING: n=3D<BR>>=3B >=3Bormal=3D3B BORDE=
>R-COLLAPSE: separate">=3B<=3BSPAN class=3D3DEC_EC_Apple-style-span st=
>=3D<BR>>=3B >=3Byle=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D=
>3B TEXT-TRANSFORM: none=3D3B=3D<BR>>=3B >=3B COLOR: rgb(0=3D2C0=3D2C0)=
>=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER=3D<BR>>=3B &g=
>t=3B-SPACING: normal=3D3B BORDER-COLLAPSE: separate">=3B<=3BSPAN class=
>=3D3DEC_EC_Apple-st=3D<BR>>=3B >=3Byle-span style=3D3D"WORD-SPACING: 0p=
>x=3D3B FONT: 12px Helvetica=3D3B TEXT-TRANSFO=3D<BR>>=3B >=3BRM: none=
>=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: nor=
>ma=3D<BR>>=3B >=3Bl=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: s=
>eparate">=3B<BR>>=3B >=3B<=3BDIV>=3BJay=3D2C I really think you a=
>re bending over backwards too far just to b=3D<BR>>=3B >=3Be able to sh=
>oe-horn things into C. &=3Bnbsp=3D3BI *like* having the transpar of =3D<=
>BR>>=3B >=3BC header files expressed in Modula-3=3D2C *particularly* fo=
>r system calls=3D2C =3D<BR>>=3B >=3Bwhere you might even be trying to b=
>uild on a system that does not have the =3D<BR>>=3B >=3BC header files =
>installed=3D2C even though the libraries exist and can be link=3D<BR>>=3B=
> >=3Bed to. &=3Bnbsp=3D3BFundamentally=3D2C I think anytime the Modula=
>-3 code is made l=3D<BR>>=3B >=3Bess transparent you should think hard =
>about what you are doing. &=3Bnbsp=3D3BThe=3D<BR>>=3B >=3B same with=
> the change of constants to variables.<=3B/DIV>=3B<BR>>=3B >=3B<=
>=3BDIV>=3B<=3BBR>=3B<=3B/DIV>=3B<BR>>=3B >=3B<=3BDIV>=3BI=
> am getting very nervous that the changes you are making are destroyi=3D<BR=
>>>=3B >=3Bng the clarity of the Modula-3 run-time code.<=3B/DIV>=3B=
><BR>>=3B >=3B<=3BDIV>=3B<=3BBR>=3B<=3B/DIV>=3B<BR>>=3B &g=
>t=3B<=3BDIV>=3BIn this particular case=3D2C you are wanting to use a Mo=
>dula-3 parameter=3D<BR>>=3B >=3B passing mechanism on something that is=
> not declared in Modula-3. &=3Bnbsp=3D3BS=3D<BR>>=3B >=3Beems kind o=
>f dubious to me. &=3Bnbsp=3D3BAlso=3D2C I really don't like the idea of=
>=3D<BR>>=3B >=3B accessing external variables in C.<=3B/DIV>=3B<BR>=
>>=3B >=3B<=3BDIV>=3B<=3BBR>=3B<=3B/DIV>=3B<BR>>=3B >=3B=
><=3BDIV>=3B-- Tony<=3B/DIV>=3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=
>=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/SPA=
>N>=3B<=3B/SPAN>=3B<=3B=3D<BR>>=3B >=3B/DIV>=3B<=3B/SPAN>=
>=3B<=3B/DIV>=3B<=3BBR>=3B<BR>>=3B >=3B<=3BDIV>=3B<BR>>=3B=
> >=3B<=3BDIV>=3BOn 12 Jan 2009=3D2C at 11:55=3D2C Jay wrote:<=3B/DI=
>V>=3B<=3BBR class=3D3DEC_EC_Apple-=3D<BR>>=3B >=3Binterchange-newli=
>ne>=3B<BR>>=3B >=3B<=3BBLOCKQUOTE>=3B<=3BSPAN class=3D3DEC_EC_A=
>pple-style-span style=3D3D"WORD-SPACING: 0px=3D<BR>>=3B >=3B=3D3B FONT:=
> 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D=
><BR>>=3B >=3B=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTE=
>R-SPACING: normal=3D3B BO=3D<BR>>=3B >=3BRDER-COLLAPSE: separate">=3B=
><BR>>=3B >=3B<=3BDIV class=3D3DEC_EC_hmmessage style=3D3D"FONT-SIZE: =
>10pt=3D3B FONT-FAMILY: Verda=3D<BR>>=3B >=3Bna">=3BI considered ADDRE=
>SS.<=3BBR>=3BHowever I think it still doesn't satisfy.<=3BBR>=3B&am=
>p=3B=3D<BR>>=3B >=3Bnbsp=3D3B<=3BBR>=3BI want to be able to do this=
>:<=3BBR>=3B&=3Bnbsp=3D3B<=3BBR>=3BTYPE&=3Bnbsp=3D3BFoo_t =3D<=
>BR>>=3B >=3B=3D3D something=3D3B<=3BBR>=3B&=3Blt=3D3B* EXTERNAL =
>*&=3Bgt=3D3B VAR Foo1=3D2C Foo2:Foo_t=3D3B<=3BBR>=3B&=3B=3D<BR>&g=
>t=3B >=3Blt=3D3B* EXTERNAL *&=3Bgt=3D3B PROCEDURE&=3Bnbsp=3D3BUseFo=
>o(READONLY (* or VAR *) foo:F=3D<BR>>=3B >=3Boo_t)=3D3B<=3BBR>=3B&a=
>mp=3Bnbsp=3D3B<=3BBR>=3B(* Modula-3=3D2C not external *)<=3BBR>=3BP=
>ROCEDURE x()=3D3D<=3B=3D<BR>>=3B >=3BBR>=3BBEGIN<=3BBR>=3B&=
>=3Bnbsp=3D3B UseFoo(Foo1)=3D3B<=3BBR>=3B&=3Bnbsp=3D3B UseFoo(Foo2)=
>=3D3B<=3BBR>=3BEND x=3D<BR>>=3B >=3B=3D3B<=3BBR>=3B&=3Bnbsp=
>=3D3B<=3BBR>=3BAND I want any use of:<=3BBR>=3BVAR Foo3:Foo3_t=3D3B=
> (* Modula-3=3D<BR>>=3B >=3B=3D2C not external *)<=3BBR>=3B<=3BBR=
>>=3Bto error. This is sem_t and sigset_t in particul=3D<BR>>=3B >=3Ba=
>r.<=3BBR>=3B&=3Bnbsp=3D3B<=3BBR>=3BPossibly renaming is the thin=
>g.<=3BBR>=3BThey used to be decla=3D<BR>>=3B >=3Bred in Modula-3=3D=
>2C system-dependently=3D2C but<=3BBR>=3BI moved them to portable C.=3D<=
>BR>>=3B >=3B<=3BBR>=3B&=3Bnbsp=3D3B<=3BBR>=3BI could remove =
>the types entirely and change UseFoo to take=3D<BR>>=3B >=3B an address=
>=3D2C<=3BBR>=3Band declare mask and ackSem to be integers or I guess.&l=
>t=3BBR=3D<BR>>=3B >=3B>=3B&=3Blt=3D3B*EXTERNAL&=3Bgt=3D3B VAR a=
>ckSem&=3Bnbsp=3D3B: RECORD END=3D3B<=3BBR>=3B&=3Bnbsp=3D3B<=3BB=
>R>=3BTha=3D<BR>>=3B >=3Bt would satisfy but I thought it might be nic=
>er to still provide the named<=3B=3D<BR>>=3B >=3BBR>=3Btypes to ref=
>er to the external variables.<=3BBR>=3B&=3Bnbsp=3D3B<=3BBR>=3B&a=
>mp=3Bnbsp=3D3B- Jay<=3BB=3D<BR>>=3B >=3BR>=3B<=3BBR>=3B<BR>>=
>=3B >=3B<=3BHR id=3D3DEC_EC_stopSpelling>=3B<BR>>=3B >=3B<=3BBR=
>>=3BFrom:<=3BSPAN class=3D3DEC_EC_Apple-converted-space>=3B&=3Bnbs=
>p=3D3B<=3B/SPAN>=3B<=3BA href=3D<BR>>=3B >=3B=3D3D"mailto:hosking=
>@cs.purdue.edu">=3Bhosking at cs.purdue.edu<=3B/A>=3B<=3BBR>=3BTo:&l=
>t=3BSPAN cla=3D<BR>>=3B >=3Bss=3D3DEC_EC_Apple-converted-space>=3B&am=
>p=3Bnbsp=3D3B<=3B/SPAN>=3B<=3BA href=3D3D"mailto:jay.krell=3D<BR>>=
>=3B >=3B at cornell.edu">=3Bjay.krell at cornell.edu<=3B/A>=3B<=3BBR>=
>=3BDate: Mon=3D2C 12 Jan 2009 11:13:0=3D<BR>>=3B >=3B0 +1100<=3BBR>=
>=3BCC:<=3BSPAN class=3D3DEC_EC_Apple-converted-space>=3B&=3Bnbsp=3D3=
>B<=3B/SPAN>=3B<=3BA h=3D<BR>>=3B >=3Bref=3D3D"mailto:m3devel at eleg=
>osoft.com">=3Bm3devel at elegosoft.com<=3B/A>=3B<=3BBR>=3BSubject: =
>=3D<BR>>=3B >=3BRe: [M3devel] declaring a type's existance but not enou=
>gh to instantiate it=3D<BR>>=3B >=3B?<=3BBR>=3B<=3BBR>=3BWhat's=
> wrong with using ADDRESS for references to opaque values? &=3B=3D<BR>&g=
>t=3B >=3Bnbsp=3D3BIf sigset_t is never instantiated in Modula-3=3D2C then=
> why do you nee=3D<BR>>=3B >=3Bd it declared there?<=3BBR>=3B<BR>&g=
>t=3B >=3B<=3BDIV>=3B<=3BBR>=3B<BR>>=3B >=3B<=3BDIV>=3B<=
>=3BSPAN class=3D3DEC_EC_EC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D=
>3B =3D<BR>>=3B >=3BFONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B =
>COLOR: rgb(0=3D2C0=3D2C0)=3D3B TE=3D<BR>>=3B >=3BXT-INDENT: 0px=3D3B WH=
>ITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-C=3D<BR>>=3B &g=
>t=3BOLLAPSE: separate">=3B<BR>>=3B >=3B<=3BDIV style=3D3D"WORD-WRAP=
>: break-word">=3B<=3BSPAN class=3D3DEC_EC_EC_Apple-style-spa=3D<BR>>=
>=3B >=3Bn style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEX=
>T-TRANSFORM: non=3D<BR>>=3B >=3Be=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B T=
>EXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LE=3D<BR>>=3B >=3BTTER-SP=
>ACING: normal=3D3B BORDER-COLLAPSE: separate">=3B<=3BSPAN class=3D3DEC_=
>EC_EC_A=3D<BR>>=3B >=3Bpple-style-span style=3D3D"WORD-SPACING: 0px=3D3=
>B FONT: 12px Helvetica=3D3B TEXT-=3D<BR>>=3B >=3BTRANSFORM: none=3D3B C=
>OLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE=3D<BR>>=
>=3B >=3B: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separa=
>te">=3B<=3BSPAN clas=3D<BR>>=3B >=3Bs=3D3DEC_EC_EC_Apple-style-span=
> style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helv=3D<BR>>=3B >=3Betica=
>=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT:=
> 0px=3D<BR>>=3B >=3B=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: norm=
>al=3D3B BORDER-COLLAPSE: separ=3D<BR>>=3B >=3Bate">=3B<=3BSPAN clas=
>s=3D3DEC_EC_EC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B =3D<BR>&g=
>t=3B >=3BFONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=
>=3D2C0=3D2C0)=3D3B TE=3D<BR>>=3B >=3BXT-INDENT: 0px=3D3B WHITE-SPACE: n=
>ormal=3D3B LETTER-SPACING: normal=3D3B BORDER-C=3D<BR>>=3B >=3BOLLAPSE:=
> separate">=3B<=3BSPAN class=3D3DEC_EC_EC_Apple-style-span style=3D3D"W=
>ORD-SP=3D<BR>>=3B >=3BACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TR=
>ANSFORM: none=3D3B COLOR: rgb(0=3D<BR>>=3B >=3B=3D2C0=3D2C0)=3D3B TEXT-=
>INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: nor=3D<BR>>=3B =
>>=3Bmal=3D3B BORDER-COLLAPSE: separate">=3B<=3BSPAN class=3D3DEC_EC_E=
>C_Apple-style-span s=3D<BR>>=3B >=3Btyle=3D3D"WORD-SPACING: 0px=3D3B FO=
>NT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D<BR>>=3B >=3B=3D3B COLOR=
>: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LE=
>T=3D<BR>>=3B >=3BTER-SPACING: normal=3D3B BORDER-COLLAPSE: separate">=
>=3B<=3BSPAN class=3D3DEC_EC_EC_Ap=3D<BR>>=3B >=3Bple-style-span style=
>=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-T=3D<BR>>=3B =
>>=3BRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=
>=3D3B WHITE-SPACE:=3D<BR>>=3B >=3B normal=3D3B LETTER-SPACING: normal=
>=3D3B BORDER-COLLAPSE: separate">=3B<=3BSPAN class=3D<BR>>=3B >=3B=
>=3D3DEC_EC_EC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px=
> Helve=3D<BR>>=3B >=3Btica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=
>=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D<BR>>=3B >=3B=3D3B WHITE-SPACE: n=
>ormal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separ=3D<BR>>=3B =
>>=3Bate">=3B<BR>>=3B >=3B<=3BDIV>=3B<=3BFONT class=3D3DEC_EC_=
>EC_Apple-style-span color=3D3D#0000ff>=3B<=3BFONT class=3D3D=3D<BR>>=
>=3B >=3BEC_EC_EC_Apple-style-span face=3D3D"Gill Sans">=3B<=3BSPAN cl=
>ass=3D3DEC_EC_EC_Apple-s=3D<BR>>=3B >=3Btyle-span style=3D3D"COLOR: rgb=
>(0=3D2C0=3D2C255)=3D3B FONT-FAMILY: 'Gill Sans'">=3B<=3BSP=3D<BR>>=3B=
> >=3BAN class=3D3DEC_EC_EC_Apple-style-span style=3D3D"COLOR: rgb(0=3D2C0=
>=3D2C255)=3D3B FO=3D<BR>>=3B >=3BNT-FAMILY: 'Gill Sans'">=3BAntony Ho=
>sking<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/FONT>=3B<=3B/FONT>=3B&l=
>t=3BFONT cla=3D<BR>>=3B >=3Bss=3D3DEC_EC_EC_Apple-style-span face=3D3D"=
>Gill Sans">=3B<=3BSPAN class=3D3DEC_EC_EC_Ap=3D<BR>>=3B >=3Bple-sty=
>le-span style=3D3D"FONT-FAMILY: 'Gill Sans'">=3B<=3BSPAN class=3D3DEC_E=
>C_EC_Ap=3D<BR>>=3B >=3Bple-style-span style=3D3D"FONT-FAMILY: 'Gill San=
>s'">=3B<=3BSPAN class=3D3DEC_EC_Apple=3D<BR>>=3B >=3B-converted-spa=
>ce>=3B&=3Bnbsp=3D3B<=3B/SPAN>=3B|<=3BSPAN class=3D3DEC_EC_Apple-=
>converted-space>=3B=3D<BR>>=3B >=3B&=3Bnbsp=3D3B<=3B/SPAN>=3B&=
>lt=3B/SPAN>=3B<=3B/SPAN>=3B<=3BSPAN class=3D3DEC_EC_EC_Apple-style-=
>span style=3D<BR>>=3B >=3B=3D3D"FONT-FAMILY: 'Gill Sans'">=3B<=3BSP=
>AN class=3D3DEC_EC_EC_Apple-style-span style=3D<BR>>=3B >=3B=3D3D"FONT-=
>FAMILY: 'Gill Sans'">=3BAssociate Professor<=3B/SPAN>=3B<=3B/SPAN&g=
>t=3B<=3BSPAN class=3D<BR>>=3B >=3B=3D3DEC_EC_EC_Apple-style-span styl=
>e=3D3D"FONT-FAMILY: 'Gill Sans'">=3B<=3BSPAN class=3D<BR>>=3B >=3B=
>=3D3DEC_EC_EC_Apple-style-span style=3D3D"FONT-FAMILY: 'Gill Sans'">=3B&a=
>mp=3Bnbsp=3D3B| C=3D<BR>>=3B >=3Bomputer Science | Purdue University<=
>=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/FONT>=3B<=3B/DIV>=3B<BR>>=3B =
>>=3B<=3BDIV>=3B<=3BFONT class=3D3DEC_EC_EC_Apple-style-span face=3D=
>3DGillSans-Light>=3B<=3BSPAN cl=3D<BR>>=3B >=3Bass=3D3DEC_EC_EC_App=
>le-style-span style=3D3D"FONT-FAMILY: GillSans-Light">=3B305 N=3D<BR>>=
>=3B >=3B. University Street | West Lafayette | IN 47907 | USA<=3B/SPAN&=
>gt=3B<=3B/FONT>=3B<=3B/DIV>=3B<BR>>=3B >=3B<=3BDIV>=3B<=
>=3BFONT class=3D3DEC_EC_EC_Apple-style-span face=3D3D"Gill Sans" color=3D3D=
>#00=3D<BR>>=3B >=3B00ff>=3B<=3BSPAN class=3D3DEC_EC_EC_Apple-style-=
>span style=3D3D"COLOR: rgb(0=3D2C0=3D2C25=3D<BR>>=3B >=3B5)=3D3B FONT-F=
>AMILY: 'Gill Sans'">=3B<=3BSPAN class=3D3DEC_EC_EC_Apple-style-span sty=
>=3D<BR>>=3B >=3Ble=3D3D"COLOR: rgb(0=3D2C0=3D2C255)=3D3B FONT-FAMILY: '=
>Gill Sans'">=3BOffice<=3B/SPAN>=3B<=3B/S=3D<BR>>=3B >=3BPAN>=
>=3B<=3B/FONT>=3B<=3BFONT class=3D3DEC_EC_EC_Apple-style-span face=3D3=
>DGillSans-Light>=3B<=3BS=3D<BR>>=3B >=3BPAN class=3D3DEC_EC_EC_Appl=
>e-style-span style=3D3D"FONT-FAMILY: GillSans-Light"=3D<BR>>=3B >=3B>=
>=3B<=3BSPAN class=3D3DEC_EC_EC_Apple-style-span style=3D3D"FONT-FAMILY: G=
>illSans-Lig=3D<BR>>=3B >=3Bht">=3B&=3Bnbsp=3D3B+1 765 494 6001 |&l=
>t=3BSPAN class=3D3DEC_EC_Apple-converted-space>=3B&=3Bnbs=3D<BR>>=3B=
> >=3Bp=3D3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/FONT=
>>=3B<=3BFONT class=3D3DEC_EC_EC_Apple-style-span fac=3D<BR>>=3B >=
>=3Be=3D3D"Gill Sans" color=3D3D#0000ff>=3B<=3BSPAN class=3D3DEC_EC_EC_A=
>pple-style-span sty=3D<BR>>=3B >=3Ble=3D3D"COLOR: rgb(0=3D2C0=3D2C255)=
>=3D3B FONT-FAMILY: 'Gill Sans'">=3B<=3BSPAN class=3D3DEC=3D<BR>>=3B &=
>gt=3B_EC_EC_Apple-style-span style=3D3D"COLOR: rgb(0=3D2C0=3D2C255)=3D3B FO=
>NT-FAMILY: 'G=3D<BR>>=3B >=3Bill Sans'">=3BMobile<=3B/SPAN>=3B<=
>=3B/SPAN>=3B<=3B/FONT>=3B<=3BFONT class=3D3DEC_EC_EC_Apple-style-sp=
>=3D<BR>>=3B >=3Ban face=3D3DGillSans-Light>=3B<=3BSPAN class=3D3DEC=
>_EC_EC_Apple-style-span style=3D3D"F=3D<BR>>=3B >=3BONT-FAMILY: GillSan=
>s-Light">=3B<=3BSPAN class=3D3DEC_EC_EC_Apple-style-span style=3D<BR>&g=
>t=3B >=3B=3D3D"FONT-FAMILY: GillSans-Light">=3B<=3BSPAN class=3D3DEC_=
>EC_Apple-converted-space>=3B=3D<BR>>=3B >=3B&=3Bnbsp=3D3B<=3B/SP=
>AN>=3B+1 765 427 5484<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/FONT>=3B&=
>lt=3B/DIV>=3B<BR>>=3B >=3B<=3BDIV>=3B<=3BFONT class=3D3DEC_EC_E=
>C_Apple-style-span face=3D3DGillSans-Light>=3B<=3BBR clas=3D<BR>>=3B =
>>=3Bs=3D3DEC_EC_EC_khtml-block-placeholder>=3B<=3B/FONT>=3B<=3B/D=
>IV>=3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/SP=3D<BR>=
>>=3B >=3BAN>=3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=3B/SPAN>=3B<=
>=3BBR class=3D3DEC_EC_EC_Apple-interchange-newline>=3B<=3B/SP=3D<BR>>=
>=3B >=3BAN>=3B<=3B/DIV>=3B<=3B/SPAN>=3B<=3B/DIV>=3B<=3BBR=
>>=3B<BR>>=3B >=3B<=3BDIV>=3B<BR>>=3B >=3B<=3BDIV>=3BOn 12=
> Jan 2009=3D2C at 01:44=3D2C Jay wrote:<=3B/DIV>=3B<=3BBR class=3D3DE=
>C_EC_EC_App=3D<BR>>=3B >=3Ble-interchange-newline>=3B<BR>>=3B >=
>=3B<=3BBLOCKQUOTE>=3B<=3BSPAN class=3D3DEC_EC_EC_Apple-style-span sty=
>le=3D3D"WORD-SPACING: =3D<BR>>=3B >=3B0px=3D3B FONT: 12px Helvetica=3D3=
>B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0=3D<BR>>=3B >=3B)=
>=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=
>=3D3B B=3D<BR>>=3B >=3BORDER-COLLAPSE: separate">=3B<BR>>=3B >=3B=
><=3BDIV class=3D3DEC_EC_EC_hmmessage style=3D3D"FONT-SIZE: 10pt=3D3B FONT=
>-FAMILY: Ve=3D<BR>>=3B >=3Brdana">=3BIs there a way in Modula-3 to de=
>clare that&=3Bnbsp=3D3Ba type exists=3D2C a=3D<BR>>=3B >=3Bnd there =
>are &=3Blt=3D3B*external*&=3Bgt=3D3B instances of it=3D2C without "fu=
>lly" decl=3D<BR>>=3B >=3Baring it=3D2C so that no Modula-3 can instanti=
>ate it?<=3BBR>=3B&=3Bnbsp=3D3B<=3BBR>=3BI have d=3D<BR>>=3B &g=
>t=3Bone this for sigset_t and sem_t=3D2C but they could erroneously be inst=
>antiat=3D<BR>>=3B >=3Bed by Modula-3 and I'd like to remove that abilit=
>y to mess up so easily.<=3BBR=3D<BR>>=3B >=3B>=3B&=3Bnbsp=3D3B&l=
>t=3BBR>=3B(* This type is not declared correctly. It is only instantiate=
>=3D<BR>>=3B >=3Bd in C code. *)<=3BBR>=3B&=3Bnbsp=3D3B sigset_t =
>=3D3D RECORD END=3D3B<=3BBR>=3B<=3BBR>=3B(* This type =3D<BR>>=3B=
> >=3Bis not declared correctly. It is only instantiated in C code. *)<=
>=3BBR>=3B&=3Bnbsp=3D<BR>>=3B >=3B=3D3B sem_t =3D3D RECORD END=3D3B=
><=3BBR>=3B<=3BBR>=3BIn C I believe you can do this=3D2C like:<=3B=
>=3D<BR>>=3B >=3BBR>=3B&=3Bnbsp=3D3B&=3Bnbsp=3D3Btypedef struct =
>foo foo_t=3D3B&=3Bnbsp=3D3B<=3BSPAN class=3D3DEC_EC_E=3D<BR>>=3B >=
>=3BC_Apple-converted-space>=3B&=3Bnbsp=3D3B<=3B/SPAN>=3B<=3BBR&g=
>t=3B&=3Bnbsp=3D3B&=3Bnbsp=3D3Bextern foo_t foo=3D<BR>>=3B >=3B=3D=
>3B&=3Bnbsp=3D3B<=3BSPAN class=3D3DEC_EC_EC_Apple-converted-space>=3B=
>&=3Bnbsp=3D3B<=3B/SPAN>=3B<=3BBR>=3B=3D<BR>>=3B >=3B&=3Bn=
>bsp=3D3B<=3BBR>=3B&=3Bnbsp=3D3Bvoid UseFoo(foo_t*)=3D3B<=3BSPAN cl=
>ass=3D3DEC_EC_EC_Apple-conv=3D<BR>>=3B >=3Berted-space>=3B&=3Bnbsp=
>=3D3B<=3B/SPAN>=3B<=3BBR>=3B&=3Bnbsp=3D3B foo_t* GetFoo(void)=3D=
>3B<=3BSPAN class=3D<BR>>=3B >=3B=3D3DEC_EC_EC_Apple-converted-space&g=
>t=3B&=3Bnbsp=3D3B<=3B/SPAN>=3B<=3BBR>=3B&=3Bnbsp=3D3B<=3BBR=
>>=3BThanks=3D2C<=3B=3D<BR>>=3B >=3BBR>=3B&=3Bnbsp=3D3B- Jay<=
>=3BBR>=3B<=3BBR>=3B<=3BBR>=3B<=3BBR>=3B<=3B/DIV>=3B<=3B=
>/SPAN>=3B<=3B/BLOCKQUOTE>=3B<=3B/DIV>=3B<=3BBR>=3B<=3B/DIV&=
>gt=3B<=3B=3D<BR>>=3B >=3B/DIV>=3B<=3B/SPAN>=3B<=3BBR class=3D=
>3DEC_EC_Apple-interchange-newline>=3B<=3B/BLOCKQUOTE>=3B<=3B/DIV>=
>=3B=3D<BR>>=3B >=3B<=3BBR>=3B<=3B/DIV>=3B<=3B/SPAN>=3B<=
>=3BBR class=3D3DEC_Apple-interchange-newline>=3B<=3B/BLOCKQUOTE>=3B&l=
>t=3B/DI=3D<BR>>=3B >=3BV>=3B<=3BBR>=3B<=3B/body>=3B<BR>>=3B=
> >=3B<=3B/html>=3B=3D<BR>>=3B >=3B<BR>>=3B >=3B--_6117a048-91=
>85-4c03-badb-ef8f93402268_--<BR><BR></body>
></html>=
>
>--_2e194b09-14b6-4301-9116-a9e4d1e522b4_--
More information about the M3devel
mailing list