summaryrefslogtreecommitdiff
path: root/sys/src/cmd/samterm
diff options
context:
space:
mode:
authorftrvxmtrx <ftrvxmtrx@gmail.com>2016-10-18 20:02:01 +0200
committerftrvxmtrx <ftrvxmtrx@gmail.com>2016-10-18 20:02:01 +0200
commitdff69d59222cc0431bdea15ee31a87b557872c08 (patch)
tree591c43153a91c9980ef90020568949d15b6f7bee /sys/src/cmd/samterm
parent40f69f4df5f228459cebab1b529ad84bf18c86e1 (diff)
samterm: support "showdata" plumb action
Diffstat (limited to 'sys/src/cmd/samterm')
-rw-r--r--sys/src/cmd/samterm/plan9.c35
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);