--- base64dec.c | 42 ++++++++++++++++++++++++++++++++++++++++++ st.c | 12 +++++++++++- st.info | 1 + 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 base64dec.c diff --git a/base64dec.c b/base64dec.c new file mode 100644 index 0000000..335e3c5 --- /dev/null +++ b/base64dec.c _AT_@ -0,0 +1,42 @@ +/*taken from libulz with permission*/ + +static const char base64_tbl[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +static inline int chrpos(int c) { + int i = 0; + for(;i<64;i++) if(base64_tbl[i] == c) return i; + return -1; +} +static size_t base64dec(void* dst, const char* src, size_t dst_len) { + const char* s = src; + unsigned char *d = dst; + size_t l = dst_len, o = 0; + int n = 0, cnt = 0, skip = 0; + if(l) for(;;) { + int p; + if(*s == '=') { + skip++; + if(skip > 2) return 0; + p = 0; + } else if (!*s) { + if(cnt % 4 != 0 || !l) return 0; + *d++ = 0; + return o; + } else if(skip) { + return 0; + } else if((p = chrpos(*s)) == -1) return 0; + n = (n << 6) | p; + cnt++; + if(cnt % 4 == 0) { + if(l < 3) return 0; + *d++ = n >> 16; + *d++ = n >> 8 & 0xff; + *d++ = n & 0xff; + l -= 3; + o += 3-skip; + n = 0; + } + s++; + } + return 0; +} diff --git a/st.c b/st.c index fbcd9e0..158521e 100644 --- a/st.c +++ b/st.c _AT_@ -32,7 +32,7 @@ #include <wchar.h> #include "arg.h" - +#include "base64dec.c" char *argv0; #define Glyph Glyph_ _AT_@ -2538,6 +2538,16 @@ strhandle(void) break; p = strescseq.args[2]; /* FALLTHROUGH */ + case 52: + if (narg > 2){ + char *src=strescseq.args[2]; + size_t l = (strlen(src)/4)*3; + char *buf=xmalloc(l+1); + base64dec(buf, src, l); + printf(buf); + xsetsel(buf, CurrentTime); + free(buf); + } case 104: /* color reset, here p = NULL */ j = (narg > 1) ? atoi(strescseq.args[1]) : -1; if (xsetcolorname(j, p)) { diff --git a/st.info b/st.info index 13cc8eb..0b928af 100644 --- a/st.info +++ b/st.info _AT_@ -189,6 +189,7 @@ st| simpleterm, Se, Ss, Tc, + Ms=\E]52;%p1%s;%p2%s\007, st-256color| simpleterm with 256 colors, use=st, -- 2.11.0Received on Wed Jan 18 2017 - 16:58:59 CET
This archive was generated by hypermail 2.3.0 : Wed Jan 18 2017 - 17:00:24 CET