From 500811612324dff317ec872d62d6f1f59559c35c Mon Sep 17 00:00:00 2001 From: Ali Gholami Rudi Date: Fri, 27 Apr 2018 01:44:57 +0430 Subject: [PATCH] tr: change the behaviour of of .co request The new requests: .co sreg dreg \" copy register sreg into register dreg .co+ sreg dreg \" append register sreg to register dreg .co> sreg path \" copy register sreg into file .co< sreg path \" read register sreg from file --- tr.c | 56 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/tr.c b/tr.c index f4328fb..f79da20 100644 --- a/tr.c +++ b/tr.c @@ -875,28 +875,57 @@ static void tr_lsm(char **args) static void tr_co(char **args) { + char *src = args[1]; + char *dst = args[2]; + if (src && dst && str_get(map(src))) + str_set(map(dst), str_get(map(src))); +} + +static void tr_coa(char **args) +{ + char *src = args[1]; + char *dst = args[2]; + if (src && dst && str_get(map(src))) { + struct sbuf sb; + sbuf_init(&sb); + if (str_get(map(dst))) + sbuf_append(&sb, str_get(map(dst))); + sbuf_append(&sb, str_get(map(src))); + str_set(map(dst), sbuf_buf(&sb)); + sbuf_done(&sb); + } +} + +static void tr_coo(char **args) +{ char *reg = args[1]; char *path = args[2]; - char buf[1024]; + FILE *fp; if (!reg || !reg[0] || !path || !path[0]) return; - if (path[0] == '>') { - FILE *fp = fopen(path + 1, "w"); - if (fp && reg && str_get(map(reg))) + if ((fp = fopen(path, "w"))) { + if (str_get(map(reg))) fputs(str_get(map(reg)), fp); - if (fp) - fclose(fp); + fclose(fp); } - if (path[0] == '<') { - FILE *fp = fopen(path + 1, "r"); +} + +static void tr_coi(char **args) +{ + char *reg = args[1]; + char *path = args[2]; + char buf[1024]; + FILE *fp; + if (!reg || !reg[0] || !path || !path[0]) + return; + if ((fp = fopen(path + 1, "r"))) { struct sbuf sb; sbuf_init(&sb); - while (fp && fgets(buf, sizeof(buf), fp)) + while (fgets(buf, sizeof(buf), fp)) sbuf_append(&sb, buf); str_set(map(reg), sbuf_buf(&sb)); sbuf_done(&sb); - if (fp) - fclose(fp); + fclose(fp); } } @@ -1082,7 +1111,10 @@ static struct cmd { {"char", tr_char, mkargs_ds}, {"chop", tr_chop, mkargs_reg1}, {"cl", tr_cl}, - {"co", tr_co, mkargs_ds}, + {"co", tr_co}, + {"co+", tr_coa}, + {"co<", tr_coi, mkargs_ds}, + {"co>", tr_coo, mkargs_ds}, {"cp", tr_cp}, {"cs", tr_cs}, {"da", tr_di}, -- 2.11.4.GIT