From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <13426df10803302208r5e21f6bi77fccf4bc998b221@mail.gmail.com> Date: Sun, 30 Mar 2008 22:08:01 -0700 From: "ron minnich" To: "Fans of the OS Plan 9 from Bell Labs" <9fans@cse.psu.edu> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_14307_19246844.1206940081712" Subject: [9fans] silliness in flight: build a desktop calculator with srv and rio Topicbox-Message-UUID: 8596fdaa-ead3-11e9-9d60-3106f5b1d025 ------=_Part_14307_19246844.1206940081712 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline I've been wanting a desktop calculator for some time. I'm sitting on the plane, trying to avoid real work, and decided to see if I could do this: 1. put a dc behind /srv/desk 2. start a rio in a window 3. window 1 becomes cat /srv/desk 4. other windows are stupid programs that, on mouse click, send text to /srv/desk. What they send is easily changed. voila. rpn calculator. Anyway, it's a hack right now, but I thought it might be fun for someone to take my hack and make it real or tell me that "it's already written" (that happens) or "here is a better way". Part of the goal is to show how to paste bits together with srv and such and make something go. So, step 1. put dc behind /srv/desk. What's a better way? #include #include void main(int, char **) { int fd, p[2]; pipe(p); fd = create("/srv/desk", OWRITE, 0666); fprint(fd, "%d", p[0]); close(fd); close(p[0]); dup(p[1], 0); dup(p[1], 1); execl("/bin/dc", "dc", 0); } step 2 you better know, as well as step 3. Step 4, attached, too much for inline. What the program (but.c) really ought to do is read //dev/text, but I don't know how to make that go. It reads /dev/label instead. So, to program a key, you can echo 8+p>/dev/label ./8.but And then you've got a "soft key" that can be anything you want, and you can change it at any time. I re-read /dev/label fd in the loop. You can obviously change the label external to the program. but.c shows the label value in the window. How to shrink the window down? How to get and LED font with demonic red color? My crude libdraw skills are probably pretty obvious. Anyway, I like the fact that I'm using a window manager and srv etc. to build a graphical calculator with soft keys in 1/10 the space that most X based calculators do it in. I would rather open a vein than try to do this in X11 -- I even tried using Glade once and it's hateful. thanks ron ------=_Part_14307_19246844.1206940081712 Content-Type: text/x-csrc; name=but.c Content-Transfer-Encoding: base64 X-Attachment-Id: f_fegklujq0 Content-Disposition: attachment; filename=but.c I2luY2x1ZGUgPHUuaD4KI2luY2x1ZGUgPGxpYmMuaD4KI2luY2x1ZGUgPGRyYXcuaD4KI2luY2x1 ZGUgPGV2ZW50Lmg+CgpJbWFnZSAqd2hhdCwgKmJhY2s7CmNoYXIgKmZvbnRuYW1lID0gIi9saWIv Zm9udC9iaXQvbHVjaWRhc2Fucy91bmljb2RlLjEzLmZvbnQiOwpGb250ICpmb250OwpjaGFyIGJ1 dFs1MTJdOwoKdm9pZApyZWRyYXcoSW1hZ2UgKnNjcmVlbikKewoJZHJhdyhzY3JlZW4sIHNjcmVl bi0+ciwgYmFjaywgbmlsLCBaUCk7CglzdHJpbmcoc2NyZWVuLCBzY3JlZW4tPnIubWluLCB3aGF0 LCBaUCwgZm9udCwgYnV0KTsKCglmbHVzaGltYWdlKGRpc3BsYXksIDEpOwp9Cgp2b2lkCmVyZXNp emVkKGludCBuZXcpCnsKCWlmKG5ldyAmJiBnZXR3aW5kb3coZGlzcGxheSwgUmVmbm9uZSkgPCAw KQoJCWZwcmludCgyLCJjYW4ndCByZWF0dGFjaCB0byB3aW5kb3ciKTsKCXJlZHJhdyhzY3JlZW4p Owp9Cgp2b2lkCm1haW4oaW50LCBjaGFyKiopCnsKCUV2ZW50IGU7CglNb3VzZSBtOwoJaW50IGtl eSwgdGltZXI7CglpbnQgdDsKCWludCB0ZXh0OwoJaW50IGRlc2s7CgljaGFyICpkZXNrbmFtZSA9 ICIvc3J2L2Rlc2siOwoKLyogZ29zaCBJIHdpc2ggdGhpcyB3b3JrZWQgLS0gaXQgd291bGQgYmUg Y29vbAoJeW91IHdvdWxkIGhhdmUgc29mdCBrZXlzLiBCdXQgdGhlcmUncyBhbGwgdGhpcyBqdW5r IGluIHRoZXJlLiAKCXRleHQgPSBvcGVuKCIvZGV2L3RleHQiLCBPUkVBRCk7CiAqLwoJdGV4dCA9 IG9wZW4oIi9kZXYvbGFiZWwiLCBPUkVBRCk7CglpZiAodGV4dCA8IDApCgkJZXhpdHMoc21wcmlu dCgiL2Rldi9sYWJlbDogJXIiKSk7CgoJaWYgKHByZWFkKHRleHQsIGJ1dCwgc2l6ZW9mKGJ1dCks IDBMTCkgPCAwKQoJCWV4aXRzKCJyZWFkIGxhYmVsIik7CgoJZGVzayA9IG9wZW4oZGVza25hbWUs IE9XUklURSk7CglpZiAoZGVzayA8IDApCgkJZXhpdHMoc21wcmludCgiJXM6ICVyIiwgZGVza25h bWUpKTsKCWluaXRkcmF3KDAsMCxidXQpOwoJZHJhd3NldGRlYnVnKDEpOwoKCWlmKChmb250ID0g b3BlbmZvbnQoZGlzcGxheSwgZm9udG5hbWUpKSA9PSBuaWwpCgkJc3lzZmF0YWwoImZvbnQgJyVz JyBub3QgZm91bmQiLCBmb250bmFtZSk7CgoJYmFjayA9IGFsbG9jaW1hZ2VtaXgoZGlzcGxheSwg RFBhbGVibHVlZ3JlZW4sIERXaGl0ZSk7Cgl3aGF0ID0gYWxsb2NpbWFnZShkaXNwbGF5LCBSZWN0 KDAsMCwxLDEpLCBDTUFQOCwgMSwgREJsdWUpOwoKCXJlZHJhdyhzY3JlZW4pOwoKCWVpbml0KEVt b3VzZSk7Cgl0ID0gKDMwKjEwMDApOwoJdGltZXIgPSBldGltZXIoMCwgdCk7CgoJZm9yKDs7KSB7 CgkJa2V5ID0gZXZlbnQoJmUpOwoJCWlmKGtleSA9PSBFbW91c2UpIHsKCQkJbSA9IGUubW91c2U7 CgkJCWlmKG0uYnV0dG9ucyAmIDQpIHsKCQkJCWludCBhbXQ7CgkJCQkvKiB3aHkgZG8gd2UgcmUg cmVhZCB0aGlzPyBTbyB5b3UgY2FuIGhhdmUgc29mdCBrZXlzICovCgkJCQltZW1zZXQoYnV0LCAw LCBzaXplb2YoYnV0KSk7CgkJCQlhbXQgPSBwcmVhZCh0ZXh0LCBidXQsIHNpemVvZihidXQpLCAw TEwpOwoJCQkJaWYgKGFtdCA8IDApCgkJCQkJZXhpdHMoInJlYWQgdGV4dDogJXIiKTsKCQkJCWFt dCA9IHdyaXRlKGRlc2ssIGJ1dCwgYW10KTsKCQkJCWlmIChhbXQgPCAwKQoJCQkJCWV4aXRzKCJ3 cml0ZSBkZXNrOiAlciIpOwoJCQl9CgkJfSBlbHNlIGlmKGtleSA9PSB0aW1lcikgewoJCQlyZWRy YXcoc2NyZWVuKTsKCQl9Cgl9CQp9Cg== ------=_Part_14307_19246844.1206940081712 Content-Type: application/octet-stream; name=mkfile Content-Transfer-Encoding: base64 X-Attachment-Id: f_fegkto491 Content-Disposition: attachment; filename=mkfile PC8kb2JqdHlwZS9ta2ZpbGUKIwojCQlwcm9ncmFtcwojClRBUkc9XAoJYnV0XAoJc3RhcnRkYwoK RElSUz0KCk9USEVST0ZJTEVTPQoKSEZJTEVTPQoKTElCPS8kb2JqdHlwZS9saWIvbGliYy5hCkJJ Tj0vJG9ianR5cGUvYmluCkNMSUI9CgpVUERBVEU9XAoJbWtmaWxlXAoJJEhGSUxFU1wKCSR7T1RI RVJPRklMRVM6JS4kTz0lLmN9XAoJJHtUQVJHOiU9JS5jfVwKCjwvc3lzL3NyYy9jbWQvbWttYW55 CgphbGw6VjoJCgpjbGVhbjpWOgoJcm0gLWYgKi5bJE9TXSAqLlskT1NdLmEgWyRPU10uKiB5LnRh Yi4/IHkuZGVidWcgeS5vdXRwdXQgJFRBUkcKCm51a2U6VjoKCXJtIC1mICouWyRPU10gKi5bJE9T XS5hIFskT1NdLiogeS50YWIuPyB5LmRlYnVnIHkub3V0cHV0ICRUQVJHICouYWNpZAoKCg== ------=_Part_14307_19246844.1206940081712--