gm2
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gm2] two versions of DeviceTablePtrValue


From: Gaius Mulley
Subject: Re: [Gm2] two versions of DeviceTablePtrValue
Date: Sat, 05 Jun 2010 15:47:46 +0100
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.2 (gnu/linux)

"Breeden, Thomas (tmb)" <address@hidden> writes:

> Yes, the "CAST(IOLink.DeviceTablePtr, cid)" does not look so good.
>
> Using "IOLink.DeviceTablePtrValue (cid, MyDid)" to get the pointer should not 
> be
> a problem in your custom stream implementation, since your module is the
> one that does the "IOLink.AllocateDeviceId (MyDid)" on initialization, and 
> knows
> what the value of MyDid is.
>
> However, I don't see how one could implement IOChan procedures without
> using the CAST(), since something like IOChan's 
>  PROCEDURE RawWrite(cid:ChanId; from:ADDRESS; locsToWrite:CARDINAL);
> does not have the DeviceId associated with the passed ChanId.

Hi Tom,

indeed - this is why gm2 uses RTio which lie underneath the IOLink and
friends.  In RTio an association between did and cid is made,

regards,
Gaius


>
> If seems like it must assume that the ChanId is the DeviceTablePtr in order 
> to find the
> correct device callback routine:
>     did := CAST(IOLink.DeviceTablePtr, cid);
>     did^.doRawWrite(did, from, locsToWrite);
>
> I suspect that Rick Sutcliffe would be the best person to explain the 
> architecture
> here.
>
> regards,
>
> Tom
> address@hidden
>
>> From: gm2-bounces On Behalf Of Martin Kalbfuß address@hidden
>> Sent: Saturday, June 05, 2010 7:30 AM
>> To: GNU Modula-2
>> Subject: Re: [Gm2] two versions of DeviceTablePtrValue
>>
>> I still wonder how to implement your own channel the right way. There's
>> no ISO conform way. to obtain the did out of the cid, because
>> DeviceTablePtrValue needs the did as parameter.
>>
>> To implement an open/close pair for your custom stream like
>>
>> OpenMyChannel(VAR cid : IOChan.ChanId);
>> CloseMyCannel(VAR cid : IOChan.ChanId);
>> 
>> you have to store the did externally in an array or something similar.
>> Do you think that's the right way to do it?
>
>> From: gm2-bounces On Behalf Of Martin Kalbfuß address@hidden
>> Sent: Friday, June 04, 2010 6:32 PM
>> To: GNU Modula-2
>> Subject: RE: [Gm2] iso streams
>> 
>> Many thanks,
>> 
>> I wonder, that there's no default implementation of
>> such a stream.
>> 
>> I had a look at your code. I've seen, that you did a cast
>> 
>  > p := SYSTEM.CAST(IOLink.DeviceTablePtr, cid);
>> 
>> Is this standard conform? There is a function to get the table.
>
> _______________________________________________
> gm2 mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/gm2



reply via email to

[Prev in Thread] Current Thread [Next in Thread]