------ art_19192_2420855.1221119711311 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello I think this is the time to show what RubyX11 can do. You need the X11 directory from the RubyX11-0.6.pre1, ruby 1.8, and an X server. The program is not as simple as with Shoes but it requires no binary extension - you could run it in JRuby as well. Unfortunately RubyX11 is not complete, and likely will never be. As I understand it people went from server-side font rendering to client-side font rendering for X11 applications. This means that you cannot do the font rendering effectively to a remote display, the letters rendered by different applications suck in different ways, and you cannot write a simple client library for X that would also render text reasonably. OK, enough complaints about lack of design in X protocols. You can find the program attached. If you run it without parameters it asks for them interactively in the terminal. It is sort of a cheat - the X11 interfacing is merged form two RubyX11 examples, I only had to write the method that calculates the points of the graph and fix window resizing. Thanks Michal ------ art_19192_2420855.1221119711311 Content-Type: application/x-ruby; name=q176.rb Content-Transfer-Encoding: base64 X-Attachment-Id: f_fkz30ggw Content-Disposition: attachment; filename=q176.rb IyEvdXNyL2Jpbi9lbnYgcnVieQojCiMJQ29weXJpZ2h0IChjKSAyMDAwIGJ5IE1hdGhpZXUgQm91 Y2hhcmQKIwlSZWxlYXNlZCB1bmRlciB0aGUgTEdQTAojCiMgICAgICAgVXBkYXRlZCB0byBwbG90 IGZ1bmN0aW9ucyAoYykgMjAwOCBieSBNaWNoYWwgU3VjaGFuZWsKCiRzaG93X2xpbmVzID0gdHJ1 ZQokc2hvd19kb3RzID0gdHJ1ZQoKaW5jbHVkZSBNYXRoCmV4dGVuZCBNYXRoCgpkZWYgZ2V0bGlu ZSBzdHIKICAgICAgICBTVERFUlIucHV0cyBzdHIKICAgICAgICByZXR1cm4gU1RESU4uZ2V0cwpl bmQKCiRmbiA9IEFSR1ZbMF0KClNUREVSUi5wdXRzICJVc2FnZTogI3skMH0gW2Z1bmN0aW9uXSBb eHJhbmdlXSBbeXJhbmdlXSIKU1RERVJSLnB1dHMgIkFsbCBwYXJlbWV0ZXJzIGFyZSBldmFsZWQg YnkgUnVieS4iClNUREVSUi5wdXRzClNUREVSUi5wdXRzICJDbGljayB0aGUgcHJvZ3JhbSB3aW5k b3cgdG8gZXhpdC4gUmVzaXplIHRoZSB3aW5kb3cgdG8gY2hhbmdlIHNjYWxlLiIKU1RERVJSLnB1 dHMKCiRmbiA9IGdldGxpbmUgIkVudGVyIGZ1bmN0aW9uIG9mIHggZWcuIHNpbih4KSBvciAxL3gi IHVubGVzcyAkZm4KCmV2YWwgImRlZiBmdW5jdGlvbiB4XG4jeyRmbn1cbmVuZCIgCgokeHJhbmdl ID0gKGV2YWwgQVJHVlsxXSByZXNjdWUgbmlsKQokeXJhbmdlID0gKGV2YWwgQVJHVlsyXSByZXNj dWUgbmlsKQoKJHhyYW5nZSA9IGV2YWwgZ2V0bGluZSAiRW50ZXIgeCB2YWx1ZSByYW5nZSBlZy4g LVBJLi5QSSBvciAzLi40IiB1bmxlc3MgJHhyYW5nZQokeXJhbmdlID0gZXZhbCBnZXRsaW5lICJF bnRlciB5IHBsb3QgcmFuZ2UiIHVubGVzcyAkeXJhbmdlCgpyZXF1aXJlICJYMTEvRGlzcGxheSIK CiR3c2l6ZSA9IFgxMTo6U2l6ZVs0MDAsNDAwXQoKJGQgPSBYMTE6OkRpc3BsYXkubmV3OyAjJGQu Y29ubi5sb2cgPSB0cnVlCiRzID0gJGQuZGlzcGxheV9pbmZvLnNjcmVlbnNbMF0KJGRwID0gJHMu ZGVwdGhzLmZpbmQge3xkcHwgZHAuZGVwdGggPiAxIH0KJGNtYXAgPSAkcy5kZWZhdWx0X2NvbG9y bWFwCgokdyA9IFgxMTo6V2luZG93Lm5ldygkZCkKJHcuY3JlYXRlKCRzLnJvb3QsCiAgICAgICAg ICBYMTE6OlJlY3RbWDExOjpQb2ludFswLDBdLCAkd3NpemVdLAogICAgICAgICAgNCwgJGRwLmRl cHRoLCA6SW5wdXRPdXRwdXQsIDpDb3B5RnJvbVBhcmVudCwKICAgICAgICAgIFgxMTo6V2luZG93 QXR0cmlidXRlcy5uZXcoCiAgICAgICAgICAgICAgICAgIDpiYWNrZ3JvdW5kX3BpeGVsID0+ICRz LmJsYWNrX3BpeGVsLAogICAgICAgICAgICAgICAgICA6ZXZlbnRfbWFzayA9PiBYMTE6OkV2ZW50 TWFzay5sb29rdXAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgOkV4cG9zdXJlLCA6S2V5UHJl c3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgOkJ1dHRvblByZXNzLCA6U3RydWN0dXJlTm90 aWZ5CikpKQoKCnByb3BzID0gWwogICAgICAgIFsiV01fSUNPTl9OQU1FIiwiU1RSSU5HIiwkZm5d LAogICAgICAgIFsiV01fTkFNRSIsIlNUUklORyIsIkEgcGxvdCBvZiAjeyRmbn0iXSwKICAgICAg ICBbIldNX0hJTlRTIiwiV01fSElOVFMiLFsxfDIsMSwxLCooWzBdKjYpXV0sCiAgICAgICAgWyJX TV9DTEFTUyIsIlNUUklORyIsIFskMCwiUGxvdFdpbiJdLmpvaW4oIlwwIildLApdCgokZC5hdG9t cygqcHJvcHMubWFwIHt8bmFtZSxraW5kfCBbbmFtZSxraW5kXSB9LmZsYXR0ZW4pCgpwcm9wcy5l YWNoIHt8bmFtZSxraW5kLHZhbHVlfAogICAgICAgIGZvcm1hdCA9IGNhc2UgdmFsdWUgd2hlbiBT dHJpbmc7IDg7IHdoZW4gQXJyYXk7IDMyOyBlbmQKICAgICAgICAkdy5jaGFuZ2VfcHJvcGVydHko JGQuYXRvbShuYW1lKSwgJGQuYXRvbShraW5kKSwgZm9ybWF0LCB2YWx1ZSkKfQoKJHcubWFwCgok ZzIgPSBYMTE6OkdyYXBoaWNzLm5ldygkZCkKJGdjaW5mbyA9IFgxMTo6R3JhcGhpY3NJbmZvLm5l dygKIwk6ZnVuY3Rpb24gPT4gOlhvciwKICAgICAgICA6Zm9yZWdyb3VuZCA9PiAkcy53aGl0ZV9w aXhlbCwKICAgICAgICA6bGluZV93aWR0aCA9PiAxLAojCTpsaW5lX3N0eWxlID0+IDpEb3VibGVE YXNoLAogICAgICAgIDpjYXBfc3R5bGUgPT4gOlJvdW5kLAogICAgICAgIDpqb2luX3N0eWxlID0+ IDpSb3VuZCkKJGcyLmNyZWF0ZSgkdywkZ2NpbmZvKQokZyA9IFgxMTo6R3JhcGhpY3NPbkRyYXdh YmxlWyR3LCRnMl0KCiRkLndhaXRfZm9yIHsKICAgICAgICAkY21hcC5hbGxvY19jb2xvcihYMTE6 OlJHQlsiI2ZmZiJdKSB7fGZvbywkY29sb3JfdmVydGV4fH0KICAgICAgICAkY21hcC5hbGxvY19j b2xvcihYMTE6OlJHQlsiIzBhNCJdKSB7fGZvbywkY29sb3JfZWRnZXx9CiAgICAgICAgJGNtYXAu YWxsb2NfY29sb3IoWDExOjpSR0JbIiMwMDAiXSkge3xmb28sJGNvbG9yX2JnfH0KfQoKZGVmIHdz aXplCiAgICAgICAgJHcuZ2V0X2dlb21ldHJ5KCkucmVjdC5zaXplCmVuZAoKY2xhc3MgQXJyYXkK ICAgICAgICBkZWYgc3BsaXQgYnk9bmlsCiAgICAgICAgICAgICAgICBwYXJ0cz1bXQogICAgICAg ICAgICAgICAgY3Vycj1bXQogICAgICAgICAgICAgICAgc2VsZi5lYWNoe3xlfAogICAgICAgICAg ICAgICAgICAgICAgICBpZiBlID09PSBieSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGFydHMgPDwgY3VyciBpZiBjdXJyLmxlbmd0aCA+IDAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjdXJyID0gW10KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIgPDwgZQogICAgICAgICAgICAgICAgICAg ICAgICBlbmQKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHBhcnRzIDw8IGN1cnIg aWYgY3Vyci5sZW5ndGggPiAwCiAgICAgICAgICAgICAgICBwYXJ0cwogICAgICAgIGVuZAplbmQK CmRlZiB0cmFuc2Zvcm0KICAgICAgICBzaXplID0gd3NpemUKICAgICAgICB4cG9pbnQgPSBYMTE6 OlBvaW50CiAgICAgICAgZWRnZXMgPSBbXQogICAgICAgIGR4ID0gKCR4cmFuZ2UuZW5kIC0gJHhy YW5nZS5iZWdpbikudG9fZgogICAgICAgIGR3eCA9IChzaXplLnggLSAxKS50b19mCiAgICAgICAg ZHkgPSAoJHlyYW5nZS5lbmQgLSAkeXJhbmdlLmJlZ2luKS50b19mCiAgICAgICAgZHd5ID0gKHNp emUueSAtIDEpLnRvX2YKICAgICAgICBtaW54ID0gJHhyYW5nZS5iZWdpbi50b19mCiAgICAgICAg bWlueSA9ICR5cmFuZ2UuYmVnaW4udG9fZgogICAgICAgICgwLi4uc2l6ZS54KS5lYWNoe3x4fCBi ZWdpbgogICAgICAgICAgICAgICAgeSA9IHNpemUueSAtICgoZnVuY3Rpb24oeC50b19mICogZHgg LyBkd3ggKyBtaW54KSAtIG1pbnkpICogZHd5IC8gZHkpLnJvdW5kCiAgICAgICAgICAgICAgICBl ZGdlcyA8PCB4cG9pbnRbeCwgeV0KICAgICAgICByZXNjdWUKICAgICAgICAgICAgICAgIGVkZ2Vz IDw8IG5pbAogICAgICAgIGVuZCB9CiAgICAgICAgZWRnZXMuc3BsaXQubWFwe3xlZGdlc3wgW2Vk Z2VzLHZlcnRpY2VzKGVkZ2VzKV19CmVuZAoKZGVmIHZlcnRpY2VzKGVkZ2VzKQogICAgICAgIHhw b2ludCA9IFgxMTo6UG9pbnQKICAgICAgICB4cmVjdCAgPSBYMTE6OlJlY3QKICAgICAgICB2c2l6 ZSAgPSBYMTE6OlNpemVbMywzXQogICAgICAgIGVkZ2VzLm1hcCB7fGV8IHhyZWN0W3hwb2ludFtl WzBdLTEsZVsxXS0xXSwgdnNpemVdIH0KZW5kCgoKZGVmIHBsb3RfcGFydHModmVydGV4X2NvbG9y LCBlZGdlX2NvbG9yLCBlZGdlcykKICAgICAgICBlZGdlcy5lYWNoe3xlZGdlc3wgcGxvdCh2ZXJ0 ZXhfY29sb3IsZWRnZV9jb2xvcixlZGdlcyl9CmVuZAoKZGVmIHBsb3QodmVydGV4X2NvbG9yLGVk Z2VfY29sb3IsZWRnZXMpCiAgICAgICAgJGcyLmNoYW5nZShYMTE6OkdyYXBoaWNzSW5mby5uZXco OmZvcmVncm91bmQgPT4gZWRnZV9jb2xvcikpCiAgICAgICAgJGcuZHJhd19saW5lcyg6T3JpZ2lu LCBlZGdlc1swXSkgaWYgJHNob3dfbGluZXMKICAgICAgICAkZzIuY2hhbmdlKFgxMTo6R3JhcGhp Y3NJbmZvLm5ldyg6Zm9yZWdyb3VuZCA9PiB2ZXJ0ZXhfY29sb3IpKQogICAgICAgICMkZy5maWxs X3JlY3RzKGVkZ2VzWzFdKSBpZiAkc2hvd19kb3RzCiAgICAgICAgJGcuZHJhd19wb2ludHMoOk9y aWdpbixlZGdlc1swXSkgaWYgJHNob3dfZG90cwplbmQKCnAgPSB0cmFuc2Zvcm0KbG9vcCBkbwog ICAgICAgIHdoaWxlIGUgPSAkZC5uZXh0X2V2ZW50CiAgICAgICAgICAgICAgICBjYXNlIGUKICAg ICAgICAgICAgICAgIHdoZW4gWDExOjpFeHBvc2VFdmVudAogICAgICAgICAgICAgICAgICAgICAg ICByZXBhaW50ID0gdHJ1ZSBpZiBlLmNvdW50ID09IDAKCiAgICAgICAgICAgICAgICB3aGVuIFgx MTo6Q29uZmlndXJlTm90aWZ5RXZlbnQKICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplZCA9 IHRydWUKCiAgICAgICAgICAgICAgICB3aGVuIFgxMTo6QnV0dG9uUHJlc3NFdmVudCMsIFgxMTo6 S2V5UHJlc3NFdmVudAogICAgICAgICAgICAgICAgICAgICAgICBleGl0CiAgICAgICAgICAgICAg ICBlbmQKICAgICAgICBlbmQKICAgICAgICBwID0gdHJhbnNmb3JtIGlmIHJlc2l6ZWQKICAgICAg ICAkdy5jbGVhcl9hcmVhKFgxMTo6UmVjdFtYMTE6OlBvaW50WzAsMF0sd3NpemVdKSBpZiByZXNp emVkCiAgICAgICAgcGxvdF9wYXJ0cygkY29sb3JfdmVydGV4LCRjb2xvcl9lZGdlLHApIGlmIHJl cGFpbnQgb3IgcmVzaXplZAoKICAgICAgICAkZC5mbHVzaAogICAgICAgICMgbm90ZTogZG9uJ3Qg dXNlIGRlbGF5ID09IDAgaW4gSU8uc2VsZWN0CiAgICAgICAgJGQueHJlY2VpdmVfbWFueSBpZiBJ Ty5zZWxlY3QgWyRkLnNvY2tdLFtdLFtdLDAuMQplbmQKCg ------ art_19192_2420855.1221119711311--