[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>> >&nbsp=3D3B<BR>=> >> >CONST or VAR (or functions?)<BR>> >&nbsp=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>> >&nbsp=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>> >&nbsp=3D3B<BR>> >&nbsp=3D3B<BR>> >&nbsp=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>> >&nbsp=3D3B<BR>> >&nbsp=3D3B<=> >BR>> >Also=3D2C the dilemna does get more difficult now=3D2C with the littl=> >e C header=3D> > cloning that remains.<BR>> >&nbsp=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>> >&nbsp=3D3B<BR>> >For example:<BR>>=> > >&nbsp=3D3B<BR>> >TYPE pid_t =3D3D INTEGER=3D3B<BR>> >&lt=3D3B*EXTERNAL "m=> >3_getpid*&gt=3D3B PROCEDURE getpid():pid_t=3D3B<BR>> >&nbsp=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>=> >> >&nbsp=3D3B<BR>> >&nbsp=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>> >&nbsp=3D3B<BR>> >&nbsp=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>> >&nbsp=3D3B<BR=> >>> >&nbsp=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>> >&nbsp=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>> >&nbsp=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>> >&nbsp=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>> >&nbsp=3D3B<BR>> >&nbsp=3D3B<BR>> >&nbsp=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. &nbsp=3D3BWe live in a C univers=> >e and so need to interact. =3D> >&nbsp=3D3BI do think your work with the he=> >aders is useful=3D2C and I want it to=3D> > continue. &nbsp=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>&nbsp=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&nbsp=3D3Bcan be done in a system-independent way=3D> >=3D2C&nb=> >sp=3D3Bor move the Modula-3&lt=3D3B-&gt=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>&nbsp=3D3B<BR>There is always going=> > to be a Modula-3&lt=3D3B-&gt=3D> >=3D3BC transition=3D2C it is just a matt=> >er of where it occurs.<BR>&nbsp=3D3B<BR>&=3D> >nbsp=3D3B- Jay<BR><BR>> ><HR=> > id=3D3DEC_stopSpelling>> ><BR>CC:<SPAN class=3D3DEC_Apple-converted-space>=> >&nbsp=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>&nbsp=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. &nbsp=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. &nbsp=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. &nbsp=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=> >. &nbsp=3D3BS=3D> >eems kind of dubious to me. &nbsp=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&nbsp=3D3BFoo_t =3D> >=3D3D something=3D3B<BR>&lt=3D3B* EXTER=> >NAL *&gt=3D3B VAR Foo1=3D2C Foo2:Foo_t=3D3B<BR>&=3D> >lt=3D3B* EXTERNAL *&g=> >t=3D3B PROCEDURE&nbsp=3D3BUseFoo(READONLY (* or VAR *) foo:F=3D> >oo_t)=3D3=> >B<BR>&nbsp=3D3B<BR>(* Modula-3=3D2C not external *)<BR>PROCEDURE x()=3D3D<=> >=3D> >BR>BEGIN<BR>&nbsp=3D3B UseFoo(Foo1)=3D3B<BR>&nbsp=3D3B UseFoo(Foo2)=> >=3D3B<BR>END x=3D> >=3D3B<BR>&nbsp=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>&nbsp=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>&nbsp=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> >>=> >&lt=3D3B*EXTERNAL&gt=3D3B VAR ackSem&nbsp=3D3B: RECORD END=3D3B<BR>&nbsp=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>&nbsp=> >=3D3B<BR>&nbsp=3D3B- Jay<B=3D> >R><BR>> ><HR id=3D3DEC_EC_stopSpelling>> ><=> >BR>From:<SPAN class=3D3DEC_EC_Apple-converted-space>&nbsp=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>&nbsp=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>&nbsp=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>&nbsp=3D3B</SPAN>|<SPAN class=3D3DEC_EC_Apple-co=> >nverted-space>=3D> >&nbsp=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'">&nbsp=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">&nbsp=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> >&nbsp=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&nbsp=3D3Ba type exists=3D2C a=3D> >nd ther=> >e are &lt=3D3B*external*&gt=3D3B instances of it=3D2C without "fully" decl=> >=3D> >aring it=3D2C so that no Modula-3 can instantiate it?<BR>&nbsp=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> >>&nbsp=3D3B<BR>(* This type is not declared c=> >orrectly. It is only instantiate=3D> >d in C code. *)<BR>&nbsp=3D3B sigset_=> >t =3D3D RECORD END=3D3B<BR><BR>(* This type =3D> >is not declared correctly=> >. It is only instantiated in C code. *)<BR>&nbsp=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&nbsp=3D3Btypedef struct foo foo_t=3D3B&nbsp=3D3B<SPAN class=3D3DEC_E=> >C_E=3D> >C_Apple-converted-space>&nbsp=3D3B</SPAN><BR>&nbsp=3D3B&nbsp=3D3Be=> >xtern foo_t foo=3D> >=3D3B&nbsp=3D3B<SPAN class=3D3DEC_EC_EC_Apple-converte=> >d-space>&nbsp=3D3B</SPAN><BR>=3D> >&nbsp=3D3B<BR>&nbsp=3D3Bvoid UseFoo(foo_=> >t*)=3D3B<SPAN class=3D3DEC_EC_EC_Apple-conv=3D> >erted-space>&nbsp=3D3B</SP=> >AN><BR>&nbsp=3D3B foo_t* GetFoo(void)=3D3B<SPAN class=3D> >=3D3DEC_EC_EC_Ap=> >ple-converted-space>&nbsp=3D3B</SPAN><BR>&nbsp=3D3B<BR>Thanks=3D2C<=3D> >BR=> >>&nbsp=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>&nbsp=3B i.e. a native => >build=2C that has a working C development system<BR>&nbsp=3B and checked ag=> >ainst the checked in ones.<BR>> >&nbsp=3BSo then porting is: <BR>&nbsp=3B copy the generator to new system=> >=2C run it=2C copy results back=2C proceed <BR>> ><BR>&nbsp=3BMaybe a good compromise. <BR>&nbsp=3BNot good for "embedded sys=> >tems"=2C but heck=2C is there any such thing<BR>&nbsp=3B any longer? Doesn'=> >t everything have megs of RAM and gigs of persistant storage? :)<BR>> ><BR>You don't need&nbsp=3BScheme.<BR>> >Just Quake&nbsp=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>> >&nbsp=3B<BR>> >compile that=2C and read the value of xi out of the .obj file.<BR>> >&nbsp=3B<BR>> >&nbsp=3BThe .obj file reader was written in Perl. :) <BR>> >&nbsp=3B (Python not available.)<BR>> >&nbsp=3Bbut to do that here=2C I'd have to support multiple .obj file forma=> >ts.<BR>> >&nbsp=3B<BR>> >&nbsp=3B- Jay<BR><BR>&gt=3B To: jay.krell at cornell.edu<BR>&gt=3B Date: Mon=> >=2C 12 Jan 2009 01:34:24 -0800<BR>&gt=3B From: mika at async.caltech.edu<BR>&g=> >t=3B CC: m3devel at elegosoft.com<BR>&gt=3B Subject: Re: [M3devel] declaring a=> > type's existance but not enough to instantiate it?<BR>&gt=3B <BR>&gt=3B <B=> >R>&gt=3B You present it as a true tragic Dilemma.<BR>&gt=3B <BR>&gt=3B But => >isn't there a Third Way---to wit=2C can't you "Ask the Computer"<BR>&gt=3B => >to do the work for you?<BR>&gt=3B <BR>&gt=3B Generate the code somehow... P=> >arsing the C headers is an obvious<BR>&gt=3B way but there may be others th=> >at are simpler=2C such as writing a<BR>&gt=3B Modula-3 program to generate => >the cloned M3 headers=2C sorry=2C interfaces.<BR>&gt=3B <BR>&gt=3B If I had=> > to do this I would use my Scheme interpreter that's coded<BR>&gt=3B in Mod=> >ula-3 to write a Scheme program to generate the headers. This<BR>&gt=3B pro=> >gram could pull whatever tricks are deemed necessary and suitable=2C<BR>&gt=> >=3B down to the point of generating and compiling and running C programs<BR=> >>&gt=3B as necessary (or parsing C code=2C or reading tea leaves). But the<=> >BR>&gt=3B end result would be a set of interfaces written in "Pure Modula-3=> >".<BR>&gt=3B The process of running the header generator would also have ve=> >ry<BR>&gt=3B few dependencies on anything outside the M3 distribution.<BR>&=> >gt=3B <BR>&gt=3B Mika<BR>&gt=3B <BR>&gt=3B Jay writes:<BR>&gt=3B &gt=3B--_6=> >117a048-9185-4c03-badb-ef8f93402268_<BR>&gt=3B &gt=3BContent-Type: text/pla=> >in=3B charset=3D"iso-8859-1"<BR>&gt=3B &gt=3BContent-Transfer-Encoding: quo=> >ted-printable<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3BThis is wha=> >t you "have to" chose between.<BR>&gt=3B &gt=3BHeader cloning or C code (an=> >d C headers).<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3BCONST or VAR (or functi=> >ons?)<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3BI'm going to likely make the Ue=> >rror change tonight.<BR>&gt=3B &gt=3BYou can still veto it (er=3D2C vote ag=> >ainst it :) )<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3BPossibly some convulute=> >d C (enum/#undef)=3D2C or splitting the Modula-3<BR>&gt=3B &gt=3Bat boundar=> >ies that weren't previously believed "natural".<BR>&gt=3B &gt=3B(See how Se=> >tupHandlers is ~two lines in Modula-3 and the rest in C=3D3B<BR>&gt=3B &gt=> >=3Bthis is partly out of ignorance. I don't know how to write those<BR>&gt=> >=3B &gt=3Btwo lines in C=3D3B and laziness=3D2C I didn't look into how).<BR=> >>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &=> >gt=3BRemember I'm still staying away from mainstream platforms=3D2C<BR>&gt=> >=3B &gt=3Bso the value isn't what it might appear to be=3D2C but it is "sta=> >ge setting"=3D<BR>&gt=3B &gt=3B=3D2C<BR>&gt=3B &gt=3Band the show might go => >on. :)<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3BAlso=3D2=> >C the dilemna does get more difficult now=3D2C with the little C header=3D<=> >BR>&gt=3B &gt=3B cloning that remains.<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=> >=3BFor example=3D2C look at Upthreads.i3.<BR>&gt=3B &gt=3BMainly=3D2C look => >at function prototypes.<BR>&gt=3B &gt=3BConstants and types are "known prob=> >lems".<BR>&gt=3B &gt=3BPrototypes are gray. They actually tend to be portab=> >le.<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3BFor example:<BR>&gt=3B &gt=3B=3D2=> >0<BR>&gt=3B &gt=3BTYPE pid_t =3D3D INTEGER=3D3B<BR>&gt=3B &gt=3B&lt=3B*EXTE=> >RNAL "m3_getpid*&gt=3B PROCEDURE getpid():pid_t=3D3B<BR>&gt=3B &gt=3B=3D20<=> >BR>&gt=3B &gt=3Bor leave it alone?<BR>&gt=3B &gt=3Bgetpid is probably the w=> >orst example.<BR>&gt=3B &gt=3BIt is so very portable declared in Modula-3.<=> >BR>&gt=3B &gt=3BBut still=3D2C imagine pid_t might be 16bits or 32 or 64.<B=> >R>&gt=3B &gt=3BWriting a wrapper is more portable -- as long as the pid isn=> >'t stuff into s=3D<BR>&gt=3B &gt=3Bome record that the system defines.<BR>&=> >gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3BAgain=3D2C Upthread=> >s.i3.<BR>&gt=3B &gt=3BWould you like to see it reduced=3D2C or left alone?<=> >BR>&gt=3B &gt=3BOnly deal with the types and initializers=3D2C or also the => >prototypes?<BR>&gt=3B &gt=3BYou know=3D2C I could write a little portable l=> >ayer=3D2C where all the types ar=3D<BR>&gt=3B &gt=3Be pointers=3D2C always => >null initialized.<BR>&gt=3B &gt=3BIt would buy /some/ portability=3D2C and => >cost some.<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3BDo y=> >ou like the sem_t change? Partly? Not at all?<BR>&gt=3B &gt=3BThere is one => >sem_t in the system. So I moved it to be in C code.<BR>&gt=3B &gt=3BOr=3D2C=> > as I had it before=3D2C declared as the max size/align of all the platf=3D=> ><BR>&gt=3B &gt=3Borms -- getting that right is the same work as getting it => >right "the old wa=3D<BR>&gt=3B &gt=3By"=3D2C except if you make a mistake=> >=3D2C odds are still good of it being ok.<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &=> >gt=3B=3D20<BR>&gt=3B &gt=3BShould the line be drawn at generating the remai=> >ning headers=3D2C rather than=3D<BR>&gt=3B &gt=3B eliminating them?<BR>&gt=> >=3B &gt=3BUerror.i3 is easily generated. Good enough?<BR>&gt=3B &gt=3B=3D20=> ><BR>&gt=3B &gt=3BUpthread.i3's types can be generated generally as records => >with opaque array=3D<BR>&gt=3B &gt=3Bs with the right size and alignment.<B=> >R>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3BOther stuff can be generated or at lea=> >st checked.<BR>&gt=3B &gt=3Be.g. to check that getpid is declared correctly=> >=3D2C you can assign it to a f=3D<BR>&gt=3B &gt=3Bunction pointer and see i=> >f that compiles.<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3BPerf on Uerror argua=> >bly doesn't matter.<BR>&gt=3B &gt=3BIs it only error handling code?Or do so=> >ckets often go down "error" paths=3D2C=3D<BR>&gt=3B &gt=3B because they are=> > slow and you are waiting for more data?<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &g=> >t=3BAnyway=3D2C point is=3D2C I agree for sure this is valuable=3D2C but I => >might be h=3D<BR>&gt=3B &gt=3Bitting the "tail" of the approach and should => >switch=3D2C I'm not sure. I keep=3D<BR>&gt=3B &gt=3B saying that though=3D2=> >C and then press further.<BR>&gt=3B &gt=3B=3D20<BR>&gt=3B &gt=3B=3D20<BR>&g=> >t=3B &gt=3B - Jay<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3B<BR>&gt=> >=3B &gt=3BFrom: hosking at cs.purdue.eduTo: jay.krell at cornell.eduDate: Mon=3D2=> >C 12 Jan 200=3D<BR>&gt=3B &gt=3B9 19:24:50 +1100CC: m3devel at elegosoft.comSu=> >bject: Re: [M3devel] declaring a=3D<BR>&gt=3B &gt=3B type's existance but n=> >ot enough to instantiate it?<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3B<BR>&gt=3B &g=> >t=3BPoint taken. We live in a C universe and so need to interact. I do thin=> >k =3D<BR>&gt=3B &gt=3Byour work with the headers is useful=3D2C and I want => >it to continue. Especia=3D<BR>&gt=3B &gt=3Blly in simplifying ports.<BR>&gt=> >=3B &gt=3B<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3BOn 12 Jan 2009=3D2C at 19:18=3D=> >2C Jay wrote:<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3BI don't think a development => >system without C headers is interesting.. Is it=3D<BR>&gt=3B &gt=3B really?=> > The transform I apply at times is wherever there is interaction wi=3D<BR>&=> >gt=3B &gt=3Bth C code that is described by system-dependent headers=3D2C or=> > perhaps even =3D<BR>&gt=3B &gt=3Bfairly system-independent headers outside=> > the Modula-3 tree=3D2C either write=3D<BR>&gt=3B &gt=3B wrapper functions => >for the functionality in the headers (e.g. stat=3D2C waitp=3D<BR>&gt=3B &gt=> >=3Bid)=3D2C which can be done in a system-independent way=3D2C or move the => >Modula-=3D<BR>&gt=3B &gt=3B3&lt=3B-&gt=3BC transition higher=3D2C which is => >also usually system-independent=3D2C e.g.=3D<BR>&gt=3B &gt=3B ThreadPThread=> >C_SetupHandlers. It is either that or clone the headers=3D2C wh=3D<BR>&gt=> >=3B &gt=3Bich seems like the worse evil. There is always going to be a Modu=> >la-3&lt=3B-&gt=3BC t=3D<BR>&gt=3B &gt=3Bransition=3D2C it is just a matter => >of where it occurs. - Jay<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3BCC: m3devel at eleg=> >osoft.comFrom: hosking at cs.purdue.eduTo: jay.krell at cornell.e=3D<BR>&gt=3B &g=> >t=3BduSubject: Re: [M3devel] declaring a type's existance but not enough to=> > ins=3D<BR>&gt=3B &gt=3Btantiate it?Date: Mon=3D2C 12 Jan 2009 12:32:15 +11=> >00<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3BJay=3D2C I really thin=> >k you are bending over backwards too far just to be abl=3D<BR>&gt=3B &gt=3B=> >e to shoe-horn things into C. I *like* having the transpar of C header fil=> >=3D<BR>&gt=3B &gt=3Bes expressed in Modula-3=3D2C *particularly* for system=> > calls=3D2C where you mi=3D<BR>&gt=3B &gt=3Bght even be trying to build on => >a system that does not have the C header fil=3D<BR>&gt=3B &gt=3Bes installe=> >d=3D2C even though the libraries exist and can be linked to. Fund=3D<BR>&gt=> >=3B &gt=3Bamentally=3D2C I think anytime the Modula-3 code is made less tra=> >nsparent you=3D<BR>&gt=3B &gt=3B should think hard about what you are doing=> >. The same with the change of c=3D<BR>&gt=3B &gt=3Bonstants to variables.<B=> >R>&gt=3B &gt=3B<BR>&gt=3B &gt=3BI am getting very nervous that the changes => >you are making are destroying th=3D<BR>&gt=3B &gt=3Be clarity of the Modula=> >-3 run-time code.<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3BIn this particular case=> >=3D2C you are wanting to use a Modula-3 parameter pass=3D<BR>&gt=3B &gt=3Bi=> >ng mechanism on something that is not declared in Modula-3. Seems kind of=> >=3D<BR>&gt=3B &gt=3B dubious to me. Also=3D2C I really don't like the idea => >of accessing external=3D<BR>&gt=3B &gt=3B variables in C.<BR>&gt=3B &gt=3B<=> >BR>&gt=3B &gt=3B-- Tony<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3BOn 12 Jan 2009=3D2=> >C at 11:55=3D2C Jay wrote:<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3BI considered AD=> >DRESS.However I think it still doesn't satisfy. I want to be=3D<BR>&gt=3B &=> >gt=3B able to do this: TYPE Foo_t =3D3D something=3D3B&lt=3B* EXTERNAL *&gt=> >=3B VAR Foo1=3D2C Foo=3D<BR>&gt=3B &gt=3B2:Foo_t=3D3B&lt=3B* EXTERNAL *&gt=> >=3B PROCEDURE UseFoo(READONLY (* or VAR *) foo:Foo_t)=3D<BR>&gt=3B &gt=3B=> >=3D3B (* Modula-3=3D2C not external *)PROCEDURE x()=3D3DBEGIN UseFoo(Foo1)=> >=3D3B U=3D<BR>&gt=3B &gt=3BseFoo(Foo2)=3D3BEND x=3D3B AND I want any use of=> >:VAR Foo3:Foo3_t=3D3B (* Modula-3=3D<BR>&gt=3B &gt=3B=3D2C not external *)t=> >o error. This is sem_t and sigset_t in particular. Poss=3D<BR>&gt=3B &gt=3B=> >ibly renaming is the thing.They used to be declared in Modula-3=3D2C system=> >-d=3D<BR>&gt=3B &gt=3Bependently=3D2C butI moved them to portable C. I coul=> >d remove the types entir=3D<BR>&gt=3B &gt=3Bely and change UseFoo to take a=> >n address=3D2Cand declare mask and ackSem to b=3D<BR>&gt=3B &gt=3Be integer=> >s or I guess.&lt=3B*EXTERNAL&gt=3B VAR ackSem : RECORD END=3D3B That would => >sat=3D<BR>&gt=3B &gt=3Bisfy but I thought it might be nicer to still provid=> >e the namedtypes to ref=3D<BR>&gt=3B &gt=3Ber to the external variables. - => >Jay<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3BFrom: hosking at cs.purdue.eduTo: jay.kre=> >ll at cornell.eduDate: Mon=3D2C 12 Jan 200=3D<BR>&gt=3B &gt=3B9 11:13:00 +1100=> >CC: m3devel at elegosoft.comSubject: Re: [M3devel] declaring a=3D<BR>&gt=3B &g=> >t=3B type's existance but not enough to instantiate it?What's wrong with us=> >ing =3D<BR>&gt=3B &gt=3BADDRESS for references to opaque values? If sigset_=> >t is never instantiated=3D<BR>&gt=3B &gt=3B in Modula-3=3D2C then why do yo=> >u need it declared there?<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=> >=3B<BR>&gt=3B &gt=3BAntony Hosking | Associate Professor | Computer Science=> > | Purdue University<BR>&gt=3B &gt=3B305 N. University Street | West Lafaye=> >tte | IN 47907 | USA<BR>&gt=3B &gt=3BOffice +1 765 494 6001 | Mobile +1 765=> > 427 5484<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3BOn 12 Jan 2009=> >=3D2C at 01:44=3D2C Jay wrote:<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3BIs there a => >way in Modula-3 to declare that a type exists=3D2C and there are &lt=3B=3D<=> >BR>&gt=3B &gt=3B*external*&gt=3B instances of it=3D2C without "fully" decla=> >ring it=3D2C so that no M=3D<BR>&gt=3B &gt=3Bodula-3 can instantiate it? I => >have done this for sigset_t and sem_t=3D2C but =3D<BR>&gt=3B &gt=3Bthey cou=> >ld erroneously be instantiated by Modula-3 and I'd like to remove t=3D<BR>&=> >gt=3B &gt=3Bhat ability to mess up so easily. (* This type is not declared => >correctly. I=3D<BR>&gt=3B &gt=3Bt is only instantiated in C code. *) sigset=> >_t =3D3D RECORD END=3D3B(* This typ=3D<BR>&gt=3B &gt=3Be is not declared co=> >rrectly. It is only instantiated in C code. *) sem_t =3D<BR>&gt=3B &gt=3B=> >=3D3D RECORD END=3D3BIn C I believe you can do this=3D2C like: typedef stru=> >ct fo=3D<BR>&gt=3B &gt=3Bo foo_t=3D3B extern foo_t foo=3D3B void UseFoo(foo=> >_t*)=3D3B foo_t* GetFoo=3D<BR>&gt=3B &gt=3B(void)=3D3B Thanks=3D2C - Jay=3D=> ><BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3B--_6117a048-9185-4c03-badb-ef8f93402268_<=> >BR>&gt=3B &gt=3BContent-Type: text/html=3B charset=3D"iso-8859-1"<BR>&gt=3B=> > &gt=3BContent-Transfer-Encoding: quoted-printable<BR>&gt=3B &gt=3B<BR>&gt=> >=3B &gt=3B&lt=3Bhtml&gt=3B<BR>&gt=3B &gt=3B&lt=3Bhead&gt=3B<BR>&gt=3B &gt=> >=3B&lt=3Bstyle&gt=3B<BR>&gt=3B &gt=3B.hmmessage P<BR>&gt=3B &gt=3B{<BR>&gt=> >=3B &gt=3Bmargin:0px=3D3B<BR>&gt=3B &gt=3Bpadding:0px<BR>&gt=3B &gt=3B}<BR>=> >&gt=3B &gt=3Bbody.hmmessage<BR>&gt=3B &gt=3B{<BR>&gt=3B &gt=3Bfont-size: 10=> >pt=3D3B<BR>&gt=3B &gt=3Bfont-family:Verdana<BR>&gt=3B &gt=3B}<BR>&gt=3B &gt=> >=3B&lt=3B/style&gt=3B<BR>&gt=3B &gt=3B&lt=3B/head&gt=3B<BR>&gt=3B &gt=3B&lt=> >=3Bbody class=3D3D'hmmessage'&gt=3B<BR>&gt=3B &gt=3BThis is what you "have => >to" chose between.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BHeader cloning or C code (=> >and C headers).&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=> >=3B<BR>&gt=3B &gt=3BCONST or VAR (or functions?)&lt=3BBR&gt=3B<BR>&gt=3B &g=> >t=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BI'm going to likely make=> > the Uerror change tonight.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BYou can still vet=> >o it (er=3D2C vote against it :) )&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbs=> >p=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BPossibly some convuluted C (enum/#unde=> >f)=3D2C or splitting the Modula-3&lt=3BBR&gt=3B<BR>&gt=3B &gt=3Bat boundari=> >es that weren't previously believed "natural".&lt=3BBR&gt=3B<BR>&gt=3B &gt=> >=3B(See how SetupHandlers is ~two lines in Modula-3 and the rest in C=3D3B&=> >lt=3BBR&gt=3B<BR>&gt=3B &gt=3Bthis is partly out of ignorance. I don't know=> > how to write those&lt=3BBR&gt=3B<BR>&gt=3B &gt=3Btwo lines in C=3D3B and l=> >aziness=3D2C I didn't look into how).&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3B=> >nbsp=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B<BR>&=> >gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BRemember I'm sti=> >ll staying away from mainstream platforms=3D2C&lt=3BBR&gt=3B<BR>&gt=3B &gt=> >=3Bso the value isn't what it might appear to be=3D2C but it is "stage sett=> >ing"=3D<BR>&gt=3B &gt=3B=3D2C&lt=3BBR&gt=3B<BR>&gt=3B &gt=3Band the show mi=> >ght go on. :)&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B<=> >BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BAlso=3D2C th=> >e dilemna does get more difficult now=3D2C with the little C header=3D<BR>&=> >gt=3B &gt=3B cloning that remains.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbs=> >p=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BFor example=3D2C look at Upthreads.i3.=> >&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BMainly=3D2C look at function prototypes.&lt=> >=3BBR&gt=3B<BR>&gt=3B &gt=3BConstants and types are "known problems".&lt=3B=> >BR&gt=3B<BR>&gt=3B &gt=3BPrototypes are gray. They actually tend to be port=> >able.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B<BR>&gt=> >=3B &gt=3BFor example:&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3B=> >BR&gt=3B<BR>&gt=3B &gt=3BTYPE pid_t =3D3D INTEGER=3D3B&lt=3BBR&gt=3B<BR>&gt=> >=3B &gt=3B&amp=3Blt=3D3B*EXTERNAL "m3_getpid*&amp=3Bgt=3D3B PROCEDURE getpi=> >d():pid_t=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B=> ><BR>&gt=3B &gt=3Bor leave it alone?&lt=3BBR&gt=3B<BR>&gt=3B &gt=3Bgetpid is=> > probably the worst example.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BIt is so very po=> >rtable declared in Modula-3.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BBut still=3D2C i=> >magine pid_t might be 16bits or 32 or 64.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BWri=> >ting a wrapper is more portable -- as long as the pid isn't stuff into s=3D=> ><BR>&gt=3B &gt=3Bome record that the system defines.&lt=3BBR&gt=3B<BR>&gt=> >=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&l=> >t=3BBR&gt=3B<BR>&gt=3B &gt=3BAgain=3D2C Upthreads.i3.&lt=3BBR&gt=3B<BR>&gt=> >=3B &gt=3BWould you like to see it reduced=3D2C or left alone?&lt=3BBR&gt=> >=3B<BR>&gt=3B &gt=3BOnly deal with the types and initializers=3D2C or also => >the prototypes?&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BYou know=3D2C I could write a=> > little portable layer=3D2C where all the types ar=3D<BR>&gt=3B &gt=3Be poi=> >nters=3D2C always null initialized.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BIt would => >buy /some/ portability=3D2C and cost some.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&a=> >mp=3Bnbsp=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B=> ><BR>&gt=3B &gt=3BDo you like the sem_t change? Partly? Not at all?&lt=3BBR&=> >gt=3B<BR>&gt=3B &gt=3BThere is one sem_t in the system. So I moved it to be=> > in C code.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BOr=3D2C as I had it before=3D2C d=> >eclared as the max size/align of all the platf=3D<BR>&gt=3B &gt=3Borms -- g=> >etting that right is the same work as getting it right "the old wa=3D<BR>&g=> >t=3B &gt=3By"=3D2C except if you make a mistake=3D2C odds are still good of=> > it being ok.&lt=3BB=3D<BR>&gt=3B &gt=3BR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=> >=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B<BR>&gt=> >=3B &gt=3BShould the line be drawn at generating the remaining headers=3D2C=> > rather than=3D<BR>&gt=3B &gt=3B eliminating them?&lt=3BBR&gt=3B<BR>&gt=3B => >&gt=3BUerror.i3 is easily generated. Good enough?&lt=3BBR&gt=3B<BR>&gt=3B &=> >gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BUpthread.i3's types can=> > be generated generally as records with opaque array=3D<BR>&gt=3B &gt=3Bs w=> >ith the right size and alignment.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=> >=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BOther stuff can be generated or at leas=> >t checked.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3Be.g. to check that getpid is decla=> >red correctly=3D2C you can assign it to a f=3D<BR>&gt=3B &gt=3Bunction poin=> >ter and see if that compiles.&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3=> >B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BPerf on Uerror arguably doesn't matter.&lt=> >=3BBR&gt=3B<BR>&gt=3B &gt=3BIs it only error handling code?&lt=3BBR&gt=3BOr=> > do sockets often go down "error" path=3D<BR>&gt=3B &gt=3Bs=3D2C because th=> >ey are slow and you are waiting for more data?&lt=3BBR&gt=3B<BR>&gt=3B &gt=> >=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3BAnyway=3D2C point is=3D2C=> > I agree for sure this is valuable=3D2C but I might be h=3D<BR>&gt=3B &gt=> >=3Bitting the "tail" of the approach and should switch=3D2C I'm not sure. I=> > keep=3D<BR>&gt=3B &gt=3B saying that though=3D2C and then press further.&l=> >t=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=> >=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B- Jay&lt=> >=3BBR&gt=3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=3B&lt=3BHR id=3D3D=> >stopSpelling&gt=3B<BR>&gt=3B &lt=3BBR&gt=3B<BR>&gt=3B &gt=3BFrom: hosking at c=> >s.purdue.edu&lt=3BBR&gt=3BTo: jay.krell at cornell.edu&lt=3BBR&gt=3BDate: Mon=> >=3D2C 12=3D<BR>&gt=3B &gt=3B Jan 2009 19:24:50 +1100&lt=3BBR&gt=3BCC: m3dev=> >el at elegosoft.com&lt=3BBR&gt=3BSubject: Re: [M3de=3D<BR>&gt=3B &gt=3Bvel] de=> >claring a type's existance but not enough to instantiate it?&lt=3BBR&gt=3B&=> >lt=3BBR&gt=3B=3D<BR>&gt=3B &gt=3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&g=> >t=3B&lt=3BSPAN class=3D3DEC_Apple-style-span style=3D3D"WORD-SPACING: 0px=> >=3D3B FONT: =3D<BR>&gt=3B &gt=3B12px Helvetica=3D3B TEXT-TRANSFORM: none=3D=> >3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-IND=3D<BR>&gt=3B &gt=3BENT: 0px=3D3B=> > WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPS=3D<BR>=> >&gt=3B &gt=3BE: separate"&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV style=3D3D"WORD-W=> RAP: break-word"&gt=3B&lt=3BSPAN class=3D3DEC_Apple-style-span styl=3D<BR>&=> >gt=3B &gt=3Be=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TR=> >ANSFORM: none=3D3B C=3D<BR>&gt=3B &gt=3BOLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-=> >INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-S=3D<BR>&gt=3B &gt=3BPACIN=> >G: normal=3D3B BORDER-COLLAPSE: separate"&gt=3B&lt=3BSPAN class=3D3DEC_Appl=> >e-style-s=3D<BR>&gt=3B &gt=3Bpan style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12=> >px Helvetica=3D3B TEXT-TRANSFORM: n=3D<BR>&gt=3B &gt=3Bone=3D3B COLOR: rgb(=> >0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B =3D<BR>&=> >gt=3B &gt=3BLETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separate"&gt=3B&lt=> >=3BSPAN class=3D3DEC_Apple=3D<BR>&gt=3B &gt=3B-style-span style=3D3D"WORD-S=> >PACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRAN=3D<BR>&gt=3B &gt=3BSFO=> >RM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SP=> >ACE: no=3D<BR>&gt=3B &gt=3Brmal=3D3B LETTER-SPACING: normal=3D3B BORDER-COL=> >LAPSE: separate"&gt=3B&lt=3BSPAN class=3D3D=3D<BR>&gt=3B &gt=3BEC_Apple-sty=> >le-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B T=3D<BR=> >>&gt=3B &gt=3BEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-=> >INDENT: 0px=3D3B WHITE-S=3D<BR>&gt=3B &gt=3BPACE: normal=3D3B LETTER-SPACIN=> >G: normal=3D3B BORDER-COLLAPSE: separate"&gt=3B&lt=3BSPAN =3D<BR>&gt=3B &gt=> >=3Bclass=3D3DEC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12=> >px Helvet=3D<BR>&gt=3B &gt=3Bica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(=> >0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B=3D<BR>&gt=3B &gt=3B WHITE-SPACE: => >normal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separate=3D<BR>&gt=> >=3B &gt=3B"&gt=3B&lt=3BSPAN class=3D3DEC_Apple-style-span style=3D3D"WORD-S=> >PACING: 0px=3D3B FONT: 12p=3D<BR>&gt=3B &gt=3Bx Helvetica=3D3B TEXT-TRANSFO=> >RM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT=3D<BR>&gt=3B &gt=> >=3B: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-C=> >OLLAPSE: =3D<BR>&gt=3B &gt=3Bseparate"&gt=3B&lt=3BSPAN class=3D3DEC_Apple-s=> >tyle-span style=3D3D"WORD-SPACING: 0px=3D3B F=3D<BR>&gt=3B &gt=3BONT: 12px => >Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEX=> >=3D<BR>&gt=3B &gt=3BT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPAC=> >ING: normal=3D3B BORDER-CO=3D<BR>&gt=3B &gt=3BLLAPSE: separate"&gt=3B&lt=3B=> >SPAN class=3D3DEC_Apple-style-span style=3D3D"WORD-SPACING: =3D<BR>&gt=3B &=> >gt=3B0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rg=> >b(0=3D2C0=3D2C0=3D<BR>&gt=3B &gt=3B)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE=> >: normal=3D3B LETTER-SPACING: normal=3D3B B=3D<BR>&gt=3B &gt=3BORDER-COLLAP=> >SE: separate"&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&gt=3BPoint taken. &amp=3Bnbsp=> >=3D3BWe live in a C universe and so need to interact. =3D<BR>&gt=3B &gt=3B&=> >amp=3Bnbsp=3D3BI do think your work with the headers is useful=3D2C and I w=> >ant it to=3D<BR>&gt=3B &gt=3B continue. &amp=3Bnbsp=3D3BEspecially in simpl=> >ifying ports.&lt=3B/DIV&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&gt=3B&lt=3BBR&gt=3B=> >&lt=3B/DIV&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/S=> >PAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=> >=3B&lt=3B/DI=3D<BR>&gt=3B &gt=3BV&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/DIV&gt=3B<BR=> >>&gt=3B &gt=3B&lt=3BDIV&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&gt=3BOn 12 Jan 2009=> >=3D2C at 19:18=3D2C Jay wrote:&lt=3B/DIV&gt=3B&lt=3BBR class=3D3DEC_Apple-i=> >nt=3D<BR>&gt=3B &gt=3Berchange-newline&gt=3B<BR>&gt=3B &gt=3B&lt=3BBLOCKQUO=> >TE&gt=3B&lt=3BSPAN class=3D3DEC_Apple-style-span style=3D3D"WORD-SPACING: 0=> >px=3D3B=3D<BR>&gt=3B &gt=3B FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=> >=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B T=3D<BR>&gt=3B &gt=3BEXT-INDENT: 0px=> >=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-=3D<BR>&g=> >t=3B &gt=3BCOLLAPSE: separate"&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV class=3D3DEC=> >_hmmessage style=3D3D"FONT-SIZE: 10pt=3D3B FONT-FAMILY: Verdana"=3D<BR>&gt=> >=3B &gt=3B&gt=3BI don't think a development system without C headers is int=> >eresting.. Is i=3D<BR>&gt=3B &gt=3Bt really?&lt=3BBR&gt=3B&amp=3Bnbsp=3D3B&=> >lt=3BBR&gt=3BThe transform I apply at times is wherever there i=3D<BR>&gt=> >=3B &gt=3Bs interaction with C code that is described by system-dependent h=> >eaders=3D2C =3D<BR>&gt=3B &gt=3Bor perhaps even fairly system-independent h=> >eaders outside the Modula-3 tree=3D<BR>&gt=3B &gt=3B=3D2C either write wrap=> >per functions for the functionality in the headers (e.=3D<BR>&gt=3B &gt=3Bg=> >. stat=3D2C waitpid)=3D2C which&amp=3Bnbsp=3D3Bcan be done in a system-inde=> >pendent way=3D<BR>&gt=3B &gt=3B=3D2C&amp=3Bnbsp=3D3Bor move the Modula-3&am=> >p=3Blt=3D3B-&amp=3Bgt=3D3BC transition higher=3D2C which is=3D<BR>&gt=3B &g=> >t=3B also usually system-independent=3D2C e.g. ThreadPThreadC_SetupHandlers=> >.&lt=3BBR&gt=3B&amp=3B=3D<BR>&gt=3B &gt=3Bnbsp=3D3B&lt=3BBR&gt=3BIt is eith=> >er that or clone the headers=3D2C which seems like the w=3D<BR>&gt=3B &gt=> >=3Borse evil.&lt=3BBR&gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3BThere is always go=> >ing to be a Modula-3&amp=3Blt=3D3B-&amp=3Bgt=3D<BR>&gt=3B &gt=3B=3D3BC tran=> >sition=3D2C it is just a matter of where it occurs.&lt=3BBR&gt=3B&amp=3Bnbs=> >p=3D3B&lt=3BBR&gt=3B&amp=3B=3D<BR>&gt=3B &gt=3Bnbsp=3D3B- Jay&lt=3BBR&gt=3B=> >&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&lt=3BHR id=3D3DEC_stopSpelling&gt=3B<BR>&gt=> >=3B &gt=3B&lt=3BBR&gt=3BCC:&lt=3BSPAN class=3D3DEC_Apple-converted-space&gt=> >=3B&amp=3Bnbsp=3D3B&lt=3B/SPAN&gt=3B&lt=3BA href=3D3D"mai=3D<BR>&gt=3B &gt=> >=3Blto:m3devel at elegosoft.com"&gt=3Bm3devel at elegosoft.com&lt=3B/A&gt=3B&lt=> >=3BBR&gt=3BFrom:&lt=3BSPAN class=3D3D=3D<BR>&gt=3B &gt=3BEC_Apple-converted=> >-space&gt=3B&amp=3Bnbsp=3D3B&lt=3B/SPAN&gt=3B&lt=3BA href=3D3D"mailto:hoski=> >ng at cs.purdue=3D<BR>&gt=3B &gt=3B.edu"&gt=3Bhosking at cs.purdue.edu&lt=3B/A&gt=> >=3B&lt=3BBR&gt=3BTo:&lt=3BSPAN class=3D3DEC_Apple-converted-spac=3D<BR>&gt=> >=3B &gt=3Be&gt=3B&amp=3Bnbsp=3D3B&lt=3B/SPAN&gt=3B&lt=3BA href=3D3D"mailto:=> >jay.krell at cornell.edu"&gt=3Bjay.krell at cornell=3D<BR>&gt=3B &gt=3B.edu&lt=3B=> >/A&gt=3B&lt=3BBR&gt=3BSubject: Re: [M3devel] declaring a type's existance b=> >ut not eno=3D<BR>&gt=3B &gt=3Bugh to instantiate it?&lt=3BBR&gt=3BDate: Mon=> >=3D2C 12 Jan 2009 12:32:15 +1100&lt=3BBR&gt=3B&lt=3BBR&gt=3B&lt=3BB=3D<BR>&=> >gt=3B &gt=3BR&gt=3B<BR>&gt=3B &lt=3BDIV&gt=3B&lt=3BSPAN class=3D3DEC_EC_App=> >le-style-span style=3D3D"WORD-SPACING: 0px=3D3B FON=3D<BR>&gt=3B &gt=3BT: 1=> >2px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B=> > TEXT-=3D<BR>&gt=3B &gt=3BINDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-=> >SPACING: normal=3D3B BORDER-COLL=3D<BR>&gt=3B &gt=3BAPSE: separate"&gt=3B<B=> >R>&gt=3B &gt=3B&lt=3BDIV style=3D3D"WORD-WRAP: break-word"&gt=3B&lt=3BSPAN => >class=3D3DEC_EC_Apple-style-span s=3D<BR>&gt=3B &gt=3Btyle=3D3D"WORD-SPACIN=> >G: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D<BR>&gt=3B &gt=> >=3B=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: => >normal=3D3B LET=3D<BR>&gt=3B &gt=3BTER-SPACING: normal=3D3B BORDER-COLLAPSE=> >: separate"&gt=3B&lt=3BSPAN class=3D3DEC_EC_Apple=3D<BR>&gt=3B &gt=3B-style=> >-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRAN=> >=3D<BR>&gt=3B &gt=3BSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-IN=> >DENT: 0px=3D3B WHITE-SPACE: no=3D<BR>&gt=3B &gt=3Brmal=3D3B LETTER-SPACING:=> > normal=3D3B BORDER-COLLAPSE: separate"&gt=3B&lt=3BSPAN class=3D3D=3D<BR>&g=> >t=3B &gt=3BEC_EC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 1=> >2px Helvetica=3D<BR>&gt=3B &gt=3B=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb=> >(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WH=3D<BR>&gt=3B &gt=3BITE-SPACE:=> > normal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separate"&gt=3B&l=> >t=3B=3D<BR>&gt=3B &gt=3BSPAN class=3D3DEC_EC_Apple-style-span style=3D3D"WO=> >RD-SPACING: 0px=3D3B FONT: 12p=3D<BR>&gt=3B &gt=3Bx Helvetica=3D3B TEXT-TRA=> >NSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT=3D<BR>&gt=3B &=> >gt=3B: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER=> >-COLLAPSE: =3D<BR>&gt=3B &gt=3Bseparate"&gt=3B&lt=3BSPAN class=3D3DEC_EC_Ap=> >ple-style-span style=3D3D"WORD-SPACING: 0px=3D<BR>&gt=3B &gt=3B=3D3B FONT: => >12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D<=> >BR>&gt=3B &gt=3B=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER=> >-SPACING: normal=3D3B BO=3D<BR>&gt=3B &gt=3BRDER-COLLAPSE: separate"&gt=3B&=> >lt=3BSPAN class=3D3DEC_EC_Apple-style-span style=3D3D"WORD=3D<BR>&gt=3B &gt=> >=3B-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B C=> >OLOR: rgb=3D<BR>&gt=3B &gt=3B(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHI=> >TE-SPACE: normal=3D3B LETTER-SPACING: n=3D<BR>&gt=3B &gt=3Bormal=3D3B BORDE=> >R-COLLAPSE: separate"&gt=3B&lt=3BSPAN class=3D3DEC_EC_Apple-style-span st=> >=3D<BR>&gt=3B &gt=3Byle=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D=> >3B TEXT-TRANSFORM: none=3D3B=3D<BR>&gt=3B &gt=3B COLOR: rgb(0=3D2C0=3D2C0)=> >=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER=3D<BR>&gt=3B &g=> >t=3B-SPACING: normal=3D3B BORDER-COLLAPSE: separate"&gt=3B&lt=3BSPAN class=> >=3D3DEC_EC_Apple-st=3D<BR>&gt=3B &gt=3Byle-span style=3D3D"WORD-SPACING: 0p=> >x=3D3B FONT: 12px Helvetica=3D3B TEXT-TRANSFO=3D<BR>&gt=3B &gt=3BRM: none=> >=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: nor=> >ma=3D<BR>&gt=3B &gt=3Bl=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: s=> >eparate"&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&gt=3BJay=3D2C I really think you a=> >re bending over backwards too far just to b=3D<BR>&gt=3B &gt=3Be able to sh=> >oe-horn things into C. &amp=3Bnbsp=3D3BI *like* having the transpar of =3D<=> >BR>&gt=3B &gt=3BC header files expressed in Modula-3=3D2C *particularly* fo=> >r system calls=3D2C =3D<BR>&gt=3B &gt=3Bwhere you might even be trying to b=> >uild on a system that does not have the =3D<BR>&gt=3B &gt=3BC header files => >installed=3D2C even though the libraries exist and can be link=3D<BR>&gt=3B=> > &gt=3Bed to. &amp=3Bnbsp=3D3BFundamentally=3D2C I think anytime the Modula=> >-3 code is made l=3D<BR>&gt=3B &gt=3Bess transparent you should think hard => >about what you are doing. &amp=3Bnbsp=3D3BThe=3D<BR>&gt=3B &gt=3B same with=> > the change of constants to variables.&lt=3B/DIV&gt=3B<BR>&gt=3B &gt=3B&lt=> >=3BDIV&gt=3B&lt=3BBR&gt=3B&lt=3B/DIV&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&gt=3BI=> > am getting very nervous that the changes you are making are destroyi=3D<BR=> >>&gt=3B &gt=3Bng the clarity of the Modula-3 run-time code.&lt=3B/DIV&gt=3B=> ><BR>&gt=3B &gt=3B&lt=3BDIV&gt=3B&lt=3BBR&gt=3B&lt=3B/DIV&gt=3B<BR>&gt=3B &g=> >t=3B&lt=3BDIV&gt=3BIn this particular case=3D2C you are wanting to use a Mo=> >dula-3 parameter=3D<BR>&gt=3B &gt=3B passing mechanism on something that is=> > not declared in Modula-3. &amp=3Bnbsp=3D3BS=3D<BR>&gt=3B &gt=3Beems kind o=> >f dubious to me. &amp=3Bnbsp=3D3BAlso=3D2C I really don't like the idea of=> >=3D<BR>&gt=3B &gt=3B accessing external variables in C.&lt=3B/DIV&gt=3B<BR>=> >&gt=3B &gt=3B&lt=3BDIV&gt=3B&lt=3BBR&gt=3B&lt=3B/DIV&gt=3B<BR>&gt=3B &gt=3B=> >&lt=3BDIV&gt=3B-- Tony&lt=3B/DIV&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=> >=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPA=> >N&gt=3B&lt=3B/SPAN&gt=3B&lt=3B=3D<BR>&gt=3B &gt=3B/DIV&gt=3B&lt=3B/SPAN&gt=> >=3B&lt=3B/DIV&gt=3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&gt=3B<BR>&gt=3B=> > &gt=3B&lt=3BDIV&gt=3BOn 12 Jan 2009=3D2C at 11:55=3D2C Jay wrote:&lt=3B/DI=> >V&gt=3B&lt=3BBR class=3D3DEC_EC_Apple-=3D<BR>&gt=3B &gt=3Binterchange-newli=> >ne&gt=3B<BR>&gt=3B &gt=3B&lt=3BBLOCKQUOTE&gt=3B&lt=3BSPAN class=3D3DEC_EC_A=> >pple-style-span style=3D3D"WORD-SPACING: 0px=3D<BR>&gt=3B &gt=3B=3D3B FONT:=> > 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D=> ><BR>&gt=3B &gt=3B=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTE=> >R-SPACING: normal=3D3B BO=3D<BR>&gt=3B &gt=3BRDER-COLLAPSE: separate"&gt=3B=> ><BR>&gt=3B &gt=3B&lt=3BDIV class=3D3DEC_EC_hmmessage style=3D3D"FONT-SIZE: => >10pt=3D3B FONT-FAMILY: Verda=3D<BR>&gt=3B &gt=3Bna"&gt=3BI considered ADDRE=> >SS.&lt=3BBR&gt=3BHowever I think it still doesn't satisfy.&lt=3BBR&gt=3B&am=> >p=3B=3D<BR>&gt=3B &gt=3Bnbsp=3D3B&lt=3BBR&gt=3BI want to be able to do this=> >:&lt=3BBR&gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3BTYPE&amp=3Bnbsp=3D3BFoo_t =3D<=> >BR>&gt=3B &gt=3B=3D3D something=3D3B&lt=3BBR&gt=3B&amp=3Blt=3D3B* EXTERNAL => >*&amp=3Bgt=3D3B VAR Foo1=3D2C Foo2:Foo_t=3D3B&lt=3BBR&gt=3B&amp=3B=3D<BR>&g=> >t=3B &gt=3Blt=3D3B* EXTERNAL *&amp=3Bgt=3D3B PROCEDURE&amp=3Bnbsp=3D3BUseFo=> >o(READONLY (* or VAR *) foo:F=3D<BR>&gt=3B &gt=3Boo_t)=3D3B&lt=3BBR&gt=3B&a=> >mp=3Bnbsp=3D3B&lt=3BBR&gt=3B(* Modula-3=3D2C not external *)&lt=3BBR&gt=3BP=> >ROCEDURE x()=3D3D&lt=3B=3D<BR>&gt=3B &gt=3BBR&gt=3BBEGIN&lt=3BBR&gt=3B&amp=> >=3Bnbsp=3D3B UseFoo(Foo1)=3D3B&lt=3BBR&gt=3B&amp=3Bnbsp=3D3B UseFoo(Foo2)=> >=3D3B&lt=3BBR&gt=3BEND x=3D<BR>&gt=3B &gt=3B=3D3B&lt=3BBR&gt=3B&amp=3Bnbsp=> >=3D3B&lt=3BBR&gt=3BAND I want any use of:&lt=3BBR&gt=3BVAR Foo3:Foo3_t=3D3B=> > (* Modula-3=3D<BR>&gt=3B &gt=3B=3D2C not external *)&lt=3BBR&gt=3B&lt=3BBR=> >&gt=3Bto error. This is sem_t and sigset_t in particul=3D<BR>&gt=3B &gt=3Ba=> >r.&lt=3BBR&gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3BPossibly renaming is the thin=> >g.&lt=3BBR&gt=3BThey used to be decla=3D<BR>&gt=3B &gt=3Bred in Modula-3=3D=> >2C system-dependently=3D2C but&lt=3BBR&gt=3BI moved them to portable C.=3D<=> >BR>&gt=3B &gt=3B&lt=3BBR&gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3BI could remove => >the types entirely and change UseFoo to take=3D<BR>&gt=3B &gt=3B an address=> >=3D2C&lt=3BBR&gt=3Band declare mask and ackSem to be integers or I guess.&l=> >t=3BBR=3D<BR>&gt=3B &gt=3B&gt=3B&amp=3Blt=3D3B*EXTERNAL&amp=3Bgt=3D3B VAR a=> >ckSem&amp=3Bnbsp=3D3B: RECORD END=3D3B&lt=3BBR&gt=3B&amp=3Bnbsp=3D3B&lt=3BB=> >R&gt=3BTha=3D<BR>&gt=3B &gt=3Bt would satisfy but I thought it might be nic=> >er to still provide the named&lt=3B=3D<BR>&gt=3B &gt=3BBR&gt=3Btypes to ref=> >er to the external variables.&lt=3BBR&gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3B&a=> >mp=3Bnbsp=3D3B- Jay&lt=3BB=3D<BR>&gt=3B &gt=3BR&gt=3B&lt=3BBR&gt=3B<BR>&gt=> >=3B &gt=3B&lt=3BHR id=3D3DEC_EC_stopSpelling&gt=3B<BR>&gt=3B &gt=3B&lt=3BBR=> >&gt=3BFrom:&lt=3BSPAN class=3D3DEC_EC_Apple-converted-space&gt=3B&amp=3Bnbs=> >p=3D3B&lt=3B/SPAN&gt=3B&lt=3BA href=3D<BR>&gt=3B &gt=3B=3D3D"mailto:hosking=> >@cs.purdue.edu"&gt=3Bhosking at cs.purdue.edu&lt=3B/A&gt=3B&lt=3BBR&gt=3BTo:&l=> >t=3BSPAN cla=3D<BR>&gt=3B &gt=3Bss=3D3DEC_EC_Apple-converted-space&gt=3B&am=> >p=3Bnbsp=3D3B&lt=3B/SPAN&gt=3B&lt=3BA href=3D3D"mailto:jay.krell=3D<BR>&gt=> >=3B &gt=3B at cornell.edu"&gt=3Bjay.krell at cornell.edu&lt=3B/A&gt=3B&lt=3BBR&gt=> >=3BDate: Mon=3D2C 12 Jan 2009 11:13:0=3D<BR>&gt=3B &gt=3B0 +1100&lt=3BBR&gt=> >=3BCC:&lt=3BSPAN class=3D3DEC_EC_Apple-converted-space&gt=3B&amp=3Bnbsp=3D3=> >B&lt=3B/SPAN&gt=3B&lt=3BA h=3D<BR>&gt=3B &gt=3Bref=3D3D"mailto:m3devel at eleg=> >osoft.com"&gt=3Bm3devel at elegosoft.com&lt=3B/A&gt=3B&lt=3BBR&gt=3BSubject: => >=3D<BR>&gt=3B &gt=3BRe: [M3devel] declaring a type's existance but not enou=> >gh to instantiate it=3D<BR>&gt=3B &gt=3B?&lt=3BBR&gt=3B&lt=3BBR&gt=3BWhat's=> > wrong with using ADDRESS for references to opaque values? &amp=3B=3D<BR>&g=> >t=3B &gt=3Bnbsp=3D3BIf sigset_t is never instantiated in Modula-3=3D2C then=> > why do you nee=3D<BR>&gt=3B &gt=3Bd it declared there?&lt=3BBR&gt=3B<BR>&g=> >t=3B &gt=3B&lt=3BDIV&gt=3B&lt=3BBR&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&gt=3B&lt=> >=3BSPAN class=3D3DEC_EC_EC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D=> >3B =3D<BR>&gt=3B &gt=3BFONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B => >COLOR: rgb(0=3D2C0=3D2C0)=3D3B TE=3D<BR>&gt=3B &gt=3BXT-INDENT: 0px=3D3B WH=> >ITE-SPACE: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-C=3D<BR>&gt=3B &g=> >t=3BOLLAPSE: separate"&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV style=3D3D"WORD-WRAP=> >: break-word"&gt=3B&lt=3BSPAN class=3D3DEC_EC_EC_Apple-style-spa=3D<BR>&gt=> >=3B &gt=3Bn style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEX=> >T-TRANSFORM: non=3D<BR>&gt=3B &gt=3Be=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B T=> >EXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LE=3D<BR>&gt=3B &gt=3BTTER-SP=> >ACING: normal=3D3B BORDER-COLLAPSE: separate"&gt=3B&lt=3BSPAN class=3D3DEC_=> >EC_EC_A=3D<BR>&gt=3B &gt=3Bpple-style-span style=3D3D"WORD-SPACING: 0px=3D3=> >B FONT: 12px Helvetica=3D3B TEXT-=3D<BR>&gt=3B &gt=3BTRANSFORM: none=3D3B C=> >OLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE=3D<BR>&gt=> >=3B &gt=3B: normal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separa=> >te"&gt=3B&lt=3BSPAN clas=3D<BR>&gt=3B &gt=3Bs=3D3DEC_EC_EC_Apple-style-span=> > style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helv=3D<BR>&gt=3B &gt=3Betica=> >=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT:=> > 0px=3D<BR>&gt=3B &gt=3B=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: norm=> >al=3D3B BORDER-COLLAPSE: separ=3D<BR>&gt=3B &gt=3Bate"&gt=3B&lt=3BSPAN clas=> >s=3D3DEC_EC_EC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B =3D<BR>&g=> >t=3B &gt=3BFONT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=> >=3D2C0=3D2C0)=3D3B TE=3D<BR>&gt=3B &gt=3BXT-INDENT: 0px=3D3B WHITE-SPACE: n=> >ormal=3D3B LETTER-SPACING: normal=3D3B BORDER-C=3D<BR>&gt=3B &gt=3BOLLAPSE:=> > separate"&gt=3B&lt=3BSPAN class=3D3DEC_EC_EC_Apple-style-span style=3D3D"W=> >ORD-SP=3D<BR>&gt=3B &gt=3BACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-TR=> >ANSFORM: none=3D3B COLOR: rgb(0=3D<BR>&gt=3B &gt=3B=3D2C0=3D2C0)=3D3B TEXT-=> >INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: nor=3D<BR>&gt=3B => >&gt=3Bmal=3D3B BORDER-COLLAPSE: separate"&gt=3B&lt=3BSPAN class=3D3DEC_EC_E=> >C_Apple-style-span s=3D<BR>&gt=3B &gt=3Btyle=3D3D"WORD-SPACING: 0px=3D3B FO=> >NT: 12px Helvetica=3D3B TEXT-TRANSFORM: none=3D<BR>&gt=3B &gt=3B=3D3B COLOR=> >: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LE=> >T=3D<BR>&gt=3B &gt=3BTER-SPACING: normal=3D3B BORDER-COLLAPSE: separate"&gt=> >=3B&lt=3BSPAN class=3D3DEC_EC_EC_Ap=3D<BR>&gt=3B &gt=3Bple-style-span style=> >=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px Helvetica=3D3B TEXT-T=3D<BR>&gt=3B => >&gt=3BRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=> >=3D3B WHITE-SPACE:=3D<BR>&gt=3B &gt=3B normal=3D3B LETTER-SPACING: normal=> >=3D3B BORDER-COLLAPSE: separate"&gt=3B&lt=3BSPAN class=3D<BR>&gt=3B &gt=3B=> >=3D3DEC_EC_EC_Apple-style-span style=3D3D"WORD-SPACING: 0px=3D3B FONT: 12px=> > Helve=3D<BR>&gt=3B &gt=3Btica=3D3B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=> >=3D2C0=3D2C0)=3D3B TEXT-INDENT: 0px=3D<BR>&gt=3B &gt=3B=3D3B WHITE-SPACE: n=> >ormal=3D3B LETTER-SPACING: normal=3D3B BORDER-COLLAPSE: separ=3D<BR>&gt=3B => >&gt=3Bate"&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&gt=3B&lt=3BFONT class=3D3DEC_EC_=> >EC_Apple-style-span color=3D3D#0000ff&gt=3B&lt=3BFONT class=3D3D=3D<BR>&gt=> >=3B &gt=3BEC_EC_EC_Apple-style-span face=3D3D"Gill Sans"&gt=3B&lt=3BSPAN cl=> >ass=3D3DEC_EC_EC_Apple-s=3D<BR>&gt=3B &gt=3Btyle-span style=3D3D"COLOR: rgb=> >(0=3D2C0=3D2C255)=3D3B FONT-FAMILY: 'Gill Sans'"&gt=3B&lt=3BSP=3D<BR>&gt=3B=> > &gt=3BAN class=3D3DEC_EC_EC_Apple-style-span style=3D3D"COLOR: rgb(0=3D2C0=> >=3D2C255)=3D3B FO=3D<BR>&gt=3B &gt=3BNT-FAMILY: 'Gill Sans'"&gt=3BAntony Ho=> >sking&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/FONT&gt=3B&lt=3B/FONT&gt=3B&l=> >t=3BFONT cla=3D<BR>&gt=3B &gt=3Bss=3D3DEC_EC_EC_Apple-style-span face=3D3D"=> >Gill Sans"&gt=3B&lt=3BSPAN class=3D3DEC_EC_EC_Ap=3D<BR>&gt=3B &gt=3Bple-sty=> >le-span style=3D3D"FONT-FAMILY: 'Gill Sans'"&gt=3B&lt=3BSPAN class=3D3DEC_E=> >C_EC_Ap=3D<BR>&gt=3B &gt=3Bple-style-span style=3D3D"FONT-FAMILY: 'Gill San=> >s'"&gt=3B&lt=3BSPAN class=3D3DEC_EC_Apple=3D<BR>&gt=3B &gt=3B-converted-spa=> >ce&gt=3B&amp=3Bnbsp=3D3B&lt=3B/SPAN&gt=3B|&lt=3BSPAN class=3D3DEC_EC_Apple-=> >converted-space&gt=3B=3D<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3B/SPAN&gt=3B&=> >lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3BSPAN class=3D3DEC_EC_EC_Apple-style-=> >span style=3D<BR>&gt=3B &gt=3B=3D3D"FONT-FAMILY: 'Gill Sans'"&gt=3B&lt=3BSP=> >AN class=3D3DEC_EC_EC_Apple-style-span style=3D<BR>&gt=3B &gt=3B=3D3D"FONT-=> >FAMILY: 'Gill Sans'"&gt=3BAssociate Professor&lt=3B/SPAN&gt=3B&lt=3B/SPAN&g=> >t=3B&lt=3BSPAN class=3D<BR>&gt=3B &gt=3B=3D3DEC_EC_EC_Apple-style-span styl=> >e=3D3D"FONT-FAMILY: 'Gill Sans'"&gt=3B&lt=3BSPAN class=3D<BR>&gt=3B &gt=3B=> >=3D3DEC_EC_EC_Apple-style-span style=3D3D"FONT-FAMILY: 'Gill Sans'"&gt=3B&a=> >mp=3Bnbsp=3D3B| C=3D<BR>&gt=3B &gt=3Bomputer Science | Purdue University&lt=> >=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/FONT&gt=3B&lt=3B/DIV&gt=3B<BR>&gt=3B => >&gt=3B&lt=3BDIV&gt=3B&lt=3BFONT class=3D3DEC_EC_EC_Apple-style-span face=3D=> >3DGillSans-Light&gt=3B&lt=3BSPAN cl=3D<BR>&gt=3B &gt=3Bass=3D3DEC_EC_EC_App=> >le-style-span style=3D3D"FONT-FAMILY: GillSans-Light"&gt=3B305 N=3D<BR>&gt=> >=3B &gt=3B. University Street | West Lafayette | IN 47907 | USA&lt=3B/SPAN&=> >gt=3B&lt=3B/FONT&gt=3B&lt=3B/DIV&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&gt=3B&lt=> >=3BFONT class=3D3DEC_EC_EC_Apple-style-span face=3D3D"Gill Sans" color=3D3D=> >#00=3D<BR>&gt=3B &gt=3B00ff&gt=3B&lt=3BSPAN class=3D3DEC_EC_EC_Apple-style-=> >span style=3D3D"COLOR: rgb(0=3D2C0=3D2C25=3D<BR>&gt=3B &gt=3B5)=3D3B FONT-F=> >AMILY: 'Gill Sans'"&gt=3B&lt=3BSPAN class=3D3DEC_EC_EC_Apple-style-span sty=> >=3D<BR>&gt=3B &gt=3Ble=3D3D"COLOR: rgb(0=3D2C0=3D2C255)=3D3B FONT-FAMILY: '=> >Gill Sans'"&gt=3BOffice&lt=3B/SPAN&gt=3B&lt=3B/S=3D<BR>&gt=3B &gt=3BPAN&gt=> >=3B&lt=3B/FONT&gt=3B&lt=3BFONT class=3D3DEC_EC_EC_Apple-style-span face=3D3=> >DGillSans-Light&gt=3B&lt=3BS=3D<BR>&gt=3B &gt=3BPAN class=3D3DEC_EC_EC_Appl=> >e-style-span style=3D3D"FONT-FAMILY: GillSans-Light"=3D<BR>&gt=3B &gt=3B&gt=> >=3B&lt=3BSPAN class=3D3DEC_EC_EC_Apple-style-span style=3D3D"FONT-FAMILY: G=> >illSans-Lig=3D<BR>&gt=3B &gt=3Bht"&gt=3B&amp=3Bnbsp=3D3B+1 765 494 6001 |&l=> >t=3BSPAN class=3D3DEC_EC_Apple-converted-space&gt=3B&amp=3Bnbs=3D<BR>&gt=3B=> > &gt=3Bp=3D3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/FONT=> >&gt=3B&lt=3BFONT class=3D3DEC_EC_EC_Apple-style-span fac=3D<BR>&gt=3B &gt=> >=3Be=3D3D"Gill Sans" color=3D3D#0000ff&gt=3B&lt=3BSPAN class=3D3DEC_EC_EC_A=> >pple-style-span sty=3D<BR>&gt=3B &gt=3Ble=3D3D"COLOR: rgb(0=3D2C0=3D2C255)=> >=3D3B FONT-FAMILY: 'Gill Sans'"&gt=3B&lt=3BSPAN class=3D3DEC=3D<BR>&gt=3B &=> >gt=3B_EC_EC_Apple-style-span style=3D3D"COLOR: rgb(0=3D2C0=3D2C255)=3D3B FO=> >NT-FAMILY: 'G=3D<BR>&gt=3B &gt=3Bill Sans'"&gt=3BMobile&lt=3B/SPAN&gt=3B&lt=> >=3B/SPAN&gt=3B&lt=3B/FONT&gt=3B&lt=3BFONT class=3D3DEC_EC_EC_Apple-style-sp=> >=3D<BR>&gt=3B &gt=3Ban face=3D3DGillSans-Light&gt=3B&lt=3BSPAN class=3D3DEC=> >_EC_EC_Apple-style-span style=3D3D"F=3D<BR>&gt=3B &gt=3BONT-FAMILY: GillSan=> >s-Light"&gt=3B&lt=3BSPAN class=3D3DEC_EC_EC_Apple-style-span style=3D<BR>&g=> >t=3B &gt=3B=3D3D"FONT-FAMILY: GillSans-Light"&gt=3B&lt=3BSPAN class=3D3DEC_=> >EC_Apple-converted-space&gt=3B=3D<BR>&gt=3B &gt=3B&amp=3Bnbsp=3D3B&lt=3B/SP=> >AN&gt=3B+1 765 427 5484&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/FONT&gt=3B&=> >lt=3B/DIV&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&gt=3B&lt=3BFONT class=3D3DEC_EC_E=> >C_Apple-style-span face=3D3DGillSans-Light&gt=3B&lt=3BBR clas=3D<BR>&gt=3B => >&gt=3Bs=3D3DEC_EC_EC_khtml-block-placeholder&gt=3B&lt=3B/FONT&gt=3B&lt=3B/D=> >IV&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SP=3D<BR>=> >&gt=3B &gt=3BAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/SPAN&gt=3B&lt=> >=3BBR class=3D3DEC_EC_EC_Apple-interchange-newline&gt=3B&lt=3B/SP=3D<BR>&gt=> >=3B &gt=3BAN&gt=3B&lt=3B/DIV&gt=3B&lt=3B/SPAN&gt=3B&lt=3B/DIV&gt=3B&lt=3BBR=> >&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&gt=3B<BR>&gt=3B &gt=3B&lt=3BDIV&gt=3BOn 12=> > Jan 2009=3D2C at 01:44=3D2C Jay wrote:&lt=3B/DIV&gt=3B&lt=3BBR class=3D3DE=> >C_EC_EC_App=3D<BR>&gt=3B &gt=3Ble-interchange-newline&gt=3B<BR>&gt=3B &gt=> >=3B&lt=3BBLOCKQUOTE&gt=3B&lt=3BSPAN class=3D3DEC_EC_EC_Apple-style-span sty=> >le=3D3D"WORD-SPACING: =3D<BR>&gt=3B &gt=3B0px=3D3B FONT: 12px Helvetica=3D3=> >B TEXT-TRANSFORM: none=3D3B COLOR: rgb(0=3D2C0=3D2C0=3D<BR>&gt=3B &gt=3B)=> >=3D3B TEXT-INDENT: 0px=3D3B WHITE-SPACE: normal=3D3B LETTER-SPACING: normal=> >=3D3B B=3D<BR>&gt=3B &gt=3BORDER-COLLAPSE: separate"&gt=3B<BR>&gt=3B &gt=3B=> >&lt=3BDIV class=3D3DEC_EC_EC_hmmessage style=3D3D"FONT-SIZE: 10pt=3D3B FONT=> >-FAMILY: Ve=3D<BR>&gt=3B &gt=3Brdana"&gt=3BIs there a way in Modula-3 to de=> >clare that&amp=3Bnbsp=3D3Ba type exists=3D2C a=3D<BR>&gt=3B &gt=3Bnd there => >are &amp=3Blt=3D3B*external*&amp=3Bgt=3D3B instances of it=3D2C without "fu=> >lly" decl=3D<BR>&gt=3B &gt=3Baring it=3D2C so that no Modula-3 can instanti=> >ate it?&lt=3BBR&gt=3B&amp=3Bnbsp=3D3B&lt=3BBR&gt=3BI have d=3D<BR>&gt=3B &g=> >t=3Bone this for sigset_t and sem_t=3D2C but they could erroneously be inst=> >antiat=3D<BR>&gt=3B &gt=3Bed by Modula-3 and I'd like to remove that abilit=> >y to mess up so easily.&lt=3BBR=3D<BR>&gt=3B &gt=3B&gt=3B&amp=3Bnbsp=3D3B&l=> >t=3BBR&gt=3B(* This type is not declared correctly. It is only instantiate=> >=3D<BR>&gt=3B &gt=3Bd in C code. *)&lt=3BBR&gt=3B&amp=3Bnbsp=3D3B sigset_t => >=3D3D RECORD END=3D3B&lt=3BBR&gt=3B&lt=3BBR&gt=3B(* This type =3D<BR>&gt=3B=> > &gt=3Bis not declared correctly. It is only instantiated in C code. *)&lt=> >=3BBR&gt=3B&amp=3Bnbsp=3D<BR>&gt=3B &gt=3B=3D3B sem_t =3D3D RECORD END=3D3B=> >&lt=3BBR&gt=3B&lt=3BBR&gt=3BIn C I believe you can do this=3D2C like:&lt=3B=> >=3D<BR>&gt=3B &gt=3BBR&gt=3B&amp=3Bnbsp=3D3B&amp=3Bnbsp=3D3Btypedef struct => >foo foo_t=3D3B&amp=3Bnbsp=3D3B&lt=3BSPAN class=3D3DEC_EC_E=3D<BR>&gt=3B &gt=> >=3BC_Apple-converted-space&gt=3B&amp=3Bnbsp=3D3B&lt=3B/SPAN&gt=3B&lt=3BBR&g=> >t=3B&amp=3Bnbsp=3D3B&amp=3Bnbsp=3D3Bextern foo_t foo=3D<BR>&gt=3B &gt=3B=3D=> >3B&amp=3Bnbsp=3D3B&lt=3BSPAN class=3D3DEC_EC_EC_Apple-converted-space&gt=3B=> >&amp=3Bnbsp=3D3B&lt=3B/SPAN&gt=3B&lt=3BBR&gt=3B=3D<BR>&gt=3B &gt=3B&amp=3Bn=> >bsp=3D3B&lt=3BBR&gt=3B&amp=3Bnbsp=3D3Bvoid UseFoo(foo_t*)=3D3B&lt=3BSPAN cl=> >ass=3D3DEC_EC_EC_Apple-conv=3D<BR>&gt=3B &gt=3Berted-space&gt=3B&amp=3Bnbsp=> >=3D3B&lt=3B/SPAN&gt=3B&lt=3BBR&gt=3B&amp=3Bnbsp=3D3B foo_t* GetFoo(void)=3D=> >3B&lt=3BSPAN class=3D<BR>&gt=3B &gt=3B=3D3DEC_EC_EC_Apple-converted-space&g=> >t=3B&amp=3Bnbsp=3D3B&lt=3B/SPAN&gt=3B&lt=3BBR&gt=3B&amp=3Bnbsp=3D3B&lt=3BBR=> >&gt=3BThanks=3D2C&lt=3B=3D<BR>&gt=3B &gt=3BBR&gt=3B&amp=3Bnbsp=3D3B- Jay&lt=> >=3BBR&gt=3B&lt=3BBR&gt=3B&lt=3BBR&gt=3B&lt=3BBR&gt=3B&lt=3B/DIV&gt=3B&lt=3B=> >/SPAN&gt=3B&lt=3B/BLOCKQUOTE&gt=3B&lt=3B/DIV&gt=3B&lt=3BBR&gt=3B&lt=3B/DIV&=> >gt=3B&lt=3B=3D<BR>&gt=3B &gt=3B/DIV&gt=3B&lt=3B/SPAN&gt=3B&lt=3BBR class=3D=> >3DEC_EC_Apple-interchange-newline&gt=3B&lt=3B/BLOCKQUOTE&gt=3B&lt=3B/DIV&gt=> >=3B=3D<BR>&gt=3B &gt=3B&lt=3BBR&gt=3B&lt=3B/DIV&gt=3B&lt=3B/SPAN&gt=3B&lt=> >=3BBR class=3D3DEC_Apple-interchange-newline&gt=3B&lt=3B/BLOCKQUOTE&gt=3B&l=> >t=3B/DI=3D<BR>&gt=3B &gt=3BV&gt=3B&lt=3BBR&gt=3B&lt=3B/body&gt=3B<BR>&gt=3B=> > &gt=3B&lt=3B/html&gt=3B=3D<BR>&gt=3B &gt=3B<BR>&gt=3B &gt=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