<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Now the arc drawing part works: it needed a little change of the
    "implemented protocol" or request sequence:<br>
    First map the window, second listen for events. Third draw the arc.<br>
    <br>
    That was the third round after authentication and putting a window
    on the screen. It would be nice if these sequences were  documented
    as part of the protocol. For now it remembers me that I need to
    change the low level IO routines to then buffer the graphics
    operations in a drawing graph and connect it the repaint events and
    ...<br>
    <br>
    <tt>(X-polifill-arc X (second v) (second g) 150 200 60 60 (* 10 64)
      (* 350 64)) => 24  ; doesn't appear</tt><tt><br>
    </tt><tt>(X-map-window X (second v)) => 8</tt><tt><br>
    </tt><tt>(X-control X) => Window #"254 255 31 4" received a key
      event #"9" down.</tt><tt><br>
    </tt><tt>escaping-X-control</tt><tt><br>
    </tt><tt>VSI> (X-polifill-arc X (second v) (second g) 150 200 60
      60 (* 10 64) (* 350 64))  ; OK appears</tt><tt><br>
    </tt><tt>(X-polifill-arc X (second v) (second g) 150 200 60 60 (* 10
      64) (* 350 64)) => 24</tt><tt><br>
    </tt><tt>VSI> (X-control X)</tt><tt><br>
    </tt><tt>...</tt><tt><br>
    </tt><br>
    <br>
    VSI:
<a class="moz-txt-link-freetext" href="https://code.launchpad.net/~michael-tiedtke-i/viper-system-interface/alfa">https://code.launchpad.net/~michael-tiedtke-i/viper-system-interface/alfa</a><br>
    <br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 11/12/2015 22:02, Michael Titke
      wrote:<br>
    </div>
    <blockquote cite="mid:566B39FE.8020607@o2online.de" type="cite">
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      Hello!<br>
      <br>
      As part of a first incursion into the possibility to implementing
      native support for X starting from the wire protocol (w/o any
      Xlib/XCB support) I ran into a couple of situations where
      documentation didn't match implementation.<br>
      <br>
      The first surprise was the "magic" of the MIT Magic Cookie which
      needs that little deviation from the protocol encoding where you
      have to put the padding bytes at the end. Now I really made it to
      open a window and receive key codes destined for it but no keysyms
      as the request for the keyboard mappings is silently ignored. The
      XKB extension as far as I understand it essentially replaced that?
      But there is no addendum to core protocol specifications.<br>
      <br>
      The next round was about creating a circle: somehow I found out
      that another map request on the window was needed to see the
      respective errors due to simple mistakes during the preparation of
      the request and some misleading protocol encoding which states
      3+3n for the request length.<br>
      <br>
      <title>Konsole output</title>
      <div> <span style="font-family:monospace"><span
            style="color:#b2b2b2;background-color:#000000;">(define X
            (X-connection))</span><span
            style="color:#18b218;background-color:#000000;"> => </span><span
            style="color:#1818b2;background-color:#000000;">#<unspecified></span><span
            style="color:#000000;background-color:#ffffff;"> </span><br>
          <span style="color:#b2b2b2;background-color:#000000;">(define
            v (X-create-window X 50 50 300 400))</span><span
            style="color:#18b218;background-color:#000000;"> => </span><span
            style="color:#1818b2;background-color:#000000;">#<unspecified></span><span
            style="color:#000000;background-color:#ffffff;"> </span><br>
          <span style="color:#b2b2b2;background-color:#000000;">v</span><span
            style="color:#18b218;background-color:#000000;"> => </span><span
            style="color:#b2b2b2;background-color:#000000;">(44 #"254
            255 255 3")</span><span
            style="color:#000000;background-color:#ffffff;"> </span><br>
          <span style="color:#b2b2b2;background-color:#000000;">(X-map-window

            X (second v))</span><span
            style="color:#18b218;background-color:#000000;"> => </span><span
            style="color:#b2b2b2;background-color:#000000;">8</span><span
            style="color:#000000;background-color:#ffffff;"> </span><br>
          <span style="color:#b2b2b2;background-color:#000000;">(define
            g (X-create-gc X (second v)))</span><span
            style="color:#18b218;background-color:#000000;"> => </span><span
            style="color:#1818b2;background-color:#000000;">#<unspecified></span><span
            style="color:#000000;background-color:#ffffff;"> </span><br>
          <span style="color:#b2b2b2;background-color:#000000;">g</span><span
            style="color:#18b218;background-color:#000000;"> => </span><span
            style="color:#b2b2b2;background-color:#000000;">(16 #"253
            255 255 3")</span><span
            style="color:#000000;background-color:#ffffff;"> </span><br>
          <span style="color:#b2b2b2;background-color:#000000;">(X-polifill-arc

            X (second v) (second g) 150 200 100 100 (* 170 64) (* 180
            64))</span><span
            style="color:#18b218;background-color:#000000;"> => </span><span
            style="color:#b2b2b2;background-color:#000000;">24</span><span
            style="color:#000000;background-color:#ffffff;"> </span><br>
          <span style="color:#b2b2b2;background-color:#000000;">(X-map-window

            X (second v))</span><span
            style="color:#18b218;background-color:#000000;"> => </span><span
            style="color:#b2b2b2;background-color:#000000;">8</span><span
            style="color:#000000;background-color:#ffffff;"> </span><br>
          <span style="color:#b2b2b2;background-color:#000000;">(X-control

            X)</span><span
            style="color:#18b218;background-color:#000000;"> => </span><span
            style="color:#b2b2b2;background-color:#000000;">VSI SCA/X:
            unhandled error: Length#"0 16 4 0  253 255 255 3  0 0 71 0
             0</span><br>
          0 0 0  0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 0"<span
            style="color:#000000;background-color:#ffffff;"> </span><br>
          <span style="color:#1818b2;background-color:#000000;">#<unspecified></span><br>
          <span style="color:#000000;background-color:#ffffff;"> </span><br>
        </span></div>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      My question is: will this continue like this? Are there any plans
      to finally deliver the protocol specifications where these kinds
      of interactions are layed out? Or some up to date updates on the
      core protocol? But as I have heard the X server doesn't even know
      about all registered extensions anymore - at least on Ubuntu with
      Unity one of the first events to be received was an impossible
      operation code of 192 which wasn't reported by <i>xdpyinfo</i> to
      belong to any registered extension. The current state of X11 is a
      bit puzzling: it when works better than ever on the hardware I
      know of but it seems to become a pure C API without a valid wire
      protocol?<br>
      <br>
      <tt>(repl-transcript</tt><tt><br>
      </tt><tt>(define X (X-connection))</tt><tt><br>
      </tt><tt>;X</tt><tt><br>
      </tt><tt>(define v (X-create-window X 50 50 300 400))</tt><tt><br>
      </tt><tt>v</tt><tt><br>
      </tt><tt>; (X-get-keyboard-mapping X) DEFUNCT</tt><tt><br>
      </tt><tt><br>
      </tt><tt>(define g (X-create-gc X (second v)))</tt><tt><br>
      </tt><tt>g</tt><tt><br>
      </tt><tt>(X-polifill-arc X (second v) (second g) 150 200 100 100
        (* 170 64) (* 180 64))</tt><tt><br>
      </tt><tt>(X-map-window X (second v)) ; We need this to see errors
        of the graphic request.</tt><tt><br>
      </tt><tt>(X-control X)</tt><tt><br>
      </tt><tt>)</tt><tt><br>
      </tt><br>
      It's easy to make mistakes when implementing things on a bit and
      byte level but if anyone knows the "one true sequence" to draw a
      real circle that would be helpful. The FAQ mentions the Xlib
      flush/sync mechanism but I wasn't able to find any correspondence
      in the wire protocol and it seems to affect the xlib client
      buffers only.<br>
      <br>
      Thanks in advance!<br>
    </blockquote>
    <br>
  </body>
</html>