diff options
author | ftrvxmtrx <ftrvxmtrx@gmail.com> | 2016-10-18 20:02:01 +0200 |
---|---|---|
committer | ftrvxmtrx <ftrvxmtrx@gmail.com> | 2016-10-18 20:02:01 +0200 |
commit | dff69d59222cc0431bdea15ee31a87b557872c08 (patch) | |
tree | 591c43153a91c9980ef90020568949d15b6f7bee /sys/src/cmd/samterm | |
parent | 40f69f4df5f228459cebab1b529ad84bf18c86e1 (diff) |
samterm: support "showdata" plumb action
Diffstat (limited to 'sys/src/cmd/samterm')
-rw-r--r-- | sys/src/cmd/samterm/plan9.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/sys/src/cmd/samterm/plan9.c b/sys/src/cmd/samterm/plan9.c index 0022d4b28..96f49da0e 100644 --- a/sys/src/cmd/samterm/plan9.c +++ b/sys/src/cmd/samterm/plan9.c @@ -184,8 +184,8 @@ int plumbformat(int i) { Plumbmsg *m; - char *addr, *data, *act; - int n; + char *addr, *data, *act, *s; + int n, replaced; data = (char*)plumbbuf[i].data; m = plumbunpack(data, plumbbuf[i].n); @@ -197,6 +197,37 @@ plumbformat(int i) return 0; } act = plumblookup(m->attr, "action"); + + if(act != nil && strcmp(act, "showdata") == 0){ + addr = plumblookup(m->attr, "filename"); + n = sprint(data, "B \n"); + if(addr != nil) + n += sprint(data+n, "f %s\n", addr); + n += sprint(data+n, "c\n"); + s = memmove(data+n, m->data, m->ndata); + n += m->ndata; + if(data[n-1] != '\n') + data[n++] = '\n'; + data[n] = 0; + replaced = 0; + for(;;){ + s = strstr(s, ".\n"); + if(s == nil) + break; + if(s[-1] != '\n') + continue; + s[0] = ''; + s += 2; + replaced = 1; + } + n += sprint(data+n, ".\n"); + if(replaced) + n += sprint(data+n, ",s/^$/./g\n"); + plumbbuf[i].n = n; + plumbfree(m); + return 1; + } + if(act!=nil && strcmp(act, "showfile")!=0){ /* can't handle other cases yet */ plumbfree(m); |