[M3devel] declaring a type's existance but not enough to instantiate it?
Jay
jay.krell at cornell.edu
Mon Jan 12 11:24:37 CET 2009
I don't at this time want to write C a parser.
(Actually I do, as part of an entire compiler, but...)
I'd rather run the one I already have -- the C compiler.
I briefly in the past dreamt that C programmers might start writing "xml" (schema?!) or "idl".
Oh, and you can't rely on headers being written in an easy to parse C subset.
There are inlines, #pragmas, compiler-specific extensions, etc.
Best just to use them as part of compiling C with the intended compiler.
Well, I have parsed C subsets actually..more than once.
One didn't really have to be very complete.
One "lived" with the headers and there was flexibility to fix the headers to suit.
- Jay> To: jay.krell at cornell.edu> Date: Mon, 12 Jan 2009 02:13:25 -0800> From: mika at async.caltech.edu> CC: m3devel at elegosoft.com> Subject: Re: [M3devel] declaring a type's existance but not enough to instantiate it?> > > 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_--
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20090112/89bb6b46/attachment-0002.html>
More information about the M3devel
mailing list