X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=play.c;h=d2539ee134773614a40bca9941f35dd161007946;hp=927f5dc69df9c8a44d60c5d7221c626ccc0efaea;hb=048c921d16110d350572698c22033d51b091ce1b;hpb=7afafb8acd2c8ad14802fd2dcfed5567c97454cb diff --git a/play.c b/play.c index 927f5dc6..d2539ee1 100644 --- a/play.c +++ b/play.c @@ -13,7 +13,6 @@ #include "para.h" #include "list.h" #include "play.cmdline.h" -#include "filter.cmdline.h" #include "error.h" #include "ggo.h" #include "buffer_tree.h" @@ -398,7 +397,8 @@ static int load_file(struct play_task *pt) pt->fn.btrn = btr_new_node(&(struct btr_node_description) EMBRACE(.name = decoder->name, .parent = pt->rn.btrn, .handler = decoder->execute, .context = &pt->fn)); - decoder->open(&pt->fn); + if (decoder->open) + decoder->open(&pt->fn); /* setup default writer */ pt->wn.conf = check_writer_arg_or_die(NULL, &pt->wn.writer_num); @@ -592,6 +592,28 @@ static char *get_key_map_seq(int key) get_internal_key_map_seq(key) : get_user_key_map_seq(key); } +static char *get_key_map_seq_safe(int key) +{ + const char hex[] = "0123456789abcdef"; + char *seq = get_key_map_seq(key), *sseq; + size_t n, len = strlen(seq); + + if (len == 1 && isprint(*seq)) + return seq; + sseq = para_malloc(2 + 2 * len + 1); + sseq[0] = '0'; + sseq[1] = 'x'; + for (n = 0; n < len; n++) { + uint8_t val = (seq[n] & 0xf0) >> 4; + sseq[2 + 2 * n] = hex[val]; + val = seq[n] & 0xf; + sseq[2 + 2 * n + 1] = hex[val]; + } + free(seq); + sseq[2 + 2 * n] = '\0'; + return sseq; +} + static inline char *get_internal_key_map_cmd(int key) { return para_strdup(default_commands[get_internal_key_map_idx(key)]); @@ -620,15 +642,8 @@ static char **get_mapped_keyseqs(void) result = para_malloc((NUM_MAPPED_KEYS + 1) * sizeof(char *)); FOR_EACH_MAPPED_KEY(i) { - int idx = get_key_map_idx(i); char *seq = get_key_map_seq(i); - char *cmd = get_key_map_cmd(i); - bool internal = is_internal_key(i); - PARA_DEBUG_LOG("%s key sequence #%d: %s -> %s\n", - internal? "internal" : "user-defined", - idx, seq, cmd); result[i] = seq; - free(cmd); } result[i] = NULL; return result; @@ -717,7 +732,7 @@ static int com_help(struct play_task *pt, int argc, char **argv) FOR_EACH_MAPPED_KEY(i) { bool internal = is_internal_key(i); int idx = get_key_map_idx(i); - char *seq = get_key_map_seq(i); + char *seq = get_key_map_seq_safe(i); char *cmd = get_key_map_cmd(i); sz = xasprintf(&buf, "%s key #%d: %s -> %s\n",