<br><br><div class="gmail_quote">On Thu, May 28, 2009 at 11:39 AM, John Van Enk <span dir="ltr">&lt;<a href="mailto:vanenkj@gmail.com">vanenkj@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div>Writing instances encode/decode that use either little endian or big endian (or mixed!) is trivial... see attached file.</div>
<div> </div>
<div>I don&#39;t see where your problem is...</div></blockquote><div><br></div><div><br></div><div>Inexperience, lack of enough contiguous time to digest everything at once (till now),  thank you for your most detailed example!  This should be wiki&#39;d.</div>
<div><br></div><div>Dave</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div></div>
<div> </div>
<div class="gmail_quote"><div><div></div><div class="h5">On Thu, May 28, 2009 at 12:35 PM, David Leimbach <span dir="ltr">&lt;<a href="mailto:leimy2k@gmail.com" target="_blank">leimy2k@gmail.com</a>&gt;</span> wrote:<br>

</div></div><blockquote class="gmail_quote" style="padding-left:1ex;margin:0px 0px 0px 0.8ex;border-left:#ccc 1px solid"><div><div></div><div class="h5"><br><br>
<div class="gmail_quote">
<div>
<div></div>
<div>On Thu, May 28, 2009 at 9:17 AM, John Van Enk <span dir="ltr">&lt;<a href="mailto:vanenkj@gmail.com" target="_blank">vanenkj@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="padding-left:1ex;margin:0px 0px 0px 0.8ex;border-left:#ccc 1px solid">
<div class="gmail_quote">
<div>
<blockquote class="gmail_quote" style="padding-left:1ex;margin:0px 0px 0px 0.8ex;border-left:#ccc 1px solid">
<div> </div>Fair enough.   I am just new to the interface, wondering if I should<br>try matching responses by pulling apart via Get, or the bit syntax<br>package.<br>
<div>
<div></div>
<div> </div></div></blockquote>
<div> </div></div>
<div>I&#39;m assming you have some &#39;data Foo = ...&#39;? If this is the case, you&#39;re probably okay writing an instance of Binary for Foo and using encode/decode. That&#39;s all I&#39;ve had to do and had superb performance.</div>


<div> </div></div></blockquote>
<div><br></div></div></div>
<div>encode/decode do Big Endian, and 9P does little endian. </div>
<div><br></div>
<div>From the man page:</div>
<div><br></div>
<div>&quot;<span style="font-size:16px;font-family:Times">Each message consists of a sequence of bytes. Two–, four–, and eight–byte fields hold unsigned integers represented in little–endian order (least significant byte first).&quot;</span></div>


<div><font face="Times" size="4"><span style="font-size:16px"><br></span></font></div>
<div>encode/decode just won&#39;t work for me as a result, as they assume the not-so-aptly-named (at least in this case) &quot;network&quot; byte order.  Since I&#39;m not Rob Pike, or Ken Thompson or any of the Plan 9 guys, I can&#39;t tell you why they chose little endian for this. </div>


<div><br></div>
<div>(I should note that I sometimes work with CAN hardware, and depending on what people want to put on the line, little endian creeps in there too, so this issue will have to be dealt with here as well, if I am to use Data.Binary)</div>


<div><br></div>
<div>I&#39;ve got (typing from memory, forgive syntax errors)</div>
<div><br></div>
<div>module Nine (Message) where</div>
<div><br></div>
<div>{-- missing imports --}</div>
<div><br></div>
<div>notag = putWord16le -1</div>
<div><br></div>
<div>-- Message type field values</div>
<div>-- from: <a href="http://plan9.bell-labs.com/sources/plan9/sys/include/fcall.h" target="_blank">http://plan9.bell-labs.com/sources/plan9/sys/include/fcall.h</a></div>
<div>tversion = 100</div>
<div>rversion = 101</div>
<div>rerror = 107</div>
<div><br></div>
<div><br></div>
<div>-- only 9P2000 is being handled so some constructors are simple</div>
<div>data Message = Tversion</div>
<div>                        | Rversion {size :: Int, tag :: Int,  msize :: Int, version :: String}</div>
<div>                        | Rerror {message :: String}  -- maybe this should be Maybe ByteString?</div>
<div>...</div>
<div><br></div>
<div>
<div>instance Binary Message where</div>
<div>    put Tversion = putWord32le 16 &gt;&gt; tversion &gt;&gt; notag &gt;&gt; msize &gt;&gt; &quot;9P2000&quot;</div>
<div>    put Rversion = putWord32le 16 &gt;&gt; rversion &gt;&gt; notag &gt;&gt; msize &gt;&gt; &quot;9P2000&quot;</div>
<div>    get = do size &lt;- getWord32le</div>
<div>             tag &lt;- getWord8</div>
<div>             case tag of</div>
<div>              rversion -&gt; do msize &lt;- getWord32le</div>
<div>                                   version &lt;- getRemainingLazyByteString</div>
<div>                                   return (Rversion size tag msize (C.unpack version))</div></div>
<div><br></div>
<div> ===========</div>
<div><br></div>
<div>I&#39;m beginning to feel the Get Monad is not going to be as nice as if I had some bit-syntax for determining what type of return message I&#39;m getting.  Any &quot;T&quot; message can be met with the paired &quot;R&quot; response, or an Rerror message, with a detailed description of what went wrong.  My instance of get is looking like it&#39;s going to be pretty nasty :-)  </div>


<div><br></div>
<div>The first message in any 9p session is Tversion with Rversion or Rerror response.  There&#39;s optional authentication hooks via Tauth/Rauth, and then the filesystem namespace navigation operation messages.</div>
<div><br></div>
<div>Dave</div>
<div><br></div>
<blockquote class="gmail_quote" style="padding-left:1ex;margin:0px 0px 0px 0.8ex;border-left:#ccc 1px solid">
<div class="gmail_quote">
<div></div><font color="#888888">
<div>/jve</div></font></div></blockquote></div><br><br></div></div><div class="im">_______________________________________________<br>Haskell-Cafe mailing list<br><a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></div></blockquote></div><br><br clear="all">
<div></div><br>-- <br><font color="#888888">/jve<br>
</font></blockquote></div><br>