9front - general discussion about 9front
 help / color / mirror / Atom feed
From: sirjofri <sirjofri+ml-9front@sirjofri.de>
To: 9front@9front.org
Subject: Re: [9front] patch: tweak plumb support
Date: Tue, 12 Jan 2021 10:12:54 +0000 (UTC)	[thread overview]
Message-ID: <b37329bf-e1d7-4221-82c4-fd1836e8cb5b@sirjofri.de> (raw)

Hello,

Poke on this. Just a reminder.

sirjofri

.
21.12.2020 16:34:14 sirjofri+ml-9front@sirjofri.de:
> Hey all,
>
> this new patch version has only minor fixes compared to the previous
> version.  After more than a week not working on it I guess I'll just
> release this patch now, hoping it's good enough to be commited.
>
> Still open for improvements and discussion!
>
> sirjofri
>
> .
> diff -r 2647ea8b9793 sys/man/1/tweak
> --- a/sys/man/1/tweak Sun Dec 06 21:52:01 2020 +0100
> +++ b/sys/man/1/tweak Tue Dec 08 15:40:04 2020 +0100
> @@ -155,6 +155,16 @@
> Quit
> .IR tweak .
> The program will complain once about modified but unwritten files.
> +.PP
> +.I Tweak
> +listens to the
> +.I plumber
> +channel
> +.B imageedit
> +for filenames as well as image data. Plumbed image data is stored as 
files in
> +.B /tmp
> +and is automatically cleaned when exiting
> +.IR tweak .
> .SH SOURCE
> .B /sys/src/cmd/tweak.c
> .SH "SEE ALSO"
> diff -r 2647ea8b9793 sys/src/cmd/tweak.c
> --- a/sys/src/cmd/tweak.c Sun Dec 06 21:52:01 2020 +0100
> +++ b/sys/src/cmd/tweak.c Tue Dec 08 15:40:04 2020 +0100
> @@ -3,8 +3,11 @@
> #include <draw.h>
> #include <cursor.h>
> #include <event.h>
> +#include <plumb.h>
> #include <bio.h>
>
> +#define Eplumb 128
> +
> typedef struct Thing Thing;
>
> struct Thing
> @@ -157,6 +160,8 @@
> int    but1val = 0;
> int    but2val = 255;
> int    invert = 0;
> +int    blockinput = 0;
> +int    tmpindex = 0;
> Image    *values[256];
> Image    *greyvalues[256];
> uchar    data[8192];
> @@ -172,12 +177,60 @@
> void tclose1(Thing*);
>
> void
> +flushevents(ulong keys)
> +{
> + Event e;
> + if(keys == 0)
> +   return;
> + while(ecanread(keys))
> +   eread(keys, &e);
> +}
> +
> +char*
> +pshowdata(Plumbmsg *pm)
> +{
> + int fd;
> + char *file;
> + file = smprint("/tmp/tweaktmp.%d.%d", getpid(), tmpindex++);
> + if(file == 0)
> +   sysfatal("malloc failed: %r");
> + fd = create(file, OWRITE|OEXCL, 0600);
> + if(fd < 0){
> +   free(file);
> +   mesg("cannot create tmpfile.");
> +   return nil;
> + }
> + if(write(fd, pm->data, pm->ndata) != pm->ndata){
> +   mesg("error writing tmpfile: %r");
> +   close(fd);
> +   free(file);
> +   return nil;
> + }
> + close(fd);
> + return file;
> +}
> +
> +char*
> +pfilename(Plumbmsg *pm)
> +{
> + char *file;
> + if(pm->data[0] == '/')
> +   file = smprint("%.*s", pm->ndata, pm->data);
> + else
> +   file = smprint("%s/%.*s", pm->wdir, pm->ndata, pm->data);
> + return cleanname(file);
> +}
> +
> +void
> main(int argc, char *argv[])
> {
>   int i;
>   Event e;
>   Thing *t;
> + Plumbmsg *pm;
> + char *s;
>
> + srand(time(0));
>   mag = Mag;
>   if(initdraw(error, 0, "tweak") < 0){
>     fprint(2, "tweak: initdraw failed: %r\n");
> @@ -190,6 +243,7 @@
>       drawerror(display, "can't allocate image");
>   }
>   einit(Emouse|Ekeyboard);
> + eplumb(Eplumb, "imageedit");
>   eresized(0);
>   i = 1;
>   setjmp(err);
> @@ -214,10 +268,42 @@
>       }
>       if(mouse.buttons & 4)
>         menu();
> +     break;
> +   case Eplumb:
> +     pm = e.v;
> +     if(pm->ndata == 0)
> +       break;
> +     s = plumblookup(pm->attr, "action");
> +     if(s && strcmp(s, "showdata") == 0)
> +       file = pshowdata(pm);
> +     else
> +       file = pfilename(pm);
> +     if(!file){
> +       mesg("invalid plumb data");
> +       plumbfree(pm);
> +       break;
> +     }
> +     plumbfree(pm);
> +     t = tget(file);
> +     if(t)
> +       drawthing(t, 1);
> +     flushimage(display, 1);
> +     file = 0;
>     }
> }
>
> void
> +cleantmpfiles(void)
> +{
> + char *s;
> + for(tmpindex--; tmpindex >= 0; tmpindex--){
> +   s = smprint("/tmp/tweaktmp.%d.%d", getpid(), tmpindex);
> +   remove(s);
> +   free(s);
> + }
> +}
> +
> +void
> error(Display*, char *s)
> {
>   if(file)
> @@ -226,6 +312,7 @@
>     mesg("/dev/bitblt error: %s", s);
>   if(err[0])
>     longjmp(err, 1);
> + cleantmpfiles();
>   exits(s);
> }
>
> @@ -531,6 +618,12 @@
>   nt->tr.max.y = nt->tr.min.y + nl;
>   nt->er.max.y = nt->tr.max.y + Border;
>   text(nt);
> +
> + mesg("");
> + if(blockinput){
> +   flushevents(Emouse|Ekeyboard);
> +   blockinput = 0;
> + }
> }
>
> int
> @@ -557,6 +650,9 @@
>   uchar buf[256];
>   char *data;
>
> + mesg("reading %s", file);
> + blockinput = 1;
> +
>   buf[0] = '\0';
>   errstr((char*)buf, sizeof buf); /* flush pending error message */
>   memmove(oerr, err, sizeof err);
> @@ -2041,6 +2137,7 @@
>     buttons(Down);
>     if(mouse.buttons == 4){
>       buttons(Up);
> +     cleantmpfiles();
>       exits(0);
>     }
>     buttons(Up);

             reply	other threads:[~2021-01-12 10:42 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-12 10:12 sirjofri [this message]
2021-01-13 22:06 ` ori
  -- strict thread matches above, loose matches on Subject: below --
2020-12-04 10:30 sirjofri+ml-9front
2020-12-04 10:47 ` sirjofri+ml-9front
2020-12-05 15:13   ` sirjofri+ml-9front
2020-12-07  9:44     ` sirjofri+ml-9front
2020-12-07 15:43       ` ori
2020-12-07 20:26         ` sirjofri+ml-9front
2020-12-21 15:34           ` sirjofri+ml-9front

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b37329bf-e1d7-4221-82c4-fd1836e8cb5b@sirjofri.de \
    --to=sirjofri+ml-9front@sirjofri.de \
    --cc=9front@9front.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).